thomasmueller commented on code in PR #562:
URL: https://github.com/apache/jackrabbit-oak/pull/562#discussion_r866548521


##########
oak-run/src/main/java/org/apache/jackrabbit/oak/indexversion/IndexVersionOperation.java:
##########
@@ -86,42 +92,65 @@ public static List<IndexVersionOperation> 
generateIndexVersionOperationList(Node
         }
 
         if (!reverseSortedIndexNameList.isEmpty()) {
-            IndexName activeIndexNameObject = 
reverseSortedIndexNameList.remove(0);
-            NodeState activeIndexNode = 
indexDefParentNode.getChildNode(PathUtils.getName(activeIndexNameObject.getNodeName()));
-            boolean isActiveIndexLongEnough = 
isIndexPurgeReady(activeIndexNameObject, activeIndexNode, purgeThresholdMillis);
-            int activeProductVersion = 
activeIndexNameObject.getProductVersion();
-            indexVersionOperationList.add(new 
IndexVersionOperation(activeIndexNameObject));
+            IndexName activeIndexNameObject = 
getActiveIndex(reverseSortedIndexNameList, parentPath, rootNode);
+            if (activeIndexNameObject == null) {
+                LOG.warn("Cannot find any active index from the list: {}", 
reverseSortedIndexNameList);
+            } else {
+                NodeState activeIndexNode = 
indexDefParentNode.getChildNode(PathUtils.getName(activeIndexNameObject.getNodeName()));
+                boolean isActiveIndexLongEnough = 
isIndexPurgeReady(activeIndexNameObject, activeIndexNode, purgeThresholdMillis);
+                int activeProductVersion = 
activeIndexNameObject.getProductVersion();
+                indexVersionOperationList.add(new 
IndexVersionOperation(activeIndexNameObject));
 
             // for rest indexes except active index

Review Comment:
   I would make this comment a bit clearer:
   
   ```
   // the reverseSortedIndexNameList will now contain the remaining indexes;
   // the active index was removed from that list
   ```



##########
oak-run/src/main/java/org/apache/jackrabbit/oak/indexversion/IndexVersionOperation.java:
##########
@@ -86,42 +92,65 @@ public static List<IndexVersionOperation> 
generateIndexVersionOperationList(Node
         }
 
         if (!reverseSortedIndexNameList.isEmpty()) {
-            IndexName activeIndexNameObject = 
reverseSortedIndexNameList.remove(0);
-            NodeState activeIndexNode = 
indexDefParentNode.getChildNode(PathUtils.getName(activeIndexNameObject.getNodeName()));
-            boolean isActiveIndexLongEnough = 
isIndexPurgeReady(activeIndexNameObject, activeIndexNode, purgeThresholdMillis);
-            int activeProductVersion = 
activeIndexNameObject.getProductVersion();
-            indexVersionOperationList.add(new 
IndexVersionOperation(activeIndexNameObject));
+            IndexName activeIndexNameObject = 
getActiveIndex(reverseSortedIndexNameList, parentPath, rootNode);
+            if (activeIndexNameObject == null) {
+                LOG.warn("Cannot find any active index from the list: {}", 
reverseSortedIndexNameList);
+            } else {
+                NodeState activeIndexNode = 
indexDefParentNode.getChildNode(PathUtils.getName(activeIndexNameObject.getNodeName()));
+                boolean isActiveIndexLongEnough = 
isIndexPurgeReady(activeIndexNameObject, activeIndexNode, purgeThresholdMillis);
+                int activeProductVersion = 
activeIndexNameObject.getProductVersion();
+                indexVersionOperationList.add(new 
IndexVersionOperation(activeIndexNameObject));
 
             // for rest indexes except active index
-            for (IndexName indexNameObject : reverseSortedIndexNameList) {
-                String indexName = indexNameObject.getNodeName();
-                NodeState indexNode = 
indexDefParentNode.getChildNode(PathUtils.getName(indexName));
-                IndexVersionOperation indexVersionOperation = new 
IndexVersionOperation(indexNameObject);
-                // if active index not long enough, NOOP for all indexes
-                if (isActiveIndexLongEnough) {
-                    if (indexNameObject.getProductVersion() == 
activeProductVersion && indexNameObject.getCustomerVersion() == 0) {
-                        
indexVersionOperation.setOperation(Operation.DELETE_HIDDEN_AND_DISABLE);
-                    } else {
-                        // the check hidden oak mount logic only works when 
passing through the proper composite store
-                        if (isHiddenOakMountExists(indexNode)) {
-                            LOG.info("Found hidden oak mount node for: '{}', 
disable it but no index definition deletion", indexName);
+                for (IndexName indexNameObject : reverseSortedIndexNameList) {
+                    String indexName = indexNameObject.getNodeName();
+                    NodeState indexNode = 
indexDefParentNode.getChildNode(PathUtils.getName(indexName));
+                    IndexVersionOperation indexVersionOperation = new 
IndexVersionOperation(indexNameObject);
+                    // if active index not long enough, NOOP for all indexes
+                    if (isActiveIndexLongEnough) {
+                        if (indexNameObject.getProductVersion() == 
activeProductVersion && indexNameObject.getCustomerVersion() == 0) {
                             
indexVersionOperation.setOperation(Operation.DELETE_HIDDEN_AND_DISABLE);
-                        } else {
-                            
indexVersionOperation.setOperation(Operation.DELETE);
+                        } else if (indexNameObject.getProductVersion() <= 
activeProductVersion ) {
+                            // the check hidden oak mount logic only works 
when passing through the proper composite store
+                            if (isHiddenOakMountExists(indexNode)) {
+                                LOG.info("Found hidden oak mount node for: 
'{}', disable it but no index definition deletion", indexName);
+                                
indexVersionOperation.setOperation(Operation.DELETE_HIDDEN_AND_DISABLE);
+                            } else {
+                                
indexVersionOperation.setOperation(Operation.DELETE);
+                            }
                         }
+                        // if the index product version is larger than active 
index, leave it as is
+                        // for instance: if there is active damAssetLucene-7, 
the inactive damAssetLucene-8 will be leave there as is

Review Comment:
   Shouldn't we add an "else" case where, where we also log this case (info 
level), and set the operation? (Operation.NOOP). I know, Operation.NOOP is the 
default (and that's good), so setting this to NOOP is a no-op :-) But when 
reading this code here, that's not obvious.



##########
oak-run/src/main/java/org/apache/jackrabbit/oak/indexversion/IndexVersionOperation.java:
##########
@@ -86,42 +92,65 @@ public static List<IndexVersionOperation> 
generateIndexVersionOperationList(Node
         }
 
         if (!reverseSortedIndexNameList.isEmpty()) {
-            IndexName activeIndexNameObject = 
reverseSortedIndexNameList.remove(0);
-            NodeState activeIndexNode = 
indexDefParentNode.getChildNode(PathUtils.getName(activeIndexNameObject.getNodeName()));
-            boolean isActiveIndexLongEnough = 
isIndexPurgeReady(activeIndexNameObject, activeIndexNode, purgeThresholdMillis);
-            int activeProductVersion = 
activeIndexNameObject.getProductVersion();
-            indexVersionOperationList.add(new 
IndexVersionOperation(activeIndexNameObject));
+            IndexName activeIndexNameObject = 
getActiveIndex(reverseSortedIndexNameList, parentPath, rootNode);
+            if (activeIndexNameObject == null) {
+                LOG.warn("Cannot find any active index from the list: {}", 
reverseSortedIndexNameList);

Review Comment:
   I think it's fine to log a warning currently... I just wonder, how would we 
remove an OOTB index from AEM. The first such case is the generic Lucene index 
(/oak:index/lucene). We can remove all versions of that index in 
GraniteContent. So there would never be this case that he have indexes, but 
none is active (the old state is: active; the new state is: removed).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@jackrabbit.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to