// modify the repository-info document to force an upgrade on the next restart
changeLastUpgradeId(repository, Upgrades.ModeShape_3_6_0.INSTANCE.getId() - 1);
// create a non-session lock on a node
JcrSession session = repository.login();
PropertyFactory propertyFactory = session.context().getPropertyFactory();
AbstractJcrNode node = session.getRootNode().addNode("/test");
node.addMixin("mix:lockable");
session.save();
session.lockManager().lock(node, true, false, Long.MAX_VALUE, null);
// manipulate that lock using the system cache to simulate corrupt data
SessionCache systemSession = repository.createSystemSession(repository.runningState().context(), false);
SystemContent systemContent = new SystemContent(systemSession);
ChildReferences childReferences = systemContent.locksNode().getChildReferences(systemSession);
assertFalse("No locks found", childReferences.isEmpty());
for (ChildReference childReference : childReferences) {
MutableCachedNode lock = systemSession.mutable(childReference.getKey());
lock.setProperty(systemSession, propertyFactory.create(ModeShapeLexicon.IS_DEEP, true));
lock.setProperty(systemSession, propertyFactory.create(ModeShapeLexicon.LOCKED_KEY, node.key().toString()));
lock.setProperty(systemSession, propertyFactory.create(ModeShapeLexicon.SESSION_SCOPE, false));
}
systemSession.save();
return null;
}
}, "config/repo-config-persistent-no-indexes.json");