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);
     }
 }

Reply via email to