Github user sandhyasun commented on a diff in the pull request: https://github.com/apache/trafodion/pull/1721#discussion_r225301717 --- Diff: core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp --- @@ -1925,3 +2730,568 @@ short CmpSeabaseDDL::createSeabaseLibmgrCPPLib(ExeCliInterface * cliInterface) } return 0; } + +short CmpSeabaseDDL::upgradeLibraries(ExeCliInterface * cliInterface, + CmpDDLwithStatusInfo *mdui) +{ +Lng32 cliRC = 0; + + while (1) // exit via return stmt in switch + { + switch (mdui->subStep()) + { + case 0: + { + mdui->setMsg("Upgrade Libraries: Started"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 1: + { + mdui->setMsg(" Start: Drop Old Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 2: + { + // drop old libraries + if (dropLibraries(cliInterface, TRUE/*old */)) + return -3; // error, but no recovery needed + + mdui->setMsg(" End: Drop Old Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 3: + { + mdui->setMsg(" Start: Rename Current Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 4: + { + // rename current libraries tables to *_OLD_LIBRARIES + if (alterRenameLibraries(cliInterface, TRUE)) + return -2; // error, need to undo the rename only + + mdui->setMsg(" End: Rename Current Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 5: + { + mdui->setMsg(" Start: Create New Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 6: + { + // create new libraries + if (createLibraries(cliInterface)) + return -1; // error, need to drop new libraies then undo rename + + mdui->setMsg(" End: Create New Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 7: + { + mdui->setMsg(" Start: Copy Old Libraries Contents "); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 8: + { + // copy old contents into new + + if (copyOldLibrariesToNew(cliInterface)) + { + mdui->setMsg(" Copy Old Libraries failed ! Drop and recreate the following : "); + //return -1; // error, need to drop new libraries then undo rename + } + + mdui->setMsg(" End: Copy Old Libraries Contents "); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 9: + { + mdui->setMsg("Upgrade Libraries: Done except for cleaning up"); + mdui->setSubstep(0); + mdui->setEndStep(TRUE); + + return 0; + } + break; + + default: + return -1; + } + } // while + + return 0; +} + +short CmpSeabaseDDL::upgradeLibrariesComplete(ExeCliInterface * cliInterface, + CmpDDLwithStatusInfo *mdui) +{ + switch (mdui->subStep()) + { + case 0: + { + mdui->setMsg("Upgrade Libraries: Drop old libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + case 1: + { + // drop old libraries; ignore errors + dropLibraries(cliInterface, TRUE/*old repos*/, FALSE/*no schema drop*/); + + mdui->setMsg("Upgrade Libraries: Drop Old Libraries done"); + mdui->setEndStep(TRUE); + mdui->setSubstep(0); + + return 0; + } + break; + + default: + return -1; + } + +return 0; +} + + +short CmpSeabaseDDL::upgradeLibrariesUndo(ExeCliInterface * cliInterface, + CmpDDLwithStatusInfo *mdui) +{ + Lng32 cliRC = 0; + + while (1) // exit via return stmt in switch + { + switch (mdui->subStep()) + { + // error return codes from upgradeLibraries can be mapped to + // the right recovery substep by this formula: substep = -(retcode + 1) + case 0: // corresponds to -1 return code from upgradeRepos (or + // to full recovery after some error after upgradeRepos) + case 1: // corresponds to -2 return code from upgradeRepos + case 2: // corresponds to -3 return code from upgradeRepos + { + mdui->setMsg("Upgrade Libraries: Restoring Old Libraries"); + mdui->setSubstep(2*mdui->subStep()+3); // go to appropriate case + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 3: + { + mdui->setMsg(" Start: Drop New Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 4: + { + // drop new Libraries; ignore errors + dropLibraries(cliInterface, FALSE/*new repos*/, + TRUE /* don't drop new tables that haven't been upgraded */); + cliInterface->clearGlobalDiags(); + mdui->setMsg(" End: Drop New Libraries"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 5: + { + mdui->setMsg(" Start: Rename Old Libraries back to New"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 6: + { + // rename old Libraries to current; ignore errors + alterRenameLibraries(cliInterface, FALSE); + cliInterface->clearGlobalDiags(); + mdui->setMsg(" End: Rename Old Libraries back to New"); + mdui->subStep()++; + mdui->setEndStep(FALSE); + + return 0; + } + break; + + case 7: + { + mdui->setMsg("Upgrade Libraries: Restore done"); + mdui->setSubstep(0); + mdui->setEndStep(TRUE); + + return 0; + } + break; + + default: + return -1; + } + } // while + + return 0; + +} + +short CmpSeabaseDDL::createLibraries(ExeCliInterface * cliInterface) --- End diff -- Yes this is creating the LIBRARIES table only.
---