PM-3035 workspace backup/restore issues SOLVED

This commit is contained in:
Julio Cesar Laura
2015-08-05 22:41:55 -04:00
parent 62ba9952b4
commit f646ceab4e
3 changed files with 27 additions and 12 deletions

View File

@@ -51,7 +51,7 @@ EOT
); );
CLI::taskArg('workspace', false); CLI::taskArg('workspace', false);
CLI::taskArg('backup-file', true); CLI::taskArg('backup-file', true);
CLI::taskOpt("filesize", "Split the backup file in multiple files which are compressed. The maximum size of these files is set to MAX-SIZE in megabytes. If MAX-SIZE is not set, then it is 1000 megabytes by default. It may be necessary to use this option if using a 32 bit Linux/UNIX system which limits its maximum file size to 2GB. This option does not work on Windows systems.", "sMAX-SIZE","filesize=MAX-SIZE"); CLI::taskOpt("filesize", "Split the backup file in multiple files which are compressed. The maximum size of these files is set to MAX-SIZE in megabytes. If MAX-SIZE is not set, then it is 1000 megabytes by default. It may be necessary to use this option if using a 32 bit Linux/UNIX system which limits its maximum file size to 2GB. This option does not work on Windows systems.", "s:","filesize=");
CLI::taskRun("run_workspace_backup"); CLI::taskRun("run_workspace_backup");
CLI::taskName('workspace-restore'); CLI::taskName('workspace-restore');
@@ -73,9 +73,9 @@ CLI::taskOpt("info", "Show information about backup file, but do not restore any
CLI::taskOpt("multiple", "Restore from multiple compressed backup files which are numbered.", "m"); CLI::taskOpt("multiple", "Restore from multiple compressed backup files which are numbered.", "m");
CLI::taskOpt("workspace", "Specify which workspace to restore if multiple workspaces are present in the backup file. CLI::taskOpt("workspace", "Specify which workspace to restore if multiple workspaces are present in the backup file.
Ex: -wworkflow.", Ex: -wworkflow.",
"wWORKSPACE", "workspace=WORKSPACE"); "w:", "workspace=");
CLI::taskOpt("lang", "Specify the language which will be used to rebuild the case cache list. If this option isn't included, then 'en' (English) will be used by default.", "lLANG","lang=LANG"); CLI::taskOpt("lang", "Specify the language which will be used to rebuild the case cache list. If this option isn't included, then 'en' (English) will be used by default.", "l:","lang=");
CLI::taskOpt("port", "Specify the port number used by MySQL. If not specified, then the port 3306 will be used by default.", "pPORT"); CLI::taskOpt("port", "Specify the port number used by MySQL. If not specified, then the port 3306 will be used by default.", "p:");
CLI::taskRun("run_workspace_restore"); CLI::taskRun("run_workspace_restore");
CLI::taskName('cacheview-repair'); CLI::taskName('cacheview-repair');
@@ -93,7 +93,7 @@ CLI::taskDescription(<<<EOT
EOT EOT
); );
CLI::taskArg('workspace', true, true); CLI::taskArg('workspace', true, true);
CLI::taskOpt("lang", "Specify the language to rebuild the case cache list. If not specified, then 'en' (English) will be used by default.\n Ex: -lfr (French) Ex: --lang=zh-CN (Mainland Chinese)", "lLANG", "lang=LANG"); CLI::taskOpt("lang", "Specify the language to rebuild the case cache list. If not specified, then 'en' (English) will be used by default.\n Ex: -lfr (French) Ex: --lang=zh-CN (Mainland Chinese)", "l:","lang=");
CLI::taskRun("run_cacheview_upgrade"); CLI::taskRun("run_cacheview_upgrade");
CLI::taskName('database-upgrade'); CLI::taskName('database-upgrade');
@@ -171,7 +171,7 @@ EOT
); );
//CLI::taskArg('workspace', true); //CLI::taskArg('workspace', true);
CLI::taskOpt("workspace", "Select the workspace whose case folders will be migrated, if multiple workspaces are present in the server.\n Ex: -wworkflow. Ex: --workspace=workflow", CLI::taskOpt("workspace", "Select the workspace whose case folders will be migrated, if multiple workspaces are present in the server.\n Ex: -wworkflow. Ex: --workspace=workflow",
"wWORKSPACE", "workspace=WORKSPACE"); "w:", "workspace=");
CLI::taskRun("runStructureDirectories"); CLI::taskRun("runStructureDirectories");
CLI::taskName("database-generate-self-service-by-value"); CLI::taskName("database-generate-self-service-by-value");

View File

