You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2020/07/16 00:55:30 UTC

[accumulo] branch master updated: Add method to create client from connector (#1657)

This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/master by this push:
     new 2196bc8  Add method to create client from connector (#1657)
2196bc8 is described below

commit 2196bc8418eb0eedf599e9a413fe356a41b742a8
Author: Keith Turner <kt...@apache.org>
AuthorDate: Wed Jul 15 20:55:20 2020 -0400

    Add method to create client from connector (#1657)
---
 .../org/apache/accumulo/core/client/Connector.java | 22 +++++++++++++++++++++
 .../accumulo/test/functional/AccumuloClientIT.java | 23 ++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/core/src/main/java/org/apache/accumulo/core/client/Connector.java b/core/src/main/java/org/apache/accumulo/core/client/Connector.java
index 4172fd4..fa30e62 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/Connector.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/Connector.java
@@ -284,4 +284,26 @@ public abstract class Connector {
       throws AccumuloSecurityException, AccumuloException {
     return new ConnectorImpl((ClientContext) client);
   }
+
+  /**
+   * Creates a new Accumulo Client from a Connector. The returned client should be closed and
+   * closing it will not affect the Connector from which it was derived. This method is useful for
+   * cases where code written using Connector must call code written using AccumuloClient. Below is
+   * an example.
+   *
+   * <pre>
+   * <code>
+   *   Connector conn = getMyConnector();
+   *   try(AccumuloClient client = Connector.newClient(conn) {
+   *      doSomething(client);
+   *   }
+   * </code>
+   * </pre>
+   *
+   * @since 2.1.0
+   */
+  public static AccumuloClient newClient(Connector conn) {
+    return Accumulo.newClient().from(((ConnectorImpl) conn).getAccumuloClient().getProperties())
+        .build();
+  }
 }
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/AccumuloClientIT.java b/test/src/main/java/org/apache/accumulo/test/functional/AccumuloClientIT.java
index 4662166..bd0cbd8 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/AccumuloClientIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/AccumuloClientIT.java
@@ -32,6 +32,7 @@ import org.apache.accumulo.core.client.Accumulo;
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.ConditionalWriterConfig;
+import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.admin.TableOperations;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
@@ -93,6 +94,28 @@ public class AccumuloClientIT extends AccumuloClusterHarness {
     expectClosed(c::tableOperations);
   }
 
+  @SuppressWarnings("deprecation")
+  @Test
+  public void testGetAccumuloClientFromConnector() throws Exception {
+    try (AccumuloClient client1 = Accumulo.newClient().from(getClientProps()).build()) {
+      org.apache.accumulo.core.client.Connector c =
+          org.apache.accumulo.core.client.Connector.from(client1);
+
+      String tableName = getUniqueNames(1)[0];
+
+      c.tableOperations().create(tableName);
+
+      try (AccumuloClient client2 = Connector.newClient(c)) {
+        assertTrue(client2.tableOperations().list().contains(tableName));
+      }
+
+      // closing client2 should not have had an impact on the connector or client1
+
+      assertTrue(client1.tableOperations().list().contains(tableName));
+      assertTrue(c.tableOperations().list().contains(tableName));
+    }
+  }
+
   @Test
   public void testAccumuloClientBuilder() throws Exception {
     AccumuloClient c = Accumulo.newClient().from(getClientProps()).build();