mirror of
https://github.com/usatiuk/dhfs.git
synced 2025-10-28 20:47:49 +01:00
serialize outside _cacheVersionLock
This commit is contained in:
@@ -105,6 +105,7 @@ public class CachingObjectPersistentStore {
|
||||
}
|
||||
|
||||
public void commitTx(TxManifestObj<? extends JDataVersionedWrapper> names) {
|
||||
var serialized = delegate.prepareManifest(names);
|
||||
_cacheVersionLock.writeLock().lock();
|
||||
try {
|
||||
// During commit, readObject shouldn't be called for these items,
|
||||
@@ -120,7 +121,7 @@ public class CachingObjectPersistentStore {
|
||||
assert added;
|
||||
}
|
||||
}
|
||||
delegate.commitTx(names);
|
||||
delegate.commitTx(serialized);
|
||||
// Now, reading from the backing store should return the new data
|
||||
synchronized (_cache) {
|
||||
for (var key : Stream.concat(names.written().stream().map(Pair::getLeft),
|
||||
|
||||
@@ -70,11 +70,19 @@ public class SerializingObjectPersistentStore {
|
||||
return getIterator(IteratorStart.GE, key);
|
||||
}
|
||||
|
||||
void commitTx(TxManifestObj<? extends JDataVersionedWrapper> names) {
|
||||
delegateStore.commitTx(new TxManifestRaw(
|
||||
public TxManifestRaw prepareManifest(TxManifestObj<? extends JDataVersionedWrapper> names) {
|
||||
return new TxManifestRaw(
|
||||
names.written().stream()
|
||||
.map(e -> Pair.of(e.getKey(), serializer.serialize(e.getValue())))
|
||||
.toList()
|
||||
, names.deleted()));
|
||||
, names.deleted());
|
||||
}
|
||||
|
||||
void commitTx(TxManifestObj<? extends JDataVersionedWrapper> names) {
|
||||
delegateStore.commitTx(prepareManifest(names));
|
||||
}
|
||||
|
||||
void commitTx(TxManifestRaw names) {
|
||||
delegateStore.commitTx(names);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user