Github user aledsage commented on a diff in the pull request:
https://github.com/apache/incubator-brooklyn/pull/617#discussion_r30582994
--- Diff:
core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java ---
@@ -348,13 +327,40 @@ private void addReferencedObjects(DeltaCollector
deltaCollector) {
}
@VisibleForTesting
- public void persistNow() {
- if (!isActive()) {
+ public boolean persistNowSafely(boolean alreadyHasMutex) {
+ Stopwatch timer = Stopwatch.createStarted();
+ try {
+ persistNowInternal(alreadyHasMutex);
+ metrics.noteSuccess(Duration.of(timer));
+ return true;
+ } catch (RuntimeInterruptedException e) {
+ LOG.debug("Interrupted persisting change-delta (rethrowing)",
e);
+ metrics.noteFailure(Duration.of(timer));
+ metrics.noteError(e.toString());
+ Thread.currentThread().interrupt();
+ return false;
+ } catch (Exception e) {
--- End diff --
I'd probably merge the `catch Exception` and the `catch Throwable`, with:
} catch (Throwable t) {
// Don't rethrow: the behaviour of executionManager is
different from a scheduledExecutorService,
// if we throw an exception, then our task will never get
executed again
LOG.error("Problem persisting change-delta", t);
metrics.noteFailure(Duration.of(timer));
metrics.noteError(t.toString());
Exceptions.propagateIfFatal(t);
return false;
Downside is that log message is always error, and doesn't include whether
or not it is "(rethrowing)".
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---