Author: ecn
Date: Thu Apr 4 15:03:13 2013
New Revision: 1464586
URL: http://svn.apache.org/r1464586
Log:
ACCUMULO-1238 throw a better error than permission denied when a table has just
been deleted
Modified:
accumulo/trunk/ (props changed)
accumulo/trunk/assemble/ (props changed)
accumulo/trunk/core/ (props changed)
accumulo/trunk/examples/ (props changed)
accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java
(props changed)
accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/zookeeper/ZooSession.java
(props changed)
accumulo/trunk/server/ (props changed)
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tableOps/CreateTable.java
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
accumulo/trunk/src/ (props changed)
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/concurrent/CloneTable.java
Propchange: accumulo/trunk/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.5:r1464582
Propchange: accumulo/trunk/assemble/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.5/assemble:r1464582
Propchange: accumulo/trunk/core/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.5/core:r1464582
Propchange: accumulo/trunk/examples/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.5/examples:r1464582
Propchange:
accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java
------------------------------------------------------------------------------
Merged
/accumulo/branches/1.5/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java:r1464582
Propchange:
accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/zookeeper/ZooSession.java
------------------------------------------------------------------------------
Merged
/accumulo/branches/1.5/fate/src/main/java/org/apache/accumulo/fate/zookeeper/ZooSession.java:r1464582
Propchange: accumulo/trunk/server/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.5/server:r1464582
Modified:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tableOps/CreateTable.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tableOps/CreateTable.java?rev=1464586&r1=1464585&r2=1464586&view=diff
==============================================================================
---
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tableOps/CreateTable.java
(original)
+++
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/tableOps/CreateTable.java
Thu Apr 4 15:03:13 2013
@@ -223,11 +223,6 @@ class SetupPermissions extends MasterRep
}
@Override
- public long isReady(long tid, Master environment) throws Exception {
- return 0;
- }
-
- @Override
public Repo<Master> call(long tid, Master env) throws Exception {
// give all table permissions to the creator
SecurityOperation security = AuditedSecurityOperation.getInstance();
Modified:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java?rev=1464586&r1=1464585&r2=1464586&view=diff
==============================================================================
---
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
(original)
+++
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
Thu Apr 4 15:03:13 2013
@@ -47,6 +47,7 @@ public class ZKPermHandler implements Pe
private static PermissionHandler zkPermHandlerInstance = null;
private String ZKUserPath;
+ private String ZKTablePath;
private final ZooCache zooCache;
private final String ZKUserSysPerms = "/System";
private final String ZKUserTablePerms = "/Tables";
@@ -59,6 +60,7 @@ public class ZKPermHandler implements Pe
public void initialize(String instanceId, boolean initialize) {
ZKUserPath = ZKSecurityTool.getInstancePath(instanceId) + "/users";
+ ZKTablePath = ZKSecurityTool.getInstancePath(instanceId) + "/tables";
}
public ZKPermHandler() {
@@ -66,7 +68,7 @@ public class ZKPermHandler implements Pe
}
@Override
- public boolean hasTablePermission(String user, String table, TablePermission
permission) {
+ public boolean hasTablePermission(String user, String table, TablePermission
permission) throws TableNotFoundException {
byte[] serializedPerms;
try {
String path = ZKUserPath + "/" + user + ZKUserTablePerms + "/" + table;
@@ -74,6 +76,22 @@ public class ZKPermHandler implements Pe
serializedPerms = ZooReaderWriter.getRetryingInstance().getData(path,
null);
} catch (KeeperException e) {
if (e.code() == Code.NONODE) {
+ // maybe the table was just deleted?
+ try {
+ // check for existence:
+ ZooReaderWriter.getRetryingInstance().getData(ZKTablePath + "/" +
table, null);
+ // it's there, you don't have permission
+ return false;
+ } catch (InterruptedException ex) {
+ log.warn("Unhandled InterruptedException, failing closed for table
permission check", e);
+ return false;
+ } catch (KeeperException ex) {
+ // not there, throw an informative exception
+ if (e.code() == Code.NONODE) {
+ throw new TableNotFoundException(null, table, "while checking
permissions");
+ }
+ log.warn("Unhandled InterruptedException, failing closed for table
permission check", e);
+ }
return false;
}
log.warn("Unhandled KeeperException, failing closed for table permission
check", e);
Propchange: accumulo/trunk/src/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.5/src:r1464582
Modified:
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/concurrent/CloneTable.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/concurrent/CloneTable.java?rev=1464586&r1=1464585&r2=1464586&view=diff
==============================================================================
---
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/concurrent/CloneTable.java
(original)
+++
accumulo/trunk/test/src/main/java/org/apache/accumulo/test/randomwalk/concurrent/CloneTable.java
Thu Apr 4 15:03:13 2013
@@ -44,8 +44,8 @@ public class CloneTable extends Test {
boolean flush = rand.nextBoolean();
try {
+ log.debug("Cloning table " + srcTableName + " " + newTableName + " " +
flush);
conn.tableOperations().clone(srcTableName, newTableName, flush, new
HashMap<String,String>(), new HashSet<String>());
- log.debug("Cloned table " + srcTableName + " " + newTableName + " " +
flush);
} catch (TableExistsException e) {
log.debug("Clone " + srcTableName + " failed, " + newTableName + "
exist");
} catch (TableNotFoundException e) {