You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2015/06/01 07:41:51 UTC

[2/3] accumulo git commit: ACCUMULO-3876 Synchronize read on currentKey and initialized

ACCUMULO-3876 Synchronize read on currentKey and initialized


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/3289940f
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/3289940f
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/3289940f

Branch: refs/heads/master
Commit: 3289940fb3c16b5374e3385bb0815994a59f99d8
Parents: 4815ec4
Author: Josh Elser <el...@apache.org>
Authored: Sun May 31 21:55:55 2015 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Mon Jun 1 01:40:35 2015 -0400

----------------------------------------------------------------------
 .../delegation/AuthenticationTokenSecretManager.java |  5 ++++-
 .../delegation/ZooAuthenticationKeyDistributor.java  | 15 ++++++++-------
 2 files changed, 12 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/3289940f/server/base/src/main/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenSecretManager.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenSecretManager.java b/server/base/src/main/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenSecretManager.java
index a52b5f4..66f9cdc 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenSecretManager.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenSecretManager.java
@@ -81,7 +81,10 @@ public class AuthenticationTokenSecretManager extends SecretManager<Authenticati
     DelegationTokenConfig cfg = identifier.getConfig();
 
     long now = System.currentTimeMillis();
-    final AuthenticationKey secretKey = currentKey;
+    final AuthenticationKey secretKey;
+    synchronized (this) {
+      secretKey = currentKey;
+    }
     identifier.setKeyId(secretKey.getKeyId());
     identifier.setIssueDate(now);
     long expiration = now + tokenMaxLifetime;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3289940f/server/base/src/main/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyDistributor.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyDistributor.java b/server/base/src/main/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyDistributor.java
index b327a26..0542596 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyDistributor.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/delegation/ZooAuthenticationKeyDistributor.java
@@ -27,6 +27,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.accumulo.fate.zookeeper.ZooUtil;
 import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeExistsPolicy;
@@ -46,7 +47,7 @@ public class ZooAuthenticationKeyDistributor {
 
   private final ZooReaderWriter zk;
   private final String baseNode;
-  private boolean initialized = false;
+  private AtomicBoolean initialized = new AtomicBoolean(false);
 
   public ZooAuthenticationKeyDistributor(ZooReaderWriter zk, String baseNode) {
     checkNotNull(zk);
@@ -59,7 +60,7 @@ public class ZooAuthenticationKeyDistributor {
    * Ensures that ZooKeeper is in a correct state to perform distribution of {@link AuthenticationKey}s.
    */
   public synchronized void initialize() throws KeeperException, InterruptedException {
-    if (initialized) {
+    if (initialized.get()) {
       return;
     }
 
@@ -74,7 +75,7 @@ public class ZooAuthenticationKeyDistributor {
         Id actualId = actualAcl.getId();
         // The expected outcome from ZooUtil.PRIVATE
         if (actualAcl.getPerms() == expectedAcl.getPerms() && actualId.getScheme().equals("digest") && actualId.getId().startsWith("accumulo:")) {
-          initialized = true;
+          initialized.set(true);
           return;
         }
       } else {
@@ -85,7 +86,7 @@ public class ZooAuthenticationKeyDistributor {
       throw new IllegalStateException("Delegation token secret key node in ZooKeeper is not protected.");
     }
 
-    initialized = true;
+    initialized.set(true);
   }
 
   /**
@@ -94,7 +95,7 @@ public class ZooAuthenticationKeyDistributor {
    * @return A list of {@link AuthenticationKey}s
    */
   public List<AuthenticationKey> getCurrentKeys() throws KeeperException, InterruptedException {
-    checkState(initialized, "Not initialized");
+    checkState(initialized.get(), "Not initialized");
     List<String> children = zk.getChildren(baseNode);
 
     // Shortcircuit to avoid a list creation
@@ -127,7 +128,7 @@ public class ZooAuthenticationKeyDistributor {
    *          The key to add to ZooKeeper
    */
   public synchronized void advertise(AuthenticationKey newKey) throws KeeperException, InterruptedException {
-    checkState(initialized, "Not initialized");
+    checkState(initialized.get(), "Not initialized");
     checkNotNull(newKey);
 
     // Make sure the node doesn't already exist
@@ -161,7 +162,7 @@ public class ZooAuthenticationKeyDistributor {
    *          The key to remove from ZooKeeper
    */
   public synchronized void remove(AuthenticationKey key) throws KeeperException, InterruptedException {
-    checkState(initialized, "Not initialized");
+    checkState(initialized.get(), "Not initialized");
     checkNotNull(key);
 
     String path = qualifyPath(key);