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();


Reply via email to