Server: don't freeze objects that have PushResolution

everything is canDelete now
This commit is contained in:
2024-10-13 17:13:12 +02:00
parent 2a396de432
commit f9042721f0
7 changed files with 12 additions and 14 deletions

View File

@@ -93,7 +93,7 @@ public class KleppmannTree<TimestampT extends Comparable<TimestampT>, PeerIdT ex
node.rwLock();
try {
curParent.getNode().getChildren().remove(node.getNode().getMeta().getName());
node.lock();
node.freeze();
node.getNode().setParent(null);
node.getNode().setLastEffectiveOp(null);
node.notifyRmRef(curParent.getNode().getId());
@@ -274,7 +274,7 @@ public class KleppmannTree<TimestampT extends Comparable<TimestampT>, PeerIdT ex
if (!_undoCtx.isEmpty()) {
for (var e : _undoCtx.entrySet()) {
LOGGER.log(Level.FINE, "Dropping node " + e.getKey());
e.getValue().unlock();
e.getValue().unfreeze();
_storage.removeNode(e.getKey());
}
}
@@ -328,7 +328,7 @@ public class KleppmannTree<TimestampT extends Comparable<TimestampT>, PeerIdT ex
node.getNode().setParent(desired.getParent());
node.notifyRef(desired.getParent());
node.getNode().setMeta(desired.getMeta());
node.unlock();
node.unfreeze();
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error while fixing up node " + desired.getId(), e);
node.rwUnlock();

View File

@@ -9,9 +9,9 @@ public interface TreeNodeWrapper<TimestampT extends Comparable<TimestampT>, Peer
void rwUnlock();
void lock();
void freeze();
void unlock();
void unfreeze();
void notifyRef(NodeIdT id);

View File

@@ -26,12 +26,12 @@ public class TestNodeWrapper implements TreeNodeWrapper<Long, Long, TestNodeMeta
}
@Override
public void lock() {
public void freeze() {
}
@Override
public void unlock() {
public void unfreeze() {
}

View File

@@ -36,7 +36,7 @@ public class JKleppmannTreeNodeWrapper implements TreeNodeWrapper<Long, UUID, JK
}
@Override
public void lock() {
public void freeze() {
_backing.runWriteLocked(JObjectManager.ResolutionStrategy.NO_RESOLUTION, (m, d, b, v) -> {
m.freeze();
return null;
@@ -44,7 +44,7 @@ public class JKleppmannTreeNodeWrapper implements TreeNodeWrapper<Long, UUID, JK
}
@Override
public void unlock() {
public void unfreeze() {
_backing.runWriteLocked(JObjectManager.ResolutionStrategy.NO_RESOLUTION, (m, d, b, v) -> {
m.unfreeze();
return null;

View File

@@ -455,8 +455,6 @@ public class JObjectManagerImpl implements JObjectManager {
_metaPart.narrowClass(data.getClass());
_dataPart.set((T) data);
_metaPart.setHaveLocalCopy(true);
if (!_metaPart.isFrozen())
_metaPart.freeze();
hydrateRefs();
}

View File

@@ -26,7 +26,7 @@ public class ObjectMetadataSerializer implements ProtoSerializer<ObjectMetadataP
.addAllReferrers(object.getReferrers())
.putAllChangelog(object.getChangelog().entrySet().stream().collect(Collectors.toMap(e -> e.getKey().toString(), Map.Entry::getValue)))
.addAllSavedRefs(object.getSavedRefs() != null ? object.getSavedRefs() : Collections.emptyList())
.setLocked(object.isFrozen())
.setFrozen(object.isFrozen())
.setHaveLocalCopy(object.isHaveLocalCopy())
.build();
}
@@ -47,7 +47,7 @@ public class ObjectMetadataSerializer implements ProtoSerializer<ObjectMetadataP
obj.getChangelog().putAll(message.getChangelogMap().entrySet().stream().collect(Collectors.toMap(e -> UUID.fromString(e.getKey()), Map.Entry::getValue)));
if (message.getSavedRefsCount() > 0)
obj.setSavedRefs(new LinkedHashSet<>(message.getSavedRefsList()));
if (message.getLocked())
if (message.getFrozen())
obj.freeze();
if (message.getHaveLocalCopy())
obj.setHaveLocalCopy(true);

View File

@@ -16,7 +16,7 @@ message ObjectMetadataP {
repeated string referrers = 7;
map<string, int64> changelog = 8;
repeated string savedRefs = 9;
bool locked = 10;
bool frozen = 10;
bool haveLocalCopy = 11;
}