Author: zothar
Date: 2006-11-19 19:44:39 +0000 (Sun, 19 Nov 2006)
New Revision: 11014

Modified:
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Bug 891: Remove a peer's extra-peer-data directory when removing the peer from 
the node.

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2006-11-19 18:19:19 UTC 
(rev 11013)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2006-11-19 19:44:39 UTC 
(rev 11014)
@@ -161,6 +161,7 @@
         if(peerNodePreviousRoutingBackoffReason != null) {
                
node.removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason, 
pn);
         }
+        pn.removeExtraPeerDataDir();
         if(!isInPeers) return false;

         // removing from connectedPeers

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-11-19 18:19:19 UTC 
(rev 11013)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-11-19 19:44:39 UTC 
(rev 11014)
@@ -2798,6 +2798,27 @@
                extraPeerDataFile.delete();
        }

+       public void removeExtraPeerDataDir() {
+               String extraPeerDataDirPath = node.getExtraPeerDataDir();
+               File extraPeerDataPeerDir = new 
File(extraPeerDataDirPath+File.separator+getIdentityString());
+               if(!extraPeerDataPeerDir.exists()) {
+                       Logger.error(this, "Extra peer data directory for peer 
does not exist: "+extraPeerDataPeerDir.getPath());
+                       return;
+               }
+               if(!extraPeerDataPeerDir.isDirectory()) {
+                       Logger.error(this, "Extra peer data directory for peer 
not a directory: "+extraPeerDataPeerDir.getPath());
+                       return;
+               }
+               Integer[] localFileNumbers = null;
+               synchronized(extraPeerDataFileNumbers) {
+                       localFileNumbers = (Integer[]) 
extraPeerDataFileNumbers.toArray(new Integer[extraPeerDataFileNumbers.size()]);
+               }
+               for (int i = 0; i < localFileNumbers.length; i++) {
+                       deleteExtraPeerDataFile(localFileNumbers[i].intValue());
+               }
+               extraPeerDataPeerDir.delete();
+       }
+
        public boolean rewriteExtraPeerDataFile(SimpleFieldSet fs, int 
extraPeerDataType, int fileNumber) {
                String extraPeerDataDirPath = node.getExtraPeerDataDir();
                if(extraPeerDataType > 0)


Reply via email to