You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/10/25 16:12:43 UTC
svn commit: r1535744 - in
/subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs: ./
fs-fs-pack-test.c
Author: stefan2
Date: Fri Oct 25 14:12:42 2013
New Revision: 1535744
URL: http://svn.apache.org/r1535744
Log:
On the log-addressing branch:
Add a test that transactions created before 'svnadmin upgrade' will
also get upgraded properly upon commit.
* subversion/tests/libsvn_fs_fs
(): svn:ignore test repositories
* subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
(upgrade_txn_to_log_addressing): rename to ...
(upgrade_txns_to_log_addressing): ... this and make it more generic.
In particular, make the upgrade point
selectable by the caller.
(upgrade_old_txns_to_log_addressing): replace the previous test
(upgrade_new_txns_to_log_addressing): new test
(test_funcs): update
Modified:
subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs/ (props changed)
subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
Propchange: subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Oct 25 14:12:42 2013
@@ -11,3 +11,5 @@ test-get-set-revprop-packed-fs
.*~
*.exe
upgrade_txn_to_log_addressing
+upgrade_old_txns_to_log_addressing
+upgrade_new_txns_to_log_addressing
Modified: subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c?rev=1535744&r1=1535743&r2=1535744&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c (original)
+++ subversion/branches/log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c Fri Oct 25 14:12:42 2013
@@ -933,21 +933,21 @@ get_set_multiple_huge_revprops_packed_fs
#undef SHARD_SIZE
/* ------------------------------------------------------------------------ */
-#define REPO_NAME "upgrade_txn_to_log_addressing"
#define SHARD_SIZE 4
-#define MAX_REV 8
static svn_error_t *
-upgrade_txn_to_log_addressing(const svn_test_opts_t *opts,
- apr_pool_t *pool)
+upgrade_txns_to_log_addressing(const svn_test_opts_t *opts,
+ const char *repo_name,
+ svn_revnum_t max_rev,
+ svn_boolean_t upgrade_before_txns,
+ apr_pool_t *pool)
{
svn_fs_t *fs;
svn_revnum_t rev;
- const char *repo_path;
apr_array_header_t *txns;
+ apr_array_header_t *txn_names;
int i, k;
svn_test_opts_t temp_opts;
svn_fs_root_t *root;
-
static const char * const paths[SHARD_SIZE][2]
= {
{ "A/mu", "A/B/lambda" },
@@ -964,21 +964,29 @@ upgrade_txn_to_log_addressing(const svn_
/* Create the packed FS in phys addressing format and open it. */
temp_opts = *opts;
temp_opts.server_minor_version = 8;
- SVN_ERR(prepare_revprop_repo(&fs, REPO_NAME, MAX_REV, SHARD_SIZE,
+ SVN_ERR(prepare_revprop_repo(&fs, repo_name, max_rev, SHARD_SIZE,
&temp_opts, pool));
- /* upgrade to final repo format (using log addressing) and re-open */
- repo_path = svn_fs_path(fs, pool);
- SVN_ERR(svn_fs_upgrade2(repo_path, NULL, NULL, NULL, NULL, pool));
- SVN_ERR(svn_fs_open(&fs, repo_path, svn_fs_config(fs, pool), pool));
-
+ if (upgrade_before_txns)
+ {
+ /* upgrade to final repo format (using log addressing) and re-open */
+ SVN_ERR(svn_fs_upgrade2(repo_name, NULL, NULL, NULL, NULL, pool));
+ SVN_ERR(svn_fs_open(&fs, repo_name, svn_fs_config(fs, pool), pool));
+ }
+
/* Create 4 concurrent transactions */
- txns = apr_array_make(pool, 4, sizeof(svn_fs_txn_t *));
+ txns = apr_array_make(pool, SHARD_SIZE, sizeof(svn_fs_txn_t *));
+ txn_names = apr_array_make(pool, SHARD_SIZE, sizeof(const char *));
for (i = 0; i < SHARD_SIZE; ++i)
{
svn_fs_txn_t *txn;
- SVN_ERR(svn_fs_begin_txn(&txn, fs, MAX_REV, pool));
+ const char *txn_name;
+
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, max_rev, pool));
APR_ARRAY_PUSH(txns, svn_fs_txn_t *) = txn;
+
+ SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool));
+ APR_ARRAY_PUSH(txn_names, const char *) = txn_name;
}
/* Let all txns touch at least 2 files.
@@ -1002,18 +1010,27 @@ upgrade_txn_to_log_addressing(const svn_
}
}
+ if (!upgrade_before_txns)
+ {
+ /* upgrade to final repo format (using log addressing) and re-open */
+ SVN_ERR(svn_fs_upgrade2(repo_name, NULL, NULL, NULL, NULL, pool));
+ SVN_ERR(svn_fs_open(&fs, repo_name, svn_fs_config(fs, pool), pool));
+ }
+
/* Commit all transactions
* (in reverse order to make things more interesting) */
for (i = SHARD_SIZE - 1; i >= 0; --i)
{
- svn_fs_txn_t *txn = APR_ARRAY_IDX(txns, i, svn_fs_txn_t *);
+ svn_fs_txn_t *txn;
+ const char *txn_name = APR_ARRAY_IDX(txn_names, i, const char *);
+ SVN_ERR(svn_fs_open_txn(&txn, fs, txn_name, pool));
SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, pool));
}
/* Further changes to fill the shard */
SVN_ERR(svn_fs_youngest_rev(&rev, fs, pool));
- SVN_TEST_ASSERT(rev == SHARD_SIZE + MAX_REV + 1);
+ SVN_TEST_ASSERT(rev == SHARD_SIZE + max_rev + 1);
while ((rev + 1) % SHARD_SIZE)
{
@@ -1032,7 +1049,7 @@ upgrade_txn_to_log_addressing(const svn_
/* Pack repo to verify that old and new shard get packed according to
their respective addressing mode */
- SVN_ERR(svn_fs_pack(REPO_NAME, NULL, NULL, NULL, NULL, pool));
+ SVN_ERR(svn_fs_pack(repo_name, NULL, NULL, NULL, NULL, pool));
/* verify that our changes got in */
@@ -1057,7 +1074,7 @@ upgrade_txn_to_log_addressing(const svn_
/* verify that the indexes are consistent, we calculated the correct
low-level checksums etc. */
- SVN_ERR(svn_fs_verify(REPO_NAME, NULL,
+ SVN_ERR(svn_fs_verify(repo_name, NULL,
SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
NULL, NULL, NULL, NULL, pool));
for (; rev >= 0; --rev)
@@ -1068,9 +1085,37 @@ upgrade_txn_to_log_addressing(const svn_
return SVN_NO_ERROR;
}
+#undef SHARD_SIZE
+
+#define REPO_NAME "upgrade_new_txns_to_log_addressing"
+#define MAX_REV 8
+static svn_error_t *
+upgrade_new_txns_to_log_addressing(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ SVN_ERR(upgrade_txns_to_log_addressing(opts, REPO_NAME, MAX_REV, TRUE,
+ pool));
+
+ return SVN_NO_ERROR;
+}
+#undef REPO_NAME
+#undef MAX_REV
+
+/* ------------------------------------------------------------------------ */
+#define REPO_NAME "upgrade_old_txns_to_log_addressing"
+#define MAX_REV 8
+static svn_error_t *
+upgrade_old_txns_to_log_addressing(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ SVN_ERR(upgrade_txns_to_log_addressing(opts, REPO_NAME, MAX_REV, FALSE,
+ pool));
+
+ return SVN_NO_ERROR;
+}
+
#undef REPO_NAME
#undef MAX_REV
-#undef SHARD_SIZE
/* ------------------------------------------------------------------------ */
@@ -1103,7 +1148,9 @@ struct svn_test_descriptor_t test_funcs[
"test packing with shard size = 1"),
SVN_TEST_OPTS_PASS(get_set_multiple_huge_revprops_packed_fs,
"set multiple huge revprops in packed FSFS"),
- SVN_TEST_OPTS_PASS(upgrade_txn_to_log_addressing,
+ SVN_TEST_OPTS_PASS(upgrade_new_txns_to_log_addressing,
"upgrade txns to log addressing in shared FSFS"),
+ SVN_TEST_OPTS_PASS(upgrade_old_txns_to_log_addressing,
+ "upgrade txns started before svnadmin upgrade"),
SVN_TEST_NULL
};