From e3435ec386c19fc7a6f08b9d08d4cee4bf8e36f4 Mon Sep 17 00:00:00 2001 From: Cynthia Shang Date: Mon, 10 Dec 2018 17:35:31 -0500 Subject: [PATCH] Add path expression for repository backup to the storage helper. This is the counterpart to the archive path expression and constructs paths into the backup part of the repository. Contributed by Cynthia Shang. --- doc/xml/release.xml | 2 +- src/storage/helper.c | 13 +++++++++++++ src/storage/helper.h | 1 + test/src/module/storage/posixTest.c | 9 +++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 5defd48fc..c34678a56 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -104,7 +104,7 @@ -

Allow NULL stanza in storage helper.

+

Storage helper improvements. Allow NULL stanza in storage helper. Add path expression for repository backup.

diff --git a/src/storage/helper.c b/src/storage/helper.c index bf111632c..db52960d6 100644 --- a/src/storage/helper.c +++ b/src/storage/helper.c @@ -18,6 +18,7 @@ STRING_EXTERN(STORAGE_SPOOL_ARCHIVE_IN_STR, STORAGE_SPOO STRING_EXTERN(STORAGE_SPOOL_ARCHIVE_OUT_STR, STORAGE_SPOOL_ARCHIVE_OUT); #define STORAGE_PATH_ARCHIVE "archive" +#define STORAGE_PATH_BACKUP "backup" /*********************************************************************************************************************************** Local variables @@ -173,6 +174,18 @@ storageRepoPathExpression(const String *expression, const String *path) strCatFmt(result, "/%s", strPtr(path)); } } + else if (strEqZ(expression, STORAGE_REPO_BACKUP)) + { + // Contruct the base path + if (storageHelper.stanza != NULL) + result = strNewFmt(STORAGE_PATH_BACKUP "/%s", strPtr(storageHelper.stanza)); + else + result = strNew(STORAGE_PATH_BACKUP); + + // Append subpath if provided + if (path != NULL) + strCatFmt(result, "/%s", strPtr(path)); + } else THROW_FMT(AssertError, "invalid expression '%s'", strPtr(expression)); diff --git a/src/storage/helper.h b/src/storage/helper.h index 8bf956296..83cc0267b 100644 --- a/src/storage/helper.h +++ b/src/storage/helper.h @@ -15,6 +15,7 @@ Storage path constants STRING_DECLARE(STORAGE_SPOOL_ARCHIVE_OUT_STR); #define STORAGE_REPO_ARCHIVE "" +#define STORAGE_REPO_BACKUP "" /*********************************************************************************************************************************** Repository storage types diff --git a/test/src/module/storage/posixTest.c b/test/src/module/storage/posixTest.c index 7119e87b5..f98c4b485 100644 --- a/test/src/module/storage/posixTest.c +++ b/test/src/module/storage/posixTest.c @@ -962,6 +962,9 @@ testRun(void) strPtr(storagePathNP(storage, strNew(STORAGE_REPO_ARCHIVE "/9.4-1/000000010000014C0000001A.00000028.backup"))), strPtr(strNewFmt("%s/archive/db/9.4-1/000000010000014C/000000010000014C0000001A.00000028.backup", testPath())), "check archive backup path"); + TEST_RESULT_STR( + strPtr(storagePathNP(storage, strNew(STORAGE_REPO_BACKUP))), strPtr(strNewFmt("%s/backup/db", testPath())), + "check backup path"); // Change the stanza name and make sure helper fails // ------------------------------------------------------------------------------------------------------------------------- @@ -1012,6 +1015,12 @@ testRun(void) TEST_RESULT_STR( strPtr(storagePathNP(storage, strNew(STORAGE_REPO_ARCHIVE "/simple"))), strPtr(strNewFmt("%s/archive/simple", testPath())), "check simple archive path - NULL stanza"); + TEST_RESULT_STR( + strPtr(storagePathNP(storage, strNew(STORAGE_REPO_BACKUP))), strPtr(strNewFmt("%s/backup", testPath())), + "check backup path - NULL stanza"); + TEST_RESULT_STR( + strPtr(storagePathNP(storage, strNew(STORAGE_REPO_BACKUP "/simple"))), + strPtr(strNewFmt("%s/backup/simple", testPath())), "check simple backup path - NULL stanza"); // Reset init flag storageHelper.stanzaInit = false;