summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/ftp
diff options
context:
space:
mode:
authorNils Schwabe2014-05-07 15:23:26 +0200
committerNils Schwabe2014-05-07 15:23:26 +0200
commitb02181e54011a01df82e4450ae884ebca920a300 (patch)
tree4ed9deb319f6ab2bacaac4cf7333919320949e2c /src/main/java/org/openslx/imagemaster/ftp
parentFix message signing (diff)
downloadmasterserver-b02181e54011a01df82e4450ae884ebca920a300.tar.gz
masterserver-b02181e54011a01df82e4450ae884ebca920a300.tar.xz
masterserver-b02181e54011a01df82e4450ae884ebca920a300.zip
Fix bug where the user list was accessed by multiple threads
Add server keys to database
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/ftp')
-rw-r--r--src/main/java/org/openslx/imagemaster/ftp/FtpCredentialsScheduler.java22
-rw-r--r--src/main/java/org/openslx/imagemaster/ftp/ImageProcessor.java4
-rw-r--r--src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java4
3 files changed, 20 insertions, 10 deletions
diff --git a/src/main/java/org/openslx/imagemaster/ftp/FtpCredentialsScheduler.java b/src/main/java/org/openslx/imagemaster/ftp/FtpCredentialsScheduler.java
index 74f9754..557cc72 100644
--- a/src/main/java/org/openslx/imagemaster/ftp/FtpCredentialsScheduler.java
+++ b/src/main/java/org/openslx/imagemaster/ftp/FtpCredentialsScheduler.java
@@ -2,6 +2,7 @@ package org.openslx.imagemaster.ftp;
import java.io.File;
import java.util.Date;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Timer;
@@ -11,7 +12,6 @@ import org.apache.log4j.Logger;
import org.openslx.imagemaster.App;
import org.openslx.imagemaster.Globals;
import org.openslx.imagemaster.db.DbImage;
-import org.openslx.imagemaster.util.Util;
public class FtpCredentialsScheduler extends TimerTask
{
@@ -25,6 +25,8 @@ public class FtpCredentialsScheduler extends TimerTask
{
synchronized ( App.ftpServer.users ) {
List<DbImage> uploadingImages = DbImage.getUploadingImages(); // get the uploading images
+ // List to save the users that need to be deleted after iterating the map
+ List<String> usersToDelete = new LinkedList<>();
// check all folders
for ( Map.Entry<String, Long> entry : App.ftpServer.users.entrySet() ) {
if ( entry == null )
@@ -44,25 +46,25 @@ public class FtpCredentialsScheduler extends TimerTask
ImageProcessor.processImageAfterUpload( username, list[0].getName() );
} else if ( ( new Date().getTime() - list[0].lastModified() ) >= timeout ) { // check timeout
log.info( username + "'s files are too old. Deleting him and his folder." );
- Util.deleteFolder( dir );
- App.ftpServer.removeUser( username );
- ImageProcessor.removeImageFromProcessList( username );
+ usersToDelete.add( username );
}
} else if ( list.length > 1 ) {
log.info( "User '" + username + "' uploaded too many files. Deleting his account and his folder." );
- Util.deleteFolder( dir );
- App.ftpServer.removeUser( username );
- ImageProcessor.removeImageFromProcessList( username );
+ usersToDelete.add( username );
} else {
// check the creation time of the user
if ( ( System.currentTimeMillis() - App.ftpServer.users.get( username ) ) >= timeout ) {
log.info( username + " did nothing for too long. Deleting him and his folder" );
- Util.deleteFolder( dir );
- App.ftpServer.removeUser( username );
- ImageProcessor.removeImageFromProcessList( username );
+ usersToDelete.add( username );
}
}
}
+ // now delete users
+ for (String u : usersToDelete) {
+ App.ftpServer.removeUser( u );
+ ImageProcessor.removeImageFromProcessList( u );
+ }
+
}
}
diff --git a/src/main/java/org/openslx/imagemaster/ftp/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/ftp/ImageProcessor.java
index 05b8101..782d1ff 100644
--- a/src/main/java/org/openslx/imagemaster/ftp/ImageProcessor.java
+++ b/src/main/java/org/openslx/imagemaster/ftp/ImageProcessor.java
@@ -33,6 +33,10 @@ public class ImageProcessor
Iterator<DbImage> iter = uploadingImages.iterator();
while (iter.hasNext()) {
DbImage dbImage = iter.next();
+ log.debug( "Akutlle Systemzeit: " + System.currentTimeMillis() );
+ log.debug( "Timestamp: " + dbImage.timestamp.getTime() );
+ log.debug( "Differenz: " + (System.currentTimeMillis() - dbImage.timestamp.getTime()) );
+ log.debug( "Timeout: " + timeout );
if (System.currentTimeMillis() - dbImage.timestamp.getTime() >= timeout) {
DbImage.delete( dbImage.UUID );
log.info( "Deleted dbimage from db: " + dbImage.UUID + " due to timeout");
diff --git a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
index 0f5267f..19d8acd 100644
--- a/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
+++ b/src/main/java/org/openslx/imagemaster/ftp/MasterFtpServer.java
@@ -25,6 +25,7 @@ import org.openslx.imagemaster.Globals;
import org.openslx.imagemaster.Globals.PropString;
import org.openslx.imagemaster.thrift.iface.FtpCredentials;
import org.openslx.imagemaster.util.RandomString;
+import org.openslx.imagemaster.util.Util;
public class MasterFtpServer implements Runnable
{
@@ -136,6 +137,9 @@ public class MasterFtpServer implements Runnable
synchronized ( users ) {
users.remove( username );
}
+ // remove his home dir
+ File dir = new File( Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username );
+ Util.deleteFolder( dir );
return true;
} catch ( FtpException e ) {
return false;