This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 051778fe77f camel-core - Reload console should be able to wait for
reloading and report status back
051778fe77f is described below
commit 051778fe77f24a0bd4a86b0fef95e17c277da12f
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Aug 28 09:35:03 2024 +0200
camel-core - Reload console should be able to wait for reloading and report
status back
---
.../camel/impl/console/ReloadDevConsole.java | 64 +++++++++++++++++++---
1 file changed, 57 insertions(+), 7 deletions(-)
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
index 8d82525d202..4c899caccb4 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
@@ -19,6 +19,8 @@ package org.apache.camel.impl.console;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
import org.apache.camel.spi.ReloadStrategy;
import org.apache.camel.spi.annotations.DevConsole;
@@ -34,6 +36,11 @@ public class ReloadDevConsole extends AbstractDevConsole {
*/
public static final String RELOAD = "reload";
+ /**
+ * Option to wait for reloading to complete
+ */
+ public static final String RELOAD_WAIT = "wait";
+
// reload on demand should run async to avoid blocking
private volatile ExecutorService reloadThread;
@@ -42,33 +49,65 @@ public class ReloadDevConsole extends AbstractDevConsole {
}
protected String doCallText(Map<String, Object> options) {
- String trigger = (String) options.get(RELOAD);
+ boolean trigger = "true".equals(options.getOrDefault(RELOAD, "false"));
+ boolean wait = "true".equals(options.getOrDefault(RELOAD_WAIT,
"false"));
StringBuilder sb = new StringBuilder();
Set<ReloadStrategy> rs =
getCamelContext().hasServices(ReloadStrategy.class);
+ boolean failed = false;
for (ReloadStrategy r : rs) {
- if ("true".equals(trigger)) {
- getOrCreateReloadTask().submit(() ->
r.onReload("ReloadDevConsole"));
+ if (trigger) {
+ int before = r.getFailedCounter();
+ Future<?> f = getOrCreateReloadTask().submit(() ->
r.onReload("ReloadDevConsole"));
+ if (wait) {
+ try {
+ f.get(30, TimeUnit.SECONDS);
+ failed |= r.getFailedCounter() > before;
+ } catch (Exception e) {
+ // ignore
+ }
+ }
} else {
sb.append(String.format("\nReloadStrategy: %s",
r.getClass().getName()));
sb.append(String.format("\n Reloaded: %s",
r.getReloadCounter()));
sb.append(String.format("\n Failed: %s",
r.getFailedCounter()));
}
}
+ if (trigger) {
+ if (wait) {
+ if (failed) {
+ sb.append("Status: Reload failed");
+ } else {
+ sb.append("Status: Reload success");
+ }
+ } else {
+ sb.append("Status: Reloading in progress");
+ }
+ }
sb.append("\n");
-
return sb.toString();
}
protected JsonObject doCallJson(Map<String, Object> options) {
- String trigger = (String) options.get(RELOAD);
+ boolean trigger = "true".equals(options.getOrDefault(RELOAD, "false"));
+ boolean wait = "true".equals(options.getOrDefault(RELOAD_WAIT,
"false"));
JsonObject root = new JsonObject();
JsonArray arr = new JsonArray();
Set<ReloadStrategy> rs =
getCamelContext().hasServices(ReloadStrategy.class);
+ boolean failed = false;
for (ReloadStrategy r : rs) {
- if ("true".equals(trigger)) {
- getOrCreateReloadTask().submit(() ->
r.onReload("ReloadDevConsole"));
+ if (trigger) {
+ int before = r.getFailedCounter();
+ Future<?> f = getOrCreateReloadTask().submit(() ->
r.onReload("ReloadDevConsole"));
+ if (wait) {
+ try {
+ f.get(30, TimeUnit.SECONDS);
+ failed |= r.getFailedCounter() > before;
+ } catch (Exception e) {
+ // ignore
+ }
+ }
} else {
if (root.isEmpty()) {
root.put("reloadStrategies", arr);
@@ -81,6 +120,17 @@ public class ReloadDevConsole extends AbstractDevConsole {
}
}
+ if (trigger) {
+ if (wait) {
+ if (failed) {
+ root.put("status", "failed");
+ } else {
+ root.put("status", "success");
+ }
+ } else {
+ root.put("status", "reloading");
+ }
+ }
return root;
}