A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
hpcvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Changing save mechanism.
[hpcvm.git]
/
src
/
and
/
hpcvm
/
Server.java
diff --git
a/src/and/hpcvm/Server.java
b/src/and/hpcvm/Server.java
index
dafd9c5
..
b776409
100644
(file)
--- a/
src/and/hpcvm/Server.java
+++ b/
src/and/hpcvm/Server.java
@@
-82,14
+82,14
@@
public class Server extends UnicastRemoteObject implements ServicesServer
{
private ConnectedClient client ;
private boolean save_status ;
- private
String
save_neighbor ;
+ private
ArrayList<ServicesClient>
save_neighbor ;
private String lastSaveName ;
ComputingClient( ConnectedClient cl )
{
client = cl ;
save_status = false ;
- save_neighbor =
"none"
;
+ save_neighbor =
new ArrayList<ServicesClient>()
;
lastSaveName = "none" ;
}
@@
-99,11
+99,13
@@
public class Server extends UnicastRemoteObject implements ServicesServer
protected void setSaveStatus( boolean _status ) { save_status = _status ; }
- protected void setSaveNeighbor( S
tring
_sn )
+ protected void setSaveNeighbor( S
ervicesClient
_sn )
{
- if( _sn != null
&& ! _sn.isEmpty()
)
+ if( _sn != null )
{
- save_neighbor = _sn ;
+ save_neighbor.set( 0, _sn ) ;
+
+ System.out.println( "My save neighbor is " + _sn ) ;
try {
client.getStub().setSavingNeighbor( _sn ) ;
@@
-115,7
+117,15
@@
public class Server extends UnicastRemoteObject implements ServicesServer
}
}
- protected String getSaveNeighbor() { return save_neighbor ; }
+ protected ServicesClient getSaveNeighbor()
+ {
+ if( save_neighbor.isEmpty() )
+ {
+ return null ;
+ } else {
+ return save_neighbor.get( 0 ) ;
+ }
+ }
public void setLastSave( String _saveName )
{
@@
-400,16
+410,13
@@
public class Server extends UnicastRemoteObject implements ServicesServer
@Override
public void run()
{
- synchronized( counter ){
- counter.inc() ;}
- System.out.println("ici");
if( cl != null && cl.getStatus().equalsIgnoreCase( "running" ) ||
cl.getStatus().equalsIgnoreCase( "saving" ) )
{
- System.out.println("ok");
ComputingClient cc = cl.getComputingClient() ;
+ ServicesClient dead = cc.getClient().getStub() ;
String ipDead = cc.getClient().getIP() ;
-
+
boolean ok = false ;
for( int i = 0 ; i < clients.size() ; i++ )
@@
-434,19
+441,20
@@
public class Server extends UnicastRemoteObject implements ServicesServer
} else {
System.out.println( "Trying to replace " + cc.getClient().getName() + " with " +
clients.get(i).getName() + " ... " ) ;
-
+
+ String save_name = computingClients.get( pos ).getLastSave() ;
+
ComputingClient ccl = new ComputingClient( clients.get(i) ) ;
clients.get( i ).setComputingClient( ccl ) ;
- S
tring
sn = computingClients.get( pos ).getSaveNeighbor() ;
+ S
ervicesClient
sn = computingClients.get( pos ).getSaveNeighbor() ;
ccl.setSaveNeighbor( sn ) ;
computingClients.set( pos, ccl ) ;
-// computingClients.get( pos ).setSaveNeighbor( sn ) ;
-
+
int res = 1 ;
try {
res = computingClients.get( pos ).getClient().getStub().
-
retrieveSave( computingClients.get(i).getLastSave()
) ;
+
retrieveSave( save_name
) ;
} catch( RemoteException e ) {
System.err.println( "Unable to indicate to client to retrieve last save!" ) ;
e.printStackTrace() ;
@@
-486,6
+494,19
@@
public class Server extends UnicastRemoteObject implements ServicesServer
if( ok )
{
+ for( int k = 0 ; k < computingClients.size() ; k++ )
+ {
+ try {
+ computingClients.get( i ).getClient().getStub().
+ replaceSavingNeighbor( dead, clients.get( i ).getStub() ) ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to inform " + computingClients.get( k ).getClient().getName() +
+ " of the replacement of a save neighbor!" ) ;
+ e.printStackTrace() ;
+ }
+ }
+
+
System.out.println( "Dead client successfully replaced." ) ;
// restart vms
break ;
@@
-550,6
+571,9
@@
public class Server extends UnicastRemoteObject implements ServicesServer
// break ;
// }
// }
+ synchronized( counter ){
+ counter.inc() ;}
+
new Server.FaultManager( cl ).start() ;
nb_disconnections_computing++ ;
@@
-579,7
+603,23
@@
public class Server extends UnicastRemoteObject implements ServicesServer
if( nb_disconnections_computing > 0 )
{
- System.out.println( "I will redeploy save and restart VMs ..." ) ;
+ System.out.println( "Sending emergency stop signal to all computing nodes ... " ) ;
+
+ for( int i = 0 ; i < clients.size() ; i++ )
+ {
+ if( clients.get( i ).getStatus().equalsIgnoreCase( "running" )
+ || clients.get( i ).getStatus().equalsIgnoreCase( "saving" ) )
+ {
+ try {
+ clients.get( i ).getStub().emergencyStop() ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to invoke emergency stop signal on " + clients.get( i ).getName() ) ;
+ e.printStackTrace() ;
+ }
+ }
+ }
+
+ System.out.println( "I will redeploy save and restart VMs ... " ) ;
synchronized( counter )
{
@@
-591,6
+631,7
@@
public class Server extends UnicastRemoteObject implements ServicesServer
while( counter.getNb() != 0 )
{
try {
+ System.out.println( "### WAITING counter ###" ) ;
counter.wait() ; // !!!!! synchro
} catch( InterruptedException e ) {
e.printStackTrace() ;
@@
-724,7
+765,7
@@
public class Server extends UnicastRemoteObject implements ServicesServer
{
System.err.println( "Problem in ComputingClients list!" ) ;
} else {
- computingClients.get( index ).setSaveNeighbor( computingClients.get( index2 ).getClient().get
IP
() ) ;
+ computingClients.get( index ).setSaveNeighbor( computingClients.get( index2 ).getClient().get
Stub
() ) ;
}
} else {
index = computingClients.indexOf( tmp.get( i ) ) ;
@@
-734,7
+775,7
@@
public class Server extends UnicastRemoteObject implements ServicesServer
{
System.err.println( "Problem in ComputingClients list!" ) ;
} else {
- computingClients.get( index ).setSaveNeighbor( computingClients.get( index2 ).getClient().get
IP
() ) ;
+ computingClients.get( index ).setSaveNeighbor( computingClients.get( index2 ).getClient().get
Stub
() ) ;
}
}
}