You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by mw...@apache.org on 2018/05/10 16:43:50 UTC

[accumulo] branch master updated: Fixes #414 - Create Connector for new user from existing (#455)

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

mwalch 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 35edb2a  Fixes #414 - Create Connector for new user from existing (#455)
35edb2a is described below

commit 35edb2a4122641f2d17c4919e02c7162d2433962
Author: Mike Walch <mw...@apache.org>
AuthorDate: Thu May 10 12:43:48 2018 -0400

    Fixes #414 - Create Connector for new user from existing (#455)
---
 .../org/apache/accumulo/core/client/Connector.java  | 12 +++++++++++-
 .../accumulo/core/client/impl/ConnectorImpl.java    | 21 +++++++++++----------
 .../accumulo/core/client/mock/MockConnector.java    |  5 +++++
 .../accumulo/test/functional/ConnectorIT.java       | 14 ++++++++++++++
 4 files changed, 41 insertions(+), 11 deletions(-)

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 cf5661b..41a87c4 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
@@ -314,6 +314,12 @@ public abstract class Connector {
   public abstract ReplicationOperations replicationOperations();
 
   /**
+   * @return {@link ConnectionInfo} which contains information about Connection to Accumulo
+   * @since 2.0.0
+   */
+  public abstract ConnectionInfo info();
+
+  /**
    * Builds ConnectionInfo after all options have been specified
    *
    * @since 2.0.0
@@ -391,7 +397,7 @@ public abstract class Connector {
      *          ConnectionInfo object
      * @return this builder
      */
-    ConnectorFactory usingConnectionInfo(ConnectionInfo connectionInfo);
+    FromOptions usingConnectionInfo(ConnectionInfo connectionInfo);
   }
 
   /**
@@ -574,6 +580,10 @@ public abstract class Connector {
     ConnectionOptions withBatchWriterConfig(BatchWriterConfig batchWriterConfig);
   }
 
+  public interface FromOptions extends ConnectionOptions, PropertyOptions, AuthenticationArgs {
+
+  }
+
   /**
    * Creates builder for Connector
    *
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java b/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java
index 1078932..c02169e 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java
@@ -46,7 +46,6 @@ import org.apache.accumulo.core.client.admin.NamespaceOperations;
 import org.apache.accumulo.core.client.admin.ReplicationOperations;
 import org.apache.accumulo.core.client.admin.SecurityOperations;
 import org.apache.accumulo.core.client.admin.TableOperations;
-import org.apache.accumulo.core.client.impl.thrift.ClientService;
 import org.apache.accumulo.core.client.impl.thrift.SecurityErrorCode;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
 import org.apache.accumulo.core.client.security.tokens.CredentialProviderToken;
@@ -82,13 +81,10 @@ public class ConnectorImpl extends Connector {
     // server jar
     final String tokenClassName = context.getCredentials().getToken().getClass().getName();
     if (!SYSTEM_TOKEN_NAME.equals(tokenClassName)) {
-      ServerClient.executeVoid(context, new ClientExec<ClientService.Client>() {
-        @Override
-        public void execute(ClientService.Client iface) throws Exception {
-          if (!iface.authenticate(Tracer.traceInfo(), context.rpcCreds()))
-            throw new AccumuloSecurityException("Authentication failed, access denied",
-                SecurityErrorCode.BAD_CREDENTIALS);
-        }
+      ServerClient.executeVoid(context, iface -> {
+        if (!iface.authenticate(Tracer.traceInfo(), context.rpcCreds()))
+          throw new AccumuloSecurityException("Authentication failed, access denied",
+              SecurityErrorCode.BAD_CREDENTIALS);
       });
     }
 
@@ -243,9 +239,14 @@ public class ConnectorImpl extends Connector {
     return replicationops;
   }
 
+  @Override
+  public ConnectionInfo info() {
+    return this.context.getConnectionInfo();
+  }
+
   public static class ConnectorBuilderImpl
       implements InstanceArgs, PropertyOptions, ConnectionInfoOptions, AuthenticationArgs,
-      ConnectionOptions, SslOptions, SaslOptions, ConnectorFactory {
+      ConnectionOptions, SslOptions, SaslOptions, ConnectorFactory, FromOptions {
 
     private Properties properties = new Properties();
     private AuthenticationToken token = null;
@@ -451,7 +452,7 @@ public class ConnectorImpl extends Connector {
     }
 
     @Override
-    public ConnectorFactory usingConnectionInfo(ConnectionInfo connectionInfo) {
+    public FromOptions usingConnectionInfo(ConnectionInfo connectionInfo) {
       this.properties = connectionInfo.getProperties();
       this.token = connectionInfo.getAuthenticationToken();
       return this;
diff --git a/core/src/main/java/org/apache/accumulo/core/client/mock/MockConnector.java b/core/src/main/java/org/apache/accumulo/core/client/mock/MockConnector.java
index e473f71..c00318a 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/mock/MockConnector.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mock/MockConnector.java
@@ -25,6 +25,7 @@ import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.BatchWriterConfig;
 import org.apache.accumulo.core.client.ConditionalWriter;
 import org.apache.accumulo.core.client.ConditionalWriterConfig;
+import org.apache.accumulo.core.client.ConnectionInfo;
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.MultiTableBatchWriter;
@@ -187,4 +188,8 @@ public class MockConnector extends Connector {
     throw new UnsupportedOperationException();
   }
 
+  @Override
+  public ConnectionInfo info() {
+    throw new UnsupportedOperationException();
+  }
 }
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/ConnectorIT.java b/test/src/main/java/org/apache/accumulo/test/functional/ConnectorIT.java
index bf02ac9..4ca61fb 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/ConnectorIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/ConnectorIT.java
@@ -61,5 +61,19 @@ public class ConnectorIT extends AccumuloClusterHarness {
     Assert.assertEquals(instanceName, conn.getInstance().getInstanceName());
     Assert.assertEquals(zookeepers, conn.getInstance().getZooKeepers());
     Assert.assertEquals(user, conn.whoami());
+
+    final String user2 = "testuser2";
+    final String password2 = "testpassword2";
+    c.securityOperations().createLocalUser(user2, new PasswordToken(password2));
+
+    Connector conn2 = Connector.builder().usingConnectionInfo(conn.info())
+        .usingToken(user2, new PasswordToken(password2)).build();
+    Assert.assertEquals(instanceName, conn2.getInstance().getInstanceName());
+    Assert.assertEquals(zookeepers, conn2.getInstance().getZooKeepers());
+    Assert.assertEquals(user2, conn2.whoami());
+    info = conn2.info();
+    Assert.assertEquals(instanceName, info.getInstanceName());
+    Assert.assertEquals(zookeepers, info.getZooKeepers());
+    Assert.assertEquals(user2, info.getPrincipal());
   }
 }

-- 
To stop receiving notification emails like this one, please contact
mwalch@apache.org.