Author: toad
Date: 2008-01-05 21:24:34 +0000 (Sat, 05 Jan 2008)
New Revision: 16922
Modified:
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
trunk/freenet/src/freenet/store/FreenetStore.java
Log:
Delete old redundant methods for fetching/storing SSK/CHK/pubkeys
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-01-05
21:19:08 UTC (rev 16921)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-01-05
21:24:34 UTC (rev 16922)
@@ -35,17 +35,8 @@
import com.sleepycat.je.log.LogFileNotFoundException;
import com.sleepycat.je.util.DbLoad;
-import freenet.crypt.CryptFormatException;
-import freenet.crypt.DSAPublicKey;
import freenet.crypt.RandomSource;
-import freenet.keys.CHKBlock;
-import freenet.keys.CHKVerifyException;
-import freenet.keys.Key;
-import freenet.keys.KeyBlock;
import freenet.keys.KeyVerifyException;
-import freenet.keys.NodeCHK;
-import freenet.keys.NodeSSK;
-import freenet.keys.SSKBlock;
import freenet.keys.SSKVerifyException;
import freenet.node.SemiOrderedShutdownHook;
import freenet.support.Fields;
@@ -98,7 +89,6 @@
private boolean closed;
private boolean reallyClosed;
- private final static byte[] dummy = new byte[0];
public static String getName(boolean isStore, short type) {
String newDBPrefix = typeName(type)+ '-' +(isStore ? "store" :
"cache")+ '-';
@@ -1237,139 +1227,6 @@
}
/**
- * Retrieve a block.
- * @param dontPromote If true, don't promote data if fetched.
- * @return null if there is no such block stored, otherwise the block.
- */
- public CHKBlock fetch(NodeCHK chk, boolean dontPromote) throws
IOException {
- assert(storeType == TYPE_CHK);
- synchronized(this) {
- if(closed)
- return null;
- }
-
- byte[] routingkey = chk.getRoutingKey();
- DatabaseEntry routingkeyDBE = new DatabaseEntry(routingkey);
- DatabaseEntry blockDBE = new DatabaseEntry();
- Cursor c = null;
- Transaction t = null;
- try {
- t = environment.beginTransaction(null,null);
- c = keysDB.openCursor(t,null);
-
- if(logMINOR) Logger.minor(this, "Fetching "+chk+"
dontPromote="+dontPromote);
- if(c.getSearchKey(routingkeyDBE,blockDBE,LockMode.RMW)
- !=OperationStatus.SUCCESS) {
- c.close();
- c = null;
- t.abort();
- t = null;
- synchronized(this) {
- misses++;
- }
- return null;
- }
-
- StoreBlock storeBlock = (StoreBlock)
storeBlockTupleBinding.entryToObject(blockDBE);
-
- CHKBlock block = null;
- try {
- byte[] header = new byte[headerBlockSize];
- byte[] data = new byte[dataBlockSize];
- try {
- synchronized(storeRAF) {
- if(logMINOR) Logger.minor(this,
"Reading data from store...");
- long seekTarget =
storeBlock.offset*(long)(dataBlockSize+headerBlockSize);
- try {
-
storeRAF.seek(seekTarget);
- } catch (IOException ioe) {
- if(seekTarget >
(2l*1024*1024*1024)) {
-
Logger.error(this, "Environment does not support files bigger than 2 GB?");
-
System.out.println("Environment does not support files bigger than 2 GB?
(exception to follow)");
- }
- Logger.error(this,
"Caught IOException on storeRAF.seek("+seekTarget+ ')');
- throw ioe;
- }
- storeRAF.readFully(header);
- storeRAF.readFully(data);
- }
- } catch (EOFException e) {
- Logger.error(this, "No block");
- c.close();
- c = null;
- keysDB.delete(t, routingkeyDBE);
- t.commit();
- t = null;
- addFreeBlock(storeBlock.offset, true,
"Data off end of store file");
- return null;
- }
-
-
- block = new CHKBlock(data,header,chk);
-
- if(!dontPromote) {
- if(logMINOR) Logger.minor(this,
"Promoting...");
- storeBlock.updateRecentlyUsed();
- DatabaseEntry updateDBE = new
DatabaseEntry();
-
storeBlockTupleBinding.objectToEntry(storeBlock, updateDBE);
- c.putCurrent(updateDBE);
- c.close();
- c = null;
- t.commit();
- t = null;
- synchronized(storeRAF) {
- lruRAF.seek(storeBlock.offset *
8);
-
lruRAF.writeLong(storeBlock.recentlyUsed);
- }
- } else {
- c.close();
- c = null;
- t.abort();
- t = null;
- }
-
- if(logMINOR) {
- Logger.minor(this, "Get key: " + chk);
- Logger.minor(this, "Headers: " +
header.length+" bytes, hash " + Fields.hashCode(header));
- Logger.minor(this, "Data: " +
data.length + " bytes, hash " + Fields.hashCode(data) + " fetching " + chk);
- }
-
- } catch(CHKVerifyException ex) {
- Logger.error(this, "CHKBlock: Does not verify
("+ex+"), setting accessTime to 0 for : "+chk);
- System.err.println("Does not verify (CHK block
"+storeBlock.offset+ ')');
- c.close();
- c = null;
- keysDB.delete(t, routingkeyDBE);
- t.commit();
- t = null;
- addFreeBlock(storeBlock.offset, true, "CHK does
not verify");
- synchronized(this) {
- misses++;
- }
- return null;
- }
- synchronized(this) {
- hits++;
- }
- return block;
- } catch(Throwable ex) { // FIXME: ugly
- if(c!=null) {
- try{c.close();}catch(DatabaseException ex2){}
- }
- if(t!=null)
- try{t.abort();}catch(DatabaseException ex2){}
- Logger.error(this, "Caught "+ex, ex);
- ex.printStackTrace();
- checkSecondaryDatabaseError(ex);
- IOException e = new IOException(ex.getMessage());
- e.initCause(ex);
- throw e;
- }
-
-// return null;
- }
-
- /**
* Retrieve a block.
* @param dontPromote If true, don't promote data to the top of the LRU
if we fetch it.
* @return null if there is no such block stored, otherwise the block.
@@ -1491,293 +1348,6 @@
}
}
- /**
- * Retrieve a block.
- * @param dontPromote If true, don't promote data if fetched.
- * @return null if there is no such block stored, otherwise the block.
- */
- public SSKBlock fetch(NodeSSK chk, boolean dontPromote) throws
IOException {
- assert(storeType == TYPE_SSK);
- synchronized(this) {
- if(closed)
- return null;
- }
-
- byte[] routingkey = chk.getRoutingKey();
- DatabaseEntry routingkeyDBE = new DatabaseEntry(routingkey);
- DatabaseEntry blockDBE = new DatabaseEntry();
- Cursor c = null;
- Transaction t = null;
- try {
- t = environment.beginTransaction(null,null);
- c = keysDB.openCursor(t,null);
-
- // Explanation of locking is in fetchPubKey.
- // Basically, locking the whole element saves us all
sorts of trouble, especially
- // since we will usually be writing here if only to
promote it.
- if(logMINOR) Logger.minor(this, "Fetching "+chk+"
dontPromote="+dontPromote);
- if(c.getSearchKey(routingkeyDBE,blockDBE,LockMode.RMW)
- !=OperationStatus.SUCCESS) {
- c.close();
- c = null;
- t.abort();
- t = null;
- synchronized(this) {
- misses++;
- }
- return null;
- }
-
- StoreBlock storeBlock = (StoreBlock)
storeBlockTupleBinding.entryToObject(blockDBE);
-
- SSKBlock block = null;
- try {
- byte[] header = new byte[headerBlockSize];
- byte[] data = new byte[dataBlockSize];
- try {
- synchronized(storeRAF) {
-
storeRAF.seek(storeBlock.offset*(long)(dataBlockSize+headerBlockSize));
- storeRAF.readFully(header);
- storeRAF.readFully(data);
- }
- } catch (EOFException e) {
- Logger.error(this, "No block");
- c.close();
- c = null;
- keysDB.delete(t, routingkeyDBE);
- t.commit();
- t = null;
- addFreeBlock(storeBlock.offset, true,
"Data off end of store file");
- return null;
- }
-
-
- block = new SSKBlock(data,header,chk, false);
-
- if(!dontPromote) {
- storeBlock.updateRecentlyUsed();
- DatabaseEntry updateDBE = new
DatabaseEntry();
-
storeBlockTupleBinding.objectToEntry(storeBlock, updateDBE);
- c.putCurrent(updateDBE);
- c.close();
- c = null;
- t.commit();
- t = null;
- synchronized(storeRAF) {
- lruRAF.seek(storeBlock.offset *
8);
-
lruRAF.writeLong(storeBlock.recentlyUsed);
- }
- } else {
- c.close();
- c = null;
- t.abort();
- t = null;
- }
-
- if(logMINOR) {
- Logger.minor(this, "Headers: " +
header.length+" bytes, hash " + Fields.hashCode(header));
- Logger.minor(this, "Data: " +
data.length + " bytes, hash " + Fields.hashCode(data) + " fetching " + chk);
- }
-
- } catch(SSKVerifyException ex) {
- Logger.normal(this, "SSKBlock: Does not verify
("+ex+"), setting accessTime to 0 for : "+chk, ex);
- keysDB.delete(t, routingkeyDBE);
- c.close();
- c = null;
- t.commit();
- t = null;
- addFreeBlock(storeBlock.offset, true, "SSK does
not verify");
- synchronized(this) {
- misses++;
- }
- return null;
- }
- synchronized(this) {
- hits++;
- }
- return block;
- } catch(Throwable ex) { // FIXME: ugly
- if(c!=null) {
- try{c.close();}catch(DatabaseException ex2){}
- }
- if(t!=null) {
- try{t.abort();}catch(DatabaseException ex2){}
- }
- checkSecondaryDatabaseError(ex);
- Logger.error(this, "Caught "+ex, ex);
- ex.printStackTrace();
- throw new IOException(ex.getMessage());
- }
-
-// return null;
- }
-
- // FIXME do this with interfaces etc.
-
- public DSAPublicKey fetchPubKey(byte[] hash, boolean dontPromote)
throws IOException {
- return fetchPubKey(hash, null, dontPromote);
- }
-
- /**
- * Retrieve a block.
- * @param dontPromote If true, don't promote data if fetched.
- * @param replacement If non-null, and the data exists but is corrupt,
replace it with this.
- * @return null if there is no such block stored, otherwise the block.
- */
- public DSAPublicKey fetchPubKey(byte[] hash, DSAPublicKey replacement,
boolean dontPromote) throws IOException {
- assert(storeType == TYPE_PUBKEY);
- synchronized(this) {
- if(closed)
- return null;
- }
-
- DatabaseEntry routingkeyDBE = new DatabaseEntry(hash);
- DatabaseEntry blockDBE = new DatabaseEntry();
- Cursor c = null;
- Transaction t = null;
- try {
- if(logMINOR) Logger.minor(this, "Fetching pubkey:
"+HexUtil.bytesToHex(hash));
- t = environment.beginTransaction(null,null);
- c = keysDB.openCursor(t,null);
-
- // Lock the records as soon as we find them.
- // RMW - nobody else may access this key until we are
finished.
- // This is advantageous as we will usually promote it
and we may replace its content;
- // if two readers accessed it at once both might try
to. Also IIRC we can deadlock
- // if we don't.
- if(c.getSearchKey(routingkeyDBE,blockDBE,LockMode.RMW)
- !=OperationStatus.SUCCESS) {
- c.close();
- c = null;
- t.abort();
- t = null;
- synchronized(this) {
- misses++;
- }
- return null;
- }
-
- StoreBlock storeBlock = (StoreBlock)
storeBlockTupleBinding.entryToObject(blockDBE);
-
- // Promote the key (we can always demote it later;
promoting it here means it shouldn't be deallocated
- // FIXME the locking/concurrency in this class is a bit
dodgy!
-
- if(!dontPromote) {
- storeBlock.updateRecentlyUsed();
- DatabaseEntry updateDBE = new DatabaseEntry();
-
storeBlockTupleBinding.objectToEntry(storeBlock, updateDBE);
- c.putCurrent(updateDBE);
- }
-
- DSAPublicKey block = null;
-
- byte[] data = new byte[dataBlockSize];
- if(logMINOR) Logger.minor(this, "Reading from store...
"+storeBlock.offset+" ("+storeBlock.recentlyUsed+ ')');
- // When will java have pread/pwrite? :(
- try {
- synchronized(storeRAF) {
-
storeRAF.seek(storeBlock.offset*(long)(dataBlockSize+headerBlockSize));
- storeRAF.readFully(data);
- }
- } catch (EOFException e) {
- Logger.error(this, "No block");
- c.close();
- c = null;
- keysDB.delete(t, routingkeyDBE);
- t.commit();
- t = null;
- addFreeBlock(storeBlock.offset, true, "Data off
end of store file");
- return null;
- }
- if(logMINOR) Logger.minor(this, "Read");
-
- try {
- block = DSAPublicKey.create(data);
- } catch (CryptFormatException e) {
- Logger.error(this, "Could not read key: "+e, e);
- finishKey(storeBlock, c, t, routingkeyDBE,
hash, replacement);
- return replacement;
- }
-
- if(!Arrays.equals(block.asBytesHash(), hash)) {
- finishKey(storeBlock, c, t, routingkeyDBE,
hash, replacement);
- synchronized(storeRAF) {
- lruRAF.seek(storeBlock.offset * 8);
-
lruRAF.writeLong(storeBlock.recentlyUsed);
- }
- return replacement;
- }
-
- // Finished, commit.
- c.close();
- c = null;
- t.commit();
- t = null;
-
- if(logMINOR) {
- Logger.minor(this, "Data: " + data.length + "
bytes, hash " + Fields.hashCode(data) + " fetching "+HexUtil.bytesToHex(hash));
- }
-
- synchronized(this) {
- hits++;
- }
- return block;
- } catch(Throwable ex) { // FIXME: ugly
- // Clean up.
- // Reports of wierd NPEs when aborting a transaction,
deal with it
- if(c!=null) {
- try {
- c.close();
- } catch(Throwable ex2) {
- Logger.error(this, "Caught "+ex2+"
closing in finally block", ex2);
- }
- }
- if(t!=null) {
- try {
- t.abort();
- } catch(Throwable ex2) {
- Logger.error(this, "Caught "+ex2+"
aborting in finally block", ex2);
- }
- }
- checkSecondaryDatabaseError(ex);
- Logger.error(this, "Caught "+ex, ex);
- ex.printStackTrace();
- throw new IOException(ex.getMessage());
- }
-
-// return null;
- }
-
- private boolean finishKey(StoreBlock storeBlock, Cursor c, Transaction
t, DatabaseEntry routingkeyDBE, byte[] hash, DSAPublicKey replacement) throws
IOException, DatabaseException {
- if(replacement != null) {
- Logger.normal(this, "Replacing corrupt DSAPublicKey
("+HexUtil.bytesToHex(hash));
- synchronized(storeRAF) {
-
storeRAF.seek(storeBlock.offset*(long)(dataBlockSize+headerBlockSize));
- byte[] toWrite = replacement.asPaddedBytes();
- storeRAF.write(toWrite);
- if(keysRAF != null) {
- keysRAF.seek(storeBlock.offset *
keyLength);
- keysRAF.write(hash);
- }
- }
- c.close();
- t.commit();
- return true;
- } else {
- Logger.error(this, "DSAPublicKey: Does not verify
(unequal hashes), setting accessTime to 0 for : "+HexUtil.bytesToHex(hash));
- c.close();
- c = null;
- keysDB.delete(t, routingkeyDBE);
- t.commit();
- t = null;
- addFreeBlock(storeBlock.offset, true, "pubkey does not
verify");
- synchronized(this) {
- misses++;
- }
- return false;
- }
- }
-
private void addFreeBlock(long offset, boolean loud, String reason) {
if(freeBlocks.push(offset)) {
if(loud) {
@@ -1791,15 +1361,6 @@
}
}
- public void put(CHKBlock b) throws IOException {
- assert(storeType == TYPE_CHK);
- NodeCHK chk = (NodeCHK) b.getKey();
- CHKBlock oldBlock = fetch(chk, false);
- if(oldBlock != null)
- return;
- innerPut(b);
- }
-
public void put(StorableBlock block, byte[] routingkey, byte[] fullKey,
byte[] data, byte[] header,
boolean overwrite) throws KeyCollisionException,
IOException {
StorableBlock oldBlock = fetch(routingkey, fullKey, false);
@@ -1817,23 +1378,6 @@
}
}
- public void put(SSKBlock b, boolean overwrite) throws IOException,
KeyCollisionException {
- assert(storeType == TYPE_SSK);
- NodeSSK ssk = (NodeSSK) b.getKey();
- SSKBlock oldBlock = fetch(ssk, false);
- if(oldBlock != null) {
- if(!b.equals(oldBlock)) {
- if(!overwrite)
- throw new KeyCollisionException();
- else {
- overwrite(b);
- }
- }
- } else {
- innerPut(b);
- }
- }
-
private boolean overwrite(StorableBlock block, byte[] routingkey,
byte[] fullKey, byte[] data, byte[] header) throws IOException {
synchronized(this) {
if(closed)
@@ -1895,75 +1439,6 @@
return true;
}
- /**
- * Overwrite an SSK with a new SSK of the same key.
- */
- private boolean overwrite(SSKBlock b) throws IOException {
- assert(storeType == TYPE_SSK);
- synchronized(this) {
- if(closed)
- return false;
- }
-
- NodeSSK chk = (NodeSSK) b.getKey();
- byte[] routingkey = chk.getRoutingKey();
- DatabaseEntry routingkeyDBE = new DatabaseEntry(routingkey);
- DatabaseEntry blockDBE = new DatabaseEntry();
- Cursor c = null;
- Transaction t = null;
- try {
- t = environment.beginTransaction(null,null);
- c = keysDB.openCursor(t,null);
-
- // Lock the record.
- if(c.getSearchKey(routingkeyDBE,blockDBE,LockMode.RMW)
- !=OperationStatus.SUCCESS) {
- c.close();
- c = null;
- t.abort();
- t = null;
- return false;
- }
-
- StoreBlock storeBlock = (StoreBlock)
storeBlockTupleBinding.entryToObject(blockDBE);
-
- byte[] header = b.getRawHeaders();
- byte[] data = b.getRawData();
- synchronized(storeRAF) {
-
storeRAF.seek(storeBlock.offset*(long)(dataBlockSize+headerBlockSize));
- storeRAF.write(header);
- storeRAF.write(data);
- if(keysRAF != null) {
- keysRAF.seek(storeBlock.offset *
keyLength);
- keysRAF.write(chk.getFullKey());
- }
- }
-
- // Unlock record.
- c.close();
- c = null;
- t.commit();
- t = null;
-
- } catch(Throwable ex) { // FIXME: ugly
- checkSecondaryDatabaseError(ex);
- Logger.error(this, "Caught "+ex, ex);
- ex.printStackTrace();
- throw new IOException(ex.getMessage());
- } finally {
- if(c!=null) {
- try{c.close();}catch(DatabaseException ex2){}
-
- }
- if(t!=null) {
- try{t.abort();}catch(DatabaseException ex2){}
- }
-
- }
-
- return true;
- }
-
private void innerPut(StorableBlock block, byte[] routingkey, byte[]
fullKey, byte[] data, byte[] header) throws IOException {
synchronized(this) {
if(closed)
@@ -2032,89 +1507,6 @@
}
}
- /**
- * Store a block.
- */
- private void innerPut(KeyBlock block) throws IOException {
- synchronized(this) {
- if(closed)
- return;
- }
-
- byte[] routingkey = block.getKey().getRoutingKey();
- byte[] fullKey = keysRAF == null ? null :
block.getKey().getFullKey();
- byte[] data = block.getRawData();
- byte[] header = block.getRawHeaders();
-
- if(data.length!=dataBlockSize) {
- Logger.error(this, "This data is "+data.length+" bytes.
Should be "+dataBlockSize);
- return;
- }
- if(header.length!=headerBlockSize) {
- Logger.error(this, "This header is "+data.length+"
bytes. Should be "+headerBlockSize);
- return;
- }
-
- Transaction t = null;
-
- try {
- t = environment.beginTransaction(null,null);
- DatabaseEntry routingkeyDBE = new
DatabaseEntry(routingkey);
-
- DatabaseEntry blockDBE = new DatabaseEntry();
-
- // Check whether it already exists
-
- if(logMINOR) Logger.minor(this, "Putting key "+block+"
- checking whether it exists first");
- OperationStatus result = keysDB.get(t, routingkeyDBE,
blockDBE, LockMode.RMW);
-
- if(result == OperationStatus.SUCCESS || result ==
OperationStatus.KEYEXIST) {
- if(logMINOR) Logger.minor(this, "Key already
exists");
- // Key already exists!
- // But is it valid?
- t.abort();
- if(fetchKey(block.getKey(), false) != null)
return; // old key was valid, we are not overwriting
- // If we are here, it was corrupt, or it was
just deleted, so we can replace it.
- if(logMINOR) Logger.minor(this, "Old key was
invalid, adding anyway");
- innerPut(block);
- return;
- } else if(result == OperationStatus.KEYEMPTY) {
- Logger.error(this, "Got KEYEMPTY - record
deleted? Shouldn't be possible with record locking...!");
- // Put it in anyway
- } else if(result == OperationStatus.NOTFOUND) {
- // Good
- } else
- throw new IllegalStateException("Unknown
operation status: "+result);
-
- writeBlock(header, data, t, routingkeyDBE, fullKey);
-
- t.commit();
- t = null;
-
- if(logMINOR) {
- Logger.minor(this, "Headers: "+header.length+"
bytes, hash "+Fields.hashCode(header));
- Logger.minor(this, "Data: "+data.length+"
bytes, hash "+Fields.hashCode(data)+" putting "+block.getKey());
- }
-
- } catch(Throwable ex) { // FIXME: ugly
- if(t!=null){
- try{t.abort();}catch(DatabaseException ex2){};
- }
- checkSecondaryDatabaseError(ex);
- Logger.error(this, "Caught "+ex, ex);
- ex.printStackTrace();
- if(ex instanceof IOException) throw (IOException) ex;
- else throw new IOException(ex.getMessage());
- }
- }
-
- private KeyBlock fetchKey(Key key, boolean b) throws IOException {
- if(key instanceof NodeCHK)
- return fetch((NodeCHK)key, b);
- else
- return fetch((NodeSSK)key, b);
- }
-
private void overwriteLRUBlock(byte[] header, byte[] data, Transaction
t, DatabaseEntry routingkeyDBE, byte[] fullKey) throws DatabaseException,
IOException {
// Overwrite an other block
Cursor c = accessTimeDB.openCursor(t,null);
@@ -2242,93 +1634,6 @@
}
}
- /**
- * Store a pubkey.
- */
- public void put(byte[] hash, DSAPublicKey key) throws IOException {
- assert(storeType == TYPE_PUBKEY);
- innerPut(hash, key);
- }
-
- /**
- * Store a block.
- */
- private void innerPut(byte[] hash, DSAPublicKey key) throws IOException
{
- synchronized(this) {
- if(closed)
- return;
- }
-
- byte[] routingkey = hash;
- byte[] data = key.asPaddedBytes();
-
- if(!(Arrays.equals(hash, key.asBytesHash()))) {
- Logger.error(this, "Invalid hash!: " +
HexUtil.bytesToHex(hash) + " : " + HexUtil.bytesToHex(key.asBytesHash()));
- }
-
- if(data.length!=dataBlockSize) {
- Logger.error(this, "This data is "+data.length+" bytes.
Should be "+dataBlockSize);
- return;
- }
-
- Transaction t = null;
-
- try {
- t = environment.beginTransaction(null,null);
- DatabaseEntry routingkeyDBE = new
DatabaseEntry(routingkey);
- DatabaseEntry blockDBE = new DatabaseEntry();
-
- // Check whether it already exists
-
- if(logMINOR) Logger.minor(this, "Putting key:
"+HexUtil.bytesToHex(hash)+" : "+key+" - checking whether it exists
already...");
- OperationStatus result = keysDB.get(t, routingkeyDBE,
blockDBE, LockMode.RMW);
-
- if(result == OperationStatus.SUCCESS || result ==
OperationStatus.KEYEXIST) {
- // Key already exists!
- // But is it valid?
- if(logMINOR)
- Logger.minor(this, "Putting
"+HexUtil.bytesToHex(hash)+" : already exists - aborting transaction");
- t.abort();
- if(logMINOR)
- Logger.minor(this, "Fetching
(replacing) key");
- if(fetchPubKey(hash, key, false) != null) {
- if(logMINOR) Logger.minor(this,
"Fetch/replace succeeded");
- return; // replaced key
- }
- if(logMINOR) Logger.minor(this, "Fetch failed
after key already exists");
- // If we are here, it was corrupt, and it got
deleted before it could be replaced.
- innerPut(hash, key);
- return;
- } else if(result == OperationStatus.KEYEMPTY) {
- Logger.error(this, "Got KEYEMPTY - record
deleted? Shouldn't be possible with record locking...!");
- // Put it in anyway
- } else if(result == OperationStatus.NOTFOUND) {
- // Good
- } else
- throw new IllegalStateException("Unknown
operation status: "+result);
-
- writeBlock(dummy, data, t, routingkeyDBE, keysRAF ==
null ? null : hash);
-
- t.commit();
- t = null;
-
- if(logMINOR) {
- Logger.minor(this, "Data: "+data.length+"
bytes, hash "+Fields.hashCode(data)+" putting "+HexUtil.bytesToHex(hash)+" :
"+key);
- }
-
- } catch(Throwable ex) { // FIXME: ugly
- Logger.error(this, "Caught "+ex, ex);
- System.err.println("Caught: "+ex);
- ex.printStackTrace();
- if(t!=null){
- try{t.abort();}catch(DatabaseException ex2){};
- }
- checkSecondaryDatabaseError(ex);
- if(ex instanceof IOException) throw (IOException) ex;
- else throw new IOException(ex.getMessage());
- }
- }
-
private void writeBlock(byte[] header, byte[] data, Transaction t,
DatabaseEntry routingkeyDBE, byte[] fullKey) throws DatabaseException,
IOException {
long blockNum;
Modified: trunk/freenet/src/freenet/store/FreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/FreenetStore.java 2008-01-05 21:19:08 UTC
(rev 16921)
+++ trunk/freenet/src/freenet/store/FreenetStore.java 2008-01-05 21:24:34 UTC
(rev 16922)
@@ -4,12 +4,6 @@
import com.sleepycat.je.DatabaseException;
-import freenet.crypt.DSAPublicKey;
-import freenet.keys.CHKBlock;
-import freenet.keys.NodeCHK;
-import freenet.keys.NodeSSK;
-import freenet.keys.SSKBlock;
-
/**
* Datastore interface
*/
@@ -24,25 +18,6 @@
*/
StorableBlock fetch(byte[] routingKey, byte[] fullKey, boolean
dontPromote) throws IOException;
- /**
- * Retrieve a block.
- * @param dontPromote If true, don't promote data if fetched.
- * @return null if there is no such block stored, otherwise the block.
- */
- public CHKBlock fetch(NodeCHK key, boolean dontPromote) throws IOException;
-
- /**
- * Retrieve a block.
- * @param dontPromote If true, don't promote data if fetched.
- * @return null if there is no such block stored, otherwise the block.
- */
- public SSKBlock fetch(NodeSSK key, boolean dontPromote) throws IOException;
-
- /**
- * Fetch a public key.
- */
- public DSAPublicKey fetchPubKey(byte[] hash, boolean dontPromote) throws
IOException;
-
/** Store a block.
* @throws KeyCollisionException If the key already exists but has
different contents.
* @param ignoreAndOverwrite If true, overwrite old content rather than
throwing a KeyCollisionException.
@@ -51,23 +26,6 @@
boolean overwrite) throws IOException, KeyCollisionException;
/**
- * Store a block.
- * @throws KeyCollisionException If the key already exists but has
different contents.
- * @param ignoreAndOverwrite If true, overwrite old content rather than
throwing a KeyCollisionException.
- */
- public void put(SSKBlock block, boolean ignoreAndOverwrite) throws
IOException, KeyCollisionException;
-
- /**
- * Store a block.
- */
- public void put(CHKBlock block) throws IOException;
-
- /**
- * Store a public key.
- */
- public void put(byte[] hash, DSAPublicKey key) throws IOException;
-
- /**
* Change the store size.
* @param maxStoreKeys The maximum number of keys to be cached.
* @param shrinkNow If false, don't shrink the store immediately.