diff options
author | Nils Schwabe | 2014-05-07 15:23:26 +0200 |
---|---|---|
committer | Nils Schwabe | 2014-05-07 15:23:26 +0200 |
commit | b02181e54011a01df82e4450ae884ebca920a300 (patch) | |
tree | 4ed9deb319f6ab2bacaac4cf7333919320949e2c /src/main/java/org/openslx/imagemaster/ftp | |
parent | Fix message signing (diff) | |
download | masterserver-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')
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; |