Merge pull request #688 from ArunOnCloud/trunk

OAK-9891: Removal (purge) of version of a node does not remove associated labels
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
index e5f533f..43326eb 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
@@ -187,7 +187,7 @@
         NodeBuilder versionNode = vh.getChildNode(versionName);
         String versionId = versionNode.getProperty(JCR_UUID).getValue(Type.STRING);
         // unregister from labels
-        for (String label : getVersionLabels(versionRelPath, versionId)) {
+        for (String label : getVersionLabels(historyRelPath, versionId)) {
             removeVersionLabel(historyRelPath, label);
         }
         // reconnected predecessors and successors of the version being removed
diff --git a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryTest.java b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryTest.java
index 2689f2d..a9771b8 100644
--- a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryTest.java
+++ b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryTest.java
@@ -27,6 +27,9 @@
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.test.AbstractJCRTest;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Contains {@link VersionHistory} related tests.
  */
@@ -159,4 +162,41 @@
 
         assertFalse("VersionHistory node should have disappeared", superuser.itemExists(vhrpath));
     }
+
+    public void testRemoveVersionLabelWithRemovalOfVersion() throws RepositoryException {
+        int createVersions = 3;
+        Node n = testRootNode.addNode(nodeName1, testNodeType);
+        n.addMixin(mixVersionable);
+        superuser.save();
+        for (int i = 0; i < createVersions; i++) {
+            versionManager.checkout(n.getPath());
+            versionManager.checkin(n.getPath());
+        }
+
+        VersionHistory vhr = versionManager.getVersionHistory(n.getPath());
+        // initialize versionName
+        String versionName = "";
+        VersionIterator allversions = vhr.getAllVersions();
+        int count = 0;
+        while (allversions.hasNext()) {
+            Version version = allversions.nextVersion();
+            if(count == 1) {
+                versionName = version.getName();
+            }
+            count++;
+        }
+        int versionLabelCount = 3;
+        List<String> versionLabels = new ArrayList<>();
+        for(int i = 0; i < versionLabelCount; i++) {
+            String labelName = "Label_" + versionName + "_" + i;
+            vhr.addVersionLabel(versionName, labelName,false);
+            versionLabels.add(labelName);
+        }
+        vhr.removeVersion(versionName);
+        for(String label : versionLabels) {
+            assertFalse("version label should not exist", vhr.hasVersionLabel(label));
+        }
+
+    }
+
 }
\ No newline at end of file