Author: j16sdiz
Date: 2008-06-05 15:32:00 +0000 (Thu, 05 Jun 2008)
New Revision: 20220
Modified:
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
Log:
lock old offsets only on fetch()
Modified:
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
2008-06-05 15:31:35 UTC (rev 20219)
+++
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
2008-06-05 15:32:00 UTC (rev 20220)
@@ -119,7 +119,7 @@
configLock.readLock().lock();
try {
- boolean locked = lockPlainKey(routingKey);
+ boolean locked = lockPlainKey(routingKey, true);
if (!locked) {
if (logDEBUG)
Logger.debug(this, "cannot lock key: "
+ HexUtil.bytesToHex(routingKey) + ", shutting down?");
@@ -145,7 +145,7 @@
return null;
}
} finally {
- unlockPlainKey(routingKey);
+ unlockPlainKey(routingKey, true);
}
} finally {
configLock.readLock().unlock();
@@ -203,7 +203,7 @@
configLock.readLock().lock();
try {
- boolean locked = lockPlainKey(routingKey);
+ boolean locked = lockPlainKey(routingKey, false);
if (!locked) {
if (logDEBUG)
Logger.debug(this, "cannot lock key: "
+ HexUtil.bytesToHex(routingKey) + ", shutting down?");
@@ -259,7 +259,7 @@
writeEntry(entry, offset[0]);
writes.incrementAndGet();
} finally {
- unlockPlainKey(routingKey);
+ unlockPlainKey(routingKey, false);
}
} finally {
configLock.readLock().unlock();
@@ -1221,12 +1221,12 @@
* @param plainKey
* @return <code>true</code> if all the offsets are locked.
*/
- private boolean lockPlainKey(byte[] plainKey) {
- return lockDigestedKey(getDigestedRoutingKey(plainKey));
+ private boolean lockPlainKey(byte[] plainKey, boolean usePrevStoreSize)
{
+ return lockDigestedKey(getDigestedRoutingKey(plainKey),
usePrevStoreSize);
}
- private void unlockPlainKey(byte[] plainKey) {
- unlockDigestedKey(getDigestedRoutingKey(plainKey));
+ private void unlockPlainKey(byte[] plainKey, boolean usePrevStoreSize) {
+ unlockDigestedKey(getDigestedRoutingKey(plainKey),
usePrevStoreSize);
}
/**
@@ -1236,14 +1236,14 @@
* @param digestedKey
* @return <code>true</code> if all the offsets are locked.
*/
- private boolean lockDigestedKey(byte[] digestedKey) {
+ private boolean lockDigestedKey(byte[] digestedKey, boolean
usePrevStoreSize) {
// use a set to prevent duplicated offsets,
// a sorted set to prevent deadlocks
SortedSet<Long> offsets = new TreeSet<Long>();
long[] offsetArray = getOffsetFromDigestedKey(digestedKey,
storeSize);
for (long offset : offsetArray)
offsets.add(offset);
- if (prevStoreSize != 0) {
+ if (usePrevStoreSize && prevStoreSize != 0) {
offsetArray = getOffsetFromDigestedKey(digestedKey,
prevStoreSize);
for (long offset : offsetArray)
offsets.add(offset);
@@ -1267,13 +1267,13 @@
}
}
- private void unlockDigestedKey(byte[] digestedKey) {
+ private void unlockDigestedKey(byte[] digestedKey, boolean
usePrevStoreSize) {
// use a set to prevent duplicated offsets
SortedSet<Long> offsets = new TreeSet<Long>();
long[] offsetArray = getOffsetFromDigestedKey(digestedKey,
storeSize);
for (long offset : offsetArray)
offsets.add(offset);
- if (prevStoreSize != 0) {
+ if (usePrevStoreSize && prevStoreSize != 0) {
offsetArray = getOffsetFromDigestedKey(digestedKey,
prevStoreSize);
for (long offset : offsetArray)
offsets.add(offset);