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