Author: toad
Date: 2009-03-13 21:13:18 +0000 (Fri, 13 Mar 2009)
New Revision: 26030

Modified:
   branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java
   branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
Log:
Make completedUnackedRequests and runningPersistentRequests Vector's, NOT 
Db4oList's.
Make sure that toStart contents are removed from the database and simplify 
finishStart() (starting migrated persistent requests)


Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java   2009-03-13 
21:10:42 UTC (rev 26029)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java   2009-03-13 
21:13:18 UTC (rev 26030)
@@ -37,10 +37,8 @@
                this.currentConnection = handler;
                final boolean forever = (persistenceType == 
ClientRequest.PERSIST_FOREVER);
                if(forever) {
-                       runningPersistentRequests = 
container.ext().collections().newLinkedList();
-                       
((Db4oList)runningPersistentRequests).activationDepth(1);
-                       completedUnackedRequests = 
container.ext().collections().newLinkedList();
-                       ((Db4oList)completedUnackedRequests).activationDepth(1);
+                       runningPersistentRequests = new Vector();
+                       completedUnackedRequests = new Vector();
                        clientRequestsByIdentifier = 
container.ext().collections().newHashMap(10);
                        
((Db4oMap)clientRequestsByIdentifier).activationDepth(1);
                } else {
@@ -124,6 +122,11 @@
                synchronized(this) {
                        if(runningPersistentRequests.remove(get)) {
                                completedUnackedRequests.add(get);
+                               if(container != null) {
+                                       container.store(get);
+                                       
container.ext().store(runningPersistentRequests, 1);
+                                       
container.ext().store(completedUnackedRequests, 1);
+                               }
                        }       
                }
        }
@@ -176,9 +179,18 @@
                                throw new IdentifierCollisionException();
                        if(cg.hasFinished()) {
                                completedUnackedRequests.add(cg);
+                               if(container != null) {
+                                       container.store(cg);
+                                       
container.ext().store(completedUnackedRequests, 1);
+                               }
                        } else {
                                runningPersistentRequests.add(cg);
                                if(startLater) toStart.add(cg);
+                               if(container != null) {
+                                       container.store(cg);
+                                       
container.ext().store(runningPersistentRequests, 1);
+                                       if(startLater) 
container.ext().store(toStart, 1);
+                               }
                        }
                        clientRequestsByIdentifier.put(ident, cg);
                }
