Updated Branches:
  refs/heads/master 4fbba38ae -> 33a094de4

ACCUMULO-1976 Fix upgrade broken by ACCUMULO-2093


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

Branch: refs/heads/master
Commit: ea8fe54145b306310a93e9df65ea5277dff2853e
Parents: 9c092ca
Author: Christopher Tubbs <ctubb...@apache.org>
Authored: Mon Jan 6 21:19:00 2014 -0500
Committer: Christopher Tubbs <ctubb...@apache.org>
Committed: Mon Jan 6 21:22:16 2014 -0500

----------------------------------------------------------------------
 .../accumulo/server/tables/TableManager.java    |  5 ++-
 .../java/org/apache/accumulo/master/Master.java | 41 ++++++++++++--------
 2 files changed, 28 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/ea8fe541/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java 
b/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java
index 0766a17..0f73ae4 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java
@@ -59,7 +59,7 @@ public class TableManager {
 
   public static void prepareNewNamespaceState(String instanceId, String 
namespaceId, String namespace, NodeExistsPolicy existsPolicy) throws 
KeeperException,
       InterruptedException {
-    // state gets created last
+    log.debug("Creating ZooKeeper entries for new namespace " + namespace + " 
(ID: " + namespaceId + ")");
     String zPath = Constants.ZROOT + "/" + instanceId + Constants.ZNAMESPACES 
+ "/" + namespaceId;
 
     IZooReaderWriter zoo = ZooReaderWriter.getRetryingInstance();
@@ -71,6 +71,7 @@ public class TableManager {
   public static void prepareNewTableState(String instanceId, String tableId, 
String namespaceId, String tableName, TableState state,
       NodeExistsPolicy existsPolicy) throws KeeperException, 
InterruptedException {
     // state gets created last
+    log.debug("Creating ZooKeeper entries for new table " + tableName + " (ID: 
" + tableId + ") in namespace (ID: " + namespaceId + ")");
     Pair<String,String> qualifiedTableName = Tables.qualify(tableName);
     tableName = qualifiedTableName.getSecond();
     String zTablePath = Constants.ZROOT + "/" + instanceId + Constants.ZTABLES 
+ "/" + tableId;
@@ -79,10 +80,10 @@ public class TableManager {
     zoo.putPersistentData(zTablePath + Constants.ZTABLE_CONF, new byte[0], 
existsPolicy);
     zoo.putPersistentData(zTablePath + Constants.ZTABLE_NAMESPACE, 
namespaceId.getBytes(Constants.UTF8), existsPolicy);
     zoo.putPersistentData(zTablePath + Constants.ZTABLE_NAME, 
tableName.getBytes(Constants.UTF8), existsPolicy);
-    zoo.putPersistentData(zTablePath + Constants.ZTABLE_STATE, 
state.name().getBytes(Constants.UTF8), existsPolicy);
     zoo.putPersistentData(zTablePath + Constants.ZTABLE_FLUSH_ID, 
"0".getBytes(Constants.UTF8), existsPolicy);
     zoo.putPersistentData(zTablePath + Constants.ZTABLE_COMPACT_ID, 
"0".getBytes(Constants.UTF8), existsPolicy);
     zoo.putPersistentData(zTablePath + Constants.ZTABLE_COMPACT_CANCEL_ID, 
"0".getBytes(Constants.UTF8), existsPolicy);
+    zoo.putPersistentData(zTablePath + Constants.ZTABLE_STATE, 
state.name().getBytes(Constants.UTF8), existsPolicy);
   }
 
   public synchronized static TableManager getInstance() {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/ea8fe541/server/master/src/main/java/org/apache/accumulo/master/Master.java
----------------------------------------------------------------------
diff --git a/server/master/src/main/java/org/apache/accumulo/master/Master.java 
b/server/master/src/main/java/org/apache/accumulo/master/Master.java
index 304366c..86a35cd 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/Master.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/Master.java
@@ -64,6 +64,7 @@ import org.apache.accumulo.core.security.NamespacePermission;
 import org.apache.accumulo.core.security.SecurityUtil;
 import org.apache.accumulo.core.security.TablePermission;
 import org.apache.accumulo.core.util.Daemon;
+import org.apache.accumulo.core.util.Pair;
 import org.apache.accumulo.core.util.UtilWaitThread;
 import org.apache.accumulo.core.zookeeper.ZooUtil;
 import org.apache.accumulo.fate.AgeOffStore;
@@ -127,6 +128,8 @@ import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
 import org.apache.zookeeper.data.Stat;
 
+import com.google.common.collect.Iterables;
+
 /**
  * The Master is responsible for assigning and balancing tablets to tablet 
servers.
  * 
@@ -228,7 +231,7 @@ public class Master implements LiveTServerSet.Listener, 
TableObserver, CurrentSt
     String dirZPath = ZooUtil.getRoot(instance) + RootTable.ZROOT_TABLET_PATH;
 
     if (!zoo.exists(dirZPath)) {
-      Path oldPath = fs.getFullPath(FileType.TABLE, "/!0/root_tablet");
+      Path oldPath = fs.getFullPath(FileType.TABLE, "/" + MetadataTable.ID + 
"/root_tablet");
       if (fs.exists(oldPath)) {
         String newPath = fs.choose(ServerConstants.getTablesDirs()) + "/" + 
RootTable.ID;
         fs.mkdirs(new Path(newPath));
@@ -270,30 +273,36 @@ public class Master implements LiveTServerSet.Listener, 
TableObserver, CurrentSt
         // create initial namespaces
         String namespaces = ZooUtil.getRoot(instance) + Constants.ZNAMESPACES;
         zoo.putPersistentData(namespaces, new byte[0], NodeExistsPolicy.SKIP);
-        if (!Namespaces.exists(instance, Namespaces.ACCUMULO_NAMESPACE_ID))
-          TableManager.prepareNewNamespaceState(instance.getInstanceID(), 
Namespaces.ACCUMULO_NAMESPACE_ID, Namespaces.ACCUMULO_NAMESPACE,
-              NodeExistsPolicy.SKIP);
-        if (!Namespaces.exists(instance, Namespaces.DEFAULT_NAMESPACE_ID))
-          TableManager.prepareNewNamespaceState(instance.getInstanceID(), 
Namespaces.DEFAULT_NAMESPACE_ID, Namespaces.DEFAULT_NAMESPACE, 
NodeExistsPolicy.SKIP);
+        for (Pair<String,String> namespace : Iterables.concat(
+            Collections.singleton(new 
Pair<String,String>(Namespaces.ACCUMULO_NAMESPACE, 
Namespaces.ACCUMULO_NAMESPACE_ID)),
+            Collections.singleton(new 
Pair<String,String>(Namespaces.DEFAULT_NAMESPACE, 
Namespaces.DEFAULT_NAMESPACE_ID)))) {
+          String ns = namespace.getFirst();
+          String id = namespace.getSecond();
+          log.debug("Upgrade creating namespace \"" + ns + "\" (ID: " + id + 
")");
+          if (!Namespaces.exists(instance, id))
+            TableManager.prepareNewNamespaceState(instance.getInstanceID(), 
id, ns, NodeExistsPolicy.SKIP);
+        }
 
         // create root table
-        if (!Tables.exists(instance, RootTable.ID)) {
-          TableManager.prepareNewTableState(instance.getInstanceID(), 
RootTable.ID, Namespaces.ACCUMULO_NAMESPACE_ID, RootTable.NAME, 
TableState.ONLINE,
-              NodeExistsPolicy.SKIP);
-          Initialize.initMetadataConfig(RootTable.ID);
-          // ensure root user can flush root table
-          
security.grantTablePermission(SystemCredentials.get().toThrift(instance), 
security.getRootUsername(), RootTable.ID, TablePermission.ALTER_TABLE);
-        }
+        log.debug("Upgrade creating table " + RootTable.NAME + " (ID: " + 
RootTable.ID + ")");
+        TableManager.prepareNewTableState(instance.getInstanceID(), 
RootTable.ID, Namespaces.ACCUMULO_NAMESPACE_ID, RootTable.NAME, 
TableState.ONLINE,
+            NodeExistsPolicy.SKIP);
+        Initialize.initMetadataConfig(RootTable.ID);
+        // ensure root user can flush root table
+        
security.grantTablePermission(SystemCredentials.get().toThrift(instance), 
security.getRootUsername(), RootTable.ID, TablePermission.ALTER_TABLE);
 
         // put existing tables in the correct namespaces
         String tables = ZooUtil.getRoot(instance) + Constants.ZTABLES;
-        for (Entry<String,String> table : 
Tables.getIdToNameMap(instance).entrySet()) {
-          String targetNamespace = (MetadataTable.ID.equals(table.getKey()) || 
RootTable.ID.equals(table.getKey())) ? Namespaces.ACCUMULO_NAMESPACE_ID
+        for (String tableId : zoo.getChildren(tables)) {
+          String targetNamespace = (MetadataTable.ID.equals(tableId) || 
RootTable.ID.equals(tableId)) ? Namespaces.ACCUMULO_NAMESPACE_ID
               : Namespaces.DEFAULT_NAMESPACE_ID;
-          zoo.putPersistentData(tables + "/" + table.getKey() + 
Constants.ZTABLE_NAMESPACE, targetNamespace.getBytes(Constants.UTF8), 
NodeExistsPolicy.SKIP);
+          log.debug("Upgrade moving table " + new String(zoo.getData(tables + 
"/" + tableId + Constants.ZTABLE_NAME, null), Constants.UTF8) + " (ID: "
+              + tableId + ") into namespace with ID " + targetNamespace);
+          zoo.putPersistentData(tables + "/" + tableId + 
Constants.ZTABLE_NAMESPACE, targetNamespace.getBytes(Constants.UTF8), 
NodeExistsPolicy.SKIP);
         }
 
         // rename metadata table
+        log.debug("Upgrade renaming table " + MetadataTable.OLD_NAME + " (ID: 
" + MetadataTable.ID + ") to " + MetadataTable.NAME);
         zoo.putPersistentData(tables + "/" + MetadataTable.ID + 
Constants.ZTABLE_NAME, 
Tables.qualify(MetadataTable.NAME).getSecond().getBytes(Constants.UTF8),
             NodeExistsPolicy.OVERWRITE);
 

Reply via email to