NIFI-4866: Fixed HBase performance issue HBase_1_1_2_ClientService performance dropped due to accessing HBase admin upon every FlowFile transfer. Fixed that by getting master address only once when the service is enabled and a connection is established.
This closes #2464 Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/2d85d22c Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/2d85d22c Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/2d85d22c Branch: refs/heads/HDF-3.1-maint Commit: 2d85d22c752e81d5e637fe96b400324a78b82960 Parents: 33c44b5 Author: Koji Kawamura <ijokaruma...@apache.org> Authored: Sat Feb 10 11:27:17 2018 +0900 Committer: Matt Gilman <matt.c.gil...@gmail.com> Committed: Sun Feb 11 16:17:24 2018 -0500 ---------------------------------------------------------------------- .../org/apache/nifi/hbase/HBase_1_1_2_ClientService.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/2d85d22c/nifi-nar-bundles/nifi-standard-services/nifi-hbase_1_1_2-client-service-bundle/nifi-hbase_1_1_2-client-service/src/main/java/org/apache/nifi/hbase/HBase_1_1_2_ClientService.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-hbase_1_1_2-client-service-bundle/nifi-hbase_1_1_2-client-service/src/main/java/org/apache/nifi/hbase/HBase_1_1_2_ClientService.java b/nifi-nar-bundles/nifi-standard-services/nifi-hbase_1_1_2-client-service-bundle/nifi-hbase_1_1_2-client-service/src/main/java/org/apache/nifi/hbase/HBase_1_1_2_ClientService.java index 12309d6..cc6927b 100644 --- a/nifi-nar-bundles/nifi-standard-services/nifi-hbase_1_1_2-client-service-bundle/nifi-hbase_1_1_2-client-service/src/main/java/org/apache/nifi/hbase/HBase_1_1_2_ClientService.java +++ b/nifi-nar-bundles/nifi-standard-services/nifi-hbase_1_1_2-client-service-bundle/nifi-hbase_1_1_2-client-service/src/main/java/org/apache/nifi/hbase/HBase_1_1_2_ClientService.java @@ -91,6 +91,7 @@ public class HBase_1_1_2_ClientService extends AbstractControllerService impleme private volatile Connection connection; private volatile UserGroupInformation ugi; + private volatile String masterAddress; private List<PropertyDescriptor> properties; private KerberosProperties kerberosProperties; @@ -212,6 +213,7 @@ public class HBase_1_1_2_ClientService extends AbstractControllerService impleme final Admin admin = this.connection.getAdmin(); if (admin != null) { admin.listTableNames(); + masterAddress = admin.getClusterStatus().getMaster().getHostAndPort(); } } } @@ -549,11 +551,7 @@ public class HBase_1_1_2_ClientService extends AbstractControllerService impleme logger.warn("Connection has not been established, could not create a transit URI. Returning null."); return null; } - try { - final String masterAddress = connection.getAdmin().getClusterStatus().getMaster().getHostAndPort(); - return "hbase://" + masterAddress + "/" + tableName + (rowKey != null && !rowKey.isEmpty() ? "/" + rowKey : ""); - } catch (IOException e) { - throw new RuntimeException("Failed to get HBase Admin interface, due to " + e, e); - } + final String transitUriMasterAddress = StringUtils.isEmpty(masterAddress) ? "unknown" : masterAddress; + return "hbase://" + transitUriMasterAddress + "/" + tableName + (StringUtils.isEmpty(rowKey) ? "" : "/" + rowKey); } }