[
https://issues.apache.org/jira/browse/ACCUMULO-3135?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14138103#comment-14138103
]
Josh Elser commented on ACCUMULO-3135:
--------------------------------------
Guessing because I don't have the logs (maybe you can help me verify,
[~kturner]). The gist of it is as follows:
1. The clone table table operation seeds the CloneTable fate op, which then
calls ClonePermissions
2. ClonePermissions ends up calling grantTablePermission
{code:title=SecurityOperation.java}
public void grantTablePermission(TCredentials c, String user, String tableId,
TablePermission permission) throws ThriftSecurityException {
if (!canGrantTable(c, user, tableId))
throw new ThriftSecurityException(c.getPrincipal(),
SecurityErrorCode.PERMISSION_DENIED);
targetUserExists(user);
try {
permHandle.grantTablePermission(user, tableId, permission);
log.info("Granted table permission " + permission + " for user " + user +
" on the table " + tableId + " at the request of user " + c.getPrincipal());
} catch (AccumuloSecurityException e) {
throw e.asThriftException();
} catch (TableNotFoundException e) {
throw new ThriftSecurityException(c.getPrincipal(),
SecurityErrorCode.TABLE_DOESNT_EXIST);
}
}
{code}
If the table the grant is called for doesn't exist, it eats the
{{TableNotFoundException}} and throws a {{ThriftSecurityException}} with
{{SecurityErrorCode.TABLE_DOESNT_EXIST}}. I'm guessing that TableOperations
should unwrap the {{ThriftSecurityException}} when it has the
{{TABLE_DOESNT_EXIST}} code and make a {{TableNotFoundException}} from it?
Going to dig into whether or not this was actually a change in implementation
since 1.5.1 or earlier.
> RW concurrent test failed with table exist exception
> ----------------------------------------------------
>
> Key: ACCUMULO-3135
> URL: https://issues.apache.org/jira/browse/ACCUMULO-3135
> Project: Accumulo
> Issue Type: Bug
> Environment: Running RW test against 1.5.2 RC1
> Reporter: Keith Turner
> Assignee: Keith Turner
> Fix For: 1.5.2
>
>
> Saw the following error when running RW test against 1.5.2 RC1.
> {noformat}
> 16 18:34:56,869 [server.Accumulo] INFO : Zookeeper connected and initialized,
> attemping to talk to HDFS
> at java.lang.reflect.Method.invoke(Method.java:606)
> at org.apache.accumulo.start.Main$1.run(Main.java:107)
> at java.lang.Thread.run(Thread.java:744)
> Caused by: java.lang.Exception: Error running node ct.CloneTable
> at org.apache.accumulo.test.randomwalk.Module.visit(Module.java:285)
> at org.apache.accumulo.test.randomwalk.Module.visit(Module.java:254)
> ... 8 more
> Caused by: org.apache.accumulo.core.client.AccumuloSecurityException: Error
> TABLE_DOESNT_EXIST for user root - Unknown security exception
> at
> org.apache.accumulo.core.client.admin.TableOperationsImpl.doTableOperation(TableOperationsImpl.java:298)
> at
> org.apache.accumulo.core.client.admin.TableOperationsImpl.doTableOperation(TableOperationsImpl.java:280)
> at
> org.apache.accumulo.core.client.admin.TableOperationsImpl.clone(TableOperationsImpl.java:688)
> at
> org.apache.accumulo.test.randomwalk.concurrent.CloneTable.visit(CloneTable.java:48)
> at org.apache.accumulo.test.randomwalk.Module.visit(Module.java:254)
> ... 9 more
> Caused by: ThriftSecurityException(user:root, code:TABLE_DOESNT_EXIST)
> at
> org.apache.accumulo.core.master.thrift.MasterClientService$executeTableOperation_result$executeTableOperation_resultStandardScheme.read(MasterClientService.java:16120)
> at
> org.apache.accumulo.core.master.thrift.MasterClientService$executeTableOperation_result$executeTableOperation_resultStandardScheme.read(MasterClientService.java:16106)
> at
> org.apache.accumulo.core.master.thrift.MasterClientService$executeTableOperation_result.read(MasterClientService.java:16048)
> at
> org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
> at
> org.apache.accumulo.core.master.thrift.MasterClientService$Client.recv_executeTableOperation(MasterClientService.java:499)
> at
> org.apache.accumulo.core.master.thrift.MasterClientService$Client.executeTableOperation(MasterClientService.java:480)
> at
> org.apache.accumulo.core.client.admin.TableOperationsImpl.executeTableOperation(TableOperationsImpl.java:236)
> at
> org.apache.accumulo.core.client.admin.TableOperationsImpl.doTableOperation(TableOperationsImpl.java:289)
> {noformat}
> Looking at the test code, it specifically checks for
> {{TableNotFoundException}}, but its getting a
> {{ThriftSecurityException(user:root, code:TABLE_DOESNT_EXIST)}}. Need to
> figure out if this is change in behavior since 1.5.1.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)