private int wait_start ;
private int max_start_try ;
private boolean isRestartedSave ;
- private long save_interleave ;
- private long date_last_save ;
+// private long save_interleave ;
+// private long date_last_save ;
private SaveProcess saveProcess;
private int maxRetryVM ;
private int timeRetryVM ;
private Semaphore sema ;
private boolean emergencyStop ;
private Process procSave ;
+ private SaveRequest saveRequest ;
private boolean lastSaveOk ;
procSave.destroy() ;
} catch( Exception e ) {}
+ // Stopping the save request
+ synchronized( saveRequest )
+ {
+ saveRequest.setStatus( false ) ;
+ try {
+ saveRequest.notifyAll() ;
+ } catch( Exception e ) {}
+ }
+
stopVM() ;
}
+
@Override
public int startVM( int _mode )
{
System.err.println( "Problem with semaphore acquiring!" ) ;
e2.printStackTrace() ;
}
+
+
+ // Checking first start
+ if( machine.checkVmx() == 1 )
+ {
+ return 1 ;
+ }
boolean ret = true ;
int retry = 0 ;
" -gp " + machine.getVmUserPasswd() + " runScriptInGuest " +
working_directory + "/" + machine.getDirectory()
+ "/" + machine.getVmx_name() + " " + ushell +
- " \"echo ok\"" ;// + " -noWait " ;
+ " \"echo ok\"" ;
try {
FileWriter fw = new FileWriter( new File( working_directory + "/testStarted.sh" ) ) ;
if( p.exitValue() == 0 )
{
started = true ;
-// machine.setStatus( "running" ) ;
-// if( _mode == 0 )
-// {
-// LocalHost.Instance().getServerStub().changeStatus(
-// LocalHost.Instance().getIP(), "running" ) ;
-// }
ret = false ;
} else {
System.err.println( "Error while checking if the VM is started!" ) ;
-// printProcessError( p.getErrorStream() ) ;
ret = printProcessError( p ) ;
if( ! ret )
System.out.println( "Retrying (" + retry + ") ... " ) ;
Thread.sleep( timeRetryVM ) ;
}
-// wait_start = wait_start / 2 ;
count++ ;
}
} catch( IOException e ) {
ret = false ;
} else {
System.err.println( "VM did not received the host IP!" ) ;
-// printProcessError( p.getErrorStream() ) ;
ret = printProcessError( p ) ;
if( ! ret )
if( p.exitValue() == 0 )
{
System.out.println( "VM received its assigned IP." ) ;
-// return 0 ;
ret = false ;
machine.setStatus( "running" ) ;
} else {
System.err.println( "VM did not received its assigned IP!" ) ;
-// printProcessError( p.getErrorStream() ) ;
ret = printProcessError( p ) ;
if( ! ret )
return 1 ;
}
+
@Override
public int stopVM()
{
ret = false ;
} else {
System.err.println( "Virtual machine not stopped!" ) ;
-// printProcessError( p.getErrorStream() ) ;
ret = printProcessError( p ) ;
if( ! ret )
e1.printStackTrace() ;
}
- if( ! isRestartedSave )
+
+ if( machine.checkVmx() == 0 )
{
- /** Restoring the original vmx file (necessary after a crash) **/
- command = new String[]{ "/bin/cp",
- working_directory + "/" + machine.getDirectory() + "/" + machine.getVmx_name_normal(),
- working_directory + "/" + machine.getDirectory() + "/" + machine.getVmx_name() } ;
-
- try {
- Process p = Runtime.getRuntime().exec( command ) ;
- p.waitFor() ;
-
- if( p.exitValue() == 0 )
- {
- System.out.println( "Successfully replaced the VMX file." ) ;
- sema.release() ;
- emergencyStop = false ;
- return 0 ;
- } else {
- System.err.println( "Unsuccessful replacement of the VMX file!" ) ;
-// printProcessError( p.getErrorStream() ) ;
- printProcessError( p ) ;
- sema.release() ;
- return 1 ;
- }
- } catch( IOException e ) {
- System.err.println( "Error during VMX file replacement: " ) ;
- e.printStackTrace() ;
- sema.release() ;
- return 1 ;
- } catch( InterruptedException e ) {
- e.printStackTrace() ;
- sema.release() ;
- return 1 ;
- }
- } else {
sema.release() ;
emergencyStop = false ;
return 0 ;
ret = false ;
} else {
System.err.println( "Virtual machine not suspended!" ) ;
-// printProcessError( p.getErrorStream() ) ;
ret = printProcessError( p ) ;
if( ! ret )
} else {
System.err.println( "Virtual machine not restarted!" ) ;
-// printProcessError( p.getErrorStream() ) ;
ret = printProcessError( p ) ;
if( ! ret )
if( isRestartedSave )
{
// Using the specific vmx file
- System.out.print( "Changing VMX file after crash ... " ) ;
-
- String[] command = new String[]{ "/bin/cp",
- working_directory + "/" + machine.getDirectory() + "/" + machine.getVmx_name_crash(),
- working_directory + "/" + machine.getDirectory() + "/" + machine.getVmx_name() } ;
+ machine.setDeployFault( true ) ;
+ // Writing the restarted save mark
try {
- Process p = Runtime.getRuntime().exec( command ) ;
- p.waitFor() ;
-
- if( p.exitValue() == 0 )
- {
- System.out.println( "Successfully replaced the VMX file." ) ;
- } else {
- System.err.println( "Unsuccessful replacement of the VMX file!" ) ;
-// printProcessError( p.getErrorStream() ) ;
- printProcessError( p ) ;
-
- return 1 ;
- }
- } catch( IOException e ) {
- System.err.println( "Error during VMX file replacement: " ) ;
- e.printStackTrace() ;
- } catch( InterruptedException e ) {
- e.printStackTrace() ;
- }
-
- // Removing lock files
- System.out.print( "Removing lock files ... " ) ;
-
- command = new String[]{ "/bin/rm", "-rf",
- working_directory + "/" + machine.getDirectory()
- + "/" + machine.getVmx_name() + ".lck" } ;
+ FileWriter fw = new FileWriter( new File( working_directory + "/" + machine.getDirectory() + "/fault.hpcvm" ) ) ;
+ fw.write( "fault!" ) ;
+ fw.flush() ;
+ fw.close() ;
+ fw = null ;
+ } catch( IOException e1 ) {
+ e1.printStackTrace() ;
+ System.err.println( "Unable to mark the fault!" ) ;
+ }
- try {
- Process p = Runtime.getRuntime().exec( command ) ;
- p.waitFor() ;
-
- if( p.exitValue() == 0 )
- {
- System.out.println( "Successfully deleted lock files." ) ;
- } else {
- System.err.println( "Unsuccessful deletion of lock files!" ) ;
-// printProcessError( p.getErrorStream() ) ;
- printProcessError( p ) ;
-
- return 1 ;
- }
- } catch( IOException e ) {
- System.err.println( "Error during lock files deletion: " ) ;
- e.printStackTrace() ;
- } catch( InterruptedException e ) {
- e.printStackTrace() ;
+ if( machine.checkVmx() == 1 )
+ {
+ return 1 ;
}
+
/** Retrieving VM assigned IP **/
String vmIP = null ;
if( startVM( 0 ) == 0 )
{
if( sendSaveOkVM() == 0 )
- {
+ {
+ try {
+ LocalHost.Instance().getServerStub().restartOk( LocalHost.Instance().getIP() ) ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to inform server about my successful restart!" ) ;
+ e.printStackTrace() ;
+ }
+
return 0 ;
}
} else {
return 0 ;
} else {
System.err.println( "Signal not sent!" ) ;
-// printProcessError( p.getErrorStream() ) ;
ret = printProcessError( p ) ;
if( ! ret )
System.out.println( "Saving VM ..." ) ;
saveProcess.setStatus( true ) ;
+ long deb = System.currentTimeMillis() ;
+
machine.setStatus( "saving" ) ;
try {
LocalHost.Instance().getServerStub().changeStatus(
String[] command ;
String saveName = "" ;
boolean error = false ;
- boolean errorVM = false ;
- if( suspendVM( 1 ) == 1 ) { error = true ; errorVM = true ; }
+
+ if( suspendVM( 1 ) == 1 ) { return 1 ; }
+
if( ! lastSaveOk )
{
- System.out.println( "Deletion of last nok archive ... " ) ;
+ String arch = "" ;
+ File file = new File( working_directory + "/" + machine.getName() + "_new_" + machine.getComputationId() + ".tar.gz" ) ;
+ if( file.exists() )
+ {
+ arch = working_directory + "/" + machine.getName() + "_new_" + machine.getComputationId() + ".tar.gz" ;
+ }
- command = new String[]{ "/bin/rm", "-rf",
- working_directory + "/" + machine.getName() + "_new_" + machine.getComputationId() + ".tar",
- working_directory + "/" + machine.getName() + "_new_" + machine.getComputationId() + ".tar.gz", } ;
+ file = null ;
+
+ if( arch.length() > 0 )
+ {
+ System.out.println( "Deletion of last nok archive ... " ) ;
+
+ command = new String[]{ "/bin/rm", "-rf", arch } ;
- try {
- procSave = Runtime.getRuntime().exec( command ) ;
- procSave.waitFor() ;
+ try {
+ procSave = Runtime.getRuntime().exec( command ) ;
+ procSave.waitFor() ;
- if( procSave.exitValue() == 0 )
- {
- System.out.println( "Last nok archive successfully deleted." ) ;
- } else {
- System.err.println( "Last nok archive not deleted!" ) ;
-// printProcessError( p.getErrorStream() ) ;
- printProcessError( procSave ) ;
+ if( procSave.exitValue() == 0 )
+ {
+ System.out.println( "Last nok archive successfully deleted." ) ;
+ } else {
+ System.err.println( "Last nok archive not deleted!" ) ;
+ printProcessError( procSave ) ;
+ error = true ;
+ }
+ } catch( IOException e ) {
+ System.err.println( "Error during nok archive deletion command: " ) ;
+ error = true ;
+ e.printStackTrace() ;
+ } catch( InterruptedException e ) {
+ e.printStackTrace() ;
error = true ;
}
- } catch( IOException e ) {
- System.err.println( "Error during nok archive deletion command: " ) ;
- error = true ;
- e.printStackTrace() ;
- } catch( InterruptedException e ) {
- e.printStackTrace() ;
- error = true ;
}
}
+
if( ! error )
{
System.out.print( "Creation of the archive ... " ) ;
+
/** Archive creation **/
-// command = new String[]{ "/bin/tar", "-cf",
-// working_directory + "/" + machine.getName() + "_new_" + machine.getComputationId() + ".tar",
-// working_directory + "/" + machine.getDirectory() } ;
-//
- command = new String[]{ "/bin/tar", "-cf",
- machine.getName() + "_new_" + machine.getComputationId() + ".tar",
- machine.getDirectory(), "-C", working_directory } ;
+ command = new String[]{ "/bin/tar", "-cz", "-C", working_directory,
+ "-f", working_directory + "/" + machine.getName() + "_new_" + machine.getComputationId() + ".tar.gz",
+ machine.getDirectory() } ;
if( emergencyStop )
{
} else {
System.err.println( "Archive not created!" ) ;
-// printProcessError( p.getErrorStream() ) ;
printProcessError( procSave ) ;
error = true ;
e.printStackTrace() ;
error = true ;
}
-
- /** Compression of the archive **/
- if( ! error )
- {
- System.out.print( "Compression of the archive ... " ) ;
- command = new String[]{ "/bin/gzip",
- working_directory + "/" + machine.getName()
- + "_new_" + machine.getComputationId() + ".tar" } ;
-
- if( emergencyStop )
- {
- return 1 ;
- }
-
- try {
- procSave = Runtime.getRuntime().exec( command ) ;
- procSave.waitFor() ;
- if( procSave.exitValue() == 0 )
- {
- System.out.println( "Archive successfully compressed." ) ;
- } else {
- System.err.println( "Archive not compressed!" ) ;
-// printProcessError( p.getErrorStream() ) ;
- printProcessError( procSave ) ;
-
- error = true ;
- }
- } catch( IOException e ) {
- System.err.println( "Error during archive compression command: " ) ;
- e.printStackTrace() ;
- error = true ;
- } catch( InterruptedException e ) {
- e.printStackTrace() ;
- error = true ;
- }
- }
+ long fin = System.currentTimeMillis() ;
+
+ System.out.println( "Time to create the save: " + (fin-deb)/1000 + " seconds." ) ;
/** Restarting VM **/
- if( errorVM || startVM( 0 ) == 1 ) { error = true ; }
+ if( startVM( 0 ) == 1 ) { return 1 ; }
/** Sending ok save signal **/
-// if( ! error )
-// {
- if( sendSaveOkVM() == 1 ) { error = true ; }
-// }
-
-// /** Deletion of the tar archive **/
-// if( ! error )
-// {
-// command = new String[]{ "/bin/rm",
-// working_directory + "/" + machine.getName()
-// + "_new_" + machine.getComputationId() + ".tar" } ;
-//
-// try {
-// Process p = Runtime.getRuntime().exec( command ) ;
-// p.waitFor() ;
-//
-// if( p.exitValue() == 0 )
-// {
-// System.out.println( "Archive (not compressed) successfully deleted." ) ;
-// } else {
-// System.err.println( "Archive (not compressed) not deleted!" ) ;
-// printProcessError( p.getErrorStream() ) ;
-//
-// error = true ;
-// }
-// } catch( IOException e ) {
-// System.err.println( "Error during archive (not compressed) deletion command: " ) ;
-// e.printStackTrace() ;
-// error = true ;
-// } catch( InterruptedException e ) {
-// e.printStackTrace() ;
-// error = true ;
-// }
-// }
+ if( sendSaveOkVM() == 1 ) { return 1 ; }
saveName = machine.getName() + "_new_" + machine.getComputationId() + ".tar.gz" ;
return 1 ;
}
- boolean ok = true ;
-
- ArrayList<ServicesClient> sn = machine.getSaveNeighbors() ;
+ ArrayList<SaveNeighbor> sn = machine.getSaveNeighbors() ;
for( int i = 0 ; i < sn.size() ; i++ )
{
- System.out.print( "Sending save to " + sn.get( i ) + " ... " ) ;
- try {
- command = new String[]{ "/usr/bin/scp", working_directory + "/" + saveName,
- sn.get( i ).getIPHost() + ":"
- + sn.get( i ).getWorkingDirectory() } ;
- } catch( RemoteException e1 ) {
- System.err.println( "Unable to retrieve save neighbor information!" ) ;
- e1.printStackTrace() ;
- ok = false ;
- }
+ String name = sn.get( i ).getName() ;
+ String wd = sn.get( i ).getWorkingDirectory() ;
+ String snIP = sn.get( i ).getIPHost() ;
+
+ System.out.print( "Sending save to " + name + " ... " ) ;
+
+ command = new String[]{ "/usr/bin/scp", working_directory + "/" + saveName,
+ snIP + ":" + wd } ;
- if( ok )
try {
procSave = Runtime.getRuntime().exec( command ) ;
procSave.waitFor() ;
System.out.println( "Archive successfully sent." ) ;
} else {
System.err.println( "Archive not sent!" ) ;
-// printProcessError( p.getErrorStream() ) ;
printProcessError( procSave ) ;
error = true ;
serverStub = null ;
saveProcess = new SaveProcess() ;
+ saveRequest = new SaveRequest() ;
machine = new VirtualMachine() ;
maxRetryVM = 10 ;
timeRetryVM = 10000 ;
- save_interleave = 30 * 60 * 1000 ;
- date_last_save = 0 ;
+// save_interleave = 30 * 60 * 1000 ;
+// date_last_save = 0 ;
isRestartedSave = false ;
- lastSaveOk = true ;
+ lastSaveOk = false ;
/** Connection to server **/
try {
System.out.println( "Connected to server " + server_ip + " on port " + server_port + "." ) ;
-// LocalHost.Instance().setServerIP( server_ip ) ;
LocalHost.Instance().setServerStub( serverStub ) ;
private void exportObject()
{
-// ServicesClient ref = null ;
Registry reg = null ;
try
while( (line = br.readLine()) != null )
{
System.err.println( line ) ;
- if( line.contains( "egmentation" ) )
+ if( line.contains( "egmentation" ) || _p.exitValue() == 139 )
{
ret = true ;
}
return ret ;
}
+
+ @Override
+ public int echo()
+ {
+ return 0 ;
+ }
+
@Override
public int start()
private class PingServer extends Thread
{
- private boolean run ;
+ protected boolean go ;
PingServer()
{
- run = true ;
+ go = true ;
}
- protected void stopPing() { run = false ; }
+ protected void stopPing() { go = false ; }
@Override
public void run()
{
- while( run )
+ while( go )
{
try {
LocalHost.Instance().getServerStub().ping( LocalHost.Instance().getIP() ) ;
- } catch (RemoteException e1) {
- e1.printStackTrace();
+ } catch( RemoteException e1 ) {
+ System.err.println( "Unable to ping the server!" ) ;
+ e1.printStackTrace() ;
+ yield() ;
}
try {
- Thread.sleep( 2000 ) ;
+ sleep( 2000 ) ;
} catch( InterruptedException e ) {
e.printStackTrace() ;
+ yield() ;
}
}
}
private class DialogVMServer extends Thread
{
- private boolean run ;
+ protected boolean go ;
private Socket socket ;
- private ArrayList<DialogVM> dialogs = new ArrayList<DialogVM>() ;
+// private ArrayList<DialogVM> dialogs = new ArrayList<DialogVM>() ;
DialogVMServer()
{
- run = true ;
+ go = true ;
}
protected void stopDialogVMServer()
{
- run = false ;
+ go = false ;
if( serverSocket != null )
{
try {
- serverSocket.close() ;
-// socket = serverSocket.accept() ;
-
- for( int i = 0 ; i < dialogs.size() ; i++ )
- {
- dialogs.get( i ).stopDialogVM() ;
- }
-
+ serverSocket.close() ;
} catch( IOException e ) {
e.printStackTrace() ;
+ yield() ;
}
}
}
} catch( IOException e ) {
System.err.println( "Unable to launch the SocketServer on port " + dialog_port + "!" ) ;
e.printStackTrace() ;
-
- run = false ;
+ System.exit( 1 ) ;
}
- while( run )
+ while( go )
{
try {
socket = serverSocket.accept() ;
- dialogs.add( new DialogVM( socket ) ) ;
- dialogs.get( dialogs.size() - 1 ).start() ;
+ new DialogVM( socket ).start() ;
+
} catch( IOException e ) {
System.err.println( "Problem with the accept function!" ) ;
e.printStackTrace() ;
+ yield() ;
}
}
}
private class DialogVM extends Thread
{
- private boolean run ;
private Socket socket ;
private BufferedReader reader ;
private String line ;
- DialogVM( Socket _socket ) { run = true ; socket = _socket ; }
-
- protected void stopDialogVM()
- {
- run = false ;
-
- try {
- reader.close() ; reader = null ;
- socket.close() ; socket = null ;
- } catch( IOException e ) {
- e.printStackTrace() ;
- }
- }
+ DialogVM( Socket _socket ) { socket = _socket ; }
@Override
public void run()
reader = new BufferedReader( new InputStreamReader( socket.getInputStream() ) ) ;
} catch( IOException e ) {
System.err.println( "Unable to open a dialog socket with the VM!" ) ;
- e.printStackTrace();
- stopDialogVM() ;
+ e.printStackTrace() ;
+ yield() ;
}
-
- while( run )
- {
- try {
- line = null ;
-
- if( reader != null )
+
+ try {
+ line = null ;
+
+ if( reader != null )
+ {
+ line = reader.readLine() ;
+ }
+
+ /** VM is starting -- retrieving informations **/
+ if( line != null && line.equalsIgnoreCase( "infos" ) )
+ {
+ /* Receiving name */
+ machine.setName( reader.readLine() ) ;
+
+ /* Receiving IP */
+ String ip = reader.readLine() ;
+ if( ! ip.equalsIgnoreCase( machine.getIp() ) )
{
- line = reader.readLine() ;
+ System.err.println( "VM IP not well configured!!" ) ;
}
-
- /** VM is starting -- retrieving informations **/
- if( run && line != null && line.equalsIgnoreCase( "infos" ) )
- {
- /* Receiving name */
- machine.setName( reader.readLine() ) ;
-
- /* Receiving IP */
- String ip = reader.readLine() ;
- if( ! ip.equalsIgnoreCase( machine.getIp() ) )
- {
- System.err.println( "VM IP not well configured!!" ) ;
- }
-
- /* Close streams */
- reader.close() ; reader = null ;
- socket.close() ; socket = null ;
-
- run = false ;
- }
-
+
+ /* Close streams */
+ reader.close() ; reader = null ;
+ socket.close() ; socket = null ;
+
+ } else if( line != null && line.equalsIgnoreCase( "save" ) ) {
/** It's time to do a save **/
- if( run && line != null && line.equalsIgnoreCase( "save" ) )
+
+ try {
+ machine.setComputationId( Integer.parseInt( reader.readLine() ) ) ;
+ } catch( Exception e ) {
+ System.err.println( "Problem while reading the computation id!" ) ;
+ e.printStackTrace() ;
+ }
+
+ synchronized( saveRequest )
{
try {
- machine.setComputationId( Integer.parseInt( reader.readLine() ) ) ;
- } catch( Exception e ) {
- System.err.println( "Problem while reading the computation id!" ) ;
+ LocalHost.Instance().getServerStub().requestSave( LocalHost.Instance().getIP() ) ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to request save to server!" ) ;
e.printStackTrace() ;
}
-
- if( (System.currentTimeMillis() - date_last_save) > save_interleave )
- {
- date_last_save = System.currentTimeMillis() ;
-
- /* Close streams */
- reader.close() ; reader = null ;
- socket.close() ; socket = null ;
-
- run = false ;
-
- /* Starting the VM save */
- saveVM() ;
- } else {
- sendSaveOkVM() ;
- }
- }
-
-
- /** Computation is done, we can shutdown the VM **/
- if( run && line != null && line.equalsIgnoreCase( "quit" ) )
- {
+
try {
- Thread.sleep( 5000 ) ;
+ saveRequest.wait() ;
} catch( InterruptedException e ) {
- e.printStackTrace() ;
+ e.printStackTrace();
}
-
+ }
+
+ if( saveRequest.getStatus() )
+ {
/* Close streams */
reader.close() ; reader = null ;
socket.close() ; socket = null ;
-
- run = false ;
-
- stopVM() ;
+
+ saveRequest.setStatus( false ) ;
+
+ /* Requesting the VM save */
+ if( saveVM() == 1 )
+ {
+ System.err.println( "Problem while saving. Exiting ..." ) ;
+ pingServer.stopPing() ;
+ emergencyStop() ;
+ System.exit( 1 ) ;
+ }
+ } else {
+ sendSaveOkVM() ;
+ }
+ } else if( line != null && line.equalsIgnoreCase( "quit" ) ) {
+ /** Computation is done, we can shutdown the VM **/
+
+ try {
+ Thread.sleep( 5000 ) ;
+ } catch( InterruptedException e ) {
+ e.printStackTrace() ;
+ }
+
+ /* Close streams */
+ reader.close() ; reader = null ;
+ socket.close() ; socket = null ;
+
+ stopVM() ;
+
+ machine.setStatus( "connected" ) ;
+ try {
+ LocalHost.Instance().getServerStub().changeStatus(
+ LocalHost.Instance().getIP(), "connected" ) ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to inform the server of the VM status!" ) ;
+ e.printStackTrace() ;
}
- } catch( IOException e ) {
- e.printStackTrace() ;
+ try {
+ LocalHost.Instance().getServerStub().endApplication() ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to inform the server of the end of application!" ) ;
+ e.printStackTrace() ;
+ }
+ } else if( line != null && line.equalsIgnoreCase( "start" ) ) {
+ /** Computation is starting **/
+
+ /* Close streams */
+ reader.close() ; reader = null ;
+ socket.close() ; socket = null ;
+ System.out.println( "Application is starting." ) ;
+
+ try {
+ LocalHost.Instance().getServerStub().goApplication() ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to inform the server of the end of application!" ) ;
+ e.printStackTrace() ;
+ }
}
+
+ } catch( IOException e ) {
+ e.printStackTrace() ;
+ yield() ;
}
}
}
@Override
public void saveOk()
{
- String save_name = machine.getName() + "_" + machine.getComputationId() +
- "_last.tar.gz" ;
+ String save_name = machine.getName() + "_last_" + machine.getComputationId() +
+ ".tar.gz" ;
String save_new = machine.getName() + "_new_"
+ machine.getComputationId() + ".tar.gz" ;
} else {
System.err.println( "Last save NOK!" ) ;
System.err.println( "Error: " ) ;
-// printProcessError( p.getErrorStream() ) ;
printProcessError( p ) ;
}
} catch( IOException e ) {
for( int i = 0 ; i < machine.getSaveNeighbors().size() ; i++ )
{
try {
- machine.getSaveNeighbors().get( i ).changeSaveName( save_new, save_name, machine.getComputationId() ) ;
+ machine.getSaveNeighbors().get( i ).getStub().changeSaveName( save_new, save_name, machine.getComputationId() ) ;
} catch( RemoteException e ) {
- try {
- System.err.println( "Unable to change save name on " + machine.getSaveNeighbors().get( i ).getName() + "!" ) ;
- } catch( RemoteException e1 ) {
- System.err.println( "Unable to change save name on an unamed save neighbor!" ) ;
- e1.printStackTrace() ;
- }
+ System.err.println( "Unable to change save name on " + machine.getSaveNeighbors().get( i ).getName() + "!" ) ;
e.printStackTrace() ;
}
}
+ // Informing the server
+ int ret = 1 ;
+ try {
+ ret = LocalHost.Instance().getServerStub().changeSaveName( LocalHost.Instance().getIP(), save_name ) ;
+ } catch( RemoteException e ) {
+ System.err.println( "Unable to inform the server about the new save name!" ) ;
+ e.printStackTrace() ;
+ }
+
+ if( ret == 0 )
+ {
+ System.out.println( "Successfully informing the server about the new save name." ) ;
+ } else {
+ System.err.println( "Problem on the server while informing it about the new save name!" ) ;
+ }
+
// Ok here
lastSaveOk = true ;
}
} else {
System.err.println( "Change save name NOK!" ) ;
System.err.println( "Error: " ) ;
-// printProcessError( p.getErrorStream() ) ;
printProcessError( p ) ;
}
} catch( IOException e ) {
@Override
- public void setSavingNeighbor( ServicesClient _sn )
+ public void setSaveNeighbor( SaveNeighbor _sn )
{
if( _sn != null )
{
- ArrayList<ServicesClient> as = new ArrayList<ServicesClient>() ;
+ ArrayList<SaveNeighbor> as = new ArrayList<SaveNeighbor>() ;
as.add( _sn ) ;
- try {
- System.out.println( "Save neighbor: " + _sn.getName() ) ;
- } catch( RemoteException e ) {
- System.err.println( "Unable to retrieve the name of the save neighbor!" ) ;
- e.printStackTrace() ;
- }
+ System.out.println( "Save neighbor: " + _sn.getName() ) ;
machine.setSaveNeighbors( as ) ;
}
@Override
- public void setSavingNeighbors( ArrayList<ServicesClient> _sn )
+ public void setSaveNeighbors( ArrayList<SaveNeighbor> _sn )
{
if( _sn != null && _sn.size() > 0 )
{
System.out.print( "Save neighbors: " ) ;
for( int i = 0 ; i < _sn.size() ; i++ )
{
- try {
- System.out.print( _sn.get( i ).getName() ) ;
- } catch( RemoteException e ) {
- System.err.println( "Unable to retrieve the name of a save neighbor!" ) ;
- e.printStackTrace() ;
- }
+ System.out.print( _sn.get( i ).getName() ) ;
if( i != _sn.size() - 1 )
{
@Override
- public void addSavingNeighbor( ServicesClient _sn )
+ public void addSaveNeighbor( SaveNeighbor _sn )
{
if( _sn != null )
{
- try {
- System.out.println( "Adding save neighbor: " + _sn.getName() ) ;
- } catch( RemoteException e ) {
- System.err.println( "Unable to retrieve the name of a save neighbor!" ) ;
- e.printStackTrace() ;
- }
+ System.out.println( "Adding save neighbor: " + _sn.getName() ) ;
machine.getSaveNeighbors().add( _sn ) ;
}
@Override
- public void addSavingNeighbors( ArrayList<ServicesClient> _sn )
+ public void addSaveNeighbors( ArrayList<SaveNeighbor> _sn )
{
if( _sn != null && _sn.size() > 0 )
{
System.out.print( "Adding save neighbors: " ) ;
for( int i = 0 ; i < _sn.size() ; i++ )
{
- try {
- System.out.print( _sn.get( i ).getName() ) ;
- } catch( RemoteException e ) {
- System.err.println( "Unable to retrieve the name of a save neighbor!" ) ;
- e.printStackTrace() ;
- }
-
+ System.out.print( _sn.get( i ).getName() ) ;
+
if( i != _sn.size() - 1 )
{
System.out.print( ", " ) ;
@Override
- public void replaceSavingNeighbor( ServicesClient _old, ServicesClient _new )
+ public void replaceSaveNeighbor( SaveNeighbor _old, SaveNeighbor _new )
{
System.out.print( "Replacing a save neihgbor ... " ) ;
if( _old != null && _new != null )
{
int i = 0 ;
+ boolean change = false ;
for( i = 0 ; i < machine.getSaveNeighbors().size() ; i++ )
{
- try {
- if( machine.getSaveNeighbors().get( i ).getIPHost().equalsIgnoreCase( _old.getIPVM() ) )
- {
- machine.getSaveNeighbors().set( i, _new ) ;
- System.out.println( "Save neighbor successfully changed." ) ;
- break ;
- }
- } catch( RemoteException e ) {
- System.err.println( "Unable to retrieve the IP address of a save neighbor!" ) ;
- e.printStackTrace() ;
+ if( machine.getSaveNeighbors().get( i ).getIPHost().equalsIgnoreCase( _old.getIPHost() ) )
+ {
+ machine.getSaveNeighbors().set( i, _new ) ;
+ System.out.println( "Save neighbor successfully changed." ) ;
+ change = true ;
+ break ;
}
}
- if( i == machine.getSaveNeighbors().size() )
+ if( ! change )
{
System.out.println( "I am not concerned by the modification." ) ;
}
}
// TODO NEIGHBORS !!!!
- //System.out.println( "!!!! NEIGHBORS !!!!!" ) ;
boolean ok = false ;
- boolean go = true ;
int i = 0 ;
while( ! ok && i < machine.getSaveNeighbors().size() )
{
- try {
- System.out.print( "Retrieving a save on " + machine.getSaveNeighbors().get( 0 ).getName() + " ... " ) ;
- } catch( RemoteException e1 ) {
- System.err.println( "Unable to retrieve the name of a save neighbor!" ) ;
- e1.printStackTrace() ;
- }
+ System.out.print( "Retrieving a save on " + machine.getSaveNeighbors().get( 0 ).getName() + " ... " ) ;
String command[] = {} ;
- try
- {
- command = new String[]{ "/usr/bin/scp",
- machine.getSaveNeighbors().get( i ).getIPHost() + ":" +
- machine.getSaveNeighbors().get( i ).getWorkingDirectory() + "/" +
- machine.getSave_last(),
- working_directory } ;
- } catch( RemoteException e1 ) {
- System.err.println( "Unable to retrieve the name of a save neighbor!" ) ;
- e1.printStackTrace() ;
- go = false ;
- }
+ command = new String[]{ "/usr/bin/scp",
+ machine.getSaveNeighbors().get( i ).getIPHost() + ":" +
+ machine.getSaveNeighbors().get( i ).getWorkingDirectory() + "/" +
+ machine.getSave_last(),
+ working_directory } ;
- if( go )
try {
Process p = Runtime.getRuntime().exec( command ) ;
p.waitFor() ;
} else {
System.err.println( "Archive not retrieved!" ) ;
System.err.println( "Error: " ) ;
-// printProcessError( p.getErrorStream() ) ;
+
printProcessError( p ) ;
-// error = true ;
}
} catch( IOException e ) {
System.err.println( "Error during archive retrieve command: " ) ;
e.printStackTrace() ;
-// error = true ;
} catch( InterruptedException e ) {
e.printStackTrace() ;
-// error = true ;
}
i++ ;
}
+
@Override
public String getIPVM() throws RemoteException
{
}
+ public Integer deployVM( String _name, String _archive, String _directory )
+ {
+ if( _name != null && _name.length() > 0 && _archive != null && _name.length() > 0 )
+ {
+ File file = new File( working_directory + "/" + _archive ) ;
+ if( ! file.exists() )
+ {
+ System.err.println( "There is no archive named " + _archive + " in my working directory!" ) ;
+ file = null ;
+ return 2 ;
+ } else if( file.isDirectory() ) {
+ System.err.println( _archive + " is a directory!" ) ;
+ file = null ;
+ return 1 ;
+ }
+
+ file = null ;
+
+ machine.setName( _name ) ;
+ machine.setInitial_archive_name( _archive ) ;
+ machine.setDirectory( _directory ) ;
+
+ if( machine.deployInitialVM() == 1 )
+ {
+ System.err.println( "Unable to deploy the initial VM archive!" ) ;
+ } else {
+ return 0 ;
+ }
+ }
+
+ return 1 ;
+ }
+
+
+ @Override
+ public void responseSave( boolean _b )
+ {
+ synchronized( saveRequest )
+ {
+ saveRequest.setStatus( _b ) ;
+ try {
+ saveRequest.notifyAll() ;
+ } catch( Exception e ) {
+ e.printStackTrace() ;
+ }
+ }
+ }
+
+
+ private class SaveRequest
+ {
+ boolean status ;
+
+ SaveRequest()
+ {
+ status = false ;
+ }
+
+ protected boolean getStatus() { return status ; }
+
+ protected void setStatus( boolean _b ) { status = _b ; }
+ }
+
private class SaveProcess
{
boolean status ;