You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2015/07/16 16:47:34 UTC
[41/50] [abbrv] incubator-nifi git commit: NIFI-745: Only call
methods with @OnDisabled once, regardless of whether or not they succeed
NIFI-745: Only call methods with @OnDisabled once, regardless of whether or not they succeed
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/20840247
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/20840247
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/20840247
Branch: refs/heads/master
Commit: 208402472dd99c629afc056f4464b925b8f834ab
Parents: f3b55d4
Author: Mark Payne <ma...@hotmail.com>
Authored: Fri Jul 3 14:35:59 2015 -0400
Committer: Mark Payne <ma...@hotmail.com>
Committed: Fri Jul 3 15:00:31 2015 -0400
----------------------------------------------------------------------
.../nifi/annotation/lifecycle/OnDisabled.java | 10 ++---
.../scheduling/StandardProcessScheduler.java | 39 +++++++++-----------
2 files changed, 22 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/20840247/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/lifecycle/OnDisabled.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/lifecycle/OnDisabled.java b/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/lifecycle/OnDisabled.java
index f205bc7..f8ca038 100644
--- a/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/lifecycle/OnDisabled.java
+++ b/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/lifecycle/OnDisabled.java
@@ -36,11 +36,11 @@ import org.apache.nifi.controller.ConfigurationContext;
* Methods using this annotation are permitted to take zero arguments or to take
* a single argument of type {@link ConfigurationContext}. If a method with this
* annotation throws a Throwable, a log message and bulletin will be issued for
- * the service, and the service will remain in a 'DISABLING' state. When this
- * occurs, the method with this annotation will be called again after some
- * period of time. This will continue until the method returns without throwing
- * any Throwable. Until that time, the service will remain in a 'DISABLING'
- * state and cannot be enabled again.
+ * the service, but the service will still be marked as Disabled. The failing
+ * method will not be called again until the service is enabled and disabled again.
+ * This is done in order to prevent a ControllerService from continually failing
+ * in such a way that the service could not be disabled and updated without
+ * restarting the instance of NiFi.
* </p>
*
* <p>
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/20840247/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/scheduling/StandardProcessScheduler.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/scheduling/StandardProcessScheduler.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/scheduling/StandardProcessScheduler.java
index d976bd0..5ac4a0b 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/scheduling/StandardProcessScheduler.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/scheduling/StandardProcessScheduler.java
@@ -685,33 +685,28 @@ public final class StandardProcessScheduler implements ProcessScheduler {
try (final NarCloseable x = NarCloseable.withNarLoader()) {
final ConfigurationContext configContext = new StandardConfigurationContext(service, controllerServiceProvider, null);
- while (true) {
- try {
- ReflectionUtils.invokeMethodsWithAnnotation(OnDisabled.class, service.getControllerServiceImplementation(), configContext);
- heartbeater.heartbeat();
- service.setState(ControllerServiceState.DISABLED);
- return;
- } catch (final Exception e) {
- final Throwable cause = e instanceof InvocationTargetException ? e.getCause() : e;
- final ComponentLog componentLog = new SimpleProcessLogger(service.getIdentifier(), service);
- componentLog.error("Failed to invoke @OnDisabled method due to {}", cause);
-
- LOG.error("Failed to invoke @OnDisabled method of {} due to {}", service.getControllerServiceImplementation(), cause.toString());
- if (LOG.isDebugEnabled()) {
- LOG.error("", cause);
- }
+ try {
+ ReflectionUtils.invokeMethodsWithAnnotation(OnDisabled.class, service.getControllerServiceImplementation(), configContext);
+ } catch (final Exception e) {
+ final Throwable cause = e instanceof InvocationTargetException ? e.getCause() : e;
+ final ComponentLog componentLog = new SimpleProcessLogger(service.getIdentifier(), service);
+ componentLog.error("Failed to invoke @OnDisabled method due to {}", cause);
- ReflectionUtils.quietlyInvokeMethodsWithAnnotation(OnDisabled.class, service.getControllerServiceImplementation(), configContext);
- try {
- Thread.sleep(administrativeYieldMillis);
- } catch (final InterruptedException ie) {
- }
+ LOG.error("Failed to invoke @OnDisabled method of {} due to {}", service.getControllerServiceImplementation(), cause.toString());
+ if (LOG.isDebugEnabled()) {
+ LOG.error("", cause);
+ }
- continue;
+ ReflectionUtils.quietlyInvokeMethodsWithAnnotation(OnDisabled.class, service.getControllerServiceImplementation(), configContext);
+ try {
+ Thread.sleep(administrativeYieldMillis);
+ } catch (final InterruptedException ie) {
}
+ } finally {
+ service.setState(ControllerServiceState.DISABLED);
+ heartbeater.heartbeat();
}
}
-
}
};