@@ -191,13 +203,20 @@
                if(logMINOR) Logger.minor(this, 
"removeByIdentifier("+identifier+ ',' +kill+ ')');
                synchronized(this) {
                        req = clientRequestsByIdentifier.get(identifier);
+                       boolean removedFromRunning;
                        if(req == null)
                                return false;
-                       else if(!(runningPersistentRequests.remove(req) || 
completedUnackedRequests.remove(req))) {
+                       else if(!((removedFromRunning = 
runningPersistentRequests.remove(req)) || 
completedUnackedRequests.remove(req))) {
                                Logger.error(this, "Removing "+identifier+": in 
clientRequestsByIdentifier but not in running/completed maps!");
+                               
                                return false;
                        }
                        clientRequestsByIdentifier.remove(identifier);
+                       if(container != null) {
+                               if(removedFromRunning) 
container.ext().store(runningPersistentRequests, 1);
+                               else 
container.ext().store(completedUnackedRequests, 1);
+                               
container.ext().store(clientRequestsByIdentifier);
+                       }
                }
                if(kill) {
                        if(logMINOR) Logger.minor(this, "Killing request "+req);
@@ -230,9 +249,15 @@
                        Iterator<ClientRequest> i = 
runningPersistentRequests.iterator();
                        while(i.hasNext()) {
                                ClientRequest req = i.next();
+                               if(container != null) container.activate(req, 
1);
                                if(req.isPersistentForever() || !onlyForever)
                                        v.add(req);
                        }
+                       if(container != null) {
+                               for(ClientRequest req : 
completedUnackedRequests) {
+                                       container.activate(req, 1);
+                               }
+                       }
                        v.addAll(completedUnackedRequests);
                }
        }
@@ -328,23 +353,19 @@
        /**
         * Start all delayed-start requests.
         */
-       public void finishStart(DBJobRunner runner) {
+       public void finishStart(ObjectContainer container, ClientContext 
context) {
                ClientRequest[] reqs;
                synchronized(this) {
                        reqs = (ClientRequest[]) toStart.toArray(new 
ClientRequest[toStart.size()]);
                        toStart.clear();
+                       container.store(toStart);
                }
                for(int i=0;i<reqs.length;i++) {
+                       System.err.println("Starting migrated request "+i+" of 
"+reqs.length);
                        final ClientRequest req = reqs[i];
-                       runner.queue(new DBJob() {
-
-                               public void run(ObjectContainer container, 
ClientContext context) {
-                                       container.activate(req, 1);
-                                       req.start(container, context);
-                                       container.deactivate(req, 1);
-                               }
-                               
-                       }, NativeThread.HIGH_PRIORITY + reqs[i].getPriority(), 
false);
+                       container.activate(req, 1);
+                       req.start(container, context);
+                       container.deactivate(req, 1);
                }
        }
        
@@ -433,10 +454,13 @@
                        ClientRequest req = (ClientRequest) 
completedUnackedRequests.get(i);
                        if(!(req instanceof ClientGet)) continue;
                        ClientGet getter = (ClientGet) req;
+                       if(persistenceType == ClientRequest.PERSIST_FOREVER)
+                               container.activate(getter, 1);
                        if(getter.getURI(container).equals(key)) {
+                               return getter;
+                       } else {
                                if(persistenceType == 
ClientRequest.PERSIST_FOREVER)
-                                       container.activate(getter, 1);
-                               return getter;
+                                       container.deactivate(getter, 1);
                        }
                }
                return null;
@@ -447,8 +471,6 @@
                container.activate(completedUnackedRequests, 1);
                container.activate(clientRequestsByIdentifier, 1);
                container.activate(lowLevelClient, 1);
-               ((Db4oList)runningPersistentRequests).activationDepth(1);
-               ((Db4oList)completedUnackedRequests).activationDepth(1);
                ((Db4oMap)clientRequestsByIdentifier).activationDepth(1);
        }
 

Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2009-03-13 
21:10:42 UTC (rev 26029)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2009-03-13 
21:13:18 UTC (rev 26030)
@@ -897,15 +897,31 @@
         * some time to start them.
         */
        public void finishStart() {
-               
this.globalForeverClient.finishStart(node.clientCore.clientContext.jobRunner);
+               node.clientCore.clientContext.jobRunner.queue(new DBJob() {
+
+                       public void run(ObjectContainer container, 
ClientContext context) {
+                               globalForeverClient.finishStart(container, 
context);
+                       }
+                       
+               }, NativeThread.HIGH_PRIORITY-1, false);
                
-               FCPClient[] clients;
+               final FCPClient[] clients;
                synchronized(this) {
                        clients = rebootClientsByName.values().toArray(new 
FCPClient[rebootClientsByName.size()]);
                }
                
-               for (FCPClient client : clients) {
-                       
client.finishStart(node.clientCore.clientContext.jobRunner);
+               if(clients.length > 0) {
+                       node.clientCore.clientContext.jobRunner.queue(new 
DBJob() {
+
+                               public void run(ObjectContainer container, 
ClientContext context) {
+                                       for (FCPClient client : clients) {
+                                               container.activate(client, 1);
+                                               System.err.println("Migrating 
client "+client.name);
+                                               client.finishStart(container, 
context);
+                                       }
+                               }
+                               
+                       }, NativeThread.HIGH_PRIORITY-1, false);
                }
                
                if(enablePersistentDownloads) {

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to