You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by de...@apache.org on 2015/05/01 15:43:37 UTC
[1/7] incubator-nifi git commit: updating properties to support
multiple nar libraries
Repository: incubator-nifi
Updated Branches:
refs/heads/develop 262a8735c -> ba4a8937f
updating properties to support multiple nar libraries
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/b1970ecc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/b1970ecc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/b1970ecc
Branch: refs/heads/develop
Commit: b1970ecc1046955bcaa8ad7e4cfd9c3f92a8a306
Parents: 2c35226
Author: Brandon DeVries <br...@gmail.com>
Authored: Tue Apr 7 16:05:55 2015 -0400
Committer: Brandon DeVries <br...@gmail.com>
Committed: Tue Apr 7 16:05:55 2015 -0400
----------------------------------------------------------------------
.../org/apache/nifi/util/NiFiProperties.java | 35 ++++-
.../apache/nifi/util/NiFiPropertiesTest.java | 90 +++++++++++++
.../NiFiProperties/conf/nifi.blank.properties | 128 +++++++++++++++++++
.../NiFiProperties/conf/nifi.missing.properties | 126 ++++++++++++++++++
.../NiFiProperties/conf/nifi.properties | 128 +++++++++++++++++++
5 files changed, 501 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/b1970ecc/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java b/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
index 3b427a7..1704483 100644
--- a/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
+++ b/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
@@ -16,9 +16,6 @@
*/
package org.apache.nifi.util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -27,10 +24,15 @@ import java.net.InetSocketAddress;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class NiFiProperties extends Properties {
private static final long serialVersionUID = 2119177359005492702L;
@@ -50,6 +52,7 @@ public class NiFiProperties extends Properties {
public static final String AUTO_RESUME_STATE = "nifi.flowcontroller.autoResumeState";
public static final String FLOW_CONTROLLER_GRACEFUL_SHUTDOWN_PERIOD = "nifi.flowcontroller.graceful.shutdown.period";
public static final String NAR_LIBRARY_DIRECTORY = "nifi.nar.library.directory";
+ public static final String NAR_LIBRARY_DIRECTORY_PREFIX = "nifi.nar.library.directory.";
public static final String NAR_WORKING_DIRECTORY = "nifi.nar.working.directory";
public static final String COMPONENT_DOCS_DIRECTORY = "nifi.documentation.working.directory";
public static final String SENSITIVE_PROPS_KEY = "nifi.sensitive.props.key";
@@ -525,9 +528,29 @@ public class NiFiProperties extends Properties {
return new File(getNarWorkingDirectory(), "extensions");
}
- public File getNarLibraryDirectory() {
- return new File(getProperty(NAR_LIBRARY_DIRECTORY, DEFAULT_NAR_LIBRARY_DIR));
- }
+ public List<Path> getNarLibraryDirectories() {
+
+ List<Path> narLibraryPaths = new ArrayList<>();
+
+ // go through each property
+ for (String propertyName : stringPropertyNames()) {
+ // determine if the property is a nar library path
+ if (StringUtils.startsWith(propertyName, NAR_LIBRARY_DIRECTORY_PREFIX) || NAR_LIBRARY_DIRECTORY.equals(propertyName)) {
+ // attempt to resolve the path specified
+ String narLib = getProperty(propertyName);
+ if (!StringUtils.isBlank(narLib)){
+ narLibraryPaths.add(Paths.get(narLib));
+ }
+ }
+ }
+
+ if (narLibraryPaths.isEmpty()){
+ narLibraryPaths.add(Paths.get(DEFAULT_NAR_LIBRARY_DIR));
+ }
+
+
+ return narLibraryPaths;
+ }
// getters for ui properties //
/**
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/b1970ecc/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java b/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
new file mode 100644
index 0000000..3f1ff20
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
@@ -0,0 +1,90 @@
+package org.apache.nifi.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.nio.file.Path;
+import java.util.List;
+
+import org.junit.Test;
+
+public class NiFiPropertiesTest {
+
+ @Test
+ public void testProperties() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.properties");
+
+ assertEquals("UI Banner Text", properties.getBannerText());
+
+ List<Path> directories = properties.getNarLibraryDirectories();
+
+ assertEquals(new File("./target/resources/NiFiProperties/lib/").getPath(), directories.get(0).toString());
+ assertEquals(new File("./target/resources/NiFiProperties/lib2/").getPath(), directories.get(1).toString());
+
+ }
+
+ @Test
+ public void testMissingProperties() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.missing.properties");
+
+ List<Path> directories = properties.getNarLibraryDirectories();
+
+ assertEquals(1, directories.size());
+
+ assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0).toString());
+
+ }
+
+ @Test
+ public void testBlankProperties() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.blank.properties");
+
+ List<Path> directories = properties.getNarLibraryDirectories();
+
+ assertEquals(1, directories.size());
+
+ assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0).toString());
+
+ }
+
+ private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
+
+ String file = NiFiPropertiesTest.class.getResource(propertiesFile).getFile();
+
+ System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
+
+ NiFiProperties properties = NiFiProperties.getInstance();
+
+ // clear out existing properties
+ for (String prop : properties.stringPropertyNames()) {
+ properties.remove(prop);
+ }
+
+ InputStream inStream = null;
+ try {
+ inStream = new BufferedInputStream(new FileInputStream(file));
+ properties.load(inStream);
+ } catch (final Exception ex) {
+ throw new RuntimeException("Cannot load properties file due to " + ex.getLocalizedMessage(), ex);
+ } finally {
+ if (null != inStream) {
+ try {
+ inStream.close();
+ } catch (final Exception ex) {
+ /**
+ * do nothing *
+ */
+ }
+ }
+ }
+
+ return properties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/b1970ecc/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties
new file mode 100644
index 0000000..1f853b9
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties
@@ -0,0 +1,128 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.library.directory=
+nifi.custom.nar.library.directory.alt=
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/b1970ecc/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties
new file mode 100644
index 0000000..dbb8978
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties
@@ -0,0 +1,126 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/b1970ecc/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties
new file mode 100644
index 0000000..ed44b88
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties
@@ -0,0 +1,128 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.library.directory=./target/resources/NiFiProperties/lib/
+nifi.nar.library.directory.alt=./target/resources/NiFiProperties/lib2/
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
[2/7] incubator-nifi git commit: updating NarUnpacker to use multiple
library directories
Posted by de...@apache.org.
updating NarUnpacker to use multiple library directories
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/27573564
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/27573564
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/27573564
Branch: refs/heads/develop
Commit: 275735648aa97a59eee42d0b343411e01f71a7fb
Parents: b1970ec
Author: Brandon DeVries <br...@gmail.com>
Authored: Tue Apr 7 16:18:48 2015 -0400
Committer: Brandon DeVries <br...@gmail.com>
Committed: Tue Apr 7 16:18:48 2015 -0400
----------------------------------------------------------------------
.../java/org/apache/nifi/nar/NarUnpacker.java | 29 ++-
.../org/apache/nifi/nar/NarUnpackerTest.java | 177 +++++++++++++++++++
.../resources/NarUnpacker/conf/nifi.properties | 129 ++++++++++++++
.../resources/NarUnpacker/lib/dummy-one.nar | Bin 0 -> 1749 bytes
.../NarUnpacker/lib/nifi-framework-nar.nar | Bin 0 -> 406 bytes
.../resources/NarUnpacker/lib2/dummy-two.nar | Bin 0 -> 1751 bytes
6 files changed, 327 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/27573564/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
index 3aaf839..f05b1f8 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
@@ -25,6 +25,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
@@ -41,7 +42,6 @@ import java.util.jar.Manifest;
import org.apache.nifi.util.FileUtils;
import org.apache.nifi.util.NiFiProperties;
import org.apache.nifi.util.StringUtils;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,22 +61,35 @@ public final class NarUnpacker {
};
public static ExtensionMapping unpackNars(final NiFiProperties props) {
- final File narLibraryDir = props.getNarLibraryDirectory();
+ final List<Path> narLibraryDirs = props.getNarLibraryDirectories();
final File frameworkWorkingDir = props.getFrameworkWorkingDirectory();
final File extensionsWorkingDir = props.getExtensionsWorkingDirectory();
final File docsWorkingDir = props.getComponentDocumentationWorkingDirectory();
try {
- // make sure the nar directories are there and accessible
- FileUtils.ensureDirectoryExistAndCanAccess(narLibraryDir);
+ File unpackedFramework = null;
+ final Set<File> unpackedExtensions = new HashSet<>();
+ final List<File> narFiles = new ArrayList<>();
+
+ // make sure the nar directories are there and accessible
FileUtils.ensureDirectoryExistAndCanAccess(frameworkWorkingDir);
FileUtils.ensureDirectoryExistAndCanAccess(extensionsWorkingDir);
FileUtils.ensureDirectoryExistAndCanAccess(docsWorkingDir);
- File unpackedFramework = null;
- final Set<File> unpackedExtensions = new HashSet<>();
- final File[] narFiles = narLibraryDir.listFiles(NAR_FILTER);
- if (narFiles != null) {
+ for (Path narLibraryDir : narLibraryDirs) {
+
+ File narDir = narLibraryDir.toFile();
+ FileUtils.ensureDirectoryExistAndCanAccess(narDir);
+
+ File[] dirFiles = narDir.listFiles(NAR_FILTER);
+ if (dirFiles != null){
+ List<File> fileList = Arrays.asList(dirFiles);
+ narFiles.addAll(fileList);
+ }
+ }
+
+
+ if (!narFiles.isEmpty()) {
for (File narFile : narFiles) {
logger.debug("Expanding NAR file: " + narFile.getAbsolutePath());
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/27573564/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
new file mode 100644
index 0000000..e44f081
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
@@ -0,0 +1,177 @@
+package org.apache.nifi.nar;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+
+import org.apache.nifi.util.NiFiProperties;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class NarUnpackerTest {
+
+ @BeforeClass
+ public static void copyResources() throws IOException {
+
+ final Path sourcePath = Paths.get("./src/test/resources");
+ final Path targetPath = Paths.get("./target");
+
+ Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {
+
+ @Override
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+
+ Path relativeSource = sourcePath.relativize(dir);
+ Path target = targetPath.resolve(relativeSource);
+
+ Files.createDirectories(target);
+
+ return FileVisitResult.CONTINUE;
+
+ }
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+
+ Path relativeSource = sourcePath.relativize(file);
+ Path target = targetPath.resolve(relativeSource);
+
+ Files.copy(file, target, REPLACE_EXISTING);
+
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ }
+
+ @Test
+ public void testUnpackNars() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+
+ assertEquals("./target/NarUnpacker/lib/", properties.getProperty("nifi.nar.library.directory"));
+ assertEquals("./target/NarUnpacker/lib2/", properties.getProperty("nifi.nar.library.directory.alt"));
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertEquals(2,extensionMapping.getAllExtensionNames().size());
+
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.two"));
+
+ final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(2,extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ assertEquals("dummy-two.nar-unpacked", extensionFiles[1].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromEmptyDir() throws IOException {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+
+ final File emptyDir = new File ("./target/empty/dir");
+ emptyDir.delete();
+ emptyDir.deleteOnExit();
+ assertTrue(emptyDir.mkdirs());
+
+ properties.setProperty("nifi.nar.library.directory.alt", emptyDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertEquals(1,extensionMapping.getAllExtensionNames().size());
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
+
+ final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(1,extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromNonExistantDir() {
+
+ final File nonExistantDir = new File ("./target/this/dir/should/not/exist/");
+ nonExistantDir.delete();
+ nonExistantDir.deleteOnExit();
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+ properties.setProperty("nifi.nar.library.directory.alt", nonExistantDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
+
+ assertEquals(1,extensionMapping.getAllExtensionNames().size());
+
+ final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(1,extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromNonDir() throws IOException {
+
+ final File nonDir = new File ("./target/file.txt");
+ nonDir.createNewFile();
+ nonDir.deleteOnExit();
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+ properties.setProperty("nifi.nar.library.directory.alt", nonDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertNull(extensionMapping);
+ }
+
+
+ private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
+ String file = NarUnpackerTest.class.getResource(propertiesFile).getFile();
+
+ System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
+
+ NiFiProperties properties = NiFiProperties.getInstance();
+
+ // clear out existing properties
+ for (String prop : properties.stringPropertyNames()) {
+ properties.remove(prop);
+ }
+
+ InputStream inStream = null;
+ try {
+ inStream = new BufferedInputStream(new FileInputStream(file));
+ properties.load(inStream);
+ } catch (final Exception ex) {
+ throw new RuntimeException("Cannot load properties file due to " + ex.getLocalizedMessage(), ex);
+ } finally {
+ if (null != inStream) {
+ try {
+ inStream.close();
+ } catch (final Exception ex) {
+ /**
+ * do nothing *
+ */
+ }
+ }
+ }
+
+ return properties;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/27573564/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties
new file mode 100644
index 0000000..92e4a92
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties
@@ -0,0 +1,129 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.library.directory=./target/NarUnpacker/lib/
+nifi.nar.library.directory.alt=./target/NarUnpacker/lib2/
+
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/27573564/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar
new file mode 100644
index 0000000..598b27f
Binary files /dev/null and b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar differ
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/27573564/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar
new file mode 100644
index 0000000..d2a8b96
Binary files /dev/null and b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar differ
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/27573564/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar
new file mode 100644
index 0000000..a1021ba
Binary files /dev/null and b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar differ
[4/7] incubator-nifi git commit: updating NarUnpacker to use multiple
library directories
Posted by de...@apache.org.
updating NarUnpacker to use multiple library directories
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/3c4ea67d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/3c4ea67d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/3c4ea67d
Branch: refs/heads/develop
Commit: 3c4ea67dde811fdf48d5e22085fde3276934252d
Parents: ee0f4ef
Author: Brandon DeVries <br...@gmail.com>
Authored: Tue Apr 7 16:18:48 2015 -0400
Committer: Brandon DeVries <br...@gmail.com>
Committed: Wed Apr 8 12:39:24 2015 -0400
----------------------------------------------------------------------
.../java/org/apache/nifi/nar/NarUnpacker.java | 29 ++-
.../org/apache/nifi/nar/NarUnpackerTest.java | 177 +++++++++++++++++++
.../resources/NarUnpacker/conf/nifi.properties | 129 ++++++++++++++
.../resources/NarUnpacker/lib/dummy-one.nar | Bin 0 -> 1749 bytes
.../NarUnpacker/lib/nifi-framework-nar.nar | Bin 0 -> 406 bytes
.../resources/NarUnpacker/lib2/dummy-two.nar | Bin 0 -> 1751 bytes
6 files changed, 327 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/3c4ea67d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
index 3aaf839..f05b1f8 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
@@ -25,6 +25,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
@@ -41,7 +42,6 @@ import java.util.jar.Manifest;
import org.apache.nifi.util.FileUtils;
import org.apache.nifi.util.NiFiProperties;
import org.apache.nifi.util.StringUtils;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,22 +61,35 @@ public final class NarUnpacker {
};
public static ExtensionMapping unpackNars(final NiFiProperties props) {
- final File narLibraryDir = props.getNarLibraryDirectory();
+ final List<Path> narLibraryDirs = props.getNarLibraryDirectories();
final File frameworkWorkingDir = props.getFrameworkWorkingDirectory();
final File extensionsWorkingDir = props.getExtensionsWorkingDirectory();
final File docsWorkingDir = props.getComponentDocumentationWorkingDirectory();
try {
- // make sure the nar directories are there and accessible
- FileUtils.ensureDirectoryExistAndCanAccess(narLibraryDir);
+ File unpackedFramework = null;
+ final Set<File> unpackedExtensions = new HashSet<>();
+ final List<File> narFiles = new ArrayList<>();
+
+ // make sure the nar directories are there and accessible
FileUtils.ensureDirectoryExistAndCanAccess(frameworkWorkingDir);
FileUtils.ensureDirectoryExistAndCanAccess(extensionsWorkingDir);
FileUtils.ensureDirectoryExistAndCanAccess(docsWorkingDir);
- File unpackedFramework = null;
- final Set<File> unpackedExtensions = new HashSet<>();
- final File[] narFiles = narLibraryDir.listFiles(NAR_FILTER);
- if (narFiles != null) {
+ for (Path narLibraryDir : narLibraryDirs) {
+
+ File narDir = narLibraryDir.toFile();
+ FileUtils.ensureDirectoryExistAndCanAccess(narDir);
+
+ File[] dirFiles = narDir.listFiles(NAR_FILTER);
+ if (dirFiles != null){
+ List<File> fileList = Arrays.asList(dirFiles);
+ narFiles.addAll(fileList);
+ }
+ }
+
+
+ if (!narFiles.isEmpty()) {
for (File narFile : narFiles) {
logger.debug("Expanding NAR file: " + narFile.getAbsolutePath());
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/3c4ea67d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
new file mode 100644
index 0000000..e44f081
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
@@ -0,0 +1,177 @@
+package org.apache.nifi.nar;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+
+import org.apache.nifi.util.NiFiProperties;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class NarUnpackerTest {
+
+ @BeforeClass
+ public static void copyResources() throws IOException {
+
+ final Path sourcePath = Paths.get("./src/test/resources");
+ final Path targetPath = Paths.get("./target");
+
+ Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {
+
+ @Override
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+
+ Path relativeSource = sourcePath.relativize(dir);
+ Path target = targetPath.resolve(relativeSource);
+
+ Files.createDirectories(target);
+
+ return FileVisitResult.CONTINUE;
+
+ }
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+
+ Path relativeSource = sourcePath.relativize(file);
+ Path target = targetPath.resolve(relativeSource);
+
+ Files.copy(file, target, REPLACE_EXISTING);
+
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ }
+
+ @Test
+ public void testUnpackNars() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+
+ assertEquals("./target/NarUnpacker/lib/", properties.getProperty("nifi.nar.library.directory"));
+ assertEquals("./target/NarUnpacker/lib2/", properties.getProperty("nifi.nar.library.directory.alt"));
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertEquals(2,extensionMapping.getAllExtensionNames().size());
+
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.two"));
+
+ final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(2,extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ assertEquals("dummy-two.nar-unpacked", extensionFiles[1].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromEmptyDir() throws IOException {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+
+ final File emptyDir = new File ("./target/empty/dir");
+ emptyDir.delete();
+ emptyDir.deleteOnExit();
+ assertTrue(emptyDir.mkdirs());
+
+ properties.setProperty("nifi.nar.library.directory.alt", emptyDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertEquals(1,extensionMapping.getAllExtensionNames().size());
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
+
+ final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(1,extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromNonExistantDir() {
+
+ final File nonExistantDir = new File ("./target/this/dir/should/not/exist/");
+ nonExistantDir.delete();
+ nonExistantDir.deleteOnExit();
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+ properties.setProperty("nifi.nar.library.directory.alt", nonExistantDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
+
+ assertEquals(1,extensionMapping.getAllExtensionNames().size());
+
+ final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(1,extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromNonDir() throws IOException {
+
+ final File nonDir = new File ("./target/file.txt");
+ nonDir.createNewFile();
+ nonDir.deleteOnExit();
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+ properties.setProperty("nifi.nar.library.directory.alt", nonDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertNull(extensionMapping);
+ }
+
+
+ private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
+ String file = NarUnpackerTest.class.getResource(propertiesFile).getFile();
+
+ System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
+
+ NiFiProperties properties = NiFiProperties.getInstance();
+
+ // clear out existing properties
+ for (String prop : properties.stringPropertyNames()) {
+ properties.remove(prop);
+ }
+
+ InputStream inStream = null;
+ try {
+ inStream = new BufferedInputStream(new FileInputStream(file));
+ properties.load(inStream);
+ } catch (final Exception ex) {
+ throw new RuntimeException("Cannot load properties file due to " + ex.getLocalizedMessage(), ex);
+ } finally {
+ if (null != inStream) {
+ try {
+ inStream.close();
+ } catch (final Exception ex) {
+ /**
+ * do nothing *
+ */
+ }
+ }
+ }
+
+ return properties;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/3c4ea67d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties
new file mode 100644
index 0000000..92e4a92
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/conf/nifi.properties
@@ -0,0 +1,129 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.library.directory=./target/NarUnpacker/lib/
+nifi.nar.library.directory.alt=./target/NarUnpacker/lib2/
+
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/3c4ea67d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar
new file mode 100644
index 0000000..598b27f
Binary files /dev/null and b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/dummy-one.nar differ
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/3c4ea67d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar
new file mode 100644
index 0000000..d2a8b96
Binary files /dev/null and b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib/nifi-framework-nar.nar differ
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/3c4ea67d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar
new file mode 100644
index 0000000..a1021ba
Binary files /dev/null and b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/resources/NarUnpacker/lib2/dummy-two.nar differ
[6/7] incubator-nifi git commit: Merge branch 'NIFI-433' into develop
Posted by de...@apache.org.
Merge branch 'NIFI-433' into develop
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/054f044f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/054f044f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/054f044f
Branch: refs/heads/develop
Commit: 054f044fc5f0af900f2ed8e5cb580ad11c713cac
Parents: 262a873 e1e1aec
Author: Brandon DeVries <br...@gmail.com>
Authored: Fri May 1 09:08:33 2015 -0400
Committer: Brandon DeVries <br...@gmail.com>
Committed: Fri May 1 09:08:33 2015 -0400
----------------------------------------------------------------------
.../org/apache/nifi/util/NiFiProperties.java | 35 +++-
.../apache/nifi/util/NiFiPropertiesTest.java | 90 ++++++++++
.../NiFiProperties/conf/nifi.blank.properties | 128 ++++++++++++++
.../NiFiProperties/conf/nifi.missing.properties | 126 +++++++++++++
.../NiFiProperties/conf/nifi.properties | 128 ++++++++++++++
.../java/org/apache/nifi/nar/NarUnpacker.java | 29 ++-
.../org/apache/nifi/nar/NarUnpackerTest.java | 177 +++++++++++++++++++
.../resources/NarUnpacker/conf/nifi.properties | 129 ++++++++++++++
.../resources/NarUnpacker/lib/dummy-one.nar | Bin 0 -> 1749 bytes
.../NarUnpacker/lib/nifi-framework-nar.nar | Bin 0 -> 406 bytes
.../resources/NarUnpacker/lib2/dummy-two.nar | Bin 0 -> 1751 bytes
11 files changed, 828 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/054f044f/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/054f044f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
----------------------------------------------------------------------
[3/7] incubator-nifi git commit: updating properties to support
multiple nar libraries
Posted by de...@apache.org.
updating properties to support multiple nar libraries
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/ee0f4ef2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/ee0f4ef2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/ee0f4ef2
Branch: refs/heads/develop
Commit: ee0f4ef21e54278f68df5ea758e576c0d3103d6e
Parents: 39735c3
Author: Brandon DeVries <br...@gmail.com>
Authored: Tue Apr 7 16:05:55 2015 -0400
Committer: Brandon DeVries <br...@gmail.com>
Committed: Wed Apr 8 12:39:23 2015 -0400
----------------------------------------------------------------------
.../org/apache/nifi/util/NiFiProperties.java | 35 ++++-
.../apache/nifi/util/NiFiPropertiesTest.java | 90 +++++++++++++
.../NiFiProperties/conf/nifi.blank.properties | 128 +++++++++++++++++++
.../NiFiProperties/conf/nifi.missing.properties | 126 ++++++++++++++++++
.../NiFiProperties/conf/nifi.properties | 128 +++++++++++++++++++
5 files changed, 501 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ee0f4ef2/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java b/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
index 3b427a7..1704483 100644
--- a/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
+++ b/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
@@ -16,9 +16,6 @@
*/
package org.apache.nifi.util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -27,10 +24,15 @@ import java.net.InetSocketAddress;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class NiFiProperties extends Properties {
private static final long serialVersionUID = 2119177359005492702L;
@@ -50,6 +52,7 @@ public class NiFiProperties extends Properties {
public static final String AUTO_RESUME_STATE = "nifi.flowcontroller.autoResumeState";
public static final String FLOW_CONTROLLER_GRACEFUL_SHUTDOWN_PERIOD = "nifi.flowcontroller.graceful.shutdown.period";
public static final String NAR_LIBRARY_DIRECTORY = "nifi.nar.library.directory";
+ public static final String NAR_LIBRARY_DIRECTORY_PREFIX = "nifi.nar.library.directory.";
public static final String NAR_WORKING_DIRECTORY = "nifi.nar.working.directory";
public static final String COMPONENT_DOCS_DIRECTORY = "nifi.documentation.working.directory";
public static final String SENSITIVE_PROPS_KEY = "nifi.sensitive.props.key";
@@ -525,9 +528,29 @@ public class NiFiProperties extends Properties {
return new File(getNarWorkingDirectory(), "extensions");
}
- public File getNarLibraryDirectory() {
- return new File(getProperty(NAR_LIBRARY_DIRECTORY, DEFAULT_NAR_LIBRARY_DIR));
- }
+ public List<Path> getNarLibraryDirectories() {
+
+ List<Path> narLibraryPaths = new ArrayList<>();
+
+ // go through each property
+ for (String propertyName : stringPropertyNames()) {
+ // determine if the property is a nar library path
+ if (StringUtils.startsWith(propertyName, NAR_LIBRARY_DIRECTORY_PREFIX) || NAR_LIBRARY_DIRECTORY.equals(propertyName)) {
+ // attempt to resolve the path specified
+ String narLib = getProperty(propertyName);
+ if (!StringUtils.isBlank(narLib)){
+ narLibraryPaths.add(Paths.get(narLib));
+ }
+ }
+ }
+
+ if (narLibraryPaths.isEmpty()){
+ narLibraryPaths.add(Paths.get(DEFAULT_NAR_LIBRARY_DIR));
+ }
+
+
+ return narLibraryPaths;
+ }
// getters for ui properties //
/**
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ee0f4ef2/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java b/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
new file mode 100644
index 0000000..3f1ff20
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
@@ -0,0 +1,90 @@
+package org.apache.nifi.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.nio.file.Path;
+import java.util.List;
+
+import org.junit.Test;
+
+public class NiFiPropertiesTest {
+
+ @Test
+ public void testProperties() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.properties");
+
+ assertEquals("UI Banner Text", properties.getBannerText());
+
+ List<Path> directories = properties.getNarLibraryDirectories();
+
+ assertEquals(new File("./target/resources/NiFiProperties/lib/").getPath(), directories.get(0).toString());
+ assertEquals(new File("./target/resources/NiFiProperties/lib2/").getPath(), directories.get(1).toString());
+
+ }
+
+ @Test
+ public void testMissingProperties() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.missing.properties");
+
+ List<Path> directories = properties.getNarLibraryDirectories();
+
+ assertEquals(1, directories.size());
+
+ assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0).toString());
+
+ }
+
+ @Test
+ public void testBlankProperties() {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.blank.properties");
+
+ List<Path> directories = properties.getNarLibraryDirectories();
+
+ assertEquals(1, directories.size());
+
+ assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0).toString());
+
+ }
+
+ private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
+
+ String file = NiFiPropertiesTest.class.getResource(propertiesFile).getFile();
+
+ System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
+
+ NiFiProperties properties = NiFiProperties.getInstance();
+
+ // clear out existing properties
+ for (String prop : properties.stringPropertyNames()) {
+ properties.remove(prop);
+ }
+
+ InputStream inStream = null;
+ try {
+ inStream = new BufferedInputStream(new FileInputStream(file));
+ properties.load(inStream);
+ } catch (final Exception ex) {
+ throw new RuntimeException("Cannot load properties file due to " + ex.getLocalizedMessage(), ex);
+ } finally {
+ if (null != inStream) {
+ try {
+ inStream.close();
+ } catch (final Exception ex) {
+ /**
+ * do nothing *
+ */
+ }
+ }
+ }
+
+ return properties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ee0f4ef2/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties
new file mode 100644
index 0000000..1f853b9
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.blank.properties
@@ -0,0 +1,128 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.library.directory=
+nifi.custom.nar.library.directory.alt=
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ee0f4ef2/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties
new file mode 100644
index 0000000..dbb8978
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.missing.properties
@@ -0,0 +1,126 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ee0f4ef2/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties
new file mode 100644
index 0000000..ed44b88
--- /dev/null
+++ b/nifi/nifi-commons/nifi-properties/src/test/resources/NiFiProperties/conf/nifi.properties
@@ -0,0 +1,128 @@
+# 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.
+
+# Core Properties #
+nifi.version=nifi-test 3.0.0
+nifi.flow.configuration.file=./target/flow.xml.gz
+nifi.flow.configuration.archive.dir=./target/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=2 sec
+nifi.administrative.yield.duration=30 sec
+
+nifi.reporting.task.configuration.file=./target/reporting-tasks.xml
+nifi.controller.service.configuration.file=./target/controller-services.xml
+nifi.templates.directory=./target/templates
+nifi.ui.banner.text=UI Banner Text
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.library.directory=./target/resources/NiFiProperties/lib/
+nifi.nar.library.directory.alt=./target/resources/NiFiProperties/lib2/
+nifi.nar.working.directory=./target/work/nar/
+
+# H2 Settings
+nifi.database.directory=./target/database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.directory=./target/test-repo
+nifi.flowfile.repository.partitions=1
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.queue.swap.threshold=20000
+nifi.swap.storage.directory=./target/test-repo/swap
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./target/content_repository
+
+# Provenance Repository Properties
+nifi.provenance.repository.storage.directory=./target/provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=5 mins
+nifi.provenance.repository.rollover.size=100 MB
+
+# Site to Site properties
+nifi.remote.input.socket.port=9990
+nifi.remote.input.secure=true
+
+# web properties #
+nifi.web.war.directory=./target/lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./target/work/jetty
+
+# security properties #
+nifi.sensitive.props.key=key
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.authorizedUsers.file=./target/conf/authorized-users.xml
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=nifi.authorization.FileAuthorizationProvider
+nifi.security.support.new.account.requests=
+nifi.security.default.user.roles=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+nifi.cluster.node.unicast.manager.authority.provider.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.authority.provider.port=
+nifi.cluster.manager.authority.provider.threads=10
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
[7/7] incubator-nifi git commit: fixing formatting issues for NIFI-433
Posted by de...@apache.org.
fixing formatting issues for NIFI-433
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/ba4a8937
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/ba4a8937
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/ba4a8937
Branch: refs/heads/develop
Commit: ba4a8937f895cecd4ffba2e9b9e8f5ee7be8dfb3
Parents: 054f044
Author: Brandon DeVries <br...@gmail.com>
Authored: Fri May 1 09:42:23 2015 -0400
Committer: Brandon DeVries <br...@gmail.com>
Committed: Fri May 1 09:42:23 2015 -0400
----------------------------------------------------------------------
.../org/apache/nifi/util/NiFiProperties.java | 124 +++++----
.../apache/nifi/util/NiFiPropertiesTest.java | 103 ++++----
.../java/org/apache/nifi/nar/NarUnpacker.java | 132 ++++++----
.../org/apache/nifi/nar/NarUnpackerTest.java | 264 ++++++++++---------
4 files changed, 347 insertions(+), 276 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ba4a8937/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java b/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
index a28829b..43f02ca 100644
--- a/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
+++ b/nifi/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
@@ -233,21 +233,27 @@ public class NiFiProperties extends Properties {
* obtained.
*
* @return the NiFiProperties object to use
- * @throws RuntimeException if unable to load properties file
+ * @throws RuntimeException
+ * if unable to load properties file
*/
public static synchronized NiFiProperties getInstance() {
if (null == instance) {
final NiFiProperties suspectInstance = new NiFiProperties();
- final String nfPropertiesFilePath = System.getProperty(NiFiProperties.PROPERTIES_FILE_PATH);
+ final String nfPropertiesFilePath = System
+ .getProperty(NiFiProperties.PROPERTIES_FILE_PATH);
if (null == nfPropertiesFilePath || nfPropertiesFilePath.trim().length() == 0) {
- throw new RuntimeException("Requires a system property called \'" + NiFiProperties.PROPERTIES_FILE_PATH + "\' and this is not set or has no value");
+ throw new RuntimeException("Requires a system property called \'"
+ + NiFiProperties.PROPERTIES_FILE_PATH
+ + "\' and this is not set or has no value");
}
final File propertiesFile = new File(nfPropertiesFilePath);
if (!propertiesFile.exists()) {
- throw new RuntimeException("Properties file doesn't exist \'" + propertiesFile.getAbsolutePath() + "\'");
+ throw new RuntimeException("Properties file doesn't exist \'"
+ + propertiesFile.getAbsolutePath() + "\'");
}
if (!propertiesFile.canRead()) {
- throw new RuntimeException("Properties file exists but cannot be read \'" + propertiesFile.getAbsolutePath() + "\'");
+ throw new RuntimeException("Properties file exists but cannot be read \'"
+ + propertiesFile.getAbsolutePath() + "\'");
}
InputStream inStream = null;
try {
@@ -255,7 +261,8 @@ public class NiFiProperties extends Properties {
suspectInstance.load(inStream);
} catch (final Exception ex) {
LOG.error("Cannot load properties file due to " + ex.getLocalizedMessage());
- throw new RuntimeException("Cannot load properties file due to " + ex.getLocalizedMessage(), ex);
+ throw new RuntimeException("Cannot load properties file due to "
+ + ex.getLocalizedMessage(), ex);
} finally {
if (null != inStream) {
try {
@@ -377,7 +384,7 @@ public class NiFiProperties extends Properties {
if ("false".equalsIgnoreCase(secureVal)) {
return false;
- }else{
+ } else {
return true;
}
@@ -409,7 +416,8 @@ public class NiFiProperties extends Properties {
* @return Whether to auto start the processors or not
*/
public boolean getAutoResumeState() {
- final String rawAutoResumeState = getProperty(AUTO_RESUME_STATE, DEFAULT_AUTO_RESUME_STATE.toString());
+ final String rawAutoResumeState = getProperty(AUTO_RESUME_STATE,
+ DEFAULT_AUTO_RESUME_STATE.toString());
return Boolean.parseBoolean(rawAutoResumeState);
}
@@ -420,7 +428,8 @@ public class NiFiProperties extends Properties {
* @return the number of partitions
*/
public int getFlowFileRepositoryPartitions() {
- final String rawProperty = getProperty(FLOWFILE_REPOSITORY_PARTITIONS, DEFAULT_FLOWFILE_REPO_PARTITIONS);
+ final String rawProperty = getProperty(FLOWFILE_REPOSITORY_PARTITIONS,
+ DEFAULT_FLOWFILE_REPO_PARTITIONS);
return Integer.parseInt(rawProperty);
}
@@ -431,7 +440,8 @@ public class NiFiProperties extends Properties {
* @return the number of milliseconds between checkpoint events
*/
public String getFlowFileRepositoryCheckpointInterval() {
- return getProperty(FLOWFILE_REPOSITORY_CHECKPOINT_INTERVAL, DEFAULT_FLOWFILE_CHECKPOINT_INTERVAL);
+ return getProperty(FLOWFILE_REPOSITORY_CHECKPOINT_INTERVAL,
+ DEFAULT_FLOWFILE_CHECKPOINT_INTERVAL);
}
/**
@@ -473,7 +483,8 @@ public class NiFiProperties extends Properties {
}
public String getUserCredentialCacheDuration() {
- return getProperty(SECURITY_USER_CREDENTIAL_CACHE_DURATION, DEFAULT_USER_CREDENTIAL_CACHE_DURATION);
+ return getProperty(SECURITY_USER_CREDENTIAL_CACHE_DURATION,
+ DEFAULT_USER_CREDENTIAL_CACHE_DURATION);
}
public boolean getSupportNewAccountRequests() {
@@ -528,29 +539,29 @@ public class NiFiProperties extends Properties {
return new File(getNarWorkingDirectory(), "extensions");
}
- public List<Path> getNarLibraryDirectories() {
-
- List<Path> narLibraryPaths = new ArrayList<>();
-
- // go through each property
- for (String propertyName : stringPropertyNames()) {
- // determine if the property is a nar library path
- if (StringUtils.startsWith(propertyName, NAR_LIBRARY_DIRECTORY_PREFIX) || NAR_LIBRARY_DIRECTORY.equals(propertyName)) {
- // attempt to resolve the path specified
- String narLib = getProperty(propertyName);
- if (!StringUtils.isBlank(narLib)){
- narLibraryPaths.add(Paths.get(narLib));
- }
- }
- }
-
- if (narLibraryPaths.isEmpty()){
- narLibraryPaths.add(Paths.get(DEFAULT_NAR_LIBRARY_DIR));
- }
-
-
- return narLibraryPaths;
- }
+ public List<Path> getNarLibraryDirectories() {
+
+ List<Path> narLibraryPaths = new ArrayList<>();
+
+ // go through each property
+ for (String propertyName : stringPropertyNames()) {
+ // determine if the property is a nar library path
+ if (StringUtils.startsWith(propertyName, NAR_LIBRARY_DIRECTORY_PREFIX)
+ || NAR_LIBRARY_DIRECTORY.equals(propertyName)) {
+ // attempt to resolve the path specified
+ String narLib = getProperty(propertyName);
+ if (!StringUtils.isBlank(narLib)) {
+ narLibraryPaths.add(Paths.get(narLib));
+ }
+ }
+ }
+
+ if (narLibraryPaths.isEmpty()) {
+ narLibraryPaths.add(Paths.get(DEFAULT_NAR_LIBRARY_DIR));
+ }
+
+ return narLibraryPaths;
+ }
// getters for ui properties //
/**
@@ -582,7 +593,8 @@ public class NiFiProperties extends Properties {
// getters for cluster protocol properties //
public String getClusterProtocolHeartbeatInterval() {
- return getProperty(CLUSTER_PROTOCOL_HEARTBEAT_INTERVAL, DEFAULT_CLUSTER_PROTOCOL_HEARTBEAT_INTERVAL);
+ return getProperty(CLUSTER_PROTOCOL_HEARTBEAT_INTERVAL,
+ DEFAULT_CLUSTER_PROTOCOL_HEARTBEAT_INTERVAL);
}
public String getNodeHeartbeatInterval() {
@@ -594,7 +606,8 @@ public class NiFiProperties extends Properties {
}
public String getClusterProtocolConnectionHandshakeTimeout() {
- return getProperty(CLUSTER_PROTOCOL_CONNECTION_HANDSHAKE_TIMEOUT, DEFAULT_CLUSTER_PROTOCOL_CONNECTION_HANDSHAKE_TIMEOUT);
+ return getProperty(CLUSTER_PROTOCOL_CONNECTION_HANDSHAKE_TIMEOUT,
+ DEFAULT_CLUSTER_PROTOCOL_CONNECTION_HANDSHAKE_TIMEOUT);
}
public boolean getClusterProtocolUseMulticast() {
@@ -616,7 +629,8 @@ public class NiFiProperties extends Properties {
}
public File getPersistentStateDirectory() {
- final String dirName = getProperty(PERSISTENT_STATE_DIRECTORY, DEFAULT_PERSISTENT_STATE_DIRECTORY);
+ final String dirName = getProperty(PERSISTENT_STATE_DIRECTORY,
+ DEFAULT_PERSISTENT_STATE_DIRECTORY);
final File file = new File(dirName);
if (!file.exists()) {
file.mkdirs();
@@ -626,14 +640,16 @@ public class NiFiProperties extends Properties {
public int getClusterProtocolMulticastServiceLocatorAttempts() {
try {
- return Integer.parseInt(getProperty(CLUSTER_PROTOCOL_MULTICAST_SERVICE_LOCATOR_ATTEMPTS));
+ return Integer
+ .parseInt(getProperty(CLUSTER_PROTOCOL_MULTICAST_SERVICE_LOCATOR_ATTEMPTS));
} catch (NumberFormatException nfe) {
return DEFAULT_CLUSTER_PROTOCOL_MULTICAST_SERVICE_LOCATOR_ATTEMPTS;
}
}
public String getClusterProtocolMulticastServiceLocatorAttemptsDelay() {
- return getProperty(CLUSTER_PROTOCOL_MULTICAST_SERVICE_LOCATOR_ATTEMPTS_DELAY, DEFAULT_CLUSTER_PROTOCOL_MULTICAST_SERVICE_LOCATOR_ATTEMPTS_DELAY);
+ return getProperty(CLUSTER_PROTOCOL_MULTICAST_SERVICE_LOCATOR_ATTEMPTS_DELAY,
+ DEFAULT_CLUSTER_PROTOCOL_MULTICAST_SERVICE_LOCATOR_ATTEMPTS_DELAY);
}
// getters for cluster node properties //
@@ -676,7 +692,8 @@ public class NiFiProperties extends Properties {
if (StringUtils.isBlank(socketAddress)) {
socketAddress = "localhost";
}
- int socketPort = Integer.parseInt(getProperty(CLUSTER_NODE_UNICAST_MANAGER_PROTOCOL_PORT));
+ int socketPort = Integer
+ .parseInt(getProperty(CLUSTER_NODE_UNICAST_MANAGER_PROTOCOL_PORT));
return InetSocketAddress.createUnresolved(socketAddress, socketPort);
} catch (Exception ex) {
throw new RuntimeException("Invalid unicast manager address/port due to: " + ex, ex);
@@ -727,11 +744,13 @@ public class NiFiProperties extends Properties {
}
public String getClusterManagerNodeApiConnectionTimeout() {
- return getProperty(CLUSTER_MANAGER_NODE_API_CONNECTION_TIMEOUT, DEFAULT_CLUSTER_MANAGER_NODE_API_CONNECTION_TIMEOUT);
+ return getProperty(CLUSTER_MANAGER_NODE_API_CONNECTION_TIMEOUT,
+ DEFAULT_CLUSTER_MANAGER_NODE_API_CONNECTION_TIMEOUT);
}
public String getClusterManagerNodeApiReadTimeout() {
- return getProperty(CLUSTER_MANAGER_NODE_API_READ_TIMEOUT, DEFAULT_CLUSTER_MANAGER_NODE_API_READ_TIMEOUT);
+ return getProperty(CLUSTER_MANAGER_NODE_API_READ_TIMEOUT,
+ DEFAULT_CLUSTER_MANAGER_NODE_API_READ_TIMEOUT);
}
public int getClusterManagerNodeApiRequestThreads() {
@@ -743,7 +762,8 @@ public class NiFiProperties extends Properties {
}
public String getClusterManagerFlowRetrievalDelay() {
- return getProperty(CLUSTER_MANAGER_FLOW_RETRIEVAL_DELAY, DEFAULT_CLUSTER_MANAGER_FLOW_RETRIEVAL_DELAY);
+ return getProperty(CLUSTER_MANAGER_FLOW_RETRIEVAL_DELAY,
+ DEFAULT_CLUSTER_MANAGER_FLOW_RETRIEVAL_DELAY);
}
public int getClusterManagerProtocolThreads() {
@@ -755,7 +775,8 @@ public class NiFiProperties extends Properties {
}
public String getClusterManagerSafeModeDuration() {
- return getProperty(CLUSTER_MANAGER_SAFEMODE_DURATION, DEFAULT_CLUSTER_MANAGER_SAFEMODE_DURATION);
+ return getProperty(CLUSTER_MANAGER_SAFEMODE_DURATION,
+ DEFAULT_CLUSTER_MANAGER_SAFEMODE_DURATION);
}
public String getClusterProtocolManagerToNodeApiScheme() {
@@ -803,7 +824,8 @@ public class NiFiProperties extends Properties {
* configured. No directories will be created as a result of this operation.
*
* @return database repository path
- * @throws InvalidPathException If the configured path is invalid
+ * @throws InvalidPathException
+ * If the configured path is invalid
*/
public Path getDatabaseRepositoryPath() {
return Paths.get(getProperty(REPOSITORY_DATABASE_DIRECTORY));
@@ -814,7 +836,8 @@ public class NiFiProperties extends Properties {
* configured. No directories will be created as a result of this operation.
*
* @return database repository path
- * @throws InvalidPathException If the configured path is invalid
+ * @throws InvalidPathException
+ * If the configured path is invalid
*/
public Path getFlowFileRepositoryPath() {
return Paths.get(getProperty(FLOWFILE_REPOSITORY_DIRECTORY));
@@ -827,7 +850,8 @@ public class NiFiProperties extends Properties {
* operation.
*
* @return file repositories paths
- * @throws InvalidPathException If any of the configured paths are invalid
+ * @throws InvalidPathException
+ * If any of the configured paths are invalid
*/
public Map<String, Path> getContentRepositoryPaths() {
final Map<String, Path> contentRepositoryPaths = new HashMap<>();
@@ -837,7 +861,8 @@ public class NiFiProperties extends Properties {
// determine if the property is a file repository path
if (StringUtils.startsWith(propertyName, REPOSITORY_CONTENT_PREFIX)) {
// get the repository key
- final String key = StringUtils.substringAfter(propertyName, REPOSITORY_CONTENT_PREFIX);
+ final String key = StringUtils.substringAfter(propertyName,
+ REPOSITORY_CONTENT_PREFIX);
// attempt to resolve the path specified
contentRepositoryPaths.put(key, Paths.get(getProperty(propertyName)));
@@ -862,7 +887,8 @@ public class NiFiProperties extends Properties {
// determine if the property is a file repository path
if (StringUtils.startsWith(propertyName, PROVENANCE_REPO_DIRECTORY_PREFIX)) {
// get the repository key
- final String key = StringUtils.substringAfter(propertyName, PROVENANCE_REPO_DIRECTORY_PREFIX);
+ final String key = StringUtils.substringAfter(propertyName,
+ PROVENANCE_REPO_DIRECTORY_PREFIX);
// attempt to resolve the path specified
provenanceRepositoryPaths.put(key, Paths.get(getProperty(propertyName)));
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ba4a8937/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java b/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
index 3f1ff20..58fbbf3 100644
--- a/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
+++ b/nifi/nifi-commons/nifi-properties/src/test/java/org/apache/nifi/util/NiFiPropertiesTest.java
@@ -13,78 +13,83 @@ import org.junit.Test;
public class NiFiPropertiesTest {
- @Test
- public void testProperties() {
+ @Test
+ public void testProperties() {
- NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.properties");
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.properties");
- assertEquals("UI Banner Text", properties.getBannerText());
+ assertEquals("UI Banner Text", properties.getBannerText());
- List<Path> directories = properties.getNarLibraryDirectories();
+ List<Path> directories = properties.getNarLibraryDirectories();
- assertEquals(new File("./target/resources/NiFiProperties/lib/").getPath(), directories.get(0).toString());
- assertEquals(new File("./target/resources/NiFiProperties/lib2/").getPath(), directories.get(1).toString());
+ assertEquals(new File("./target/resources/NiFiProperties/lib/").getPath(),
+ directories.get(0).toString());
+ assertEquals(new File("./target/resources/NiFiProperties/lib2/").getPath(), directories
+ .get(1).toString());
- }
+ }
- @Test
- public void testMissingProperties() {
+ @Test
+ public void testMissingProperties() {
- NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.missing.properties");
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.missing.properties");
- List<Path> directories = properties.getNarLibraryDirectories();
+ List<Path> directories = properties.getNarLibraryDirectories();
- assertEquals(1, directories.size());
+ assertEquals(1, directories.size());
- assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0).toString());
+ assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0)
+ .toString());
- }
+ }
- @Test
- public void testBlankProperties() {
+ @Test
+ public void testBlankProperties() {
- NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.blank.properties");
+ NiFiProperties properties = loadSpecifiedProperties("/NiFiProperties/conf/nifi.blank.properties");
- List<Path> directories = properties.getNarLibraryDirectories();
+ List<Path> directories = properties.getNarLibraryDirectories();
- assertEquals(1, directories.size());
+ assertEquals(1, directories.size());
- assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0).toString());
+ assertEquals(new File(NiFiProperties.DEFAULT_NAR_LIBRARY_DIR).getPath(), directories.get(0)
+ .toString());
- }
+ }
- private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
+ private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
- String file = NiFiPropertiesTest.class.getResource(propertiesFile).getFile();
+ String file = NiFiPropertiesTest.class.getResource(propertiesFile).getFile();
- System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
+ System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
- NiFiProperties properties = NiFiProperties.getInstance();
+ NiFiProperties properties = NiFiProperties.getInstance();
- // clear out existing properties
- for (String prop : properties.stringPropertyNames()) {
- properties.remove(prop);
- }
+ // clear out existing properties
+ for (String prop : properties.stringPropertyNames()) {
+ properties.remove(prop);
+ }
- InputStream inStream = null;
- try {
- inStream = new BufferedInputStream(new FileInputStream(file));
- properties.load(inStream);
- } catch (final Exception ex) {
- throw new RuntimeException("Cannot load properties file due to " + ex.getLocalizedMessage(), ex);
- } finally {
- if (null != inStream) {
- try {
- inStream.close();
- } catch (final Exception ex) {
- /**
- * do nothing *
- */
- }
- }
- }
+ InputStream inStream = null;
+ try {
+ inStream = new BufferedInputStream(new FileInputStream(file));
+ properties.load(inStream);
+ } catch (final Exception ex) {
+ throw new RuntimeException("Cannot load properties file due to "
+ + ex.getLocalizedMessage(), ex);
+ } finally {
+ if (null != inStream) {
+ try {
+ inStream.close();
+ } catch (final Exception ex) {
+ /**
+ * do nothing *
+ */
+ }
+ }
+ }
- return properties;
- }
+ return properties;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ba4a8937/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
index 85037c9..2837d35 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/main/java/org/apache/nifi/nar/NarUnpacker.java
@@ -71,24 +71,23 @@ public final class NarUnpacker {
final Set<File> unpackedExtensions = new HashSet<>();
final List<File> narFiles = new ArrayList<>();
- // make sure the nar directories are there and accessible
+ // make sure the nar directories are there and accessible
FileUtils.ensureDirectoryExistAndCanAccess(frameworkWorkingDir);
FileUtils.ensureDirectoryExistAndCanAccess(extensionsWorkingDir);
FileUtils.ensureDirectoryExistAndCanAccess(docsWorkingDir);
- for (Path narLibraryDir : narLibraryDirs) {
-
- File narDir = narLibraryDir.toFile();
- FileUtils.ensureDirectoryExistAndCanAccess(narDir);
-
- File[] dirFiles = narDir.listFiles(NAR_FILTER);
- if (dirFiles != null){
- List<File> fileList = Arrays.asList(dirFiles);
- narFiles.addAll(fileList);
- }
- }
-
-
+ for (Path narLibraryDir : narLibraryDirs) {
+
+ File narDir = narLibraryDir.toFile();
+ FileUtils.ensureDirectoryExistAndCanAccess(narDir);
+
+ File[] dirFiles = narDir.listFiles(NAR_FILTER);
+ if (dirFiles != null) {
+ List<File> fileList = Arrays.asList(dirFiles);
+ narFiles.addAll(fileList);
+ }
+ }
+
if (!narFiles.isEmpty()) {
for (File narFile : narFiles) {
logger.debug("Expanding NAR file: " + narFile.getAbsolutePath());
@@ -104,7 +103,8 @@ public final class NarUnpacker {
// determine if this is the framework
if (NarClassLoaders.FRAMEWORK_NAR_ID.equals(narId)) {
if (unpackedFramework != null) {
- throw new IllegalStateException("Multiple framework NARs discovered. Only one framework is permitted.");
+ throw new IllegalStateException(
+ "Multiple framework NARs discovered. Only one framework is permitted.");
}
unpackedFramework = unpackNar(narFile, frameworkWorkingDir);
@@ -121,7 +121,8 @@ public final class NarUnpacker {
throw new IllegalStateException("Framework NAR cannot be read.");
}
- // Determine if any nars no longer exist and delete their working directories. This happens
+ // Determine if any nars no longer exist and delete their
+ // working directories. This happens
// if a new version of a nar is dropped into the lib dir.
// ensure no old framework are present
final File[] frameworkWorkingDirContents = frameworkWorkingDir.listFiles();
@@ -144,7 +145,8 @@ public final class NarUnpacker {
}
}
- // attempt to delete any docs files that exist so that any components that have been removed
+ // attempt to delete any docs files that exist so that any
+ // components that have been removed
// will no longer have entries in the docs folder
final File[] docsFiles = docsWorkingDir.listFiles();
if (docsFiles != null) {
@@ -157,7 +159,8 @@ public final class NarUnpacker {
mapExtensions(extensionsWorkingDir, docsWorkingDir, extensionMapping);
return extensionMapping;
} catch (IOException e) {
- logger.warn("Unable to load NAR library bundles due to " + e + " Will proceed without loading any further Nar bundles");
+ logger.warn("Unable to load NAR library bundles due to " + e
+ + " Will proceed without loading any further Nar bundles");
if (logger.isDebugEnabled()) {
logger.warn("", e);
}
@@ -166,7 +169,8 @@ public final class NarUnpacker {
return null;
}
- private static void mapExtensions(final File workingDirectory, final File docsDirectory, final ExtensionMapping mapping) throws IOException {
+ private static void mapExtensions(final File workingDirectory, final File docsDirectory,
+ final ExtensionMapping mapping) throws IOException {
final File[] directoryContents = workingDirectory.listFiles();
if (directoryContents != null) {
for (final File file : directoryContents) {
@@ -182,19 +186,24 @@ public final class NarUnpacker {
/**
* Unpacks the specified nar into the specified base working directory.
*
- * @param nar the nar to unpack
- * @param baseWorkingDirectory the directory to unpack to
+ * @param nar
+ * the nar to unpack
+ * @param baseWorkingDirectory
+ * the directory to unpack to
* @return the directory to the unpacked NAR
- * @throws IOException if unable to explode nar
+ * @throws IOException
+ * if unable to explode nar
*/
- private static File unpackNar(final File nar, final File baseWorkingDirectory) throws IOException {
+ private static File unpackNar(final File nar, final File baseWorkingDirectory)
+ throws IOException {
final File narWorkingDirectory = new File(baseWorkingDirectory, nar.getName() + "-unpacked");
// if the working directory doesn't exist, unpack the nar
if (!narWorkingDirectory.exists()) {
unpack(nar, narWorkingDirectory, calculateMd5sum(nar));
} else {
- // the working directory does exist. Run MD5 sum against the nar file and check if the nar has changed since it was deployed.
+ // the working directory does exist. Run MD5 sum against the nar
+ // file and check if the nar has changed since it was deployed.
final byte[] narMd5 = calculateMd5sum(nar);
final File workingHashFile = new File(narWorkingDirectory, HASH_FILENAME);
if (!workingHashFile.exists()) {
@@ -203,7 +212,8 @@ public final class NarUnpacker {
} else {
final byte[] hashFileContents = Files.readAllBytes(workingHashFile.toPath());
if (!Arrays.equals(hashFileContents, narMd5)) {
- logger.info("Contents of nar {} have changed. Reloading.", new Object[]{nar.getAbsolutePath()});
+ logger.info("Contents of nar {} have changed. Reloading.",
+ new Object[] { nar.getAbsolutePath() });
FileUtils.deleteFile(narWorkingDirectory, true);
unpack(nar, narWorkingDirectory, narMd5);
}
@@ -217,11 +227,13 @@ public final class NarUnpacker {
* Unpacks the NAR to the specified directory. Creates a checksum file that
* used to determine if future expansion is necessary.
*
- * @param workingDirectory the root directory to which the NAR should be
- * unpacked.
- * @throws IOException if the NAR could not be unpacked.
+ * @param workingDirectory
+ * the root directory to which the NAR should be unpacked.
+ * @throws IOException
+ * if the NAR could not be unpacked.
*/
- private static void unpack(final File nar, final File workingDirectory, final byte[] hash) throws IOException {
+ private static void unpack(final File nar, final File workingDirectory, final byte[] hash)
+ throws IOException {
try (JarFile jarFile = new JarFile(nar)) {
Enumeration<JarEntry> jarEntries = jarFile.entries();
@@ -243,7 +255,8 @@ public final class NarUnpacker {
}
}
- private static void unpackDocumentation(final File jar, final File docsDirectory, final ExtensionMapping extensionMapping) throws IOException {
+ private static void unpackDocumentation(final File jar, final File docsDirectory,
+ final ExtensionMapping extensionMapping) throws IOException {
// determine the components that may have documentation
determineDocumentedNiFiComponents(jar, extensionMapping);
@@ -253,7 +266,8 @@ public final class NarUnpacker {
final String entryName = "docs/" + componentName;
// go through each entry in this jar
- for (final Enumeration<JarEntry> jarEnumeration = jarFile.entries(); jarEnumeration.hasMoreElements();) {
+ for (final Enumeration<JarEntry> jarEnumeration = jarFile.entries(); jarEnumeration
+ .hasMoreElements();) {
final JarEntry jarEntry = jarEnumeration.nextElement();
// if this entry is documentation for this component
@@ -265,8 +279,10 @@ public final class NarUnpacker {
final File componentDocsDirectory = new File(docsDirectory, name);
// ensure the documentation directory can be created
- if (!componentDocsDirectory.exists() && !componentDocsDirectory.mkdirs()) {
- logger.warn("Unable to create docs directory " + componentDocsDirectory.getAbsolutePath());
+ if (!componentDocsDirectory.exists()
+ && !componentDocsDirectory.mkdirs()) {
+ logger.warn("Unable to create docs directory "
+ + componentDocsDirectory.getAbsolutePath());
break;
}
} else {
@@ -281,19 +297,27 @@ public final class NarUnpacker {
}
}
- private static void determineDocumentedNiFiComponents(final File jar, final ExtensionMapping extensionMapping) throws IOException {
+ private static void determineDocumentedNiFiComponents(final File jar,
+ final ExtensionMapping extensionMapping) throws IOException {
try (final JarFile jarFile = new JarFile(jar)) {
- final JarEntry processorEntry = jarFile.getJarEntry("META-INF/services/org.apache.nifi.processor.Processor");
- final JarEntry reportingTaskEntry = jarFile.getJarEntry("META-INF/services/org.apache.nifi.reporting.ReportingTask");
- final JarEntry controllerServiceEntry = jarFile.getJarEntry("META-INF/services/org.apache.nifi.controller.ControllerService");
-
- extensionMapping.addAllProcessors(determineDocumentedNiFiComponents(jarFile, processorEntry));
- extensionMapping.addAllReportingTasks(determineDocumentedNiFiComponents(jarFile, reportingTaskEntry));
- extensionMapping.addAllControllerServices(determineDocumentedNiFiComponents(jarFile, controllerServiceEntry));
+ final JarEntry processorEntry = jarFile
+ .getJarEntry("META-INF/services/org.apache.nifi.processor.Processor");
+ final JarEntry reportingTaskEntry = jarFile
+ .getJarEntry("META-INF/services/org.apache.nifi.reporting.ReportingTask");
+ final JarEntry controllerServiceEntry = jarFile
+ .getJarEntry("META-INF/services/org.apache.nifi.controller.ControllerService");
+
+ extensionMapping.addAllProcessors(determineDocumentedNiFiComponents(jarFile,
+ processorEntry));
+ extensionMapping.addAllReportingTasks(determineDocumentedNiFiComponents(jarFile,
+ reportingTaskEntry));
+ extensionMapping.addAllControllerServices(determineDocumentedNiFiComponents(jarFile,
+ controllerServiceEntry));
}
}
- private static List<String> determineDocumentedNiFiComponents(final JarFile jarFile, final JarEntry jarEntry) throws IOException {
+ private static List<String> determineDocumentedNiFiComponents(final JarFile jarFile,
+ final JarEntry jarEntry) throws IOException {
final List<String> componentNames = new ArrayList<>();
if (jarEntry == null) {
@@ -301,13 +325,15 @@ public final class NarUnpacker {
}
try (final InputStream entryInputStream = jarFile.getInputStream(jarEntry);
- final BufferedReader reader = new BufferedReader(new InputStreamReader(entryInputStream))) {
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(
+ entryInputStream))) {
String line;
while ((line = reader.readLine()) != null) {
final String trimmedLine = line.trim();
if (!trimmedLine.isEmpty() && !trimmedLine.startsWith("#")) {
final int indexOfPound = trimmedLine.indexOf("#");
- final String effectiveLine = (indexOfPound > 0) ? trimmedLine.substring(0, indexOfPound) : trimmedLine;
+ final String effectiveLine = (indexOfPound > 0) ? trimmedLine.substring(0,
+ indexOfPound) : trimmedLine;
componentNames.add(effectiveLine);
}
}
@@ -320,12 +346,16 @@ public final class NarUnpacker {
* Creates the specified file, whose contents will come from the
* <tt>InputStream</tt>.
*
- * @param inputStream the contents of the file to create.
- * @param file the file to create.
- * @throws IOException if the file could not be created.
+ * @param inputStream
+ * the contents of the file to create.
+ * @param file
+ * the file to create.
+ * @throws IOException
+ * if the file could not be created.
*/
private static void makeFile(final InputStream inputStream, final File file) throws IOException {
- try (final InputStream in = inputStream; final FileOutputStream fos = new FileOutputStream(file)) {
+ try (final InputStream in = inputStream;
+ final FileOutputStream fos = new FileOutputStream(file)) {
byte[] bytes = new byte[65536];
int numRead;
while ((numRead = in.read(bytes)) != -1) {
@@ -337,9 +367,11 @@ public final class NarUnpacker {
/**
* Calculates an md5 sum of the specified file.
*
- * @param file to calculate the md5sum of
+ * @param file
+ * to calculate the md5sum of
* @return the md5sum bytes
- * @throws IOException if cannot read file
+ * @throws IOException
+ * if cannot read file
*/
private static byte[] calculateMd5sum(final File file) throws IOException {
try (final FileInputStream inputStream = new FileInputStream(file)) {
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ba4a8937/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
index e44f081..fa3cd62 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils/src/test/java/org/apache/nifi/nar/NarUnpackerTest.java
@@ -23,155 +23,163 @@ import org.junit.Test;
public class NarUnpackerTest {
- @BeforeClass
- public static void copyResources() throws IOException {
+ @BeforeClass
+ public static void copyResources() throws IOException {
- final Path sourcePath = Paths.get("./src/test/resources");
- final Path targetPath = Paths.get("./target");
-
- Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {
+ final Path sourcePath = Paths.get("./src/test/resources");
+ final Path targetPath = Paths.get("./target");
- @Override
- public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+ Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {
- Path relativeSource = sourcePath.relativize(dir);
- Path target = targetPath.resolve(relativeSource);
+ @Override
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
+ throws IOException {
- Files.createDirectories(target);
+ Path relativeSource = sourcePath.relativize(dir);
+ Path target = targetPath.resolve(relativeSource);
- return FileVisitResult.CONTINUE;
+ Files.createDirectories(target);
- }
+ return FileVisitResult.CONTINUE;
- @Override
- public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ }
- Path relativeSource = sourcePath.relativize(file);
- Path target = targetPath.resolve(relativeSource);
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
+ throws IOException {
- Files.copy(file, target, REPLACE_EXISTING);
+ Path relativeSource = sourcePath.relativize(file);
+ Path target = targetPath.resolve(relativeSource);
- return FileVisitResult.CONTINUE;
- }
- });
- }
+ Files.copy(file, target, REPLACE_EXISTING);
- @Test
- public void testUnpackNars() {
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ }
- NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+ @Test
+ public void testUnpackNars() {
- assertEquals("./target/NarUnpacker/lib/", properties.getProperty("nifi.nar.library.directory"));
- assertEquals("./target/NarUnpacker/lib2/", properties.getProperty("nifi.nar.library.directory.alt"));
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
- final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+ assertEquals("./target/NarUnpacker/lib/",
+ properties.getProperty("nifi.nar.library.directory"));
+ assertEquals("./target/NarUnpacker/lib2/",
+ properties.getProperty("nifi.nar.library.directory.alt"));
- assertEquals(2,extensionMapping.getAllExtensionNames().size());
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
- assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
- assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.two"));
+ assertEquals(2, extensionMapping.getAllExtensionNames().size());
- final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
- File[] extensionFiles = extensionsWorkingDir.listFiles();
-
- assertEquals(2,extensionFiles.length);
- assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
- assertEquals("dummy-two.nar-unpacked", extensionFiles[1].getName());
- }
+ assertTrue(extensionMapping.getAllExtensionNames().contains(
+ "org.apache.nifi.processors.dummy.one"));
+ assertTrue(extensionMapping.getAllExtensionNames().contains(
+ "org.apache.nifi.processors.dummy.two"));
- @Test
- public void testUnpackNarsFromEmptyDir() throws IOException {
+ final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(2, extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ assertEquals("dummy-two.nar-unpacked", extensionFiles[1].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromEmptyDir() throws IOException {
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
- NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
-
- final File emptyDir = new File ("./target/empty/dir");
- emptyDir.delete();
- emptyDir.deleteOnExit();
- assertTrue(emptyDir.mkdirs());
-
- properties.setProperty("nifi.nar.library.directory.alt", emptyDir.toString());
+ final File emptyDir = new File("./target/empty/dir");
+ emptyDir.delete();
+ emptyDir.deleteOnExit();
+ assertTrue(emptyDir.mkdirs());
- final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+ properties.setProperty("nifi.nar.library.directory.alt", emptyDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertEquals(1, extensionMapping.getAllExtensionNames().size());
+ assertTrue(extensionMapping.getAllExtensionNames().contains(
+ "org.apache.nifi.processors.dummy.one"));
- assertEquals(1,extensionMapping.getAllExtensionNames().size());
- assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
-
final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
- File[] extensionFiles = extensionsWorkingDir.listFiles();
-
- assertEquals(1,extensionFiles.length);
- assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
- }
-
- @Test
- public void testUnpackNarsFromNonExistantDir() {
-
- final File nonExistantDir = new File ("./target/this/dir/should/not/exist/");
- nonExistantDir.delete();
- nonExistantDir.deleteOnExit();
-
- NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
- properties.setProperty("nifi.nar.library.directory.alt", nonExistantDir.toString());
-
- final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
-
- assertTrue(extensionMapping.getAllExtensionNames().contains("org.apache.nifi.processors.dummy.one"));
-
- assertEquals(1,extensionMapping.getAllExtensionNames().size());
-
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(1, extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromNonExistantDir() {
+
+ final File nonExistantDir = new File("./target/this/dir/should/not/exist/");
+ nonExistantDir.delete();
+ nonExistantDir.deleteOnExit();
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+ properties.setProperty("nifi.nar.library.directory.alt", nonExistantDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertTrue(extensionMapping.getAllExtensionNames().contains(
+ "org.apache.nifi.processors.dummy.one"));
+
+ assertEquals(1, extensionMapping.getAllExtensionNames().size());
+
final File extensionsWorkingDir = properties.getExtensionsWorkingDirectory();
- File[] extensionFiles = extensionsWorkingDir.listFiles();
-
- assertEquals(1,extensionFiles.length);
- assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
- }
-
- @Test
- public void testUnpackNarsFromNonDir() throws IOException {
-
- final File nonDir = new File ("./target/file.txt");
- nonDir.createNewFile();
- nonDir.deleteOnExit();
-
- NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
- properties.setProperty("nifi.nar.library.directory.alt", nonDir.toString());
-
- final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
-
- assertNull(extensionMapping);
- }
-
-
- private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
- String file = NarUnpackerTest.class.getResource(propertiesFile).getFile();
-
- System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
-
- NiFiProperties properties = NiFiProperties.getInstance();
-
- // clear out existing properties
- for (String prop : properties.stringPropertyNames()) {
- properties.remove(prop);
- }
-
- InputStream inStream = null;
- try {
- inStream = new BufferedInputStream(new FileInputStream(file));
- properties.load(inStream);
- } catch (final Exception ex) {
- throw new RuntimeException("Cannot load properties file due to " + ex.getLocalizedMessage(), ex);
- } finally {
- if (null != inStream) {
- try {
- inStream.close();
- } catch (final Exception ex) {
- /**
- * do nothing *
- */
- }
- }
- }
-
- return properties;
- }
+ File[] extensionFiles = extensionsWorkingDir.listFiles();
+
+ assertEquals(1, extensionFiles.length);
+ assertEquals("dummy-one.nar-unpacked", extensionFiles[0].getName());
+ }
+
+ @Test
+ public void testUnpackNarsFromNonDir() throws IOException {
+
+ final File nonDir = new File("./target/file.txt");
+ nonDir.createNewFile();
+ nonDir.deleteOnExit();
+
+ NiFiProperties properties = loadSpecifiedProperties("/NarUnpacker/conf/nifi.properties");
+ properties.setProperty("nifi.nar.library.directory.alt", nonDir.toString());
+
+ final ExtensionMapping extensionMapping = NarUnpacker.unpackNars(properties);
+
+ assertNull(extensionMapping);
+ }
+
+ private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
+ String file = NarUnpackerTest.class.getResource(propertiesFile).getFile();
+
+ System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
+
+ NiFiProperties properties = NiFiProperties.getInstance();
+
+ // clear out existing properties
+ for (String prop : properties.stringPropertyNames()) {
+ properties.remove(prop);
+ }
+
+ InputStream inStream = null;
+ try {
+ inStream = new BufferedInputStream(new FileInputStream(file));
+ properties.load(inStream);
+ } catch (final Exception ex) {
+ throw new RuntimeException("Cannot load properties file due to "
+ + ex.getLocalizedMessage(), ex);
+ } finally {
+ if (null != inStream) {
+ try {
+ inStream.close();
+ } catch (final Exception ex) {
+ /**
+ * do nothing *
+ */
+ }
+ }
+ }
+
+ return properties;
+ }
}
\ No newline at end of file
[5/7] incubator-nifi git commit: Merge branch 'NIFI-433' of
https://git-wip-us.apache.org/repos/asf/incubator-nifi into NIFI-433
Posted by de...@apache.org.
Merge branch 'NIFI-433' of https://git-wip-us.apache.org/repos/asf/incubator-nifi into NIFI-433
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/e1e1aecc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/e1e1aecc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/e1e1aecc
Branch: refs/heads/develop
Commit: e1e1aecc8b8e6c75f260edf248f046c1557c088b
Parents: 3c4ea67 2757356
Author: Brandon DeVries <br...@gmail.com>
Authored: Wed Apr 8 12:39:41 2015 -0400
Committer: Brandon DeVries <br...@gmail.com>
Committed: Wed Apr 8 12:39:41 2015 -0400
----------------------------------------------------------------------
----------------------------------------------------------------------