From 46bdd48e3fb06f4a0f6b1fa1e9466275142817cf Mon Sep 17 00:00:00 2001 From: Britt Park Date: Tue, 1 May 2007 18:09:23 +0000 Subject: [PATCH] A tweak to createSnapshot that forces snapshots for stores which have layered nodes in them. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5587 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/avm/AVMServiceTest.java | 23 ++++++++++++++ .../org/alfresco/repo/avm/AVMStoreImpl.java | 30 +++++++++---------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index fd0be3a3ef..903542c548 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -83,6 +83,29 @@ import org.alfresco.util.Pair; */ public class AVMServiceTest extends AVMServiceTestBase { + public void testLayerSnapshots() + { + try + { + setupBasicTree(); + assertEquals(1, fService.createSnapshot("main", null, null)); + fService.createStore("layer"); + fService.createLayeredDirectory("main:/a", "layer:/", "a"); + fService.createSnapshot("layer", null, null); + fService.createFile("main:/a", "Xander"); + fService.createSnapshot("layer", null, null); + assertEquals(2, fService.lookup(2, "layer:/a").getIndirectionVersion()); + assertEquals(fService.lookup(2, "main:/a/Xander").getId(), + fService.lookup(2, "layer:/a/Xander").getId()); + assertNull(fService.lookup(1, "layer:/a/Xander")); + } + catch (Exception e) + { + e.printStackTrace(); + fail(); + } + } + public void testBranchLayerSnapshot() { try diff --git a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java index 195785bf3b..32fbea7d04 100644 --- a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java @@ -179,25 +179,23 @@ public class AVMStoreImpl implements AVMStore, Serializable @SuppressWarnings("unchecked") public int createSnapshot(String tag, String description, Map snapShotMap) { - // If the root isn't new, we can't take a snapshot since nothing has changed. - if (!fRoot.getIsNew()) - { - // So, we set the tag and description fields of the latest version. - VersionRoot versionRoot = AVMDAOs.Instance().fVersionRootDAO.getMaxVersion(this); - if (tag != null || description != null) - { - versionRoot.setTag(tag); - versionRoot.setDescription(description); - } - snapShotMap.put(fName, versionRoot.getVersionID()); - return versionRoot.getVersionID(); - } - snapShotMap.put(fName, fNextVersionID); - // Get all the layered nodes that were snapshotted last time - // and force copies on them. VersionRoot lastVersion = AVMDAOs.Instance().fVersionRootDAO.getMaxVersion(this); List layeredEntries = AVMDAOs.Instance().fVersionLayeredNodeEntryDAO.get(lastVersion); + // Is there no need for a snapshot? + if (!fRoot.getIsNew() && layeredEntries.size() == 0) + { + // So, we set the tag and description fields of the latest version. + if (tag != null || description != null) + { + lastVersion.setTag(tag); + lastVersion.setDescription(description); + } + snapShotMap.put(fName, lastVersion.getVersionID()); + return lastVersion.getVersionID(); + } + snapShotMap.put(fName, fNextVersionID); + // Force copies on all the layered nodes from last snapshot. for (VersionLayeredNodeEntry entry : layeredEntries) { String path = entry.getPath();