@@ -52,7 +52,7 @@ class multipleFilesBackup
$metadata = $workspace->getMetadata(); $metadata = $workspace->getMetadata();
CLI::logging( "Creating temporary files on database...\n" ); CLI::logging( "Creating temporary files on database...\n" );
$metadata["databases"] = $workspace->exportDatabase( $tempDirectory ); $metadata["databases"] = $workspace->exportDatabase( $tempDirectory );
$metadata["directories"] = array ("{$workspace->name}.files"); $metadata["directories"] = array ("{$workspace->name}");
$metadata["version"] = 1; $metadata["version"] = 1;
$metaFilename = "$tempDirectory/{$workspace->name}.meta"; $metaFilename = "$tempDirectory/{$workspace->name}.meta";
if (! file_put_contents( $metaFilename, str_replace( array (",","{","}"), array (",\n ","{\n ","\n}\n"), G::json_encode( $metadata ) ) )) { if (! file_put_contents( $metaFilename, str_replace( array (",","{","}"), array (",\n ","{\n ","\n}\n"), G::json_encode( $metadata ) ) )) {
@@ -110,6 +110,8 @@ class multipleFilesBackup
$DecommpressCommand .= " | tar xzv"; $DecommpressCommand .= " | tar xzv";
$tempDirectory = PATH_DATA . "upgrade/" . basename( tempnam( __FILE__, '' ) ); $tempDirectory = PATH_DATA . "upgrade/" . basename( tempnam( __FILE__, '' ) );
$tempDirectoryHelp = $tempDirectory;
$parentDirectory = PATH_DATA . "upgrade"; $parentDirectory = PATH_DATA . "upgrade";
if (is_writable( $parentDirectory )) { if (is_writable( $parentDirectory )) {
mkdir( $tempDirectory ); mkdir( $tempDirectory );
@@ -123,6 +125,9 @@ class multipleFilesBackup
CLI::logging( "\nUncompressed into: " . $tempDirectory . "\n" ); CLI::logging( "\nUncompressed into: " . $tempDirectory . "\n" );
//Search for metafiles in the new standard (the old standard would contain meta files. //Search for metafiles in the new standard (the old standard would contain meta files.
$decommpressedfile = scandir($tempDirectoryHelp.dirname($tempDirectoryHelp), 1);
$tempDirectory = $tempDirectoryHelp.dirname($tempDirectoryHelp)."/".$decommpressedfile[0];
$metaFiles = glob( $tempDirectory . "/*.meta" ); $metaFiles = glob( $tempDirectory . "/*.meta" );
if (empty( $metaFiles )) { if (empty( $metaFiles )) {
$metaFiles = glob( $tempDirectory . "/*.txt" ); $metaFiles = glob( $tempDirectory . "/*.txt" );
@@ -173,9 +178,12 @@ class multipleFilesBackup
if (file_exists( $workspace->path )) { if (file_exists( $workspace->path )) {
G::rm_dir( $workspace->path ); G::rm_dir( $workspace->path );
} }
$tempDirectorySite = $tempDirectoryHelp.dirname($workspace->path);
foreach ($metadata->directories as $dir) { foreach ($metadata->directories as $dir) {
CLI::logging( "+> Restoring directory '$dir'\n" ); CLI::logging( "+> Restoring directory '$dir'\n" );
if (! rename( "$tempDirectory/$dir", $workspace->path )) { if (! rename( "$tempDirectorySite/$dir", $workspace->path )) {
throw new Exception( "There was an error copying the backup files ($tempDirectory/$dir) to the workspace directory {$workspace->path}." ); throw new Exception( "There was an error copying the backup files ($tempDirectory/$dir) to the workspace directory {$workspace->path}." );
} }
} }
@@ -197,13 +205,20 @@ class multipleFilesBackup
if (! $link) { if (! $link) {
throw new Exception( 'Could not connect to system database: ' . mysql_error() ); throw new Exception( 'Could not connect to system database: ' . mysql_error() );
} }
if (strpos($metadata->DB_RBAC_NAME, 'rb_') === false) {
$onedb = true;
} else {
$onedb = false;
}
$newDBNames = $workspace->resetDBInfo( $dbHost, $createWorkspace ); $newDBNames = $workspace->resetDBInfo( $dbHost, $createWorkspace, $onedb );
$aParameters = array('dbHost'=>$dbHost,'dbUser'=>$dbUser,'dbPass'=>$dbPass);
foreach ($metadata->databases as $db) { foreach ($metadata->databases as $db) {
$dbName = $newDBNames[$db->name]; $dbName = $newDBNames[$db->name];
CLI::logging( "+> Restoring database {$db->name} to $dbName\n" ); CLI::logging( "+> Restoring database {$db->name} to $dbName\n" );
$workspace->executeSQLScript( $dbName, "$tempDirectory/{$db->name}.sql" ); $workspace->executeSQLScript( $dbName, "$tempDirectory/{$db->name}.sql", $aParameters );
$workspace->createDBUser( $dbName, $db->pass, "localhost", $dbName ); $workspace->createDBUser( $dbName, $db->pass, "localhost", $dbName );
$workspace->createDBUser( $dbName, $db->pass, "%", $dbName ); $workspace->createDBUser( $dbName, $db->pass, "%", $dbName );
} }

View File

@@ -1244,7 +1244,7 @@ class workspaceTools
* @param string $hostname the hostname the user will be connecting from * @param string $hostname the hostname the user will be connecting from
* @param string $database the database to grant permissions * @param string $database the database to grant permissions
*/ */
private function createDBUser($username, $password, $hostname, $database) public function createDBUser($username, $password, $hostname, $database)
{ {
mysql_select_db("mysql"); mysql_select_db("mysql");
$hostname = array_shift(explode(":", $hostname)); $hostname = array_shift(explode(":", $hostname));
@@ -1282,7 +1282,7 @@ class workspaceTools
* @param string $filename the script filename * @param string $filename the script filename
* @param string $database the database to execute this script into * @param string $database the database to execute this script into
*/ */
private function executeSQLScript($database, $filename, $parameters) public function executeSQLScript($database, $filename, $parameters)
{ {
mysql_query("CREATE DATABASE IF NOT EXISTS " . mysql_real_escape_string($database)); mysql_query("CREATE DATABASE IF NOT EXISTS " . mysql_real_escape_string($database));