From 97fb598fdd7826a5c4da4019bb2ecdc48e31d8cd Mon Sep 17 00:00:00 2001 From: JaeHwa Jung Date: Tue, 9 Jun 2015 11:39:00 +0900 Subject: [PATCH 1/4] TAJO-1642: CatalogServer need to check meta table first. --- .../tajo/catalog/store/AbstractDBStore.java | 31 ++++++++++++------- .../store/XMLCatalogSchemaManager.java | 11 +++++++ 2 files changed, 31 insertions(+), 11 deletions(-) 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 7fe6ef3d76..202bf19905 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 @@ protected boolean isInitialized() throws CatalogException { return catalogSchemaManager.isInitialized(getConnection()); } + protected boolean catalogAlreadyExists() throws CatalogException { + return catalogSchemaManager.catalogAlreadyExists(getConnection()); + } + protected void createBaseTable() throws CatalogException { createDatabaseDependants(); @@ -142,22 +146,27 @@ public AbstractDBStore(Configuration conf) throws InternalException { } 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); } 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 1ea812ccad..7f70490afe 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,6 +51,7 @@ 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.*; @@ -344,6 +345,16 @@ public void upgradeBaseSchema(Connection conn, int currentVersion) { CatalogUtil.closeQuietly(stmt); } + public boolean catalogAlreadyExists(Connection conn) throws CatalogException { + boolean result = false; + try { + result = checkExistence(conn, DatabaseObjectType.TABLE, CatalogConstants.TB_META); + } 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."); From 4b425ae2d11206ac4fe1425bd39c52f287fc77fa Mon Sep 17 00:00:00 2001 From: JaeHwa Jung Date: Mon, 22 Jun 2015 20:03:41 +0900 Subject: [PATCH 2/4] Add all DatabaseObjectType. --- .../apache/tajo/catalog/store/XMLCatalogSchemaManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 7f70490afe..7bb7bd8908 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 @@ -348,7 +348,11 @@ public void upgradeBaseSchema(Connection conn, int currentVersion) { public boolean catalogAlreadyExists(Connection conn) throws CatalogException { boolean result = false; try { - result = checkExistence(conn, DatabaseObjectType.TABLE, CatalogConstants.TB_META); + for (DatabaseObjectType objectType : DatabaseObjectType.values()) { + if (checkExistence(conn, objectType, CatalogConstants.TB_META)) { + return true; + } + } } catch (SQLException e) { throw new CatalogException(e.getMessage(), e); } From 455661e274e68d137312143192b94c23c8ad6633 Mon Sep 17 00:00:00 2001 From: JaeHwa Jung Date: Mon, 22 Jun 2015 20:05:08 +0900 Subject: [PATCH 3/4] Update the site url for upgrading catalog. --- .../java/org/apache/tajo/catalog/store/AbstractDBStore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 202bf19905..34740c02a4 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 @@ -254,7 +254,7 @@ private void verifySchemaVersion() throws CatalogException { 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."); } From 070b82dffcbfabe9d73576ebca218035177d0b53 Mon Sep 17 00:00:00 2001 From: JaeHwa Jung Date: Tue, 23 Jun 2015 13:33:24 +0900 Subject: [PATCH 4/4] Fix unit test error. --- .../store/XMLCatalogSchemaManager.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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 7bb7bd8908..9173cb8105 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 @@ -55,6 +55,7 @@ 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()); @@ -348,11 +349,25 @@ public void upgradeBaseSchema(Connection conn, int currentVersion) { public boolean catalogAlreadyExists(Connection conn) throws CatalogException { boolean result = false; try { - for (DatabaseObjectType objectType : DatabaseObjectType.values()) { - if (checkExistence(conn, objectType, CatalogConstants.TB_META)) { + List 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); }