From 31c54276a7d4f979010a0bdc3bbcf9de8b5b9ecc Mon Sep 17 00:00:00 2001 From: Michael Petretti Date: Mon, 7 Jul 2014 17:11:19 +0200 Subject: In the middle of Debuging and Testing. --- .../satellitedaemon/ftp/FtpUploadWorker.java | 65 ++++++++++++-------- .../satellitedaemon/ftp/ThriftConnection.java | 69 ++++++++++++++++++++-- 2 files changed, 105 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java b/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java index 3ee624e..4fe2d61 100644 --- a/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java +++ b/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java @@ -9,6 +9,7 @@ import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.util.List; +import java.util.UUID; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; @@ -19,7 +20,6 @@ import org.openslx.filetransfer.Uploader; import org.openslx.imagemaster.thrift.iface.ImageData; import org.openslx.imagemaster.thrift.iface.UploadInfos; import org.openslx.satellitedaemon.Globals; -import org.openslx.satellitedaemon.Globals.PropInt; import org.openslx.satellitedaemon.Globals.PropString; import org.openslx.satellitedaemon.db.DbImage; @@ -34,17 +34,21 @@ public class FtpUploadWorker implements Runnable // This List contains all Images in the Database that should be uploaded. List imageList = DbImage.getAllMarkedForUpload(); log.info( "FtpUploadWorker: imageList Contains " + imageList.size() + " items." ); - + // Upload one Image after the other. for ( DbImage image : imageList ) { // TODO: still some fields for ImageData, which i can't fill with info from DbImage. - ImageData imDat = new ImageData( image.guid, image.rid, +// ImageData imDat = new ImageData( image.guid, image.rid, +// image.name, System.currentTimeMillis(), System.currentTimeMillis(), image.creator, "anyThing", +// true, false, "best", "theVeryBest", image.fileSize ); + + ImageData imDat = new ImageData( UUID.randomUUID().toString(), image.rid, image.name, System.currentTimeMillis(), System.currentTimeMillis(), image.creator, "anyThing", true, false, "best", "theVeryBest", image.fileSize ); char[] passphrase = Globals.getPropertyString( PropString.FTPSKEYSTOREPWD ).toCharArray(); KeyStore keystore; try { - + // All the necessary KeyStore handling for the "context"-item. keystore = KeyStore.getInstance( "JKS" ); keystore.load( new FileInputStream( Globals.getPropertyString( PropString.FTPSKEYSTOREPATH ) ), passphrase ); @@ -55,33 +59,43 @@ public class FtpUploadWorker implements Runnable context.init( null, trustManagers, null ); // uploadInfo and ThriftAuthentication - UploadInfos upInfos = ThriftConnection.getUploadInfos( imDat ); + String crcPath = image.path.concat( ".crc" ); + UploadInfos upInfos = ThriftConnection.getUploadInfos( imDat, crcPath ); if ( upInfos == null ) { log.error( "The UploadInfos returned by ThriftConnection Class are null" ); + return; } - + log.info( "Got upInfos. Trying to create Uploader with token: " + upInfos.token ); + // creating the uploader with the "context"-item. - Uploader u = new Uploader( Globals.getPropertyString( PropString.FTPSERVERIP ), Globals.getPropertyInt( PropInt.FTPPORT ), context ); + Uploader u = new Uploader( Globals.getPropertyString( PropString.FTPSERVERIP ), upInfos.port, context ); u.sendToken( upInfos.token ); - + // continue sending Blocks until getMissingBlocks is empty. - while ( !upInfos.getMissingBlocks().isEmpty() ) { - // Send all Blocks from upInfos.getMissingBlocks() in ranges. - List blocks = upInfos.getMissingBlocks(); - int start = 0; - for ( int i = 0; i < blocks.size() - 1; i++ ) { - if ( blocks.get( i ) != ( blocks.get( i + 1 ) - 1 ) ) { - u.sendRange( start, i ); - u.sendFile( image.path ); - start = i + 1; - } - if ( i == blocks.size() - 2 ) { - u.sendRange( start, blocks.size() - 1 ); - u.sendFile( image.path ); - } - } - } - upInfos = ThriftConnection.getUploadInfos( imDat ); +// while ( !upInfos.getMissingBlocks().isEmpty() ) { +// // Send all Blocks from upInfos.getMissingBlocks() in ranges. +// List blocks = upInfos.getMissingBlocks(); +// int start = 0; +// for ( int i = 0; i < blocks.size() - 1; i++ ) { +// if ( blocks.get( i ) != ( blocks.get( i + 1 ) - 1 ) ) { +// log.info( "Sending Blocks numbered from " + start + " up to " + i ); +// u.sendRange( start *16*1024*1024, i*16*1024*1024 ); +// u.sendFile( image.path ); +// log.info( "... DONE!" ); +// start = i + 1; +// } +// if ( i == blocks.size() - 2 ) { +// log.info( "Sending Blocks numbered from " + start + " up to " + i ); +// u.sendRange( start*16*1024*1024, (blocks.size() - 1)*16*1024*1024 ); +// u.sendFile( image.path ); +// } +// } +// } +// upInfos = ThriftConnection.getUploadInfos( imDat ); + log.info("Using file:" + image.path ); + u.sendRange( 254, 254 + 255 ); + u.sendFile( image.path ); + } catch ( NoSuchAlgorithmException e ) { // TODO Auto-generated catch block @@ -106,6 +120,7 @@ public class FtpUploadWorker implements Runnable } try { Thread.sleep( 5 * 60 * 1000 ); + // Thread.sleep( 1000 ); } catch ( InterruptedException e ) { log.error( "FtpUploadWorker: Sleep interrupted" ); e.printStackTrace(); diff --git a/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java b/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java index 2fbc471..5b4dbcd 100644 --- a/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java +++ b/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java @@ -16,6 +16,7 @@ import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; +import org.openslx.imagemaster.crcchecker.CRCFile; import org.openslx.imagemaster.thrift.iface.DownloadInfos; import org.openslx.imagemaster.thrift.iface.ImageData; import org.openslx.imagemaster.thrift.iface.ImageServer; @@ -37,14 +38,73 @@ public class ThriftConnection private static ImageServer.Client client = null; private static ServerSessionData sSD = null; private static Logger log = Logger.getLogger( ThriftConnection.class ); + private static CRCFile crc = null; - /** + * Method for getting UploadeInfos + * + * !! on the first Call !! + * + * when the CRCsum need to be transfered. * The method calls getConnection() to check if the connection is ok - * and to get the ServerSessionData. If connection is ok, it returns ftpCredential. + * and to get the ServerSessionData. If connection is ok, it calls + * submitImage with CRCsum in List. * * @return returns 'null' if there is a problem. */ + public static UploadInfos getUploadInfos( ImageData imDat, String filename ) + { + ImageServer.Client theClient = null; + try { + theClient = getConnection(); + if ( theClient == null ) { + log.error( "Client was null!" ); + return null; + } + // .submitImage needs the List from CRCFile.getCRCs() only + // on the first time called. null afterwards. + log.info( "First call of submitImage following..." ); + crc = new CRCFile(filename); + log.info( "Made CRCFile from " + filename ); + return theClient.submitImage( sSD.sessionId, imDat, crc.getCrcSums() ); + } catch ( TException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( UnrecoverableKeyException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( InvalidKeyException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( NoSuchAlgorithmException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( CertificateException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( FileNotFoundException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( KeyStoreException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( SignatureException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( IOException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * Method for getting UploadeInfos when CRCsum was already transfered on first call. + * The method calls getConnection() to check if the connection is ok + * and to get the ServerSessionData. If connection is ok, it calls + * submitImage with sSD.sessionId, imDat and !!null!! + * @return returns 'null' if there is a problem. + */ public static UploadInfos getUploadInfos( ImageData imDat ) { ImageServer.Client theClient = null; @@ -54,8 +114,9 @@ public class ThriftConnection log.error( "Client was null!" ); return null; } - - return theClient.submitImage( sSD.sessionId, imDat ); + // .submitImage needs the List from CRCFile.getCRCs() only + // on the first time called. null afterwards. + return theClient.submitImage( sSD.sessionId, imDat, crc.getCrcSums()); } catch ( TException e ) { // TODO Auto-generated catch block e.printStackTrace(); -- cgit v1.2.3-55-g7522