You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by GitBox <gi...@apache.org> on 2021/06/07 14:40:04 UTC

[GitHub] [sling-org-apache-sling-jcr-repoinit] cziegeler commented on a change in pull request #18: SLING-10418 implement a retry for the application of the statements

cziegeler commented on a change in pull request #18:
URL: https://github.com/apache/sling-org-apache-sling-jcr-repoinit/pull/18#discussion_r646651393



##########
File path: src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializerFactory.java
##########
@@ -122,14 +131,47 @@ public void processRepository(final SlingRepository repo) throws Exception {
                             continue;
                         }
                         final List<Operation> ops = parser.parse(new StringReader(script));
-                        log.info("Executing {} repoinit operations", ops.size());
-                        processor.apply(s, ops);
-                        s.save();
+                        String msg = String.format("Executing %s repoinit operations", ops.size());
+                        log.info(msg);
+                        applyOperations(s,ops,msg);
                     }
                 }
             } finally {
                 s.logout();
             }
         }
     }
+
+
+    /**
+     * Apply the operations within a session, support retries
+     * @param session the JCR session to use
+     * @param ops the list of operations
+     * @param logMessage the messages to print when retry
+     * @throws Exception if the application fails despite the retry
+     */
+    private void applyOperations(Session session, List<Operation> ops, String logMessage) throws Exception {
+
+        RetryableOperation retry = new RetryableOperation.Builder().withBackoffBase(1000).withMaxRetries(3).build();
+        boolean successful = retry.apply(() -> {
+            try {
+                processor.apply(session, ops);
+                session.save();
+                return true;
+            } catch (RepositoryException e) {
+                log.error("(temporarily) failed to apply repoinit operations",e);

Review comment:
       So in case of permanent failure we end up with the same exception being logged N (=3) times. We should avoid that




-- 
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.

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