You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by db...@apache.org on 2016/07/18 16:20:37 UTC
[12/16] incubator-trafodion git commit: Fix upgrade so repository
upgrade will succeed
Fix upgrade so repository upgrade will succeed
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/a49afa1b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/a49afa1b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/a49afa1b
Branch: refs/heads/master
Commit: a49afa1be39fed8b90efe15d66024548123075d9
Parents: ff89586
Author: Dave Birdsall <db...@apache.org>
Authored: Wed Jul 6 18:30:46 2016 +0000
Committer: Dave Birdsall <db...@apache.org>
Committed: Wed Jul 6 18:30:46 2016 +0000
----------------------------------------------------------------------
core/sql/optimizer/RelExeUtil.h | 7 +++++
core/sql/parser/ParKeyWords.cpp | 1 +
core/sql/parser/sqlparser.y | 41 +++++++++++++++++++-------
core/sql/sqlcomp/CmpSeabaseDDL.h | 2 +-
core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp | 27 ++++++++++-------
core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp | 16 +++++-----
core/sql/sqlcomp/CmpSeabaseDDLupgrade.h | 23 +++++++++++++--
7 files changed, 85 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a49afa1b/core/sql/optimizer/RelExeUtil.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExeUtil.h b/core/sql/optimizer/RelExeUtil.h
index b97cf72..2591926 100644
--- a/core/sql/optimizer/RelExeUtil.h
+++ b/core/sql/optimizer/RelExeUtil.h
@@ -242,6 +242,7 @@ public:
dropAuthorization_(FALSE),
addSeqTable_(FALSE),
addSchemaObjects_(FALSE),
+ minimal_(FALSE),
returnStatus_(FALSE),
flags_(0)
{
@@ -255,6 +256,7 @@ public:
NABoolean createMDviews, NABoolean dropMDviews,
NABoolean initAuthorization, NABoolean dropAuthorization,
NABoolean addSeqTable, NABoolean updateVersion, NABoolean addSchemaObjects,
+ NABoolean minimal,
char * ddlStmtText,
CharInfo::CharSet ddlStmtTextCharSet,
CollHeap *oHeap = CmpCommon::statementHeap())
@@ -280,6 +282,7 @@ public:
dropAuthorization_(dropAuthorization),
addSeqTable_(addSeqTable),
addSchemaObjects_(addSchemaObjects),
+ minimal_(minimal),
returnStatus_(FALSE),
flags_(0)
{
@@ -318,6 +321,7 @@ public:
dropAuthorization_(FALSE),
addSeqTable_(FALSE),
addSchemaObjects_(FALSE),
+ minimal_(FALSE),
returnStatus_(FALSE),
flags_(0)
{
@@ -390,6 +394,7 @@ public:
NABoolean dropAuthorization() { return dropAuthorization_; }
NABoolean addSeqTable() { return addSeqTable_; }
NABoolean addSchemaObjects() { return addSchemaObjects_; }
+ NABoolean minimal() { return minimal_; }
short ddlXnsInfo(NABoolean &ddlXns, NABoolean &xnCanBeStarted);
@@ -489,6 +494,8 @@ public:
NABoolean dropAuthorization_;
NABoolean addSeqTable_;
NABoolean addSchemaObjects_;
+ NABoolean minimal_; // meaningful only when initHbase_ is true; if this is true,
+ // means create the metadata tables only (and not repository etc.)
// if set, this ddl cannot run under a user transaction. It must run in autocommit
// mode.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a49afa1b/core/sql/parser/ParKeyWords.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/ParKeyWords.cpp b/core/sql/parser/ParKeyWords.cpp
index fee890f..c75cae8 100644
--- a/core/sql/parser/ParKeyWords.cpp
+++ b/core/sql/parser/ParKeyWords.cpp
@@ -637,6 +637,7 @@ ParKeyWord ParKeyWords::keyWords_[] = {
ParKeyWord("MESSAGE_TEXT", TOK_MESSAGE_TEXT, NONRESTOKEN_),
ParKeyWord("METADATA", TOK_METADATA, SECOND_ | NONRESTOKEN_),
ParKeyWord("MIN", TOK_MIN, ANS_|RESWORD_|NONRESTOKEN_),
+ ParKeyWord("MINIMAL", TOK_MINIMAL, NONRESTOKEN_),
ParKeyWord("MINUTE", TOK_MINUTE, ANS_|RESWORD_|MPWORD_),
ParKeyWord("MINUTES", TOK_MINUTES, NONRESTOKEN_),
ParKeyWord("MINVALUE", TOK_MINVALUE, NONRESTOKEN_),
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a49afa1b/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 318988b..6cc4040 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -831,6 +831,7 @@ static void enableMakeQuotedStringISO88591Mechanism()
%token <tokval> TOK_MERGE
%token <tokval> TOK_METADATA
%token <tokval> TOK_MIN
+%token <tokval> TOK_MINIMAL
%token <tokval> TOK_MINUTE
%token <tokval> TOK_MINUTES
%token <tokval> TOK_MINVALUE
@@ -16022,13 +16023,30 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE,
- FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
$$ = de;
- }
+ }
+
+ | TOK_INITIALIZE TOK_TRAFODION ',' TOK_MINIMAL
+ {
+ CharInfo::CharSet stmtCharSet = CharInfo::UnknownCharSet;
+ NAString * stmt = getSqlStmtStr ( stmtCharSet // out - CharInfo::CharSet &
+ , PARSERHEAP()
+ );
+
+ DDLExpr * de = new(PARSERHEAP()) DDLExpr(TRUE, FALSE, TRUE, FALSE,
+ FALSE, FALSE,
+ FALSE, FALSE, FALSE, TRUE /* minimal */,
+ (char*)stmt->data(),
+ stmtCharSet,
+ PARSERHEAP());
+
+ $$ = de;
+ }
| TOK_INITIALIZE TOK_TRAFODION ',' TOK_NO TOK_METADATA TOK_VIEWS
{
@@ -16039,7 +16057,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE,
- FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16056,7 +16074,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(FALSE, TRUE, FALSE, TRUE,
FALSE, FALSE,
- FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16073,7 +16091,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(FALSE, FALSE, TRUE, FALSE,
FALSE, FALSE,
- FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16090,7 +16108,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(FALSE, FALSE, FALSE, TRUE,
FALSE, FALSE,
- FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16114,7 +16132,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE,
- TRUE, FALSE, FALSE,
+ TRUE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16131,7 +16149,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE,
- FALSE, FALSE, TRUE,
+ FALSE, FALSE, TRUE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16247,7 +16265,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
);
DDLExpr * ia = new(PARSERHEAP()) DDLExpr(FALSE, FALSE, FALSE, FALSE,
TRUE, FALSE,
- FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16280,7 +16298,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * ia = new(PARSERHEAP()) DDLExpr(FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE,
- FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -16298,7 +16316,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
DDLExpr * de = new(PARSERHEAP()) DDLExpr(FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE,
- FALSE, TRUE, FALSE,
+ FALSE, TRUE, FALSE, FALSE,
(char*)stmt->data(),
stmtCharSet,
PARSERHEAP());
@@ -33054,6 +33072,7 @@ nonreserved_word : TOK_ABORT
| TOK_MESSAGE_OCTET_LEN
| TOK_MESSAGE_TEXT
| TOK_METADATA
+ | TOK_MINIMAL
| TOK_MINUTES
| TOK_MINVALUE
| TOK_MODE
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a49afa1b/core/sql/sqlcomp/CmpSeabaseDDL.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDL.h b/core/sql/sqlcomp/CmpSeabaseDDL.h
index 970a6cf..21f5cbe 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDL.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDL.h
@@ -1243,7 +1243,7 @@ protected:
StmtDDLDropHbaseTable * createTableNode,
NAString &currCatName, NAString &currSchName);
- void initSeabaseMD(NABoolean ddlXns);
+ void initSeabaseMD(NABoolean ddlXns, NABoolean minimal);
void dropSeabaseMD(NABoolean ddlXns);
void createSeabaseMDviews();
void dropSeabaseMDviews();
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a49afa1b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
index d65a5cc..e91c810 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
@@ -6730,7 +6730,7 @@ short CmpSeabaseDDL::updateSeabaseAuths(
return 0;
}
-void CmpSeabaseDDL::initSeabaseMD(NABoolean ddlXns)
+void CmpSeabaseDDL::initSeabaseMD(NABoolean ddlXns, NABoolean minimal)
{
int breadCrumb = -1; // useful for debugging
Lng32 retcode = 0;
@@ -6975,16 +6975,23 @@ void CmpSeabaseDDL::initSeabaseMD(NABoolean ddlXns)
goto label_error;
}
- if (createRepos(&cliInterface))
+ // If this is a MINIMAL initialization, don't create the repository
+ // or privilege manager tables. (This happens underneath an upgrade,
+ // for example, because the repository and privilege manager tables
+ // already exist and we will later upgrade them.)
+ if (!minimal)
{
- breadCrumb = 10;
- goto label_error;
- }
+ if (createRepos(&cliInterface))
+ {
+ breadCrumb = 10;
+ goto label_error;
+ }
- if (createPrivMgrRepos(&cliInterface, ddlXns))
- {
- breadCrumb = 11;
- goto label_error;
+ if (createPrivMgrRepos(&cliInterface, ddlXns))
+ {
+ breadCrumb = 11;
+ goto label_error;
+ }
}
if (createSeabaseLibmgr (&cliInterface))
@@ -8557,7 +8564,7 @@ short CmpSeabaseDDL::executeSeabaseDDL(DDLExpr * ddlExpr, ExprNode * ddlNode,
if (ddlExpr->initHbase())
{
- initSeabaseMD(ddlExpr->ddlXns());
+ initSeabaseMD(ddlExpr->ddlXns(), ddlExpr->minimal());
}
else if (ddlExpr->dropHbase())
{
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a49afa1b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp
index e6e4caa..1c058df 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp
@@ -170,13 +170,7 @@ short CmpSeabaseMDupgrade::dropMDtables(ExpHbaseInterface *ehi,
} // for
- Lng32 reposErrcode = dropReposTables(ehi, oldTbls);
- if (errcode)
- return errcode;
- else if (reposErrcode)
- return reposErrcode;
- else
- return 0;
+ return errcode;
}
short CmpSeabaseMDupgrade::restoreOldMDtables(ExpHbaseInterface *ehi)
@@ -322,6 +316,9 @@ short CmpSeabaseMDupgrade::executeSeabaseMDupgrade(CmpDDLwithStatusInfo *mdui,
while (1)
{
+ // TODO: remove this debugging code
+ cout << "mdui->step() is " << mdui->step() << ", mdui->subStep() is " << mdui->subStep() << endl;
+ // TODO: remove the above debugging code
switch (mdui->step())
{
case UPGRADE_START:
@@ -979,7 +976,10 @@ short CmpSeabaseMDupgrade::executeSeabaseMDupgrade(CmpDDLwithStatusInfo *mdui,
CmpCommon::context()->setIsUninitializedSeabase(TRUE);
CmpCommon::context()->uninitializedSeabaseErrNum() = -1393; // MD doesn't exist
- str_sprintf(buf, "initialize trafodion;");
+ // Use "initialize trafodion, minimal" so we only create the metadata
+ // tables. The other tables (repository and privilege manager) already
+ // exist; we will upgrade them later in this method.
+ str_sprintf(buf, "initialize trafodion, minimal;");
cliRC = cliInterface.executeImmediate(buf);
if (cliRC < 0)
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a49afa1b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLupgrade.h b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.h
index 4e7111c..3fcc94b 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLupgrade.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.h
@@ -89,7 +89,12 @@ struct MDUpgradeInfo
// if new and old col info is different, then data need to be copied using
// explicit column names in insert and select part of the query.
- // insert into tgt (insertedCols) select selectedCols from src;
+ // upsert into tgt (insertedCols) select selectedCols from src;
+ // Note that the OBJECTS table must always do this, since we need to modify
+ // the table name for rows concerning the metadata tables themselves. That is,
+ // we are copying in rows concerning the *old* metadata tables; rows concerning
+ // the *new* metadata tables are already there from "initialize trafodion" and
+ // we don't want to overwrite them as part of the UPSERT.
const char * insertedCols;
const char * selectedCols;
@@ -191,7 +196,21 @@ static const MDUpgradeInfo allMDupgradeInfo[] = {
seabaseObjectsDDL, sizeof(seabaseObjectsDDL),
NULL, 0,
NULL, 0,
- FALSE, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
+ FALSE,
+ // Note: For OBJECTS, we always have to provide insertedCols and
+ // selectedCols since we have to modify the table name for rows
+ // concerning the old metadata (see the "case" expression below).
+ "catalog_name,schema_name,"
+ "object_name,"
+ "object_type,object_uid,"
+ "create_time,redef_time,valid_def,droppable,object_owner,schema_owner,"
+ "flags",
+ "catalog_name,schema_name,"
+ "case when schema_name = '_MD_' then object_name || '_OLD_MD' else object_name end,"
+ "object_type,object_uid,"
+ "create_time,redef_time,valid_def,droppable,object_owner,schema_owner,"
+ "flags",
+ NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
{SEABASE_OBJECTS_UNIQ_IDX, SEABASE_OBJECTS_UNIQ_IDX_OLD_MD,
seabaseObjectsUniqIdxDDL, sizeof(seabaseObjectsUniqIdxDDL),