From afcdbf700dfdee503bd358f322c84e9114470f2e Mon Sep 17 00:00:00 2001 From: Michael Petretti Date: Tue, 15 Jul 2014 14:24:38 +0200 Subject: Rename and clean-up. --- .../filetransfer/FileUploadWorker.java | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/main/java/org/openslx/satellitedaemon/filetransfer/FileUploadWorker.java (limited to 'src/main/java/org/openslx/satellitedaemon/filetransfer/FileUploadWorker.java') diff --git a/src/main/java/org/openslx/satellitedaemon/filetransfer/FileUploadWorker.java b/src/main/java/org/openslx/satellitedaemon/filetransfer/FileUploadWorker.java new file mode 100644 index 0000000..8e66ea9 --- /dev/null +++ b/src/main/java/org/openslx/satellitedaemon/filetransfer/FileUploadWorker.java @@ -0,0 +1,85 @@ +package org.openslx.satellitedaemon.filetransfer; + +import java.util.List; +import java.util.UUID; + +import org.apache.log4j.Logger; +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; + +public class FileUploadWorker implements Runnable +{ + private static Logger log = Logger.getLogger( FileUploadWorker.class ); + + @Override + public void run() + { + while ( true ) { + // This List contains all Images in the Database that should be uploaded. + List imageList = DbImage.getAllMarkedForUpload(); + log.info( "FILTRANSFERUploadWorker: 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, + // 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 ); + + // uploadInfo and ThriftAuthentication + 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; + + // FIXME: And then..? If you just continue, you'll run into a null pointer exception + + } + 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.FILETRANSFERSERVERIP ), upInfos.port, Globals.getMasterServerSslContext() ); + 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 * Globals.getPropertyInt( PropInt.BLOCKSIZE ), i * Globals.getPropertyInt( PropInt.BLOCKSIZE ) ); + u.sendFile( image.path ); + start = i + 1; + } + if ( i == blocks.size() - 2 ) { + u.sendRange( start * Globals.getPropertyInt( PropInt.BLOCKSIZE ), ( blocks.size() - 1 ) * Globals.getPropertyInt( PropInt.BLOCKSIZE ) ); + u.sendFile( image.path ); + } + } + upInfos = ThriftConnection.getUploadInfos( imDat ); + } + u.close(); + } + try { + Thread.sleep( 5 * 60 * 1000 ); + // Thread.sleep( 1000 ); + } catch ( InterruptedException e ) { + Thread.currentThread().interrupt(); + return; + } + } + + } +} -- cgit v1.2.3-55-g7522