Author: toad
Date: 2005-10-26 00:54:42 +0000 (Wed, 26 Oct 2005)
New Revision: 7452
Modified:
trunk/freenet/src/freenet/client/ArchiveElement.java
trunk/freenet/src/freenet/client/ArchiveManager.java
trunk/freenet/src/freenet/support/Bucket.java
Log:
More archive stuff.
Modified: trunk/freenet/src/freenet/client/ArchiveElement.java
===================================================================
--- trunk/freenet/src/freenet/client/ArchiveElement.java 2005-10-25
19:33:02 UTC (rev 7451)
+++ trunk/freenet/src/freenet/client/ArchiveElement.java 2005-10-26
00:54:42 UTC (rev 7452)
@@ -12,17 +12,15 @@
*/
public class ArchiveElement {
- ArchiveElement(ArchiveManager manager, FreenetURI uri, ClientKey ckey,
String filename, short archiveType) {
+ ArchiveElement(ArchiveManager manager, FreenetURI uri, String filename,
short archiveType) {
this.manager = manager;
this.key = uri;
- this.ckey = ckey;
this.filename = filename;
this.archiveType = archiveType;
}
final ArchiveManager manager;
final FreenetURI key;
- final ClientKey ckey;
final String filename;
final short archiveType;
Modified: trunk/freenet/src/freenet/client/ArchiveManager.java
===================================================================
--- trunk/freenet/src/freenet/client/ArchiveManager.java 2005-10-25
19:33:02 UTC (rev 7451)
+++ trunk/freenet/src/freenet/client/ArchiveManager.java 2005-10-26
00:54:42 UTC (rev 7452)
@@ -32,9 +32,11 @@
*/
public class ArchiveManager {
- ArchiveManager(int maxHandlers, long maxCachedData, long
maxArchiveSize, long maxArchivedFileSize, File cacheDir, RandomSource random) {
+ ArchiveManager(int maxHandlers, long maxCachedData, long
maxArchiveSize, long maxArchivedFileSize, int maxCachedElements, File cacheDir,
RandomSource random) {
maxArchiveHandlers = maxHandlers;
archiveHandlers = new LRUHashtable();
+ cachedElements = new LRUHashtable();
+ this.maxCachedElements = maxCachedElements;
this.maxCachedData = maxCachedData;
this.cacheDir = cacheDir;
storedData = new LRUHashtable();
@@ -65,6 +67,28 @@
return handler;
}
+ // Element cache
+
+ /** Cache of ArchiveElement's by MyKey */
+ final LRUHashtable cachedElements;
+ /** Maximum number of cached ArchiveElement's */
+ final int maxCachedElements;
+
+ public ArchiveElement makeElement(FreenetURI uri, String internalName,
short archiveType) {
+ MyKey key = new MyKey(uri, internalName);
+ synchronized(cachedElements) {
+ ArchiveElement element;
+ element = (ArchiveElement) cachedElements.get(key);
+ if(element != null) {
+ cachedElements.push(key, element);
+ return element;
+ }
+ element = new ArchiveElement(this, uri, internalName,
archiveType);
+ cachedElements.push(key, element);
+ return element;
+ }
+ }
+
// Data cache
final long maxCachedData;
@@ -90,7 +114,7 @@
public synchronized Bucket getCached(FreenetURI key, String filename) {
MyKey k = new MyKey(key, filename);
- ArchiveStoreElement ase = (ArchiveStoreElement)
storedData.get(k);
+ RealArchiveStoreItem ase = (RealArchiveStoreItem)
storedData.get(k);
// Promote to top of LRU
storedData.push(k, ase);
if(ase == null) return null;
@@ -118,14 +142,14 @@
}
}
- abstract class ArchiveElement {
+ abstract class ArchiveStoreItem {
MyKey key;
/** Expected to delete any stored data on disk, and decrement
cachedData. */
public abstract void finalize();
}
- class ArchiveStoreElement extends ArchiveElement {
+ class RealArchiveStoreItem extends ArchiveStoreItem {
boolean finalized;
File myFilename;
PaddedEncryptedBucket bucket;
@@ -137,7 +161,7 @@
* @param realName The name of the file in that archive.
* @param temp The TempStoreElement currently storing the data.
*/
- ArchiveStoreElement(FreenetURI key2, String realName,
TempStoreElement temp) {
+ RealArchiveStoreItem(FreenetURI key2, String realName,
TempStoreElement temp) {
this.key = new MyKey(key2, realName);
this.finalized = false;
this.bucket = temp.bucket;
@@ -167,11 +191,11 @@
}
}
- class ArchiveErrorElement extends ArchiveElement {
+ class ErrorArchiveStoreItem extends ArchiveStoreItem {
String error;
- public ArchiveErrorElement(FreenetURI key2, String name, String
error) {
+ public ErrorArchiveStoreItem(FreenetURI key2, String name,
String error) {
key = new MyKey(key2, name);
this.error = error;
}
@@ -256,14 +280,14 @@
}
private void addErrorElement(FreenetURI key, String name, String error)
{
- ArchiveErrorElement element = new ArchiveErrorElement(key,
name, error);
+ ErrorArchiveStoreItem element = new ErrorArchiveStoreItem(key,
name, error);
synchronized(storedData) {
storedData.push(element.key, element);
}
}
private void addStoreElement(FreenetURI key, String name,
TempStoreElement temp) {
- ArchiveStoreElement element = new ArchiveStoreElement(key,
name, temp);
+ RealArchiveStoreItem element = new RealArchiveStoreItem(key,
name, temp);
synchronized(storedData) {
storedData.push(element.key, element);
trimStoredData();
@@ -276,7 +300,7 @@
*/
private void trimStoredData() {
while(cachedData > maxCachedData) {
- ArchiveElement e = (ArchiveElement)
storedData.popValue();
+ ArchiveStoreItem e = (ArchiveStoreItem)
storedData.popValue();
e.finalize();
}
}
Modified: trunk/freenet/src/freenet/support/Bucket.java
===================================================================
--- trunk/freenet/src/freenet/support/Bucket.java 2005-10-25 19:33:02 UTC
(rev 7451)
+++ trunk/freenet/src/freenet/support/Bucket.java 2005-10-26 00:54:42 UTC
(rev 7452)
@@ -37,13 +37,13 @@
public long size();
/**
- * Convert the contents of the bucket to a byte array.
- * Don't use this unless you know the bucket is small!
+ * Is the bucket read-only?
*/
- public byte[] toByteArray();
+ public boolean isReadOnly();
+
+ /**
+ * Make the bucket read-only. Irreversible.
+ */
+ public void setReadOnly();
}
-
-
-
-
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs