Author: toad
Date: 2009-03-21 00:27:55 +0000 (Sat, 21 Mar 2009)
New Revision: 26132

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientPutter.java
   branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
   branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
   branches/db4o/freenet/src/freenet/keys/FreenetURI.java
   branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java
Log:
Never store EMPTY_CHK_URI to database


Modified: branches/db4o/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientPutter.java    
2009-03-20 23:19:56 UTC (rev 26131)
+++ branches/db4o/freenet/src/freenet/client/async/ClientPutter.java    
2009-03-21 00:27:55 UTC (rev 26132)
@@ -100,11 +100,13 @@
                                if(currentState != null) return false;
                                cancel = this.cancelled;
                                if(!cancel) {
-                                       if(!binaryBlob)
+                                       if(!binaryBlob) {
+                                               ClientMetadata meta = cm;
+                                               if(meta != null) meta = 
persistent() ? meta.clone() : meta; 
                                                currentState =
-                                                       new 
SingleFileInserter(this, this, new InsertBlock(data, persistent() ? cm.clone() 
: cm, persistent() ? targetURI.clone() : targetURI), isMetadata, ctx, 
+                                                       new 
SingleFileInserter(this, this, new InsertBlock(data, meta, persistent() ? 
targetURI.clone() : targetURI), isMetadata, ctx, 
                                                                        false, 
getCHKOnly, false, null, null, false, targetFilename, earlyEncode);
-                                       else
+                                       } else
                                                currentState =
                                                        new 
BinaryBlobInserter(data, this, null, false, priorityClass, ctx, context, 
container);
                                }
@@ -359,8 +361,7 @@
                container.activate(ctx, 1);
                ctx.removeFrom(container);
                container.activate(targetURI, 5);
-               if(targetURI != FreenetURI.EMPTY_CHK_URI)
-                       targetURI.removeFrom(container);
+               targetURI.removeFrom(container);
                if(uri != null) {
                        container.activate(uri, 5);
                        uri.removeFrom(container);

Modified: 
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2009-03-20 23:19:56 UTC (rev 26131)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2009-03-21 00:27:55 UTC (rev 26132)
@@ -60,7 +60,7 @@
                        this.cm = cm;
                        this.data = data;
                        InsertBlock block = 
-                               new InsertBlock(data, cm, 
FreenetURI.EMPTY_CHK_URI);
+                               new InsertBlock(data, cm, persistent() ? 
FreenetURI.EMPTY_CHK_URI.clone() : FreenetURI.EMPTY_CHK_URI);
                        this.origSFI =
                                new SingleFileInserter(this, this, block, 
false, ctx, false, getCHKOnly, true, null, null, true, null, earlyEncode);
                        metadata = null;
@@ -402,7 +402,11 @@
                
                @Override
                public void notifyClients(ObjectContainer container, 
ClientContext context) {
-                       // FIXME generate per-filename events???
+                       if(persistent)
+                               container.activate(SimpleManifestPutter.this, 
1);
+                       SimpleManifestPutter.this.notifyClients(container, 
context);
+                       if(persistent)
+                               container.deactivate(SimpleManifestPutter.this, 
1);
                }
 
                public void onBlockSetFinished(ClientPutState state, 
ObjectContainer container, ClientContext context) {
@@ -469,8 +473,8 @@
                        }
                        if(oldState != null) {
                                Logger.error(this, "currentState is set in 
removeFrom() on "+this+" for "+SimpleManifestPutter.this);
-                               currentState.cancel(container, context);
-                               currentState.removeFrom(container, context);
+                               oldState.cancel(container, context);
+                               oldState.removeFrom(container, context);
                        }
                        if(cm != null) {
                                cm.removeFrom(container);
@@ -815,6 +819,7 @@
                                // Can we just insert it, and not bother with a 
redirect to it?
                                // Thereby exploiting implicit manifest 
support, which will pick up on .metadata??
                                // We ought to be able to !!
+                               if(persistent()) container.activate(targetURI, 
5);
                                block = new InsertBlock(outputBucket, new 
ClientMetadata(mimeType), persistent() ? targetURI.clone() : targetURI);
                                isMetadata = false;
                                insertAsArchiveManifest = true;
@@ -969,7 +974,7 @@
                        try {
                                Bucket b = 
m.toBucket(context.getBucketFactory(persistent()));
                                
-                               InsertBlock ib = new InsertBlock(b, null, 
FreenetURI.EMPTY_CHK_URI);
+                               InsertBlock ib = new InsertBlock(b, null, 
persistent() ? FreenetURI.EMPTY_CHK_URI.clone() : FreenetURI.EMPTY_CHK_URI);
                                SingleFileInserter metadataInserter = 
                                        new SingleFileInserter(this, this, ib, 
true, ctx, false, getCHKOnly, false, m, null, true, null, earlyEncode);
                                if(logMINOR) Logger.minor(this, "Inserting 
subsidiary metadata: "+metadataInserter+" for "+m);
@@ -1227,7 +1232,9 @@
                boolean fin = false;
                ClientPutState oldState;
                synchronized(this) {
-                       oldState = 
metadataPuttersByMetadata.remove(state.getToken());
+                       Metadata token = (Metadata) state.getToken();
+                       container.activate(token, 1);
+                       oldState = metadataPuttersByMetadata.remove(token);
                        if(!metadataPuttersByMetadata.isEmpty()) {
                                if(logMINOR) Logger.minor(this, "Still running 
metadata putters: "+metadataPuttersByMetadata.size());
                        } else {
@@ -1517,10 +1524,8 @@
                        Logger.error(this, "Put handlers list still present in 
removeFrom() on "+this);
                        removePutHandlers(container, context);
                }
-               if(finalURI != FreenetURI.EMPTY_CHK_URI)
-                       finalURI.removeFrom(container);
-               if(targetURI != FreenetURI.EMPTY_CHK_URI)
-                       targetURI.removeFrom(container);
+               finalURI.removeFrom(container);
+               targetURI.removeFrom(container);
                container.activate(ctx, 1);
                ctx.removeFrom(container);
                container.activate(metadataPuttersByMetadata, 2);

Modified: 
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java     
2009-03-20 23:19:56 UTC (rev 26131)
+++ branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java     
2009-03-21 00:27:55 UTC (rev 26132)
@@ -597,8 +597,7 @@
                        if(persistent) {
                                if(deactivateBucket)
                                        container.deactivate(sourceData, 1);
-                               if(uri != FreenetURI.EMPTY_CHK_URI)
-                                       container.deactivate(uri, 1);
+                               container.deactivate(uri, 1);
                        }
                        return new BlockItem(this, data, isMetadata, 
compressionCodec, sourceLength, u, hashCode(), persistent);
                } catch (IOException e) {
@@ -686,8 +685,7 @@
                if(logMINOR) Logger.minor(this, "removeFrom() on "+this);
                // FIXME remove sourceData ???
                container.activate(uri, 5);
-               if(uri != FreenetURI.EMPTY_CHK_URI)
-                       uri.removeFrom(container);
+               uri.removeFrom(container);
                if(resultingURI != null) {
                        container.activate(resultingURI, 5);
                        resultingURI.removeFrom(container);

Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2009-03-20 23:19:56 UTC (rev 26131)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2009-03-21 00:27:55 UTC (rev 26132)
@@ -397,7 +397,9 @@
                        
                        if(!missingURIs) {
                                // Create Metadata
-                               m = new Metadata(splitfileAlgorithm, dataURIs, 
checkURIs, segmentSize, checkSegmentSize, persistent ? cm.clone() : cm, 
dataLength, archiveType, compressionCodec, decompressedLength, isMetadata);
+                               ClientMetadata meta = cm;
+                               if(persistent) meta = meta == null ? null : 
meta.clone();
+                               m = new Metadata(splitfileAlgorithm, dataURIs, 
checkURIs, segmentSize, checkSegmentSize, meta, dataLength, archiveType, 
compressionCodec, decompressedLength, isMetadata);
                        }
                        haveSentMetadata = true;
                }

Modified: branches/db4o/freenet/src/freenet/keys/FreenetURI.java
===================================================================
--- branches/db4o/freenet/src/freenet/keys/FreenetURI.java      2009-03-20 
23:19:56 UTC (rev 26131)
+++ branches/db4o/freenet/src/freenet/keys/FreenetURI.java      2009-03-21 
00:27:55 UTC (rev 26132)
@@ -886,6 +886,13 @@
                // All members are inline (arrays, ints etc), treated as 
values, so we can happily just call delete(this).
                container.delete(this);
        }
+       
+       public boolean objectCanNew(ObjectContainer container) {
+               if(this == FreenetURI.EMPTY_CHK_URI) {
+                       throw new RuntimeException("Storing static CHK@ to 
database - can't remove it!");
+               }
+               return true;
+       }
 
        public boolean isUSK() {
                return "USK".equals(keyType);

Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java   2009-03-20 
23:19:56 UTC (rev 26131)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientPut.java   2009-03-21 
00:27:55 UTC (rev 26132)
@@ -538,7 +538,7 @@
                                container.delete(origFilename);
                        }
                        // clientMetadata will be deleted by putter
-                       if(targetURI != null && targetURI != 
FreenetURI.EMPTY_CHK_URI) {
+                       if(targetURI != null) {
                                container.activate(targetURI, 5);
                                targetURI.removeFrom(container);
                        }

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

Reply via email to