2009년 5월 29일 금요일

Connection reset

java.net.SocketException: Connection reset

globus의 Delegation service 부분에서 발생한 문제.

웹 서비스를 제공하던 서버에서 인증과 GridFTP에 대한 변경사항이 발생하면서

이전에 제공되던 service와 connection이 올바로 셋팅되지 않음


web service를 찾지 못하던 문제이기 때문에

globus service를 다시 실행하여 현재 셋팅을 적용하게 함.

===============================================================================


Mgrid04을 다시 셋팅하는 과정 중에

simple CA라던지 GridFTP라던지를 새로 설치하고 셋업을 했더니

기존에 서비스되고 있던 globus web service가 제대로 동작하지 않게 되었다.


특히 Delegation 쪽에서 java.net.Secket(뭐시기)가 exception을 만들어냈다.

'Connection reset'이라고..


원래 이 exception이 처음(내가 mgrid04 셋팅을 날려먹기 전)엔 발생하지 않았던 문제인데

내가 뭔가 건드리기 시작하니까 발생했다.

기본적으로 Java swing 프로그램(Execution tool)문제는 아닌게 확실하니까,

서버 쪽에서의 문제인 것까지는 알아냈는데,

구글링으로 connection reset을 검색해보면,

내 상황에서의 문제보다 thread나 data 전송에 관련된 부분이 많았다.


일단 제대로 connection이 이루어지지 않았다는 것을 알아냈고,

Globus page에서 이리저리 쑤시고 다니다 보니까,

Delegation service라는 것까지 알아냈다.


이쯤 되니까, 혹시 내가 인증부분을 건드렸기 때문에

service security 문제인가 싶어 차근차근 살펴봤지만

여전히 이 부분에 대한 내용도 실제로 내가 건드릴 부분은 아니었다.


동료가 서비스가 제대로 콜 되지 않을 때 그렇다 라는 말을 해주어서,

init.d에서 globus를 다시 실행했더니 정상 작동 되었다.

장장 하루를 소비했던 이 exception은 단 3분만에 해결....ㅠ.ㅠ 어흑..

2009년 5월 26일 화요일

Proxy server와 certficate의 issuer matching fault

globus가 설치되어있는 서버에 새로운 simple CA를 설치한 뒤

인증서를 새로 발급 받아 proxy server에 사용하려고 하는데,

다음과 같은 인증 실패 에러가 발생한다.

Authentication failed
[Caused by: Failure unspecified at GSS-API level
[Caused by: Bad certificate
(The signature of 'O=Grid,OU=AGC,OU=KMU,CN=KMU Grid CA' certificate does not match its issuer)]]

Simple CA를 다시 설치한 뒤부터는 아예 proxy 서버로 put이 되지를 않는다.

벌써 수없이 다시 설치하고 인증서도 새로 발급했지만 여전히 같은 문제가 나타난다.

아...모르겠다...ㅠ.ㅠ

금요일까지 해야하는데..ㅠ.ㅠ

====================================================================================

진짜 하루 종일 붙잡고 늘어진 덕에 반은 해결했다.

일단, 기존에 설치되어있던 Simple CA를 설치한 것이 root인지 globus인지

명확하지 않은 상태에서 root에서 새로 설치한 것이 문제.

그리고 다시 globus에서 설치하여 어떤 CA를 레퍼런스하고 있는 것인지 불명확.

그리고 CA와 실제 인증서들간의 issuer가 같은 것이 아니었던 것.

마지막으로 Proxy server에서 레퍼런스하고 있는 CA의 위치가

/root/.globus/certificates 였던 것을 확인하지 못했던 것이 가장 큰 실수다.


분명히 proxy server를 debug 했었다면 쉽게 해결했을 문제를

대충 겉에서의 리턴 메세지만 가지고 해결하려고 했기 때문에

본질적인 문제를 발견하지 못했던 것이다.


debug를 한다는 것, 매우 중요하고 본질을 볼 수 있는 시작이다.


