You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2022/08/30 18:39:07 UTC
[nifi] branch main updated: NIFI-10366: Make Default Run Duration configurable (#6310)
This is an automated email from the ASF dual-hosted git repository.
markap14 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 28fc030ef5 NIFI-10366: Make Default Run Duration configurable (#6310)
28fc030ef5 is described below
commit 28fc030ef57b2d54f0bdca44ade763c25c2cacd8
Author: Lehel Boér <Le...@hotmail.com>
AuthorDate: Tue Aug 30 20:38:56 2022 +0200
NIFI-10366: Make Default Run Duration configurable (#6310)
NIFI-10366: Make Default Run Duration configurable
---
.../annotation/behavior/DefaultRunDuration.java | 40 ++++++++++++++++++++++
.../nifi/annotation/behavior/SupportsBatching.java | 4 ++-
.../apache/nifi/controller/ExtensionBuilder.java | 17 +++++++++
3 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/DefaultRunDuration.java b/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/DefaultRunDuration.java
new file mode 100644
index 0000000000..2ef6aa8c8a
--- /dev/null
+++ b/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/DefaultRunDuration.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.annotation.behavior;
+
+import java.time.Duration;
+
+public enum DefaultRunDuration {
+ NO_BATCHING(Duration.ZERO),
+ TWENTY_FIVE_MILLIS(Duration.ofMillis(25)),
+ FIFTY_MILLIS(Duration.ofMillis(50)),
+ ONE_HUNDRED_MILLIS(Duration.ofMillis(100)),
+ TWO_HUNDRED_FIFTY_MILLIS(Duration.ofMillis(250)),
+ FIVE_HUNDRED_MILLIS(Duration.ofMillis(500)),
+ ONE_SECOND(Duration.ofSeconds(1)),
+ TWO_SECONDS(Duration.ofSeconds(2));
+
+ private final Duration duration;
+
+ DefaultRunDuration(final Duration duration) {
+ this.duration = duration;
+ }
+
+ public Duration getDuration() {
+ return duration;
+ }
+}
diff --git a/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/SupportsBatching.java b/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/SupportsBatching.java
index 3ffe2d6308..49136ade7c 100644
--- a/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/SupportsBatching.java
+++ b/nifi-api/src/main/java/org/apache/nifi/annotation/behavior/SupportsBatching.java
@@ -41,11 +41,13 @@ import java.lang.annotation.Target;
* ProcessSession.commit() to ensure data is persisted before deleting the data
* from a remote source.
*
+ * When the defaultDuration parameter is set, the processor is created with the supplied duration time, which can be adjusted afterwards.
+ * The supplied values can be selected from {@link org.apache.nifi.annotation.behavior.DefaultRunDuration}.
*/
@Documented
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SupportsBatching {
-
+ DefaultRunDuration defaultDuration() default DefaultRunDuration.NO_BATCHING;
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/ExtensionBuilder.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/ExtensionBuilder.java
index 883c352677..c59a6a5be6 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/ExtensionBuilder.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/ExtensionBuilder.java
@@ -16,9 +16,11 @@
*/
package org.apache.nifi.controller;
+import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.nifi.annotation.behavior.RequiresInstanceClassLoading;
+import org.apache.nifi.annotation.behavior.SupportsBatching;
import org.apache.nifi.annotation.configuration.DefaultSettings;
import org.apache.nifi.bundle.Bundle;
import org.apache.nifi.bundle.BundleCoordinate;
@@ -320,6 +322,8 @@ public class ExtensionBuilder {
}
applyDefaultSettings(procNode);
+ applyDefaultRunDuration(procNode);
+
return procNode;
}
@@ -359,6 +363,19 @@ public class ExtensionBuilder {
}
}
+ private void applyDefaultRunDuration(final ProcessorNode processorNode) {
+ try {
+ final Class<?> procClass = processorNode.getProcessor().getClass();
+
+ final SupportsBatching sb = procClass.getAnnotation(SupportsBatching.class);
+ if (sb != null) {
+ processorNode.setRunDuration(sb.defaultDuration().getDuration().toMillis(), TimeUnit.MILLISECONDS);
+ }
+ } catch (final Exception ex) {
+ logger.error("Set Default Run Duration failed", ex);
+ }
+ }
+
private ControllerServiceNode createControllerServiceNode() throws ClassNotFoundException, IllegalAccessException, InstantiationException, InitializationException {
final ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader();
try {