This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new e8e637a3 Add retry for html rendering
e8e637a3 is described below

commit e8e637a3248152a2b1a392651fcdafa96f4eee01
Author: Carsten Ziegeler <cziege...@apache.org>
AuthorDate: Thu Dec 7 16:27:46 2023 +0100

    Add retry for html rendering
---
 .../org/apache/sling/offline/impl/Starter.java     | 42 +++++++++++++++-------
 1 file changed, 30 insertions(+), 12 deletions(-)

diff --git 
a/org.apache.sling.offline/src/main/java/org/apache/sling/offline/impl/Starter.java
 
b/org.apache.sling.offline/src/main/java/org/apache/sling/offline/impl/Starter.java
index 3b59781d..8c10f775 100644
--- 
a/org.apache.sling.offline/src/main/java/org/apache/sling/offline/impl/Starter.java
+++ 
b/org.apache.sling.offline/src/main/java/org/apache/sling/offline/impl/Starter.java
@@ -75,7 +75,8 @@ public class Starter {
         return r.getName().endsWith(".md");
     }
 
-    private void process(final ResourceResolver resolver, final Resource 
resource) throws IOException, ServletException {
+    private void process(final ResourceResolver resolver, final Resource 
resource, final boolean retry) 
+    throws IOException, ServletException {
         if ( this.ignore(resource) ) {
             return;
         }
@@ -83,16 +84,31 @@ public class Starter {
             return;
         }
         logger.info("Processing {}", resource.getPath());
-        final SlingHttpServletRequest req = 
Builders.newRequestBuilder(resource)
-            .withExtension("html")
-            .build();
-        final SlingHttpServletResponseResult resp = 
Builders.newResponseBuilder().build();
-        processor.processRequest(req, resp, resolver);
-
-        final File output = new File(config.output_path(), 
resource.getPath().substring(this.config.input_path().length()).concat(".html"));
-        logger.info("Writing output to {}", output.getAbsolutePath());
-        output.getParentFile().mkdirs();
-        Files.writeString(output.toPath(), resp.getOutputAsString());
+        final long endAt = System.currentTimeMillis() + 5000;
+        while ( System.currentTimeMillis() < endAt ) {
+            final SlingHttpServletRequest req = 
Builders.newRequestBuilder(resource)
+                .withExtension("html")
+                .build();
+            final SlingHttpServletResponseResult resp = 
Builders.newResponseBuilder().build();
+            processor.processRequest(req, resp, resolver);
+
+            if ( resp.getStatus() == 200 ) {
+                final File output = new File(config.output_path(), 
resource.getPath().substring(this.config.input_path().length()).concat(".html"));
+                logger.info("Writing output to {}", output.getAbsolutePath());
+                output.getParentFile().mkdirs();
+                Files.writeString(output.toPath(), resp.getOutputAsString());
+                return;
+            }
+            if (!retry) {
+                break;
+            }
+            try {
+                Thread.sleep(100);
+            } catch ( final InterruptedException ie) {
+                // ignore
+            }
+        }
+        logger.error("Unable to create html for {}", resource.getPath());
     }
 
     private Resource getResource(final ResourceResolver resolver, final String 
path) {
@@ -121,8 +137,10 @@ public class Starter {
             if ( root == null ) {
                 logger.error("Unable to find root resource at {}", 
config.input_path());
             } else {
+                boolean first = true;
                 for(final Resource c : root.getChildren()) {
-                    process(resolver, c);
+                    process(resolver, c, first);
+                    first = false;
                 }
             }
         } catch ( final Exception e ) {

Reply via email to