Author: jflesch
Date: 2006-07-10 15:55:18 +0000 (Mon, 10 Jul 2006)
New Revision: 9548

Modified:
   trunk/apps/Thaw/src/thaw/core/Core.java
   trunk/apps/Thaw/src/thaw/core/Logger.java
   trunk/apps/Thaw/src/thaw/core/QueueKeeper.java
   trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
   trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
   trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
   trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
   trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java
   trunk/apps/Thaw/src/thaw/i18n/thaw.properties
   trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java
   trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/KeyFileFilter.java
   trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
   trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
Log:
Fixing queue resume : Wait for being ready before sending NodeHello + Avoid 
identifier collision

Modified: trunk/apps/Thaw/src/thaw/core/Core.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Core.java     2006-07-10 14:15:57 UTC (rev 
9547)
+++ trunk/apps/Thaw/src/thaw/core/Core.java     2006-07-10 15:55:18 UTC (rev 
9548)
@@ -154,13 +154,16 @@

                        if(connection.isConnected()) {
                                queryManager.startListening();
-                               
-                               clientHello = new FCPClientHello(queryManager, 
config.getValue("thawId"));

                                queueManager = new FCPQueueManager(queryManager,
                                                                   
config.getValue("thawId"),
                                                                   (new 
Integer(config.getValue("maxSimultaneousDownloads"))).intValue(),
                                                                   (new 
Integer(config.getValue("maxSimultaneousInsertions"))).intValue());
+
+                               QueueKeeper.loadQueue(queueManager, 
"thaw.queue.xml");
+
+
+                               clientHello = new FCPClientHello(queryManager, 
config.getValue("thawId"));

                                if(!clientHello.start(null)) {
                                        new WarningWindow(this, 
I18n.getMessage("thaw.error.idAlreadyUsed"));
@@ -195,7 +198,7 @@

        public boolean restorePreviousState() {
                if(connection.isConnected()) {
-                       QueueKeeper.loadQueue(queueManager, "thaw.queue.xml");
+                       queueManager.restartNonPersistent();

                        FCPWatchGlobal watchGlobal = new FCPWatchGlobal(true);
                        watchGlobal.start(queueManager);
@@ -236,7 +239,7 @@
         */
        private void initializeLookAndFeel() { /* non static, else I can't call 
correctly Logger functions */

-               JFrame.setDefaultLookAndFeelDecorated(false); /* Don't touch my 
window decoration ! */
+               JFrame.setDefaultLookAndFeelDecorated(false); /* Don't touch my 
window decorations ! */
                JDialog.setDefaultLookAndFeelDecorated(false);

                try {

Modified: trunk/apps/Thaw/src/thaw/core/Logger.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Logger.java   2006-07-10 14:15:57 UTC (rev 
9547)
+++ trunk/apps/Thaw/src/thaw/core/Logger.java   2006-07-10 15:55:18 UTC (rev 
9548)
@@ -16,7 +16,7 @@
         * 5 = [...] + horrible things that only God could understand easily.
         *             (or maybe someone having the FCPv2 doc :)
         *
-        * 3 or more is recommanded.
+        * 2 or more is recommanded.
         * 5 is never logged in a file, only on stdout.
         */
        private final static int LOG_LEVEL = 5;

Modified: trunk/apps/Thaw/src/thaw/core/QueueKeeper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/QueueKeeper.java      2006-07-10 14:15:57 UTC 
(rev 9547)
+++ trunk/apps/Thaw/src/thaw/core/QueueKeeper.java      2006-07-10 15:55:18 UTC 
(rev 9548)
@@ -53,8 +53,6 @@
                        if(param != null && param.getNodeType() == 
Node.ELEMENT_NODE) {
                                Element paramEl = (Element)param;

-                               Logger.verbose(new QueueKeeper(), 
paramEl.getAttribute("name") + "=>" + paramEl.getAttribute("value"));
-
                                params.put(paramEl.getAttribute("name"),
                                           paramEl.getAttribute("value"));
                        }
@@ -73,9 +71,6 @@
                else
                        queueManager.addQueryToThePendingQueue(newQuery);

-               if(runningQueue && !newQuery.isPersistent() && 
!newQuery.isFinished()) /* We restart */
-                       newQuery.start(queueManager);
-
        }


@@ -181,9 +176,6 @@
        }


-       /**
-        * TODO : Queries which are persistent should not be save. They should 
be taken from the queue node.
-        */
        public static boolean saveQueue(FCPQueueManager queueManager, String 
fileName) {
                Vector runningQueue = queueManager.getRunningQueue();
                Vector[] pendingQueue = queueManager.getPendingQueues();

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-10 14:15:57 UTC 
(rev 9547)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-10 15:55:18 UTC 
(rev 9548)
@@ -37,6 +37,7 @@
        private boolean running = false;
        private boolean successful = false;

+
        /**
         * See setParameters().
         */
@@ -44,14 +45,18 @@
                this.queueManager = queueManager;
                setParameters(parameters);

-               if(progress != 100 && identifier != null && 
!identifier.equals("")) {
+               /* If isPersistent(), then start() won't be called, so must 
relisten the
+                  queryManager by ourself */
+               if(isPersistent() && identifier != null && 
!identifier.equals("")) {
                        
this.queueManager.getQueryManager().deleteObserver(this);
                        this.queueManager.getQueryManager().addObserver(this);
                }
+               
        }


        /**
+        * Only for initial queries : To resume queries, use 
FCPClientGet(FCPQueueManager, Hashmap).
         * @param persistence 0 = Forever ; 1 = Until node reboot ; 2 = Until 
the app disconnect
         */
        public FCPClientGet(String key, int priority,
@@ -78,8 +83,6 @@
                        filename = cutcut[cutcut.length-1];
                }

-               /* TODO : Check if the file was not already downloaded */
-               
                Logger.debug(this, "Getting "+key);

                status = "Waiting";
@@ -88,6 +91,7 @@

        public boolean start(FCPQueueManager queueManager) {
                running = true;
+               progress = 0;

                this.queueManager = queueManager;

@@ -137,7 +141,6 @@
                   || !message.getValue("Identifier").equals(identifier))
                        return;

-
                if(message.getMessageName().equals("DataFound")) {
                        Logger.debug(this, "DataFound!");

@@ -184,6 +187,7 @@
                        status = "Protocol Error";
                        progress = 100;
                        running = false;
+                       successful = false;

                        queueManager.getQueryManager().deleteObserver(this);

@@ -204,6 +208,7 @@
                            status = "Failed";
                            progress = 100;
                            running = false;
+                           successful = false;
                            queueManager.getQueryManager().deleteObserver(this);
                        } else {
                            status = "Retrying";
@@ -229,7 +234,7 @@

                                status = "Fetching";

-                               progress = (int)((succeeded * 100) / required);
+                               progress = (int)((succeeded * 98) / required);

                                setChanged();
                                notifyObservers();
@@ -239,9 +244,9 @@
                }

                if(message.getMessageName().equals("AllData")) {
-                       Logger.debug(this, "AllData !");
+                       Logger.debug(this, "AllData ! : " + identifier);

-                       progress = 98;
+                       progress = 99;

                        status = "Loading";

@@ -262,8 +267,8 @@
                        return;
                }

-               if(message.getMessageName().equals("PersistentGet")) {
-                       /* Should not bother us */
+               if(message.getMessageName().equals("PersistentGet")) {          
        
+                       status = "Fetching";
                        return;
                }

@@ -359,7 +364,7 @@
        }

        public boolean isFinished() {
-               if(progress >= 99)
+               if(progress >= 100)
                        return true;

                return false;
@@ -396,7 +401,9 @@
                result.put("globalQueue", ((new 
Boolean(globalQueue)).toString()));
                result.put("destinationDir", destinationDir);
                result.put("attempt", ((new Integer(attempt)).toString()));
-               result.put("status", status);
+
+               String[] cut = status.split(" ");
+               result.put("status", cut[0]);
                result.put("identifier", identifier);
                result.put("progress", ((new Integer(progress)).toString()));
                result.put("fileSize", ((new Long(fileSize)).toString()));
@@ -428,10 +435,14 @@
                running        = ((new 
Boolean((String)parameters.get("running"))).booleanValue());
                successful     = ((new 
Boolean((String)parameters.get("successful"))).booleanValue());

-               if(persistence == 2) {
+               if(persistence == 2 && !isFinished()) {
                        progress = 0;
                        status = "Waiting";
                }
+               
+               if(persistence < 2 && !isFinished() && identifier != null && 
!identifier.equals(""))
+                       status = status + " (?)";
+               

                return true;
        }
@@ -441,4 +452,11 @@
                return (persistence < 2);
        }

+
+       public String getIdentifier() {
+               if(identifier == null || identifier.equals(""))
+                       return null;
+
+               return identifier;
+       }
 }

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java    2006-07-10 14:15:57 UTC 
(rev 9547)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java    2006-07-10 15:55:18 UTC 
(rev 9548)
@@ -201,5 +201,9 @@
        public boolean isPersistent() {
                return false;
        }
+
+       public String getIdentifier() {
+               return null;
+       }
 }


Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java  2006-07-10 14:15:57 UTC (rev 
9547)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java  2006-07-10 15:55:18 UTC (rev 
9548)
@@ -5,6 +5,7 @@
 /**
  * This interface was designed for file query (insertions / downloads)
  * but it's used sometimes for other things.
+ * TODO : Simplify this interface and create an interface FCPTransferQuery 
extending this one.
  */
 public interface FCPQuery {

@@ -98,4 +99,9 @@


        public boolean isPersistent();
+
+       /**
+        * @return can be null (if non active, or meaningless).
+        */
+       public String getIdentifier();
 }

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java   2006-07-10 14:15:57 UTC 
(rev 9547)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java   2006-07-10 15:55:18 UTC 
(rev 9548)
@@ -64,15 +64,12 @@


        /**
-        * Will purge the current known queue, and reload the queue according 
to the node.
-        * Assume you have already called FCPConnection.connect().
+        * Will purge the current known queue.
         */
        public void resetQueue() {
                runningQueries = new Vector();
                for(int i = 0; i <= PRIORITY_MIN ; i++)
                        pendingQueries[i] = new Vector();
-               
-               /* TODO */
        }


@@ -115,6 +112,20 @@
        public void addQueryToTheRunningQueue(FCPQuery query, boolean 
callStart) {
                Logger.debug(this, "Adding query to the running queue ...");

+               if(!callStart) {
+                       /* It's a resumed query => We to adapt the next Id 
+                        * to avoid collisions.
+                        */
+
+                       /* FIXME (not urgent) : Find a cleaner / safer way. */
+                       String[] subId = query.getIdentifier().split("_");
+                       int id = ((new 
Integer(subId[subId.length-1])).intValue());
+                       
+                       if(id > lastId) {
+                               lastId = id;
+                       }
+               }
+
                runningQueries.add(query);

                setChanged();
@@ -132,9 +143,29 @@
         * *Doesn't* call stop() from the query.
         */
        public void moveFromRunningToPendingQueue(FCPQuery query) {
-               /* TODO */
+               remove(query);
+               addQueryToThePendingQueue(query);
        }

+
+       /**
+        * Restart non-persistent and non-finished queries being in the 
runninQueue.
+        * Usefull to restart these query when thaw just start.
+        */
+       public  void restartNonPersistent() {
+               Logger.info(this, "Restarting non persistent query");
+
+               for(Iterator queryIt = getRunningQueue().iterator() ;
+                   queryIt.hasNext();) {
+                       FCPQuery query = (FCPQuery)queryIt.next();
+
+                       if(!query.isPersistent() && !query.isFinished())
+                               query.start(this);
+               }
+
+               Logger.info(this, "Restart done.");
+                   
+       }

        public void remove(FCPQuery query) {
                runningQueries.remove(query);

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java    2006-07-10 14:15:57 UTC 
(rev 9547)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java    2006-07-10 15:55:18 UTC 
(rev 9548)
@@ -88,5 +88,7 @@
                return false;
        }

-       
+       public String getIdentifier() {
+               return null;
+       }
 }

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-10 14:15:57 UTC 
(rev 9547)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-10 15:55:18 UTC 
(rev 9548)
@@ -86,7 +86,7 @@
 thaw.plugin.priority.p5=Very low
 thaw.plugin.priority.p6=Will never finish

-thaw.plugin.fetch.keyList=Key list
+thaw.plugin.fetch.keyList=Key list (one key per line)
 thaw.plugin.fetch.loadKeyListFromFile=Load keys from file ...
 thaw.plugin.fetch.destinationDirectory=Destination directory
 thaw.plugin.fetch.chooseDestination=Choose destination ...

Modified: trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java   2006-07-10 14:15:57 UTC 
(rev 9547)
+++ trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java   2006-07-10 15:55:18 UTC 
(rev 9548)
@@ -50,7 +50,9 @@
                               String destination) {

                for(int i = 0 ; i < keys.length ; i++) {
-                       core.getQueueManager().addQueryToThePendingQueue(new 
FCPClientGet(keys[i],
+                       String[] subKey = keys[i].split("\\?"); /* Because of 
VolodyA :p */
+
+                       core.getQueueManager().addQueryToThePendingQueue(new 
FCPClientGet(subKey[0],
                                                                                
          priority,
                                                                                
          persistence,
                                                                                
          globalQueue,

Modified: trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/KeyFileFilter.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/KeyFileFilter.java     
2006-07-10 14:15:57 UTC (rev 9547)
+++ trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/KeyFileFilter.java     
2006-07-10 15:55:18 UTC (rev 9548)
@@ -44,7 +44,7 @@
                        String line = null;

                        while((line = in.readLine()) != null) {
-                               String[] pieces = 
line.split("[^-.a-zA-Z0-9,~%@/_]");
+                               String[] pieces = 
line.split("[^-\\?.a-zA-Z0-9,~%@/_]");

                                for(int i = 0 ; i < pieces.length ; i++) {
                                        if(pieces[i].matches(".{3}@.*,.*"))

Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2006-07-10 14:15:57 UTC (rev 9547)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2006-07-10 15:55:18 UTC (rev 9548)
@@ -9,6 +9,7 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.util.Vector;
+import java.util.Iterator;

 import javax.swing.table.DefaultTableCellRenderer;
 import java.awt.Color;
@@ -28,6 +29,7 @@
        private JLabel label;

        private JTable table = null;
+       private JScrollPane scrollPane = null;

        private JPanel panel;

@@ -36,7 +38,12 @@

        private int lastRowSelected = -1;

+       private boolean insertionQueue = false;
+
+
        public QueuePanel(Core core, DetailPanel detailPanel, boolean 
isForInsertionQueue) {
+               insertionQueue = isForInsertionQueue;
+
                this.core = core;
                this.detailPanel = detailPanel;

@@ -56,12 +63,21 @@
                panel.setLayout(new BorderLayout());

                panel.add(label, BorderLayout.NORTH);
-               panel.add(new JScrollPane(table), BorderLayout.CENTER);
+               scrollPane = new JScrollPane(table);
+               panel.add(scrollPane, BorderLayout.CENTER);

                table.setDefaultRenderer( table.getColumnClass(0), new 
ProgressRenderer(table, tableModel) );

                tableModel.addTableModelListener(table);
                table.addMouseListener(this);
+
+               /* If a queue is already existing, we need to add it */
+               addToTable(core.getQueueManager().getRunningQueue());
+
+               Vector[] pendingQueues = 
core.getQueueManager().getPendingQueues();
+               for(int i = 0 ; i < pendingQueues.length ; i++) {
+                       addToTable(pendingQueues[i]);
+               }
        }


@@ -115,10 +131,28 @@
                tableModel.resetTable();
        }

+
+
        public void addToTable(FCPQuery query) {
-               tableModel.addQuery(query);
+               if( (insertionQueue && query.getQueryType() == 2)
+                   || (!insertionQueue && query.getQueryType() == 1))
+                       tableModel.addQuery(query);
        }

+       /**
+        * @param queries Vector of FCPQuery only
+        */
+       public void addToTable(Vector queries) {
+               for(Iterator queryIt = queries.iterator();
+                   queryIt.hasNext();) {
+                       
+                       FCPQuery query = (FCPQuery)queryIt.next();
+
+                       addToTable(query);
+               }
+       }
+
+
        public void refresh() {
                int selected = table.getSelectedRow();


Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java  
2006-07-10 14:15:57 UTC (rev 9547)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java  
2006-07-10 15:55:18 UTC (rev 9548)
@@ -94,15 +94,8 @@
        }

        public void addQuery(FCPQuery query) {
-               JProgressBar bar;
-
                ((Observable)query).addObserver(this);

-               bar = new JProgressBar(0, 100);
-               bar.setStringPainted(true);
-               bar.setString((new 
Integer(query.getProgression())).toString()+"%");
-               bar.setValue(query.getProgression());
-
                queries.add(query);

                notifyObservers();


Reply via email to