serialize outside _cacheVersionLock

This commit is contained in:
2025-02-23 12:47:16 +01:00
parent 9b2dbe01f1
commit f1c1854e11
2 changed files with 13 additions and 4 deletions

View File

@@ -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),

View File

@@ -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);
}
}