source: issm/trunk/src/m/model/waitonlock.m@ 5901

Last change on this file since 5901 was 5560, checked in by Eric.Larour, 15 years ago

forgot debug statement

File size: 2.3 KB
Line 
1function flag=waitonlock(md,executionpath,login,port)
2%WAITONLOCK - wait for a file
3%
4% This routine will return when a file named 'filename' is written to disk.
5% If the time limit given in input is exceeded, return 0
6%
7% Usage:
8% flag=waitonlock(md,executionpath)
9
10%Get filename (lock file) and options
11filename=[executionpath '/' md.runtimename '/' md.name '.lock'];
12cluster=md.cluster;
13timelimit=md.waitonlock;
14
15%waitonlock will work if the lock is on the same machine only:
16if ~strcmpi(oshostname(),cluster),
17
18 if port,
19 %there is a tunnel, so we have a short at looking for the lock file.
20
21 disp(['waiting for ' filename ' hold on... (Ctrl+C to exit)'])
22 time=0; ispresent=0;
23 while (ispresent==0 & time<timelimit)
24 [status, result]=system(['ssh -q -p ' num2str(port) ' ' login '@localhost "if ( -e ' executionpath '/' md.runtimename '/' md.name '.lock ) echo 1"']);
25 if ~isempty(result),
26 if ismember('1',result),
27 ispresent=1;
28 else
29 ispresent=0;
30 end
31 else
32 ispresent=0;
33 end
34 pause(10); %tunnel can be unstable, let's not use it too much
35 time=time+1/60;
36 end
37 disp(['waitonlock: lock detected, with value of result:|' result '|']);
38
39 %build output
40 if (time>timelimit),
41 disp('Time limit exceeded. Increase md.waitonlock');
42 disp('The results must be loaded manually with md=loadresultsfromcluster(md).');
43 error(['waitonlock error message: time limit exceeded']);
44 flag=0;
45 else
46 flag=1;
47 end
48 else
49 disp('solution launched on remote cluster. log in to detect job completion.');
50 choice=input('Is the job successfully completed? (y/n)','s');
51 if ~strcmp(choice,'y'),
52 disp('Results not loaded... exiting');
53 flag=0;
54 else
55 flag=1;
56 end
57 end
58
59%job is running on the same machine
60else
61
62 %initialize time and file presence test flag
63 time=0; ispresent=0;
64 disp(['waiting for ' filename ' hold on... (Ctrl+C to exit)'])
65
66 %loop till file .lock exist or time is up
67 while (ispresent==0 & time<timelimit)
68 ispresent=exist(filename,'file');
69 pause(1);
70 time=time+1/60;
71 end
72
73 %build output
74 if (time>timelimit),
75 disp('Time limit exceeded. Increase md.waitonlock');
76 disp('The results must be loaded manually with md=loadresultsfromcluster(md).');
77 error(['waitonlock error message: time limit exceeded']);
78 flag=0;
79 else
80 flag=1;
81 end
82end
Note: See TracBrowser for help on using the repository browser.