summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
diff options
context:
space:
mode:
authorNils Schwabe2014-07-04 14:10:40 +0200
committerNils Schwabe2014-07-04 14:10:40 +0200
commit3f4f67ec1f25434e2607363e6014b7cd9455707b (patch)
treedd0dd08cfa92d442fb2ccbc2e45e520aef4a6a67 /src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
parentFix some small things (diff)
downloadmasterserver-3f4f67ec1f25434e2607363e6014b7cd9455707b.tar.gz
masterserver-3f4f67ec1f25434e2607363e6014b7cd9455707b.tar.xz
masterserver-3f4f67ec1f25434e2607363e6014b7cd9455707b.zip
Begin to implement crc scheduler... (not working)
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
index 272b924..05c094b 100644
--- a/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
+++ b/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
@@ -2,6 +2,7 @@ package org.openslx.imagemaster.serverconnection;
import java.sql.Timestamp;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -32,6 +33,11 @@ public class ImageProcessor
* Value: uploadingImageInfos
*/
private static HashMap<String, UploadingImageInfos> uploadingImages = new HashMap<>();
+
+ /**
+ * The UUIDs of the images that need to be checked by the crc checker.
+ */
+ private static List<String> imagesToCheck = new LinkedList<>();
/**
* The downloading clients.
@@ -62,7 +68,7 @@ public class ImageProcessor
uploadDone( uuid );
return new UploadInfos( null, missing );
}
- uploadingImages.get( uuid ).setLastSentBlocks( missing );
+ uploadingImages.get( uuid ).addNotCheckedBlocks( missing );
return new UploadInfos( uploadingImages.get( uuid ).getToken(), missing );
}
@@ -79,15 +85,16 @@ public class ImageProcessor
// TODO: proper synchronization, interface is multi threaded.
// should synchronize operations on the map (use concurrent map) and then synchronize on the uploading image
// when handing the missing blocks etc...
- uploadingImages.put( uuid, new UploadingImageInfos( token, allBlocks, serverSessionId, new Timestamp( System.currentTimeMillis() ), uuid ) );
+ uploadingImages.put( uuid, new UploadingImageInfos( token, allBlocks, serverSessionId, new Timestamp( System.currentTimeMillis() ), uuid, filepath, "CRCFILE" ) );
DbImage.insert( imageData, System.currentTimeMillis(), token, allBlocks, serverSessionId, filepath );
-
+ imagesToCheck.add( uuid );
+
List<Integer> missing = getMissingBlocks( uuid, AMOUNT );
if ( missing.isEmpty() ) {
// TODO: if this is empty, check if there are pending blocks and if so, request them again
uploadDone( uuid );
}
- uploadingImages.get( uuid ).setLastSentBlocks( missing );
+ uploadingImages.get( uuid ).addNotCheckedBlocks( missing );
return new UploadInfos( token, missing );
}
}
@@ -169,7 +176,7 @@ public class ImageProcessor
}
synchronized ( image ) {
- image.setLastSentBlocks( result );
+ image.addNotCheckedBlocks( result );
}
return result;
@@ -183,6 +190,9 @@ public class ImageProcessor
*/
private static void uploadDone( String uuid )
{
+ synchronized (imagesToCheck) {
+ imagesToCheck.remove( uuid );
+ }
UploadingImageInfos image;
synchronized ( uploadingImages ) {
image = uploadingImages.remove( uuid );
@@ -192,6 +202,17 @@ public class ImageProcessor
// remove the connection so that it can be used by a new client
ConnectionHandler.removeConnection( image.getToken() );
}
+
+ public static List<UploadingImageInfos> getImagesToCheck()
+ {
+ List<UploadingImageInfos> result = new LinkedList<>();
+ Iterator<String> iter = imagesToCheck.iterator();
+ while ( iter.hasNext() ) {
+ result.add( uploadingImages.get( iter.next() ) );
+ }
+
+ return result;
+ }
/**
* Checks pending uploads in database and adds them to process list again.
@@ -202,7 +223,7 @@ public class ImageProcessor
for ( DbImage image : list ) {
String token = image.token;
ConnectionHandler.addConnection( token, image.imagePath, ConnectionData.UPLOADING );
- UploadingImageInfos infos = new UploadingImageInfos( token, image.missingBlocks, image.serverSessionId, image.timestamp, image.uuid );
+ UploadingImageInfos infos = new UploadingImageInfos( token, image.missingBlocks, image.serverSessionId, image.timestamp, image.uuid, image.imagePath, "CRCFILE" );
uploadingImages.put( image.uuid, infos );
}
log.info( "Added " + list.size() + " pending upload(s) to process list again." );