Author: toad
Date: 2006-03-08 15:48:28 +0000 (Wed, 08 Mar 2006)
New Revision: 8194

Modified:
   trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
   trunk/freenet/src/freenet/client/async/BaseClientPutter.java
   trunk/freenet/src/freenet/client/async/ClientGetter.java
   trunk/freenet/src/freenet/client/async/ClientPutter.java
   trunk/freenet/src/freenet/client/async/ClientRequest.java
   trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
   trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
   trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/fcp/ClientGet.java
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
Log:
507: (mandatory)
Separate CHK- and SSK- client request load limiters.

Modified: trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
===================================================================
--- trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2006-03-08 09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2006-03-08 15:48:28 UTC (rev 8194)
@@ -94,7 +94,7 @@
                if(uri == null) throw new NullPointerException();
                FetcherContext context = getFetcherContext();
                FetchWaiter fw = new FetchWaiter();
-               ClientGetter get = new ClientGetter(fw, node.fetchScheduler, 
uri, context, priorityClass, this, null);
+               ClientGetter get = new ClientGetter(fw, node.chkFetchScheduler, 
node.sskFetchScheduler, uri, context, priorityClass, this, null);
                get.start();
                return fw.waitForCompletion();
        }
@@ -107,7 +107,7 @@
                InserterContext context = getInserterContext();
                PutWaiter pw = new PutWaiter();
                ClientPutter put = new ClientPutter(pw, insert.data, 
insert.desiredURI, insert.clientMetadata, 
-                               context, node.putScheduler, priorityClass, 
getCHKOnly, isMetadata, this);
+                               context, node.chkPutScheduler, 
node.sskPutScheduler, priorityClass, getCHKOnly, isMetadata, this);
                put.start();
                return pw.waitForCompletion();
        }
@@ -129,7 +129,7 @@
        public FreenetURI insertManifest(FreenetURI insertURI, HashMap 
bucketsByName, String defaultName) throws InserterException {
                PutWaiter pw = new PutWaiter();
                SimpleManifestPutter putter =
-                       new SimpleManifestPutter(pw, node.putScheduler, 
bucketsByName, priorityClass, insertURI, defaultName, getInserterContext(), 
false, this);
+                       new SimpleManifestPutter(pw, node.chkPutScheduler, 
node.sskPutScheduler, bucketsByName, priorityClass, insertURI, defaultName, 
getInserterContext(), false, this);
                return pw.waitForCompletion();
        }


Modified: trunk/freenet/src/freenet/client/async/BaseClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BaseClientPutter.java        
2006-03-08 09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/async/BaseClientPutter.java        
2006-03-08 15:48:28 UTC (rev 8194)
@@ -2,8 +2,8 @@

 public abstract class BaseClientPutter extends ClientRequest {

-       protected BaseClientPutter(short priorityClass, ClientRequestScheduler 
scheduler, Object context) {
-               super(priorityClass, scheduler, context);
+       protected BaseClientPutter(short priorityClass, ClientRequestScheduler 
chkScheduler, ClientRequestScheduler sskScheduler, Object context) {
+               super(priorityClass, chkScheduler, sskScheduler, context);
        }

 }

Modified: trunk/freenet/src/freenet/client/async/ClientGetter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientGetter.java    2006-03-08 
09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/async/ClientGetter.java    2006-03-08 
15:48:28 UTC (rev 8194)
@@ -41,8 +41,8 @@
         * write the data directly to the bucket, or copy it and free the 
original temporary bucket. Preferably the
         * former, obviously!
         */
-       public ClientGetter(ClientCallback client, ClientRequestScheduler 
sched, FreenetURI uri, FetcherContext ctx, short priorityClass, Object 
clientContext, Bucket returnBucket) {
-               super(priorityClass, sched, clientContext);
+       public ClientGetter(ClientCallback client, ClientRequestScheduler 
chkSched, ClientRequestScheduler sskSched, FreenetURI uri, FetcherContext ctx, 
short priorityClass, Object clientContext, Bucket returnBucket) {
+               super(priorityClass, chkSched, sskSched, clientContext);
                this.client = client;
                this.returnBucket = returnBucket;
                this.uri = uri;

Modified: trunk/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientPutter.java    2006-03-08 
09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/async/ClientPutter.java    2006-03-08 
15:48:28 UTC (rev 8194)
@@ -37,8 +37,9 @@
         * @param clientContext The client object for purposs of round-robin 
client balancing.
         */
        public ClientPutter(ClientCallback client, Bucket data, FreenetURI 
targetURI, ClientMetadata cm, InserterContext ctx,
-                       ClientRequestScheduler scheduler, short priorityClass, 
boolean getCHKOnly, boolean isMetadata, Object clientContext) {
-               super(priorityClass, scheduler, clientContext);
+                       ClientRequestScheduler chkScheduler, 
ClientRequestScheduler sskScheduler, short priorityClass, boolean getCHKOnly, 
+                       boolean isMetadata, Object clientContext) {
+               super(priorityClass, chkScheduler, sskScheduler, clientContext);
                this.cm = cm;
                this.isMetadata = isMetadata;
                this.getCHKOnly = getCHKOnly;

Modified: trunk/freenet/src/freenet/client/async/ClientRequest.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequest.java   2006-03-08 
09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/async/ClientRequest.java   2006-03-08 
15:48:28 UTC (rev 8194)
@@ -13,16 +13,18 @@
        // FIXME move the priority classes from RequestStarter here
        protected short priorityClass;
        protected boolean cancelled;
-       final ClientRequestScheduler scheduler;
+       final ClientRequestScheduler chkScheduler;
+       final ClientRequestScheduler sskScheduler;
        protected final Object client;

        public short getPriorityClass() {
                return priorityClass;
        }

-       protected ClientRequest(short priorityClass, ClientRequestScheduler 
scheduler, Object client) {
+       protected ClientRequest(short priorityClass, ClientRequestScheduler 
chkScheduler, ClientRequestScheduler sskScheduler, Object client) {
                this.priorityClass = priorityClass;
-               this.scheduler = scheduler;
+               this.chkScheduler = chkScheduler;
+               this.sskScheduler = sskScheduler;
                this.client = client;
        }


Modified: trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2006-03-08 09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2006-03-08 15:48:28 UTC (rev 8194)
@@ -24,7 +24,7 @@
        private class PutHandler extends BaseClientPutter implements 
PutCompletionCallback {

                protected PutHandler(String name, Bucket data, ClientMetadata 
cm, boolean getCHKOnly) throws InserterException {
-                       super(SimpleManifestPutter.this.getPriorityClass(), 
SimpleManifestPutter.this.scheduler, SimpleManifestPutter.this.client);
+                       super(SimpleManifestPutter.this.getPriorityClass(), 
SimpleManifestPutter.this.chkScheduler, SimpleManifestPutter.this.sskScheduler, 
SimpleManifestPutter.this.client);
                        this.name = name;
                        this.cm = cm;
                        InsertBlock block = 
@@ -157,10 +157,10 @@
        private final static String[] defaultDefaultNames =
                new String[] { "index.html", "index.htm", "default.html", 
"default.htm" };

-       public SimpleManifestPutter(ClientCallback cb, ClientRequestScheduler 
sched, 
-                       HashMap bucketsByName, short prioClass, FreenetURI 
target, 
+       public SimpleManifestPutter(ClientCallback cb, ClientRequestScheduler 
chkSched,
+                       ClientRequestScheduler sskSched, HashMap bucketsByName, 
short prioClass, FreenetURI target, 
                        String defaultName, InserterContext ctx, boolean 
getCHKOnly, Object clientContext) throws InserterException {
-               super(prioClass, sched, clientContext);
+               super(prioClass, chkSched, sskSched, clientContext);
                this.defaultName = defaultName;
                this.targetURI = target;
                this.cb = cb;

Modified: trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2006-03-08 09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2006-03-08 15:48:28 UTC (rev 8194)
@@ -12,6 +12,7 @@
 import freenet.keys.ClientCHKBlock;
 import freenet.keys.ClientKey;
 import freenet.keys.ClientKeyBlock;
+import freenet.keys.ClientSSKBlock;
 import freenet.keys.FreenetURI;
 import freenet.keys.InsertableClientSSK;
 import freenet.keys.SSKEncodeException;
@@ -159,15 +160,23 @@
                                fail(new 
InserterException(InserterException.TOO_MANY_RETRIES_IN_BLOCKS, errors, 
getURI()));
                }
                retries++;
-               parent.scheduler.register(this);
+               try {
+                       getScheduler(encode()).register(this);
+               } catch (InserterException e1) {
+                       fail(e1, true);
+               }
        }

        private void fail(InserterException e) {
+               fail(e, false);
+       }
+       
+       private void fail(InserterException e, boolean forceFatal) {
                synchronized(this) {
                        if(finished) return;
                        finished = true;
                }
-               if(e.isFatal())
+               if(e.isFatal() || forceFatal)
                        parent.fatallyFailedBlock();
                else
                        parent.failedBlock();
@@ -197,10 +206,18 @@
                        parent.completedBlock(false);
                        finished = true;
                } else {
-                       parent.scheduler.register(this);
+                       getScheduler(encode()).register(this);
                }
        }

+       private ClientRequestScheduler getScheduler(ClientKeyBlock block) {
+               if(block instanceof ClientCHKBlock)
+                       return parent.chkScheduler;
+               else if(block instanceof ClientSSKBlock)
+                       return parent.sskScheduler;
+               else throw new IllegalArgumentException();
+       }
+
        public FreenetURI getURI() {
                if(resultingURI == null)
                        getBlock();

Modified: trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileFetcher.java       
2006-03-08 09:20:38 UTC (rev 8193)
+++ trunk/freenet/src/freenet/client/async/SingleFileFetcher.java       
2006-03-08 15:48:28 UTC (rev 8194)
@@ -17,6 +17,7 @@
 import freenet.keys.ClientCHK;
 import freenet.keys.ClientKey;
 import freenet.keys.ClientKeyBlock;
+import freenet.keys.ClientSSK;
 import freenet.keys.FreenetURI;
 import freenet.keys.KeyDecodeException;
 import freenet.node.LowLevelGetException;
@@ -117,7 +118,12 @@
        public void schedule() {
                if(!dontTellClientGet)
                        this.parent.currentState = this;
-               parent.scheduler.register(this);
+               if(key instanceof ClientCHK)
+                       parent.chkScheduler.register(this);
+               else if(key instanceof ClientSSK)
+                       parent.sskScheduler.register(this);
+               else
+                       throw new IllegalStateException(String.valueOf(key));
        }

        public ClientGetter getParent() {
@@ -479,7 +485,7 @@
                                        return;
                                }
                                retryCount++;
-                               parent.scheduler.register(this);
+                               schedule();
                                return;
                        }
                }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-03-08 09:20:38 UTC (rev 
8193)
+++ trunk/freenet/src/freenet/node/Node.java    2006-03-08 15:48:28 UTC (rev 
8194)
@@ -236,13 +236,20 @@
     // Client stuff
     final ArchiveManager archiveManager;
     public final BucketFactory tempBucketFactory;
-    final RequestThrottle requestThrottle;
-    final RequestStarter requestStarter;
-    final RequestThrottle insertThrottle;
-    final RequestStarter insertStarter;
+    final RequestThrottle chkRequestThrottle;
+    final RequestStarter chkRequestStarter;
+    final RequestThrottle chkInsertThrottle;
+    final RequestStarter chkInsertStarter;
+    final RequestThrottle sskRequestThrottle;
+    final RequestStarter sskRequestStarter;
+    final RequestThrottle sskInsertThrottle;
+    final RequestStarter sskInsertStarter;
+
     File downloadDir;
-    public final ClientRequestScheduler fetchScheduler;
-    public final ClientRequestScheduler putScheduler;
+    public final ClientRequestScheduler chkFetchScheduler;
+    public final ClientRequestScheduler chkPutScheduler;
+    public final ClientRequestScheduler sskFetchScheduler;
+    public final ClientRequestScheduler sskPutScheduler;
     TextModeClientInterface tmci;
     FCPServer fcpServer;
     FproxyToadlet fproxyServlet;
@@ -840,18 +847,31 @@
         // FIXME make all the below arbitrary constants configurable!

                archiveManager = new ArchiveManager(MAX_ARCHIVE_HANDLERS, 
MAX_CACHED_ARCHIVE_DATA, MAX_ARCHIVE_SIZE, MAX_ARCHIVED_FILE_SIZE, 
MAX_CACHED_ELEMENTS, random, tempFilenameGenerator);
-               requestThrottle = new RequestThrottle(5000, 2.0F);
-               requestStarter = new RequestStarter(this, requestThrottle, 
"Request starter ("+portNumber+")");
-               fetchScheduler = new ClientRequestScheduler(false, random, 
requestStarter, this);
-               requestStarter.setScheduler(fetchScheduler);
-               requestStarter.start();
+               chkRequestThrottle = new RequestThrottle(5000, 2.0F);
+               chkRequestStarter = new RequestStarter(this, 
chkRequestThrottle, "Request starter ("+portNumber+")");
+               chkFetchScheduler = new ClientRequestScheduler(false, random, 
chkRequestStarter, this);
+               chkRequestStarter.setScheduler(chkFetchScheduler);
+               chkRequestStarter.start();
                //insertThrottle = new ChainedRequestThrottle(10000, 2.0F, 
requestThrottle);
                // FIXME reenable the above
-               insertThrottle = new RequestThrottle(10000, 2.0F);
-               insertStarter = new RequestStarter(this, insertThrottle, 
"Insert starter ("+portNumber+")");
-               putScheduler = new ClientRequestScheduler(true, random, 
insertStarter, this);
-               insertStarter.setScheduler(putScheduler);
-               insertStarter.start();
+               chkInsertThrottle = new RequestThrottle(10000, 2.0F);
+               chkInsertStarter = new RequestStarter(this, chkInsertThrottle, 
"Insert starter ("+portNumber+")");
+               chkPutScheduler = new ClientRequestScheduler(true, random, 
chkInsertStarter, this);
+               chkInsertStarter.setScheduler(chkPutScheduler);
+               chkInsertStarter.start();
+
+               sskRequestThrottle = new RequestThrottle(5000, 2.0F);
+               sskRequestStarter = new RequestStarter(this, 
sskRequestThrottle, "Request starter ("+portNumber+")");
+               sskFetchScheduler = new ClientRequestScheduler(false, random, 
sskRequestStarter, this);
+               sskRequestStarter.setScheduler(sskFetchScheduler);
+               sskRequestStarter.start();
+               //insertThrottle = new ChainedRequestThrottle(10000, 2.0F, 
requestThrottle);
+               // FIXME reenable the above
+               sskInsertThrottle = new RequestThrottle(10000, 2.0F);
+               sskInsertStarter = new RequestStarter(this, sskInsertThrottle, 
"Insert starter ("+portNumber+")");
+               sskPutScheduler = new ClientRequestScheduler(true, random, 
sskInsertStarter, this);
+               sskInsertStarter.setScheduler(sskPutScheduler);
+               sskInsertStarter.start();

                // And finally, Initialize the plugin manager
                pluginManager = new PluginManager(this);
@@ -959,7 +979,7 @@
         boolean rejectedOverload = false;
         while(true) {
                if(rs.waitUntilStatusChange() && (!rejectedOverload)) {
-                       requestThrottle.requestRejectedOverload();
+                       chkRequestThrottle.requestRejectedOverload();
                        rejectedOverload = true;
                }

@@ -971,7 +991,7 @@
                if(status == RequestSender.TIMED_OUT ||
                                status == 
RequestSender.GENERATED_REJECTED_OVERLOAD) {
                        if(!rejectedOverload) {
-                       requestThrottle.requestRejectedOverload();
+                       chkRequestThrottle.requestRejectedOverload();
                                rejectedOverload = true;
                        }
                } else {
@@ -980,7 +1000,7 @@
                                        status == RequestSender.ROUTE_NOT_FOUND 
||
                                        status == RequestSender.VERIFY_FAILURE) 
{
                                long rtt = System.currentTimeMillis() - 
startTime;
-                               requestThrottle.requestCompleted(rtt);
+                               chkRequestThrottle.requestCompleted(rtt);
                        }
                }

@@ -1049,7 +1069,7 @@
         boolean rejectedOverload = false;
         while(true) {
                if(rs.waitUntilStatusChange() && (!rejectedOverload)) {
-                       requestThrottle.requestRejectedOverload();
+                       sskRequestThrottle.requestRejectedOverload();
                        rejectedOverload = true;
                }

@@ -1061,7 +1081,7 @@
                if(status == RequestSender.TIMED_OUT ||
                                status == 
RequestSender.GENERATED_REJECTED_OVERLOAD) {
                        if(!rejectedOverload) {
-                       requestThrottle.requestRejectedOverload();
+                       sskRequestThrottle.requestRejectedOverload();
                                rejectedOverload = true;
                        }
                } else {
@@ -1070,7 +1090,7 @@
                                        status == RequestSender.ROUTE_NOT_FOUND 
||
                                        status == RequestSender.VERIFY_FAILURE) 
{
                                long rtt = System.currentTimeMillis() - 
startTime;
-                               requestThrottle.requestCompleted(rtt);
+                               sskRequestThrottle.requestCompleted(rtt);
                        }
                }

@@ -1155,7 +1175,7 @@
                }
                if((!hasForwardedRejectedOverload) && 
is.receivedRejectedOverload()) {
                        hasForwardedRejectedOverload = true;
-                       insertThrottle.requestRejectedOverload();
+                       chkInsertThrottle.requestRejectedOverload();
                }
         }

@@ -1171,7 +1191,7 @@
                }
                if(is.anyTransfersFailed() && (!hasForwardedRejectedOverload)) {
                        hasForwardedRejectedOverload = true; // not strictly 
true but same effect
-                       insertThrottle.requestRejectedOverload();
+                       chkInsertThrottle.requestRejectedOverload();
                }                       
         }

@@ -1185,7 +1205,7 @@
                        // It worked!
                        long endTime = System.currentTimeMillis();
                        long len = endTime - startTime;
-                       insertThrottle.requestCompleted(len);
+                       chkInsertThrottle.requestCompleted(len);
                }
         }

@@ -1257,7 +1277,7 @@
                }
                if((!hasForwardedRejectedOverload) && 
is.receivedRejectedOverload()) {
                        hasForwardedRejectedOverload = true;
-                       insertThrottle.requestRejectedOverload();
+                       sskInsertThrottle.requestRejectedOverload();
                }
         }

@@ -1283,7 +1303,7 @@
                        // It worked!
                        long endTime = System.currentTimeMillis();
                        long len = endTime - startTime;
-                       insertThrottle.requestCompleted(len);
+                       sskInsertThrottle.requestCompleted(len);
                }
         }

@@ -1902,13 +1922,21 @@
                }
        }

-       public RequestThrottle getRequestThrottle() {
-               return requestThrottle;
+       public RequestThrottle getCHKRequestThrottle() {
+               return chkRequestThrottle;
        }

-       public RequestThrottle getInsertThrottle() {
-               return insertThrottle;
+       public RequestThrottle getCHKInsertThrottle() {
+               return chkInsertThrottle;
        }
+       
+       public RequestThrottle getSSKRequestThrottle() {
+               return sskRequestThrottle;
+       }
+       
+       public RequestThrottle getSSKInsertThrottle() {
+               return sskInsertThrottle;
+       }

        InetAddress lastIP;


Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-03-08 09:20:38 UTC (rev 
8193)
+++ trunk/freenet/src/freenet/node/Version.java 2006-03-08 15:48:28 UTC (rev 
8194)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 506;
+       private static final int buildNumber = 507;

        /** Oldest build of Fred we will talk to */
-       private static final int lastGoodBuild = 475;
+       private static final int lastGoodBuild = 507;

        public static final int buildNumber() {
                return buildNumber;

Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-03-08 09:20:38 UTC 
(rev 8193)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-03-08 15:48:28 UTC 
(rev 8194)
@@ -129,7 +129,7 @@
                returnBucket = ret;
                if(persistenceType != PERSIST_CONNECTION)
                        client.register(this);
-               getter = new ClientGetter(this, client.node.fetchScheduler, 
uri, fctx, priorityClass, client, returnBucket);
+               getter = new ClientGetter(this, client.node.chkFetchScheduler, 
client.node.sskFetchScheduler, uri, fctx, priorityClass, client, returnBucket);
                if(persistenceType != PERSIST_CONNECTION && handler != null)
                        sendPendingMessages(handler.outputHandler, true);

@@ -202,7 +202,7 @@
                }
                returnBucket = ret;

-               getter = new ClientGetter(this, client.node.fetchScheduler, 
uri, fctx, priorityClass, client, returnBucket);
+               getter = new ClientGetter(this, client.node.chkFetchScheduler, 
client.node.sskFetchScheduler, uri, fctx, priorityClass, client, returnBucket);
                start();
        }


Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-03-08 09:20:38 UTC 
(rev 8193)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-03-08 15:48:28 UTC 
(rev 8194)
@@ -101,7 +101,7 @@
                block = new InsertBlock(message.bucket, new 
ClientMetadata(mimeType), uri);
                if(persistenceType != PERSIST_CONNECTION)
                        client.register(this);
-               inserter = new ClientPutter(this, message.bucket, uri, new 
ClientMetadata(mimeType), ctx, client.node.putScheduler, priorityClass, 
getCHKOnly, false, client);
+               inserter = new ClientPutter(this, message.bucket, uri, new 
ClientMetadata(mimeType), ctx, client.node.chkPutScheduler, 
client.node.sskPutScheduler, priorityClass, getCHKOnly, false, client);
                if(persistenceType != PERSIST_CONNECTION && handler != null)
                        sendPendingMessages(handler.outputHandler, true);
        }
@@ -158,7 +158,7 @@
                        generatedURI = new FreenetURI(genURI);
                if(finished && (!succeeded))
                        putFailedMessage = new 
PutFailedMessage(fs.subset("PutFailed"), false);
-               inserter = new ClientPutter(this, data, uri, new 
ClientMetadata(mimeType), ctx, client.node.putScheduler, priorityClass, 
getCHKOnly, false, client);
+               inserter = new ClientPutter(this, data, uri, new 
ClientMetadata(mimeType), ctx, client.node.chkPutScheduler, 
client.node.sskPutScheduler, priorityClass, getCHKOnly, false, client);
                if(!finished)
                        start();
        }


Reply via email to