TAJO-1642: CatalogServer need to check meta table first. (jaehwa)

Closes #600


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

Branch: refs/heads/index_support
Commit: b24d18f5b3cf9ed3c4a4a41bff654c965521542f
Parents: 0f7ff8f
Author: JaeHwa Jung <[email protected]>
Authored: Wed Jun 24 10:27:38 2015 +0900
Committer: JaeHwa Jung <[email protected]>
Committed: Wed Jun 24 10:27:38 2015 +0900

----------------------------------------------------------------------
 CHANGES                                         |  2 ++
 .../tajo/catalog/store/AbstractDBStore.java     | 33 +++++++++++++-------
 .../catalog/store/XMLCatalogSchemaManager.java  | 30 ++++++++++++++++++
 3 files changed, 53 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/b24d18f5/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index d64022a..170b928 100644
--- a/CHANGES
+++ b/CHANGES
@@ -162,6 +162,8 @@ Release 0.11.0 - unreleased
 
   BUG FIXES
 
+    TAJO-1642: CatalogServer need to check meta table first. (jaehwa)
+
     TAJO-1650: TestQueryResource.testGetAllQueries() occasionally fails.
     (Contributed by jinho, Committed by jaehwa)
  

http://git-wip-us.apache.org/repos/asf/tajo/blob/b24d18f5/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
----------------------------------------------------------------------
diff --git 
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
 
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
index 7fe6ef3..34740c0 100644
--- 
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
+++ 
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
@@ -80,6 +80,10 @@ public abstract class AbstractDBStore extends 
CatalogConstants implements Catalo
     return catalogSchemaManager.isInitialized(getConnection());
   }
 
+  protected boolean catalogAlreadyExists() throws CatalogException {
+    return catalogSchemaManager.catalogAlreadyExists(getConnection());
+  }
+
   protected void createBaseTable() throws CatalogException {
     createDatabaseDependants();
     
@@ -142,22 +146,27 @@ public abstract class AbstractDBStore extends 
CatalogConstants implements Catalo
     }
     
     try {
-      if (isInitialized()) {
-        LOG.info("The base tables of CatalogServer already is initialized.");
+      if (catalogAlreadyExists()) {
+        LOG.info("The meta table of CatalogServer already is created.");
         verifySchemaVersion();
       } else {
-        try {
-          createBaseTable();
-          LOG.info("The base tables of CatalogServer are created.");
-        } catch (CatalogException ce) {
+        if (isInitialized()) {
+          LOG.info("The base tables of CatalogServer already is initialized.");
+          verifySchemaVersion();
+        } else {
           try {
-            dropBaseTable();
-          } catch (Throwable t) {
-            LOG.error(t, t);
+            createBaseTable();
+            LOG.info("The base tables of CatalogServer are created.");
+          } catch (CatalogException ce) {
+            try {
+              dropBaseTable();
+            } catch (Throwable t) {
+              LOG.error(t, t);
+            }
+            throw ce;
           }
-          throw ce;
         }
-      }
+     }
     } catch (Exception se) {
       throw new CatalogException("Cannot initialize the persistent storage of 
Catalog", se);
     }
@@ -245,7 +254,7 @@ public abstract class AbstractDBStore extends 
CatalogConstants implements Catalo
       LOG.error("| You might downgrade or upgrade Apache Tajo. Downgrading or 
upgrading |");
       LOG.error("| Tajo without migration process is only available in some 
versions. |");
       LOG.error("| In order to learn how to migration Apache Tajo instance, 
|");
-      LOG.error("| please refer http://s.apache.org/0_8_migration. |");
+      LOG.error("| please refer 
http://tajo.apache.org/docs/current/backup_and_restore/catalog.html |");
       
LOG.error("=========================================================================");
       throw new CatalogException("Migration Needed. Please refer 
http://s.apache.org/0_8_migration.";);
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/b24d18f5/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
----------------------------------------------------------------------
diff --git 
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
 
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
index 1ea812c..9173cb8 100644
--- 
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
+++ 
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
@@ -51,9 +51,11 @@ import javax.xml.stream.XMLStreamReader;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.tajo.catalog.CatalogConstants;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.exception.CatalogException;
 import org.apache.tajo.catalog.store.object.*;
+import org.apache.tajo.util.TUtil;
 
 public class XMLCatalogSchemaManager {
   protected final Log LOG = LogFactory.getLog(getClass());
@@ -344,6 +346,34 @@ public class XMLCatalogSchemaManager {
     CatalogUtil.closeQuietly(stmt);
   }
 
+  public boolean catalogAlreadyExists(Connection conn) throws CatalogException 
{
+    boolean result = false;
+    try {
+      List<String> constants = TUtil.newList();
+      constants.add(CatalogConstants.TB_META);
+      constants.add(CatalogConstants.TB_SPACES);
+      constants.add(CatalogConstants.TB_DATABASES);
+      constants.add(CatalogConstants.TB_TABLES);
+      constants.add(CatalogConstants.TB_COLUMNS);
+      constants.add(CatalogConstants.TB_OPTIONS);
+      constants.add(CatalogConstants.TB_INDEXES);
+      constants.add(CatalogConstants.TB_STATISTICS);
+      constants.add(CatalogConstants.TB_PARTITION_METHODS);
+      constants.add(CatalogConstants.TB_PARTTIONS);
+      constants.add(CatalogConstants.TB_PARTTION_KEYS);
+
+      for (String constant : constants) {
+        if (checkExistence(conn, DatabaseObjectType.TABLE, constant)) {
+          return true;
+        }
+      }
+
+    } catch (SQLException e) {
+      throw new CatalogException(e.getMessage(), e);
+    }
+    return result;
+  }
+
   public boolean isInitialized(Connection conn) throws CatalogException {
     if (!isLoaded()) {
       throw new CatalogException("Database schema files are not loaded.");

Reply via email to