You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2013/12/28 02:07:37 UTC
[4/8] ACCUMULO-1965 Fix exception handling for namespaces
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/main/java/org/apache/accumulo/core/master/thrift/TableOperation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/master/thrift/TableOperation.java b/core/src/main/java/org/apache/accumulo/core/master/thrift/TableOperation.java
deleted file mode 100644
index bafddcd..0000000
--- a/core/src/main/java/org/apache/accumulo/core/master/thrift/TableOperation.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Autogenerated by Thrift Compiler (0.9.0)
- *
- * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
- * @generated
- */
-package org.apache.accumulo.core.master.thrift;
-
-
-import java.util.Map;
-import java.util.HashMap;
-import org.apache.thrift.TEnum;
-
-@SuppressWarnings("all") public enum TableOperation implements org.apache.thrift.TEnum {
- CREATE(0),
- CLONE(1),
- DELETE(2),
- RENAME(3),
- ONLINE(4),
- OFFLINE(5),
- MERGE(6),
- DELETE_RANGE(7),
- BULK_IMPORT(8),
- COMPACT(9),
- IMPORT(10),
- EXPORT(11),
- COMPACT_CANCEL(12);
-
- private final int value;
-
- private TableOperation(int value) {
- this.value = value;
- }
-
- /**
- * Get the integer value of this enum value, as defined in the Thrift IDL.
- */
- public int getValue() {
- return value;
- }
-
- /**
- * Find a the enum type by its integer value, as defined in the Thrift IDL.
- * @return null if the value is not found.
- */
- public static TableOperation findByValue(int value) {
- switch (value) {
- case 0:
- return CREATE;
- case 1:
- return CLONE;
- case 2:
- return DELETE;
- case 3:
- return RENAME;
- case 4:
- return ONLINE;
- case 5:
- return OFFLINE;
- case 6:
- return MERGE;
- case 7:
- return DELETE_RANGE;
- case 8:
- return BULK_IMPORT;
- case 9:
- return COMPACT;
- case 10:
- return IMPORT;
- case 11:
- return EXPORT;
- case 12:
- return COMPACT_CANCEL;
- default:
- return null;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/main/java/org/apache/accumulo/core/metadata/MetadataTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/MetadataTable.java b/core/src/main/java/org/apache/accumulo/core/metadata/MetadataTable.java
index c31cb0d..56966d3 100644
--- a/core/src/main/java/org/apache/accumulo/core/metadata/MetadataTable.java
+++ b/core/src/main/java/org/apache/accumulo/core/metadata/MetadataTable.java
@@ -16,13 +16,13 @@
*/
package org.apache.accumulo.core.metadata;
-import org.apache.accumulo.core.Constants;
+import org.apache.accumulo.core.client.impl.Namespaces;
public class MetadataTable {
public static final String OLD_NAME = "!METADATA";
public static final String ID = "!0";
- public static final String NAME = Constants.ACCUMULO_NAMESPACE + ".metadata";
+ public static final String NAME = Namespaces.ACCUMULO_NAMESPACE + ".metadata";
}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java b/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java
index 527f242..85219eb 100644
--- a/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java
+++ b/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java
@@ -16,7 +16,7 @@
*/
package org.apache.accumulo.core.metadata;
-import org.apache.accumulo.core.Constants;
+import org.apache.accumulo.core.client.impl.Namespaces;
import org.apache.accumulo.core.data.KeyExtent;
import org.apache.hadoop.io.Text;
@@ -26,7 +26,7 @@ import org.apache.hadoop.io.Text;
public class RootTable {
public static final String ID = "+r";
- public static final String NAME = Constants.ACCUMULO_NAMESPACE + ".root";
+ public static final String NAME = Namespaces.ACCUMULO_NAMESPACE + ".root";
/**
* DFS location relative to the Accumulo directory
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/main/java/org/apache/accumulo/core/util/shell/commands/NamespacesCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/NamespacesCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/NamespacesCommand.java
index cbbc105..7f41c32 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/NamespacesCommand.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/NamespacesCommand.java
@@ -22,9 +22,9 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
-import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.client.AccumuloException;
import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.apache.accumulo.core.client.impl.Namespaces;
import org.apache.accumulo.core.util.shell.Shell;
import org.apache.accumulo.core.util.shell.Shell.Command;
import org.apache.commons.cli.CommandLine;
@@ -47,7 +47,7 @@ public class NamespacesCommand extends Command {
@Override
public String apply(Map.Entry<String,String> entry) {
String name = entry.getKey();
- if (Constants.DEFAULT_NAMESPACE.equals(name))
+ if (Namespaces.DEFAULT_NAMESPACE.equals(name))
name = DEFAULT_NAMESPACE_DISPLAY_NAME;
String id = entry.getValue();
if (cl.hasOption(namespaceIdOption.getOpt()))
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/main/thrift/client.thrift
----------------------------------------------------------------------
diff --git a/core/src/main/thrift/client.thrift b/core/src/main/thrift/client.thrift
index 601a7b2..38a8076 100644
--- a/core/src/main/thrift/client.thrift
+++ b/core/src/main/thrift/client.thrift
@@ -21,128 +21,131 @@ include "security.thrift"
include "trace.thrift"
enum TableOperation {
- CREATE,
- DELETE,
- RENAME,
- SET_PROPERTY,
- REMOVE_PROPERTY,
- OFFLINE,
- ONLINE,
- FLUSH,
- PERMISSION,
- CLONE,
- MERGE,
- DELETE_RANGE,
- BULK_IMPORT,
- COMPACT
- IMPORT
- EXPORT
- COMPACT_CANCEL
+ CREATE
+ DELETE
+ RENAME
+ SET_PROPERTY
+ REMOVE_PROPERTY
+ OFFLINE
+ ONLINE
+ FLUSH
+ PERMISSION
+ CLONE
+ MERGE
+ DELETE_RANGE
+ BULK_IMPORT
+ COMPACT
+ IMPORT
+ EXPORT
+ COMPACT_CANCEL
}
enum TableOperationExceptionType {
- EXISTS,
- NOTFOUND,
- OFFLINE,
- BULK_BAD_INPUT_DIRECTORY,
- BULK_BAD_ERROR_DIRECTORY,
- BAD_RANGE,
- OTHER
+ EXISTS
+ NOTFOUND
+ OFFLINE
+ BULK_BAD_INPUT_DIRECTORY
+ BULK_BAD_ERROR_DIRECTORY
+ BAD_RANGE
+ OTHER
+ NAMESPACE_EXISTS
+ NAMESPACE_NOTFOUND
+ INVALID_NAME
}
enum ConfigurationType {
- CURRENT,
- SITE,
- DEFAULT
+ CURRENT
+ SITE
+ DEFAULT
}
enum SecurityErrorCode {
- DEFAULT_SECURITY_ERROR = 0,
- BAD_CREDENTIALS = 1,
- PERMISSION_DENIED = 2,
- USER_DOESNT_EXIST = 3,
- CONNECTION_ERROR = 4,
- USER_EXISTS = 5,
- GRANT_INVALID = 6,
- BAD_AUTHORIZATIONS = 7,
- INVALID_INSTANCEID = 8,
- TABLE_DOESNT_EXIST = 9,
- UNSUPPORTED_OPERATION = 10,
- INVALID_TOKEN = 11,
- AUTHENTICATOR_FAILED = 12,
- AUTHORIZOR_FAILED = 13,
- PERMISSIONHANDLER_FAILED = 14,
- TOKEN_EXPIRED = 15,
- SERIALIZATION_ERROR = 16,
- INSUFFICIENT_PROPERTIES = 17,
- NAMESPACE_DOESNT_EXIST = 18;
+ DEFAULT_SECURITY_ERROR = 0
+ BAD_CREDENTIALS = 1
+ PERMISSION_DENIED = 2
+ USER_DOESNT_EXIST = 3
+ CONNECTION_ERROR = 4
+ USER_EXISTS = 5
+ GRANT_INVALID = 6
+ BAD_AUTHORIZATIONS = 7
+ INVALID_INSTANCEID = 8
+ TABLE_DOESNT_EXIST = 9
+ UNSUPPORTED_OPERATION = 10
+ INVALID_TOKEN = 11
+ AUTHENTICATOR_FAILED = 12
+ AUTHORIZOR_FAILED = 13
+ PERMISSIONHANDLER_FAILED = 14
+ TOKEN_EXPIRED = 15
+ SERIALIZATION_ERROR = 16
+ INSUFFICIENT_PROPERTIES = 17
+ NAMESPACE_DOESNT_EXIST = 18;
}
exception ThriftSecurityException {
- 1:string user,
- 2:SecurityErrorCode code
+ 1:string user
+ 2:SecurityErrorCode code
}
exception ThriftTableOperationException {
- 1:string tableId,
- 2:string tableName,
- 3:TableOperation op,
- 4:TableOperationExceptionType type,
- 5:string description
+ 1:string tableId
+ 2:string tableName
+ 3:TableOperation op
+ 4:TableOperationExceptionType type
+ 5:string description
}
struct TDiskUsage {
- 1:list<string> tables
- 2:i64 usage
+ 1:list<string> tables
+ 2:i64 usage
}
service ClientService {
- // system management methods
- string getRootTabletLocation()
- string getInstanceId()
- string getZooKeepers()
-
- list<string> bulkImportFiles(1:trace.TInfo tinfo, 8:security.TCredentials credentials, 3:i64 tid, 4:string tableId, 5:list<string> files, 6:string errorDir, 7:bool setTime) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope);
- // ensures that nobody is working on the transaction id above
- bool isActive(1:trace.TInfo tinfo, 2:i64 tid),
-
- void ping(2:security.TCredentials credentials) throws (1:ThriftSecurityException sec)
-
- list<TDiskUsage> getDiskUsage(2:set<string> tables, 1:security.TCredentials credentials) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException toe)
-
- // user management methods
- set<string> listLocalUsers(2:trace.TInfo tinfo, 3:security.TCredentials credentials) throws (1:ThriftSecurityException sec)
- void createLocalUser(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:binary password) throws (1:ThriftSecurityException sec)
- void dropLocalUser(3:trace.TInfo tinfo, 4:security.TCredentials credentials, 2:string principal) throws (1:ThriftSecurityException sec)
- void changeLocalUserPassword(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:binary password) throws (1:ThriftSecurityException sec)
-
- // authentication-related methods
- bool authenticate(1:trace.TInfo tinfo, 2:security.TCredentials credentials) throws (1:ThriftSecurityException sec)
- bool authenticateUser(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:security.TCredentials toAuth) throws (1:ThriftSecurityException sec)
-
- // authorization-related methods
- void changeAuthorizations(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:list<binary> authorizations) throws (1:ThriftSecurityException sec)
- list<binary> getUserAuthorizations(3:trace.TInfo tinfo, 4:security.TCredentials credentials, 2:string principal) throws (1:ThriftSecurityException sec)
-
- // permissions-related methods
- bool hasSystemPermission(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:byte sysPerm) throws (1:ThriftSecurityException sec)
- bool hasTablePermission(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:string tableName, 4:byte tblPerm) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
- bool hasNamespacePermission(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string principal, 4:string ns, 5:byte tblNspcPerm) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
- void grantSystemPermission(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:byte permission) throws (1:ThriftSecurityException sec)
- void revokeSystemPermission(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:byte permission) throws (1:ThriftSecurityException sec)
- void grantTablePermission(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:string tableName, 4:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
- void revokeTablePermission(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:string tableName, 4:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
- void grantNamespacePermission(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string principal, 4:string ns, 5:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
- void revokeNamespacePermission(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string principal, 4:string ns, 5:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
-
- // configuration methods
- map<string, string> getConfiguration(2:trace.TInfo tinfo, 3:security.TCredentials credentials, 1:ConfigurationType type);
- map<string, string> getTableConfiguration(1:trace.TInfo tinfo, 3:security.TCredentials credentials, 2:string tableName) throws (1:ThriftTableOperationException tope);
- map<string, string> getNamespaceConfiguration(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string ns) throws (1:ThriftTableOperationException tope);
- bool checkClass(1:trace.TInfo tinfo, 4:security.TCredentials credentials, 2:string className, 3:string interfaceMatch);
- bool checkTableClass(1:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string tableId, 3:string className, 4:string interfaceMatch) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope);
- bool checkNamespaceClass(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string namespaceId, 4:string className, 5:string interfaceMatch) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope);
+ // system management methods
+ string getRootTabletLocation()
+ string getInstanceId()
+ string getZooKeepers()
+
+ list<string> bulkImportFiles(1:trace.TInfo tinfo, 8:security.TCredentials credentials, 3:i64 tid, 4:string tableId, 5:list<string> files, 6:string errorDir, 7:bool setTime) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope);
+ // ensures that nobody is working on the transaction id above
+ bool isActive(1:trace.TInfo tinfo, 2:i64 tid)
+
+ void ping(2:security.TCredentials credentials) throws (1:ThriftSecurityException sec)
+
+ list<TDiskUsage> getDiskUsage(2:set<string> tables, 1:security.TCredentials credentials) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException toe)
+
+ // user management methods
+ set<string> listLocalUsers(2:trace.TInfo tinfo, 3:security.TCredentials credentials) throws (1:ThriftSecurityException sec)
+ void createLocalUser(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:binary password) throws (1:ThriftSecurityException sec)
+ void dropLocalUser(3:trace.TInfo tinfo, 4:security.TCredentials credentials, 2:string principal) throws (1:ThriftSecurityException sec)
+ void changeLocalUserPassword(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:binary password) throws (1:ThriftSecurityException sec)
+
+ // authentication-related methods
+ bool authenticate(1:trace.TInfo tinfo, 2:security.TCredentials credentials) throws (1:ThriftSecurityException sec)
+ bool authenticateUser(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:security.TCredentials toAuth) throws (1:ThriftSecurityException sec)
+
+ // authorization-related methods
+ void changeAuthorizations(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:list<binary> authorizations) throws (1:ThriftSecurityException sec)
+ list<binary> getUserAuthorizations(3:trace.TInfo tinfo, 4:security.TCredentials credentials, 2:string principal) throws (1:ThriftSecurityException sec)
+
+ // permissions-related methods
+ bool hasSystemPermission(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:byte sysPerm) throws (1:ThriftSecurityException sec)
+ bool hasTablePermission(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:string tableName, 4:byte tblPerm) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
+ bool hasNamespacePermission(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string principal, 4:string ns, 5:byte tblNspcPerm) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
+ void grantSystemPermission(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:byte permission) throws (1:ThriftSecurityException sec)
+ void revokeSystemPermission(4:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string principal, 3:byte permission) throws (1:ThriftSecurityException sec)
+ void grantTablePermission(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:string tableName, 4:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
+ void revokeTablePermission(5:trace.TInfo tinfo, 6:security.TCredentials credentials, 2:string principal, 3:string tableName, 4:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
+ void grantNamespacePermission(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string principal, 4:string ns, 5:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
+ void revokeNamespacePermission(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string principal, 4:string ns, 5:byte permission) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope)
+
+ // configuration methods
+ map<string, string> getConfiguration(2:trace.TInfo tinfo, 3:security.TCredentials credentials, 1:ConfigurationType type);
+ map<string, string> getTableConfiguration(1:trace.TInfo tinfo, 3:security.TCredentials credentials, 2:string tableName) throws (1:ThriftTableOperationException tope);
+ map<string, string> getNamespaceConfiguration(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string ns) throws (1:ThriftTableOperationException tope);
+ bool checkClass(1:trace.TInfo tinfo, 4:security.TCredentials credentials, 2:string className, 3:string interfaceMatch);
+ bool checkTableClass(1:trace.TInfo tinfo, 5:security.TCredentials credentials, 2:string tableId, 3:string className, 4:string interfaceMatch) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope);
+ bool checkNamespaceClass(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:string namespaceId, 4:string className, 5:string interfaceMatch) throws (1:ThriftSecurityException sec, 2:ThriftTableOperationException tope);
}
// Only used for a unit test
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/main/thrift/master.thrift
----------------------------------------------------------------------
diff --git a/core/src/main/thrift/master.thrift b/core/src/main/thrift/master.thrift
index 1ec5c33..38e9227 100644
--- a/core/src/main/thrift/master.thrift
+++ b/core/src/main/thrift/master.thrift
@@ -23,148 +23,150 @@ include "client.thrift"
include "trace.thrift"
struct Compacting {
- 1:i32 running
- 2:i32 queued
+ 1:i32 running
+ 2:i32 queued
}
struct TableInfo {
- 1:i64 recs
- 2:i64 recsInMemory
- 3:i32 tablets
- 4:i32 onlineTablets
- 5:double ingestRate
- 6:double ingestByteRate
- 7:double queryRate
- 8:double queryByteRate
- 9:Compacting minors;
- 10:Compacting majors;
- 11:Compacting scans;
- 12:double scanRate;
+ 1:i64 recs
+ 2:i64 recsInMemory
+ 3:i32 tablets
+ 4:i32 onlineTablets
+ 5:double ingestRate
+ 6:double ingestByteRate
+ 7:double queryRate
+ 8:double queryByteRate
+ 9:Compacting minors;
+ 10:Compacting majors;
+ 11:Compacting scans;
+ 12:double scanRate;
}
struct RecoveryStatus {
- 2:string name
- 5:i32 runtime // in millis
- 6:double progress
+ 2:string name
+ 5:i32 runtime // in millis
+ 6:double progress
}
struct TabletServerStatus {
- 1:map<string, TableInfo> tableMap
- 2:i64 lastContact
- 3:string name
- 5:double osLoad
- 7:i64 holdTime
- 8:i64 lookups
- 10:i64 indexCacheHits
- 11:i64 indexCacheRequest
- 12:i64 dataCacheHits
- 13:i64 dataCacheRequest
- 14:list<RecoveryStatus> logSorts
+ 1:map<string, TableInfo> tableMap
+ 2:i64 lastContact
+ 3:string name
+ 5:double osLoad
+ 7:i64 holdTime
+ 8:i64 lookups
+ 10:i64 indexCacheHits
+ 11:i64 indexCacheRequest
+ 12:i64 dataCacheHits
+ 13:i64 dataCacheRequest
+ 14:list<RecoveryStatus> logSorts
}
enum MasterState {
- INITIAL,
- HAVE_LOCK,
- SAFE_MODE,
- NORMAL,
- UNLOAD_METADATA_TABLETS,
- UNLOAD_ROOT_TABLET,
- STOP
+ INITIAL
+ HAVE_LOCK
+ SAFE_MODE
+ NORMAL
+ UNLOAD_METADATA_TABLETS
+ UNLOAD_ROOT_TABLET
+ STOP
}
enum MasterGoalState {
- CLEAN_STOP,
- SAFE_MODE,
- NORMAL,
+ CLEAN_STOP
+ SAFE_MODE
+ NORMAL
}
struct DeadServer {
- 1:string server,
- 2:i64 lastStatus,
- 3:string status,
+ 1:string server
+ 2:i64 lastStatus
+ 3:string status
}
struct MasterMonitorInfo {
- 1:map<string, TableInfo> tableMap
- 2:list<TabletServerStatus> tServerInfo
- 3:map<string, byte> badTServers
- 6:MasterState state
- 8:MasterGoalState goalState
- 7:i32 unassignedTablets
- 9:set<string> serversShuttingDown
- 10:list<DeadServer> deadTabletServers
+ 1:map<string, TableInfo> tableMap
+ 2:list<TabletServerStatus> tServerInfo
+ 3:map<string, byte> badTServers
+ 6:MasterState state
+ 8:MasterGoalState goalState
+ 7:i32 unassignedTablets
+ 9:set<string> serversShuttingDown
+ 10:list<DeadServer> deadTabletServers
}
struct TabletSplit {
- 1:data.TKeyExtent oldTablet
- 2:list<data.TKeyExtent> newTablets
+ 1:data.TKeyExtent oldTablet
+ 2:list<data.TKeyExtent> newTablets
}
exception RecoveryException {
- 1:string why
+ 1:string why
}
enum TabletLoadState {
- LOADED,
- LOAD_FAILURE,
- UNLOADED,
- UNLOAD_FAILURE_NOT_SERVING,
- UNLOAD_ERROR,
- CHOPPED
+ LOADED
+ LOAD_FAILURE
+ UNLOADED
+ UNLOAD_FAILURE_NOT_SERVING
+ UNLOAD_ERROR
+ CHOPPED
}
-enum TableOperation {
- CREATE
- CLONE
- DELETE
- RENAME
- ONLINE
- OFFLINE
- MERGE
- DELETE_RANGE
- BULK_IMPORT
- COMPACT
- IMPORT
- EXPORT
- COMPACT_CANCEL
+enum FateOperation {
+ TABLE_CREATE
+ TABLE_CLONE
+ TABLE_DELETE
+ TABLE_RENAME
+ TABLE_ONLINE
+ TABLE_OFFLINE
+ TABLE_MERGE
+ TABLE_DELETE_RANGE
+ TABLE_BULK_IMPORT
+ TABLE_COMPACT
+ TABLE_IMPORT
+ TABLE_EXPORT
+ TABLE_CANCEL_COMPACT
+ NAMESPACE_CREATE
+ NAMESPACE_DELETE
+ NAMESPACE_RENAME
}
-service MasterClientService {
-
- // table management methods
- i64 initiateFlush(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
- void waitForFlush(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName, 6:binary startRow, 7:binary endRow, 3:i64 flushID, 4:i64 maxLoops) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
-
- void setTableProperty(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName, 3:string property, 4:string value) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
- void removeTableProperty(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName, 3:string property) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
-
- void setNamespaceProperty(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string ns, 3:string property, 4:string value) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
- void removeNamespaceProperty(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string ns, 3:string property) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
-
- // system management methods
- void setMasterGoalState(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:MasterGoalState state) throws (1:client.ThriftSecurityException sec);
- void shutdown(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:bool stopTabletServers) throws (1:client.ThriftSecurityException sec)
- void shutdownTabletServer(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tabletServer, 4:bool force) throws (1: client.ThriftSecurityException sec)
- void setSystemProperty(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string property, 3:string value) throws (1:client.ThriftSecurityException sec)
- void removeSystemProperty(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string property) throws (1:client.ThriftSecurityException sec)
-
- // system monitoring methods
- MasterMonitorInfo getMasterStats(2:trace.TInfo tinfo, 1:security.TCredentials credentials) throws (1:client.ThriftSecurityException sec)
-
- // tablet server reporting
- oneway void reportSplitExtent(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string serverName, 3:TabletSplit split)
- oneway void reportTabletStatus(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string serverName, 3:TabletLoadState status, 4:data.TKeyExtent tablet)
-
- //table operations
- i64 beginTableOperation(2:trace.TInfo tinfo, 1:security.TCredentials credentials) throws (1:client.ThriftSecurityException sec)
- void executeTableOperation(7:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:i64 opid, 3:TableOperation op, 4:list<binary> arguments, 5:map<string, string> options, 6:bool autoClean) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
- string waitForTableOperation(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:i64 opid) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
- void finishTableOperation(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:i64 opid) throws (1:client.ThriftSecurityException sec)
-
- //namespace operations
- i64 beginNamespaceOperation(1:trace.TInfo tinfo, 2:security.TCredentials credentials) throws (1:client.ThriftSecurityException sec)
- void executeNamespaceOperation(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:i64 opid, 4:TableOperation op, 5:list<binary> arguments, 6:map<string, string> options, 7:bool autoClean) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
- string waitForNamespaceOperation(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:i64 opid) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
- void finishNamespaceOperation(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:i64 opid) throws (1:client.ThriftSecurityException sec)
-
+service FateService {
+ // register a fate operation by reserving an opid
+ i64 beginFateOperation(2:trace.TInfo tinfo, 1:security.TCredentials credentials) throws (1:client.ThriftSecurityException sec)
+ // initiate execution of the fate operation; set autoClean to true if not waiting for completion
+ void executeFateOperation(7:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:i64 opid, 3:FateOperation op, 4:list<binary> arguments, 5:map<string, string> options, 6:bool autoClean) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+ // wait for completion of the operation and get the returned exception, if any
+ string waitForFateOperation(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:i64 opid) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+ // clean up fate operation if autoClean was not set, after waiting
+ void finishFateOperation(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:i64 opid) throws (1:client.ThriftSecurityException sec)
+}
+
+service MasterClientService extends FateService {
+
+ // table management methods
+ i64 initiateFlush(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+ void waitForFlush(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName, 6:binary startRow, 7:binary endRow, 3:i64 flushID, 4:i64 maxLoops) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+
+ void setTableProperty(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName, 3:string property, 4:string value) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+ void removeTableProperty(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tableName, 3:string property) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+
+ void setNamespaceProperty(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string ns, 3:string property, 4:string value) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+ void removeNamespaceProperty(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string ns, 3:string property) throws (1:client.ThriftSecurityException sec, 2:client.ThriftTableOperationException tope)
+
+ // system management methods
+ void setMasterGoalState(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:MasterGoalState state) throws (1:client.ThriftSecurityException sec);
+ void shutdown(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:bool stopTabletServers) throws (1:client.ThriftSecurityException sec)
+ void shutdownTabletServer(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string tabletServer, 4:bool force) throws (1: client.ThriftSecurityException sec)
+ void setSystemProperty(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string property, 3:string value) throws (1:client.ThriftSecurityException sec)
+ void removeSystemProperty(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string property) throws (1:client.ThriftSecurityException sec)
+
+ // system monitoring methods
+ MasterMonitorInfo getMasterStats(2:trace.TInfo tinfo, 1:security.TCredentials credentials) throws (1:client.ThriftSecurityException sec)
+
+ // tablet server reporting
+ oneway void reportSplitExtent(4:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string serverName, 3:TabletSplit split)
+ oneway void reportTabletStatus(5:trace.TInfo tinfo, 1:security.TCredentials credentials, 2:string serverName, 3:TabletLoadState status, 4:data.TKeyExtent tablet)
+
}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java b/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java
index 50a9fbe..009be17 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java
@@ -39,6 +39,7 @@ import org.apache.accumulo.core.client.NamespaceNotFoundException;
import org.apache.accumulo.core.client.Scanner;
import org.apache.accumulo.core.client.TableNotFoundException;
import org.apache.accumulo.core.client.admin.NamespaceOperations;
+import org.apache.accumulo.core.client.impl.Namespaces;
import org.apache.accumulo.core.client.security.tokens.PasswordToken;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.data.Key;
@@ -66,7 +67,7 @@ public class MockNamespacesTest {
Instance instance = new MockInstance("default");
Connector c = instance.getConnector("user", new PasswordToken("pass"));
- assertTrue(c.namespaceOperations().exists(Constants.DEFAULT_NAMESPACE));
+ assertTrue(c.namespaceOperations().exists(Namespaces.DEFAULT_NAMESPACE));
c.tableOperations().create(tableName);
assertTrue(c.tableOperations().exists(tableName));
}
@@ -170,7 +171,7 @@ public class MockNamespacesTest {
propVal = "13K";
String tableName = "some_table";
c.tableOperations().create(tableName);
- c.namespaceOperations().setProperty(Constants.DEFAULT_NAMESPACE, propKey, propVal);
+ c.namespaceOperations().setProperty(Namespaces.DEFAULT_NAMESPACE, propKey, propVal);
assertTrue(checkTableHasProp(c, tableName, propKey, propVal));
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/core/src/test/java/org/apache/accumulo/core/client/mock/MockTableOperationsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mock/MockTableOperationsTest.java b/core/src/test/java/org/apache/accumulo/core/client/mock/MockTableOperationsTest.java
index de24881..216b3ba 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/mock/MockTableOperationsTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/mock/MockTableOperationsTest.java
@@ -61,43 +61,43 @@ import org.junit.Assert;
import org.junit.Test;
public class MockTableOperationsTest {
-
+
@Test
public void testCreateUseVersions() throws AccumuloException, AccumuloSecurityException, TableExistsException, TableNotFoundException {
Instance instance = new MockInstance("topstest");
Connector conn = instance.getConnector("user", new PasswordToken("pass"));
String t = "tableName1";
-
+
{
conn.tableOperations().create(t, false, TimeType.LOGICAL);
-
+
writeVersionable(conn, t, 3);
assertVersionable(conn, t, 3);
-
+
IteratorSetting settings = new IteratorSetting(20, VersioningIterator.class);
conn.tableOperations().attachIterator(t, settings);
-
+
assertVersionable(conn, t, 1);
-
+
conn.tableOperations().delete(t);
}
-
+
{
conn.tableOperations().create(t, true, TimeType.MILLIS);
-
+
try {
IteratorSetting settings = new IteratorSetting(20, VersioningIterator.class);
conn.tableOperations().attachIterator(t, settings);
Assert.fail();
} catch (AccumuloException ex) {}
-
+
writeVersionable(conn, t, 3);
assertVersionable(conn, t, 1);
-
+
conn.tableOperations().delete(t);
}
}
-
+
protected void writeVersionable(Connector c, String tableName, int size) throws TableNotFoundException, MutationsRejectedException {
for (int i = 0; i < size; i++) {
BatchWriter w = c.createBatchWriter(tableName, new BatchWriterConfig());
@@ -107,7 +107,7 @@ public class MockTableOperationsTest {
w.close();
}
}
-
+
protected void assertVersionable(Connector c, String tableName, int size) throws TableNotFoundException {
BatchScanner s = c.createBatchScanner(tableName, Authorizations.EMPTY, 1);
s.setRanges(Collections.singleton(Range.exact("row1", "cf", "cq")));
@@ -117,23 +117,24 @@ public class MockTableOperationsTest {
Assert.assertEquals("cf", e.getKey().getColumnFamily().toString());
Assert.assertEquals("cq", e.getKey().getColumnQualifier().toString());
count++;
-
+
}
Assert.assertEquals(size, count);
s.close();
}
-
+
@Test
public void testTableNotFound() throws AccumuloException, AccumuloSecurityException, TableExistsException, TableNotFoundException {
Instance instance = new MockInstance("topstest");
Connector conn = instance.getConnector("user", new PasswordToken("pass"));
+ IteratorSetting setting = new IteratorSetting(100, "myvers", VersioningIterator.class);
String t = "tableName";
try {
- conn.tableOperations().attachIterator(t, null);
+ conn.tableOperations().attachIterator(t, setting);
Assert.fail();
} catch (TableNotFoundException e) {}
try {
- conn.tableOperations().checkIteratorConflicts(t, null, EnumSet.allOf(IteratorScope.class));
+ conn.tableOperations().checkIteratorConflicts(t, setting, EnumSet.allOf(IteratorScope.class));
Assert.fail();
} catch (TableNotFoundException e) {}
try {
@@ -141,7 +142,7 @@ public class MockTableOperationsTest {
Assert.fail();
} catch (TableNotFoundException e) {}
try {
- conn.tableOperations().getIteratorSetting(t, null, null);
+ conn.tableOperations().getIteratorSetting(t, "myvers", IteratorScope.scan);
Assert.fail();
} catch (TableNotFoundException e) {}
try {
@@ -174,13 +175,13 @@ public class MockTableOperationsTest {
Assert.fail();
} catch (TableExistsException e) {}
}
-
+
private static class ImportTestFilesAndData {
Path importPath;
Path failurePath;
List<Pair<Key,Value>> keyVals;
}
-
+
@Test
public void testImport() throws Throwable {
ImportTestFilesAndData dataAndFiles = prepareTestFiles();
@@ -200,7 +201,7 @@ public class MockTableOperationsTest {
}
Assert.assertFalse(iterator.hasNext());
}
-
+
private ImportTestFilesAndData prepareTestFiles() throws Throwable {
Configuration defaultConf = new Configuration();
Path tempFile = new Path("target/accumulo-test/import/sample.rf");
@@ -228,7 +229,7 @@ public class MockTableOperationsTest {
files.keyVals = keyVals;
return files;
}
-
+
@Test(expected = TableNotFoundException.class)
public void testFailsWithNoTable() throws Throwable {
Instance instance = new MockInstance("foo");
@@ -237,7 +238,7 @@ public class MockTableOperationsTest {
ImportTestFilesAndData testFiles = prepareTestFiles();
tableOperations.importDirectory("doesnt_exist_table", testFiles.importPath.toString(), testFiles.failurePath.toString(), false);
}
-
+
@Test(expected = IOException.class)
public void testFailsWithNonEmptyFailureDirectory() throws Throwable {
Instance instance = new MockInstance("foo");
@@ -248,7 +249,7 @@ public class MockTableOperationsTest {
fs.open(testFiles.failurePath.suffix("/something")).close();
tableOperations.importDirectory("doesnt_exist_table", testFiles.importPath.toString(), testFiles.failurePath.toString(), false);
}
-
+
@Test
public void testDeleteRows() throws Exception {
Instance instance = new MockInstance("rows");
@@ -270,5 +271,5 @@ public class MockTableOperationsTest {
Assert.assertTrue(entry.getKey().getRow().toString().charAt(0) != '1');
}
}
-
+
}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java b/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java
index d522582..4df7c88 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java
@@ -34,6 +34,7 @@ import org.apache.accumulo.core.client.AccumuloSecurityException;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.client.Instance;
import org.apache.accumulo.core.client.NamespaceNotFoundException;
+import org.apache.accumulo.core.client.TableNotFoundException;
import org.apache.accumulo.core.client.impl.Namespaces;
import org.apache.accumulo.core.client.impl.Tables;
import org.apache.accumulo.core.client.impl.thrift.ClientService;
@@ -79,16 +80,16 @@ public class ClientServiceHandler implements ClientService.Iface {
this.fs = fs;
}
- protected String checkTableId(String tableName, TableOperation operation) throws ThriftTableOperationException {
- String tableId = Tables.getNameToIdMap(instance).get(tableName);
- if (tableId == null) {
- // maybe the table exist, but the cache was not updated yet... so try to clear the cache and check again
- Tables.clearCache(instance);
- tableId = Tables.getNameToIdMap(instance).get(tableName);
- if (tableId == null)
- throw new ThriftTableOperationException(null, tableName, operation, TableOperationExceptionType.NOTFOUND, null);
+ public static String checkTableId(Instance instance, String tableName, TableOperation operation) throws ThriftTableOperationException {
+ TableOperationExceptionType reason = null;
+ try {
+ return Tables._getTableId(instance, tableName);
+ } catch (NamespaceNotFoundException e) {
+ reason = TableOperationExceptionType.NAMESPACE_NOTFOUND;
+ } catch (TableNotFoundException e) {
+ reason = TableOperationExceptionType.NOTFOUND;
}
- return tableId;
+ throw new ThriftTableOperationException(null, tableName, operation, reason, null);
}
protected String checkNamespaceId(String namespace, TableOperation operation) throws ThriftTableOperationException {
@@ -98,7 +99,7 @@ public class ClientServiceHandler implements ClientService.Iface {
Tables.clearCache(instance);
namespaceId = Namespaces.getNameToIdMap(instance).get(namespace);
if (namespaceId == null)
- throw new ThriftTableOperationException(null, namespace, operation, TableOperationExceptionType.NOTFOUND, null);
+ throw new ThriftTableOperationException(null, namespace, operation, TableOperationExceptionType.NAMESPACE_NOTFOUND, null);
}
return namespaceId;
}
@@ -181,7 +182,7 @@ public class ClientServiceHandler implements ClientService.Iface {
@Override
public void grantTablePermission(TInfo tinfo, TCredentials credentials, String user, String tableName, byte permission) throws ThriftSecurityException,
ThriftTableOperationException {
- String tableId = checkTableId(tableName, TableOperation.PERMISSION);
+ String tableId = checkTableId(instance, tableName, TableOperation.PERMISSION);
security.grantTablePermission(credentials, user, tableId, TablePermission.getPermissionById(permission));
}
@@ -200,7 +201,7 @@ public class ClientServiceHandler implements ClientService.Iface {
@Override
public void revokeTablePermission(TInfo tinfo, TCredentials credentials, String user, String tableName, byte permission) throws ThriftSecurityException,
ThriftTableOperationException {
- String tableId = checkTableId(tableName, TableOperation.PERMISSION);
+ String tableId = checkTableId(instance, tableName, TableOperation.PERMISSION);
security.revokeTablePermission(credentials, user, tableId, TablePermission.getPermissionById(permission));
}
@@ -212,7 +213,7 @@ public class ClientServiceHandler implements ClientService.Iface {
@Override
public boolean hasTablePermission(TInfo tinfo, TCredentials credentials, String user, String tableName, byte tblPerm) throws ThriftSecurityException,
ThriftTableOperationException {
- String tableId = checkTableId(tableName, TableOperation.PERMISSION);
+ String tableId = checkTableId(instance, tableName, TableOperation.PERMISSION);
return security.hasTablePermission(credentials, user, tableId, TablePermission.getPermissionById(tblPerm));
}
@@ -263,8 +264,8 @@ public class ClientServiceHandler implements ClientService.Iface {
@Override
public Map<String,String> getTableConfiguration(TInfo tinfo, TCredentials credentials, String tableName) throws TException, ThriftTableOperationException {
- String tableId = checkTableId(tableName, null);
- AccumuloConfiguration config = new ServerConfiguration(instance).getTableConfiguration(tableId);
+ String tableId = checkTableId(instance, tableName, null);
+ AccumuloConfiguration config = ServerConfiguration.getTableConfiguration(instance, tableId);
return conf(credentials, config);
}
@@ -326,7 +327,7 @@ public class ClientServiceHandler implements ClientService.Iface {
security.authenticateUser(credentials, credentials);
- String tableId = checkTableId(tableName, null);
+ String tableId = checkTableId(instance, tableName, null);
ClassLoader loader = getClass().getClassLoader();
Class<?> shouldMatch;
@@ -398,7 +399,7 @@ public class ClientServiceHandler implements ClientService.Iface {
for (String table : tables) {
// ensure that table table exists
- String tableId = checkTableId(table, null);
+ String tableId = checkTableId(instance, table, null);
tableIds.add(tableId);
if (!security.canScan(credentials, tableId))
throw new ThriftSecurityException(credentials.getPrincipal(), SecurityErrorCode.PERMISSION_DENIED);
@@ -428,7 +429,7 @@ public class ClientServiceHandler implements ClientService.Iface {
namespaceId = Namespaces.getNamespaceId(instance, ns);
} catch (NamespaceNotFoundException e) {
String why = "Could not find namespace while getting configuration.";
- throw new ThriftTableOperationException(null, ns, null, TableOperationExceptionType.NOTFOUND, why);
+ throw new ThriftTableOperationException(null, ns, null, TableOperationExceptionType.NAMESPACE_NOTFOUND, why);
}
AccumuloConfiguration config = ServerConfiguration.getNamespaceConfiguration(instance, namespaceId);
return conf(credentials, config);
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java b/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java
index 131426e..2a1f9a1 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java
@@ -25,6 +25,7 @@ import java.util.Set;
import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.client.Instance;
+import org.apache.accumulo.core.client.impl.Namespaces;
import org.apache.accumulo.core.conf.AccumuloConfiguration;
import org.apache.accumulo.core.conf.ConfigurationObserver;
import org.apache.accumulo.core.conf.Property;
@@ -57,7 +58,7 @@ public class NamespaceConfiguration extends AccumuloConfiguration {
if (value == null || !property.getType().isValidFormat(value)) {
if (value != null)
log.error("Using default value for " + key + " due to improperly formatted " + property.getType() + ": " + value);
- if (!(namespaceId.equals(Constants.ACCUMULO_NAMESPACE_ID) && isIteratorOrConstraint(property.getKey()))) {
+ if (!(namespaceId.equals(Namespaces.ACCUMULO_NAMESPACE_ID) && isIteratorOrConstraint(property.getKey()))) {
// ignore iterators from parent if system namespace
value = parent.get(property);
}
@@ -108,7 +109,7 @@ public class NamespaceConfiguration extends AccumuloConfiguration {
// exclude system iterators/constraints from the system namespace
// so they don't affect the metadata or root tables.
- if (this.namespaceId.equals(Constants.ACCUMULO_NAMESPACE_ID))
+ if (getNamespaceId().equals(Namespaces.ACCUMULO_NAMESPACE_ID))
parentFilter = new SystemNamespaceFilter(filter);
parent.getProperties(props, parentFilter);
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java b/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java
index 7f5e44e..ce1547e 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java
@@ -29,6 +29,7 @@ import jline.console.ConsoleReader;
import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.cli.Help;
import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.apache.accumulo.core.client.impl.Namespaces;
import org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException;
import org.apache.accumulo.core.conf.AccumuloConfiguration;
import org.apache.accumulo.core.conf.Property;
@@ -395,10 +396,10 @@ public class Initialize {
zoo.putPersistentData(zkInstanceRoot, new byte[0], NodeExistsPolicy.FAIL);
zoo.putPersistentData(zkInstanceRoot + Constants.ZTABLES, Constants.ZTABLES_INITIAL_ID, NodeExistsPolicy.FAIL);
zoo.putPersistentData(zkInstanceRoot + Constants.ZNAMESPACES, new byte[0], NodeExistsPolicy.FAIL);
- TableManager.prepareNewNamespaceState(uuid, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_NAMESPACE, NodeExistsPolicy.FAIL);
- TableManager.prepareNewNamespaceState(uuid, Constants.ACCUMULO_NAMESPACE_ID, Constants.ACCUMULO_NAMESPACE, NodeExistsPolicy.FAIL);
- TableManager.prepareNewTableState(uuid, RootTable.ID, Constants.ACCUMULO_NAMESPACE_ID, RootTable.NAME, TableState.ONLINE, NodeExistsPolicy.FAIL);
- TableManager.prepareNewTableState(uuid, MetadataTable.ID, Constants.ACCUMULO_NAMESPACE_ID, MetadataTable.NAME, TableState.ONLINE, NodeExistsPolicy.FAIL);
+ TableManager.prepareNewNamespaceState(uuid, Namespaces.DEFAULT_NAMESPACE_ID, Namespaces.DEFAULT_NAMESPACE, NodeExistsPolicy.FAIL);
+ TableManager.prepareNewNamespaceState(uuid, Namespaces.ACCUMULO_NAMESPACE_ID, Namespaces.ACCUMULO_NAMESPACE, NodeExistsPolicy.FAIL);
+ TableManager.prepareNewTableState(uuid, RootTable.ID, Namespaces.ACCUMULO_NAMESPACE_ID, RootTable.NAME, TableState.ONLINE, NodeExistsPolicy.FAIL);
+ TableManager.prepareNewTableState(uuid, MetadataTable.ID, Namespaces.ACCUMULO_NAMESPACE_ID, MetadataTable.NAME, TableState.ONLINE, NodeExistsPolicy.FAIL);
zoo.putPersistentData(zkInstanceRoot + Constants.ZTSERVERS, new byte[0], NodeExistsPolicy.FAIL);
zoo.putPersistentData(zkInstanceRoot + Constants.ZPROBLEMS, new byte[0], NodeExistsPolicy.FAIL);
zoo.putPersistentData(zkInstanceRoot + RootTable.ZROOT_TABLET, new byte[0], NodeExistsPolicy.FAIL);
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/server/base/src/main/java/org/apache/accumulo/server/master/LiveTServerSet.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/LiveTServerSet.java b/server/base/src/main/java/org/apache/accumulo/server/master/LiveTServerSet.java
index 6b81539..a9cdb15 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/master/LiveTServerSet.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/master/LiveTServerSet.java
@@ -59,29 +59,29 @@ import org.apache.zookeeper.data.Stat;
import com.google.common.net.HostAndPort;
public class LiveTServerSet implements Watcher {
-
+
public interface Listener {
void update(LiveTServerSet current, Set<TServerInstance> deleted, Set<TServerInstance> added);
}
-
+
private static final Logger log = Logger.getLogger(LiveTServerSet.class);
-
+
private final Listener cback;
private final Instance instance;
private final AccumuloConfiguration conf;
private ZooCache zooCache;
-
+
public class TServerConnection {
private final HostAndPort address;
-
+
public TServerConnection(HostAndPort addr) throws TException {
address = addr;
}
-
+
private String lockString(ZooLock mlock) {
return mlock.getLockID().serialize(ZooUtil.getRoot(instance) + Constants.ZMASTER_LOCK);
}
-
+
public void assignTablet(ZooLock lock, KeyExtent extent) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -90,7 +90,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public void unloadTablet(ZooLock lock, KeyExtent extent, boolean save) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -99,14 +99,14 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public TabletServerStatus getTableMap(boolean usePooledConnection) throws TException, ThriftSecurityException {
-
+
if (usePooledConnection == true)
throw new UnsupportedOperationException();
-
+
TTransport transport = ThriftUtil.createTransport(address, conf);
-
+
try {
TabletClientService.Client client = ThriftUtil.createClient(new TabletClientService.Client.Factory(), transport);
return client.getTabletServerStatus(Tracer.traceInfo(), SystemCredentials.get().toThrift(instance));
@@ -115,7 +115,7 @@ public class LiveTServerSet implements Watcher {
transport.close();
}
}
-
+
public void halt(ZooLock lock) throws TException, ThriftSecurityException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -124,7 +124,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public void fastHalt(ZooLock lock) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -133,7 +133,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public void flush(ZooLock lock, String tableId, byte[] startRow, byte[] endRow) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -143,7 +143,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public void chop(ZooLock lock, KeyExtent extent) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -152,7 +152,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public void splitTablet(ZooLock lock, KeyExtent extent, Text splitPoint) throws TException, ThriftSecurityException, NotServingTabletException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -162,7 +162,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public void flushTablet(ZooLock lock, KeyExtent extent) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -171,7 +171,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public void compact(ZooLock lock, String tableId, byte[] startRow, byte[] endRow) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -181,7 +181,7 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
public boolean isActive(long tid) throws TException {
TabletClientService.Client client = ThriftUtil.getClient(new TabletClientService.Client.Factory(), address, conf);
try {
@@ -190,40 +190,40 @@ public class LiveTServerSet implements Watcher {
ThriftUtil.returnClient(client);
}
}
-
+
}
-
+
static class TServerInfo {
TServerConnection connection;
TServerInstance instance;
-
+
TServerInfo(TServerInstance instance, TServerConnection connection) {
this.connection = connection;
this.instance = instance;
}
};
-
+
// The set of active tservers with locks, indexed by their name in zookeeper
private Map<String,TServerInfo> current = new HashMap<String,TServerInfo>();
// as above, indexed by TServerInstance
private Map<TServerInstance,TServerInfo> currentInstances = new HashMap<TServerInstance,TServerInfo>();
-
+
// The set of entries in zookeeper without locks, and the first time each was noticed
private Map<String,Long> locklessServers = new HashMap<String,Long>();
-
+
public LiveTServerSet(Instance instance, AccumuloConfiguration conf, Listener cback) {
this.cback = cback;
this.instance = instance;
this.conf = conf;
-
+
}
-
+
public synchronized ZooCache getZooCache() {
if (zooCache == null)
zooCache = new ZooCache(this);
return zooCache;
}
-
+
public synchronized void startListeningForTabletServerChanges() {
scanServers();
SimpleTimer.getInstance().schedule(new Runnable() {
@@ -233,23 +233,23 @@ public class LiveTServerSet implements Watcher {
}
}, 0, 5000);
}
-
+
public synchronized void scanServers() {
try {
final Set<TServerInstance> updates = new HashSet<TServerInstance>();
final Set<TServerInstance> doomed = new HashSet<TServerInstance>();
-
+
final String path = ZooUtil.getRoot(instance) + Constants.ZTSERVERS;
-
+
HashSet<String> all = new HashSet<String>(current.keySet());
all.addAll(getZooCache().getChildren(path));
-
+
locklessServers.keySet().retainAll(all);
-
+
for (String zPath : all) {
checkServer(updates, doomed, path, zPath);
}
-
+
// log.debug("Current: " + current.keySet());
if (!doomed.isEmpty() || !updates.isEmpty())
this.cback.update(this, doomed, updates);
@@ -257,7 +257,7 @@ public class LiveTServerSet implements Watcher {
log.error(ex, ex);
}
}
-
+
private void deleteServerNode(String serverNode) throws InterruptedException, KeeperException {
try {
ZooReaderWriter.getInstance().delete(serverNode, -1);
@@ -267,23 +267,23 @@ public class LiveTServerSet implements Watcher {
// someone else deleted it
}
}
-
+
private synchronized void checkServer(final Set<TServerInstance> updates, final Set<TServerInstance> doomed, final String path, final String zPath)
throws TException, InterruptedException, KeeperException {
-
+
TServerInfo info = current.get(zPath);
-
+
final String lockPath = path + "/" + zPath;
Stat stat = new Stat();
byte[] lockData = ZooLock.getLockData(getZooCache(), lockPath, stat);
-
+
if (lockData == null) {
if (info != null) {
doomed.add(info.instance);
current.remove(zPath);
currentInstances.remove(info.instance);
}
-
+
Long firstSeen = locklessServers.get(zPath);
if (firstSeen == null) {
locklessServers.put(zPath, System.currentTimeMillis());
@@ -296,7 +296,7 @@ public class LiveTServerSet implements Watcher {
ServerServices services = new ServerServices(new String(lockData));
HostAndPort client = services.getAddress(ServerServices.Service.TSERV_CLIENT);
TServerInstance instance = new TServerInstance(client, stat.getEphemeralOwner());
-
+
if (info == null) {
updates.add(instance);
TServerInfo tServerInfo = new TServerInfo(instance, new TServerConnection(client));
@@ -311,29 +311,29 @@ public class LiveTServerSet implements Watcher {
}
}
}
-
+
@Override
public void process(WatchedEvent event) {
-
+
// its important that these event are propagated by ZooCache, because this ensures when reading zoocache that is has already processed the event and cleared
// relevant nodes before code below reads from zoocache
-
+
if (event.getPath() != null) {
if (event.getPath().endsWith(Constants.ZTSERVERS)) {
scanServers();
} else if (event.getPath().contains(Constants.ZTSERVERS)) {
int pos = event.getPath().lastIndexOf('/');
-
+
// do only if ZTSERVER is parent
if (pos >= 0 && event.getPath().substring(0, pos).endsWith(Constants.ZTSERVERS)) {
-
+
String server = event.getPath().substring(pos + 1);
-
+
final Set<TServerInstance> updates = new HashSet<TServerInstance>();
final Set<TServerInstance> doomed = new HashSet<TServerInstance>();
-
+
final String path = ZooUtil.getRoot(instance) + Constants.ZTSERVERS;
-
+
try {
checkServer(updates, doomed, path, server);
if (!doomed.isEmpty() || !updates.isEmpty())
@@ -345,8 +345,8 @@ public class LiveTServerSet implements Watcher {
}
}
}
-
- public synchronized TServerConnection getConnection(TServerInstance server) throws TException {
+
+ public synchronized TServerConnection getConnection(TServerInstance server) {
if (server == null)
return null;
TServerInfo tServerInfo = currentInstances.get(server);
@@ -354,15 +354,15 @@ public class LiveTServerSet implements Watcher {
return null;
return tServerInfo.connection;
}
-
+
public synchronized Set<TServerInstance> getCurrentServers() {
return new HashSet<TServerInstance>(currentInstances.keySet());
}
-
+
public synchronized int size() {
return current.size();
}
-
+
public synchronized TServerInstance find(String tabletServer) {
HostAndPort addr = AddressUtil.parseAddress(tabletServer, false);
for (Entry<String,TServerInfo> entry : current.entrySet()) {
@@ -371,7 +371,7 @@ public class LiveTServerSet implements Watcher {
}
return null;
}
-
+
public synchronized void remove(TServerInstance server) {
String zPath = null;
for (Entry<String,TServerInfo> entry : current.entrySet()) {
@@ -384,7 +384,7 @@ public class LiveTServerSet implements Watcher {
return;
current.remove(zPath);
currentInstances.remove(server);
-
+
log.info("Removing zookeeper lock for " + server);
String fullpath = ZooUtil.getRoot(instance) + Constants.ZTSERVERS + "/" + zPath;
try {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java b/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
index eca7dfe..bbfa71b 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
@@ -35,7 +35,7 @@ import org.apache.accumulo.core.data.thrift.IterInfo;
import org.apache.accumulo.core.data.thrift.TColumn;
import org.apache.accumulo.core.data.thrift.TKeyExtent;
import org.apache.accumulo.core.data.thrift.TRange;
-import org.apache.accumulo.core.master.thrift.TableOperation;
+import org.apache.accumulo.core.master.thrift.FateOperation;
import org.apache.accumulo.core.metadata.MetadataTable;
import org.apache.accumulo.core.security.Authorizations;
import org.apache.accumulo.core.security.Credentials;
@@ -417,12 +417,12 @@ public class AuditedSecurityOperation extends SecurityOperation {
public static final String CAN_ONLINE_OFFLINE_TABLE_AUDIT_TEMPLATE = "action: %s; targetTable: %s;";
@Override
- public boolean canOnlineOfflineTable(TCredentials credentials, String tableId, TableOperation op) throws ThriftSecurityException {
+ public boolean canOnlineOfflineTable(TCredentials credentials, String tableId, FateOperation op) throws ThriftSecurityException {
String tableName = getTableName(tableId);
String operation = null;
- if (op == TableOperation.ONLINE)
+ if (op == FateOperation.TABLE_ONLINE)
operation = "onlineTable";
- if (op == TableOperation.OFFLINE)
+ if (op == FateOperation.TABLE_OFFLINE)
operation = "offlineTable";
try {
boolean result = super.canOnlineOfflineTable(credentials, tableId, op);
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java b/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
index 010efa8..4b302f0 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
@@ -37,7 +37,7 @@ import org.apache.accumulo.core.data.thrift.IterInfo;
import org.apache.accumulo.core.data.thrift.TColumn;
import org.apache.accumulo.core.data.thrift.TKeyExtent;
import org.apache.accumulo.core.data.thrift.TRange;
-import org.apache.accumulo.core.master.thrift.TableOperation;
+import org.apache.accumulo.core.master.thrift.FateOperation;
import org.apache.accumulo.core.metadata.MetadataTable;
import org.apache.accumulo.core.metadata.RootTable;
import org.apache.accumulo.core.security.Authorizations;
@@ -356,7 +356,7 @@ public class SecurityOperation {
protected boolean _hasNamespacePermission(String user, String namespace, NamespacePermission permission, boolean useCached) throws ThriftSecurityException {
targetUserExists(user);
- if (namespace.equals(Constants.ACCUMULO_NAMESPACE_ID) && permission.equals(NamespacePermission.READ))
+ if (namespace.equals(Namespaces.ACCUMULO_NAMESPACE_ID) && permission.equals(NamespacePermission.READ))
return true;
try {
@@ -478,7 +478,7 @@ public class SecurityOperation {
|| hasNamespacePermissionForTableId(c, tableId, NamespacePermission.DROP_TABLE, false);
}
- public boolean canOnlineOfflineTable(TCredentials c, String tableId, TableOperation op) throws ThriftSecurityException {
+ public boolean canOnlineOfflineTable(TCredentials c, String tableId, FateOperation op) throws ThriftSecurityException {
authenticate(c);
return hasSystemPermission(c, SystemPermission.SYSTEM, false) || hasSystemPermission(c, SystemPermission.ALTER_TABLE, false)
|| hasTablePermission(c, tableId, TablePermission.ALTER_TABLE, false)
http://git-wip-us.apache.org/repos/asf/accumulo/blob/f35e3f47/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java b/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
index 1fb0b16..0ea556f 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKPermHandler.java
@@ -23,10 +23,10 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
-import org.apache.accumulo.core.Constants;
import org.apache.accumulo.core.client.AccumuloSecurityException;
import org.apache.accumulo.core.client.NamespaceNotFoundException;
import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.core.client.impl.Namespaces;
import org.apache.accumulo.core.client.impl.thrift.SecurityErrorCode;
import org.apache.accumulo.core.metadata.MetadataTable;
import org.apache.accumulo.core.metadata.RootTable;
@@ -386,8 +386,8 @@ public class ZKPermHandler implements PermissionHandler {
tablePerms.put(MetadataTable.ID, Collections.singleton(TablePermission.ALTER_TABLE));
// essentially the same but on the system namespace, the ALTER_TABLE permission is now redundant
Map<String,Set<NamespacePermission>> namespacePerms = new HashMap<String,Set<NamespacePermission>>();
- namespacePerms.put(Constants.ACCUMULO_NAMESPACE_ID, Collections.singleton(NamespacePermission.ALTER_NAMESPACE));
- namespacePerms.put(Constants.ACCUMULO_NAMESPACE_ID, Collections.singleton(NamespacePermission.ALTER_TABLE));
+ namespacePerms.put(Namespaces.ACCUMULO_NAMESPACE_ID, Collections.singleton(NamespacePermission.ALTER_NAMESPACE));
+ namespacePerms.put(Namespaces.ACCUMULO_NAMESPACE_ID, Collections.singleton(NamespacePermission.ALTER_TABLE));
try {
// prep parent node of users with root username