일단 certficate를 issuer랑 매칭하지 못했던 것은 해결되었지만,

기존 mgrid의 proxy process가 제대로 작동하지 못해서

web server쪽에 인증 작업이 되질 않고 있다.

proxy server로 proxy는 put하고 있지만,

이것을 web server로 다시 받아오지 못하고 있는 상황이다.

==========================================================================

현재 saturn에서 서비스되고 있는 데모 포탈 버젼은

인증서를 proxy servert로부터 가져와서 스토리지에 저장하여 사용하고 있다.

이 과정에서 인증서를 다시 리딩할때 CA 인증서가 존재하지 않기 때문에

Unknown CA라는 exception이 발생하게 되었다.


내가 mgrid04에 Simple CA를 새로 설치했기 때문에

인증서와 signing policy를 갱신하지 않았으므로 Exception이 발생하면서

로그인 과정이 진행되지 않았다.

2009년 5월 19일 화요일

ExtJS 2.X file upload

If you are having problem with file uploads using ExtJs and Grails, this might help you.

To upload file with the latest ExtJs 2.0, you need to specify the theExt.form.BasicForm to be configured as fileupload, just pass "fileUpload:true" to the config options. Then add a textfield as specify the "inputType" as "file". This will get you a ExtJs form with a standard File browser button to choose file.

CheckboxSelectionModel.getSelections()의 return array의 처리

if ( caSelectionModel.getCount() > 0  ) {
var selectedCA = caSelectionModel.getSelections();
Ext.Ajax.request({
url: '/gridsphere/gridsphsere?cid=managerclock',
success: function() {
caListStore.load();
},
params: {
'action': 'delete_ca',
'target_list': selectedCA
}
});
}

일단...

selection model에서 user가 선택한 rows를 array로 리턴한 값을

request로 실어 보내야 하는 상황이다.


기본적으로 array가 어떻게 사용되는지는 javascript를 봐야할 듯 싶고..

request로 보낼때는 어떻게 해야할지 감이 안잡힌다.


==================================================================================

if ( caSelectionModel.getCount() > 0  ) {
// 삭제할 CA들의 정보를 array로 바꾸어서 전달해야한다.
var selectedCAs = caSelectionModel.getSelections();
var selectedCARecords = []; // javascript
for ( idx in selectedCAs ){
if ( typeof selectedCAs[idx] == 'object' ) {
selectedCARecords.push(selectedCAs[idx].data.uid);
selectedCARecords.push(selectedCAs[idx].data.name);
selectedCARecords.push(selectedCAs[idx].data.path);
selectedCARecords.push(selectedCAs[idx].data.caCertificateName);
selectedCARecords.push(selectedCAs[idx].data.signingPolicyName);
selectedCARecords.push(selectedCAs[idx].data.release);
}
}
Ext.Ajax.request({
url: '/gridsphere/gridsphere?cid=managerclock',
success: function() {
caListStore.load();
},
params: {
'action': 'delete_ca',
'target_list': selectedCARecords
}
});
}

여기에서의 문제는 ExtJS에서 request로 넘긴 target_list가 server에서는 올바로 읽혀지지 않는다는 것이다.

request에서 넘겨질 때부터 이미 무명 object로 넘어가기 때문에 server side에서 알아챌리가 만무하다.

ExtJS에선 request에 array를 전달하면 알아서 개별 값으로 풀어 넘겨주기는 하지만, 실제로 getSelections()에서 넘어온 Array는 ExtJS에서나 통용되는 Array일 뿐이지, server에서는 모르는 값이 넘어올 뿐인 거다.


이 부분을 해결하려면,

ExtJS에서 자체적으로 변환 과정을 거쳐 request에서 올바로 인식할 수 있는 array 형태로 보내주면 된다.

여기서 주의할 부분은 SelectionModel에서 넘어온 Array에는 다양한 형태의 properties(array, function..)가 존재하기 때문에 data를 가진 property만 array로 만들어 주어야한다. 이 확인 과정은 위 코드의 if문에 해당한다.


