Author: vines
Date: Fri Mar  1 23:26:02 2013
New Revision: 1451770

URL: http://svn.apache.org/r1451770
Log:
ACCUMULO-1123 - Had compensation for propogation times for uncached 
permissions. Authorizations and passwords didn't have the luxury. Added in 
transient state for authorizations and a pause for ChangePass to help 
compensate. Ideally, there would be compensation throughout the code for the 
password, but the code has already become a bit of a rats nest. WalkingSecurity 
helped clean it up tremendously, I should rewrite a lot of the states now that 
that exists to make it simpler.



Modified:
    accumulo/trunk/   (props changed)
    
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/ChangePass.java
    
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/TableOp.java
    
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/WalkingSecurity.java

Propchange: accumulo/trunk/
------------------------------------------------------------------------------
  Merged /accumulo/branches/1.5:r1451718-1451761,1451763-1451768

Modified: 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/ChangePass.java
URL: 
http://svn.apache.org/viewvc/accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/ChangePass.java?rev=1451770&r1=1451769&r2=1451770&view=diff
==============================================================================
--- 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/ChangePass.java
 (original)
+++ 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/ChangePass.java
 Fri Mar  1 23:26:02 2013
@@ -81,6 +81,8 @@ public class ChangePass extends Test {
       }
     }
     WalkingSecurity.get(state).changePassword(target, newPass);
+    // Waiting 1 second for password to propogate through Zk
+    Thread.sleep(1000);
     if (!hasPerm)
       throw new AccumuloException("Password change succeeded when it should 
have failed for " + source + " changing the password for " + target + ".");
   }

Modified: 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/TableOp.java
URL: 
http://svn.apache.org/viewvc/accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/TableOp.java?rev=1451770&r1=1451769&r2=1451770&view=diff
==============================================================================
--- 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/TableOp.java
 (original)
+++ 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/TableOp.java
 Fri Mar  1 23:26:02 2013
@@ -72,6 +72,7 @@ public class TableOp extends Test {
         boolean canRead = 
WalkingSecurity.get(state).canScan(WalkingSecurity.get(state).getTabCredentials(),
 tableName);
         Authorizations auths = 
WalkingSecurity.get(state).getUserAuthorizations(WalkingSecurity.get(state).getTabCredentials());
         boolean ambiguousZone = 
WalkingSecurity.get(state).inAmbiguousZone(conn.whoami(), tp);
+        boolean ambiguousAuths = 
WalkingSecurity.get(state).ambiguousAuthorizations(conn.whoami());
         
         try {
           Scanner scan = conn.createScanner(tableName, 
conn.securityOperations().getUserAuthorizations(conn.whoami()));
@@ -81,7 +82,7 @@ public class TableOp extends Test {
             Entry<Key,Value> entry = iter.next();
             Key k = entry.getKey();
             seen++;
-            if (!auths.contains(k.getColumnVisibilityData()))
+            if (!auths.contains(k.getColumnVisibilityData()) && 
!ambiguousAuths)
               throw new AccumuloException("Got data I should not be capable of 
seeing: " + k + " table " + tableName);
           }
           if (!canRead && !ambiguousZone)
@@ -90,7 +91,7 @@ public class TableOp extends Test {
             if (auths.contains(entry.getKey().getBytes()))
               seen = seen - entry.getValue();
           }
-          if (seen != 0)
+          if (seen != 0 && !ambiguousAuths)
             throw new AccumuloException("Got mismatched amounts of data");
         } catch (TableNotFoundException tnfe) {
           if (tableExists)
@@ -103,6 +104,12 @@ public class TableOp extends Test {
             else
               return;
           }
+          if (ae.getErrorCode().equals(SecurityErrorCode.BAD_AUTHORIZATIONS)) {
+            if (ambiguousAuths)
+              return;
+            else
+              throw new AccumuloException("Mismatched authorizations! ", ae);
+          }
           throw new AccumuloException("Unexpected exception!", ae);
         } catch (RuntimeException re) {
           if (re.getCause() instanceof AccumuloSecurityException
@@ -112,6 +119,14 @@ public class TableOp extends Test {
             else
               return;
           }
+          if (re.getCause() instanceof AccumuloSecurityException
+              && ((AccumuloSecurityException) 
re.getCause()).getErrorCode().equals(SecurityErrorCode.BAD_AUTHORIZATIONS)) {
+            if (ambiguousAuths)
+              return;
+            else
+              throw new AccumuloException("Mismatched authorizations! ", 
re.getCause());
+          }
+          
           throw new AccumuloException("Unexpected exception!", re);
         }
         

Modified: 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/WalkingSecurity.java
URL: 
http://svn.apache.org/viewvc/accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/WalkingSecurity.java?rev=1451770&r1=1451769&r2=1451770&view=diff
==============================================================================
--- 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/WalkingSecurity.java
 (original)
+++ 
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/security/WalkingSecurity.java
 Fri Mar  1 23:26:02 2013
@@ -122,6 +122,15 @@ public class WalkingSecurity extends Sec
     return (Authorizations) state.get(user + "_auths");
   }
   
+  public boolean ambiguousAuthorizations(String userName) {
+    Long setTime = state.getLong("Auths-" + userName + '-' + "time");
+    if (setTime == null)
+      throw new RuntimeException("WTF? Auths-" + userName + '-' + "time is 
null");
+    if (System.currentTimeMillis() < (setTime + 1000))
+      return true;
+    return false;
+  }
+  
   @Override
   public void initUser(String user) throws AccumuloSecurityException {
     changeAuthorizations(user, new Authorizations());


Reply via email to