Author: toad
Date: 2008-07-12 16:32:55 +0000 (Sat, 12 Jul 2008)
New Revision: 21107
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
branches/db4o/freenet/src/freenet/client/async/RegisterMe.java
Log:
RegisterMe support for persistent inserts
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-07-12 16:03:02 UTC (rev 21106)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-07-12 16:32:55 UTC (rev 21107)
@@ -153,13 +153,19 @@
choosenPriorityScheduler = val;
}
- public void registerInsert(final SendableRequest req, boolean
persistent) {
+ public void registerInsert(final SendableRequest req, boolean
persistent, boolean regmeOnly) {
registerInsert(req, persistent, databaseExecutor.onThread());
}
- public void registerInsert(final SendableRequest req, boolean
persistent, boolean onDatabaseThread) {
+ public void registerInsert(final SendableRequest req, boolean
persistent, boolean regmeOnly, boolean onDatabaseThread) {
if(persistent) {
if(onDatabaseThread) {
+ if(regmeOnly) {
+ RegisterMe regme = new RegisterMe(null,
null, req, req.getPriorityClass(selectorContainer), schedCore, null);
+ selectorContainer.set(regme);
+ if(logMINOR)
+ Logger.minor(this, "Added
insert RegisterMe: "+regme);
+ }
schedCore.innerRegister(req, random,
selectorContainer);
} else {
jobRunner.queue(new DBJob() {
@@ -241,7 +247,7 @@
if(registerOffThread) {
short prio =
listener.getPriorityClass(selectorContainer);
if(reg == null) {
- reg = new RegisterMe(listener, getters,
prio, schedCore, blocks);
+ reg = new RegisterMe(listener, getters,
null, prio, schedCore, blocks);
selectorContainer.set(reg);
}
final RegisterMe regme = reg;
@@ -258,7 +264,7 @@
short prio =
listener.getPriorityClass(selectorContainer);
schedCore.addPendingKeys(listener,
selectorContainer);
if(reg == null && getters != null) {
- reg = new RegisterMe(null, getters,
prio, schedCore, blocks);
+ reg = new RegisterMe(null, getters,
null, prio, schedCore, blocks);
selectorContainer.set(reg);
if(logMINOR) Logger.minor(this, "Added
regme: "+reg);
} else {
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-07-12 16:03:02 UTC (rev 21106)
+++
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-07-12 16:32:55 UTC (rev 21107)
@@ -600,6 +600,7 @@
if(logMINOR)
Logger.minor(this, "Running RegisterMe
"+reg+" for "+reg.listener+" and "+reg.getters+" : "+reg.key.addedTime+" :
"+reg.key.priority);
// Don't need to activate, fields should exist?
FIXME
+ if(reg.listener != null || reg.getters != null)
{
try {
sched.register(reg.listener,
reg.getters, false, true, true, reg.blocks, reg);
} catch (Throwable t) {
@@ -610,6 +611,10 @@
reg.getters[k].internalError(null, t, sched, container, context, true);
}
}
+ }
+ if(reg.nonGetRequest != null) {
+ sched.registerInsert(reg.nonGetRequest,
true, false);
+ }
if(System.currentTimeMillis() > deadline) break;
}
if(registerMeSet.hasNext())
Modified: branches/db4o/freenet/src/freenet/client/async/RegisterMe.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/RegisterMe.java
2008-07-12 16:03:02 UTC (rev 21106)
+++ branches/db4o/freenet/src/freenet/client/async/RegisterMe.java
2008-07-12 16:32:55 UTC (rev 21107)
@@ -3,6 +3,7 @@
import com.db4o.ObjectContainer;
import freenet.node.SendableGet;
+import freenet.node.SendableRequest;
/**
* These must be deleted once the request has been registered.
@@ -12,15 +13,17 @@
public class RegisterMe {
final GotKeyListener listener;
final SendableGet[] getters;
+ final SendableRequest nonGetRequest;
final ClientRequestSchedulerCore core;
final RegisterMeSortKey key;
private final int hashCode;
public final BlockSet blocks;
- RegisterMe(GotKeyListener listener, SendableGet[] getters, short prio,
ClientRequestSchedulerCore core, BlockSet blocks) {
+ RegisterMe(GotKeyListener listener, SendableGet[] getters,
SendableRequest nonGetRequest, short prio, ClientRequestSchedulerCore core,
BlockSet blocks) {
this.listener = listener;
this.getters = getters;
this.core = core;
+ this.nonGetRequest = nonGetRequest;
this.key = new RegisterMeSortKey(prio);
this.blocks = blocks;
int hash = core.hashCode();