※ 이 문제를 해결하기 위해서는 request의 array 전달 과정과 javascript에 대한 기본 지식이 필요하다.

2009년 5월 14일 목요일

죽은 소녀의 아버지, 혈루병 걸린 여인, 맹인

공통점은?

믿음으로 변화를 얻은 자들. (마 9:18-38)

메디테이션은 잘 안 읽어서 그냥 넘어갔는데,
거기선 그러더라, 믿음보다는 간절한 사모함이었다 라고...


이들은 예수님께서 해결해 주실 것이라는 믿음 하나로 변화를 얻었다.

그렇다면 나는????


나의 모습에서 흐려저가고 있는 모습이지 않을까...

내 입술의 고백들은 여전히 하나님을 향하고 있지만,

내 마음이 방향은 어떠한가 돌아보게 된다.



이쯤에서 항상 등장하시는 우리의 '바리새인들'.

귀신 들린 자에게서 귀신을 쫓아내는 모습을 보고는

귀신의 왕에게 붙어 귀신을 쫓는다고까지 한다.


얘네들 참... 예수님이 싫었나보다.

그런데...

가만 살펴보면 이 치들의 모습이 나에게도 있지 않나 싶다.


분명 주님이 하셨으나 그렇게 생각하지 않는 모습.

물론 부정은 아닌 망각이지만,

하나님이 하신 건데, 다~ 잘 해주시는데, 나는 외면하고 있는 것이니,

마찬가지.


믿는 자와 부정하는 자.

종이 한장 차이인가 보다.

Admin Tool

Portal 관리자가

Portal에서 사용되는 인증서의 CA를 관리하는 tool을 만들고 있다.


ui는 ExtJS로 하고 있는데

어떻게 ui를 구성해야할지 좀 난감하다.


트리나 뭔가 직관적인 인터페이스를 사용하고 싶지만,

일단은 그냥 그리드 패널.......ㅎㅎㅎㅎㅎ


Drag&Drop을 사용해서 CA release를 갱신하는 process를 만들고 싶은데...

우째야 하나...

2009년 5월 8일 금요일

Portlet? Action?

요즘 Lab에서 개발하는 것들은

대부분 gridsphere를 사용하고 있다.


사실상 portlet이란 것도 연구실에 들어와서 처음 접한 것이고,

웹 프로그래밍이란 것도 아주 낯선....상태라 할 수 있다.


정확한 개념없이 무작정 사용만 하다가


그냥 대충 사용하는게 아니라

내가 직접 portlet을 작성하거나, gridsphere service를 만들어 붙이고 하려니까

뭐가 뭔지 모르겠고, 좀 더 깊숙히 프로그래밍하는게 어려운 상황이 되버렸다.


여튼

action을 사용해야겠는데...

gs_action은 뭐고, 자바스크립트에서 넘기려면 어쩌라는겨....

process action은 또 어떻게 된다는 말인가~~

블로깅의 시작

사실,

프로그래밍을 하면서 경험하게 되는

수많은 구글링 중에서는 블로그를 상당히 많이 만나게 된다.


그게 참 부럽더라.

자신이 해온 것들, 어려웠던 것들, 알게 된 것들... 등등..


이러한 자료들을 차곡 차곡 쌓고,

자신의 지식 창고를 만들고 있다는 사실이 부러웠다는 거지.


그래서 나도 한번 시작해 보려고 했는데...

이게 또 만만치 않은 일인게야...


귀찮고.....잘 모르겠고.... 이쁘게는 안되는데....

전형적인 귀차니스트. 허허.


우연히 들른 구글 블로그.

텍스트 큐브? 응? 그게 뭔데?


괜시리 베타테스트라는 말에 동해

나도 이제 블로거~~~~ 으하하하하


이왕 이리된거 한번 시작해 봅시다.