package org.openslx.satellitedaemon.filetransfer; import java.io.File; import java.io.IOException; import java.util.List; 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.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("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"); continue; } log.info("Got upInfos. Trying to create Uploader with token: " + upInfos.token); // creating the uploader with the "context"-item. Uploader u; try { u = new Uploader(Globals.getMasterserverHost(), upInfos.port, Globals.getMasterServerSslContext()); } catch (IOException e) { log.warn("Could not connect for uploading an image: " + e.toString()); continue; } u.sendToken(upInfos.token); log.info("upInfos.getMissingBlocks().size() = " + upInfos.getMissingBlocks().size()); long fileSize = new File(image.path).length(); // continue sending Blocks until getMissingBlocks is empty. while (!upInfos.getMissingBlocks().isEmpty()) { List blocks = upInfos.getMissingBlocks(); log.info("Anzahl angeforderter Blöcke : " + blocks.size()); log.info(blocks); for (int i = 0; i < blocks.size(); i++) { int startOffset = blocks.get(i) * Globals.BLOCKSIZE; // TODO: // long int endOffset = startOffset + Globals.BLOCKSIZE; if (endOffset > fileSize) endOffset = (int) fileSize; // TODO: Long u.prepareSendRange(startOffset, endOffset); u.sendFile(image.path); log.info("Block number " + blocks.get(i) + " uploaded."); } upInfos = ThriftConnection.getUploadInfos(imDat); } u.close(); } try { Thread.sleep(1 * 60 * 1000); // Thread.sleep( 1000 ); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } } } }