Author: toad
Date: 2009-03-27 14:00:36 +0000 (Fri, 27 Mar 2009)
New Revision: 26230

Modified:
   branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java
   branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
Log:
Activation, logging, succeed anyway when have HorribleEvilBug if return bucket 
is disk based...


Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java   2009-03-27 
13:51:19 UTC (rev 26229)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java   2009-03-27 
14:00:36 UTC (rev 26230)
@@ -376,12 +376,16 @@
                                        failed = false;
                                }
                        }
+                       if(failed && persistenceType == PERSIST_FOREVER) {
+                               if(container.ext().getID(returnBucket) == 
container.ext().getID(data))
+                                       Logger.error(this, "DB4O BUG DETECTED 
WITHOUT ARRAY HANDLING! EVIL HORRIBLE BUG! 
UID(returnBucket)="+container.ext().getID(returnBucket)+" for "+returnBucket+" 
active="+container.ext().isActive(returnBucket)+" stored = 
"+container.ext().isStored(returnBucket)+" but 
UID(data)="+container.ext().getID(data)+" for "+data+" active = 
"+container.ext().isActive(data)+" stored = "+container.ext().isStored(data));
+                               if(returnType == 
ClientGetMessage.RETURN_TYPE_DISK) {
+                                       Logger.error(this, "Succeeding anyway 
as the data should be on disk...");
+                                       failed = false;
+                               }
+                       }
                        if(failed) {
                                Logger.error(this, "returnBucket = 
"+returnBucket+" but onSuccess() data = "+data, new Exception("debug"));
-                               if(persistenceType == PERSIST_FOREVER) {
-                                       if(container.ext().getID(returnBucket) 
== container.ext().getID(data))
-                                               Logger.error(this, "DB4O BUG 
DETECTED WITHOUT ARRAY HANDLING! EVIL HORRIBLE BUG! 
UID(returnBucket)="+container.ext().getID(returnBucket)+" for "+returnBucket+" 
but UID(data)="+container.ext().getID(data)+" for "+data);
-                               }
                                // Caller guarantees that data == returnBucket
                                onFailure(new 
FetchException(FetchException.INTERNAL_ERROR, "Data != returnBucket"), null, 
container);
                                return;
@@ -879,13 +883,16 @@
         * @return The data in a {...@link Bucket}, or <code>null</code> if this
         *         isn&rsquo;t applicable
         */
-       public Bucket getBucket() {
+       public Bucket getBucket(ObjectContainer container) {
                synchronized(this) {
                        if(targetFile != null) {
-                               if(succeeded || tempFile == null)
+                               if(succeeded || tempFile == null) {
+                                       if(persistenceType == PERSIST_FOREVER) 
container.activate(targetFile, 5);
                                        return new FileBucket(targetFile, 
false, true, false, false, false);
-                               else
+                               } else {
+                                       if(persistenceType == PERSIST_FOREVER) 
container.activate(tempFile, 5);
                                        return new FileBucket(tempFile, false, 
true, false, false, false);
+                               }
                        } else return returnBucket;
                }
        }

Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2009-03-27 
13:51:19 UTC (rev 26229)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2009-03-27 
14:00:36 UTC (rev 26230)
@@ -1091,7 +1091,7 @@
                ClientGet get = globalRebootClient.getCompletedRequest(key, 
null);
                if(get != null) {
                        // FIXME race condition with free() - arrange 
refcounting for the data to prevent this
-                       return new TempFetchResult(new 
ClientMetadata(get.getMIMEType(null)), get.getBucket(), false);
+                       return new TempFetchResult(new 
ClientMetadata(get.getMIMEType(null)), get.getBucket(null), false);
                }
                
                class OutputWrapper {
@@ -1109,7 +1109,7 @@
                                        ClientGet get = 
globalForeverClient.getCompletedRequest(key, container);
                                        container.activate(get, 1);
                                        if(get != null) {
-                                               Bucket origData = 
get.getBucket();
+                                               Bucket origData = 
get.getBucket(container);
                                                container.activate(origData, 5);
                                                boolean copied = false;
                                                Bucket newData;

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

Reply via email to