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 2015/10/29 21:09:52 UTC
svn commit: r1711354 - in /subversion/trunk/subversion/libsvn_fs_x:
transaction.c util.c util.h
Author: stefan2
Date: Thu Oct 29 20:09:52 2015
New Revision: 1711354
URL: http://svn.apache.org/viewvc?rev=1711354&view=rev
Log:
In FSX, provide a move-into-place function that supports fsync batching.
Note that svn_fs_x__move_into_place2 does not do The Right Thing on Win32
atm but that is no different from the previous state. This will be
addressed soon.
* subversion/libsvn_fs_x/util.h
(svn_fs_x__move_into_place2): Declare new internal API.
* subversion/libsvn_fs_x/util.c
(svn_fs_x__move_into_place2): Implement it.
* subversion/libsvn_fs_x/transaction.c
(bump_txn_key,
bump_ids): Call the new batch-enabled move-into-place function.
Modified:
subversion/trunk/subversion/libsvn_fs_x/transaction.c
subversion/trunk/subversion/libsvn_fs_x/util.c
subversion/trunk/subversion/libsvn_fs_x/util.h
Modified: subversion/trunk/subversion/libsvn_fs_x/transaction.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/transaction.c?rev=1711354&r1=1711353&r2=1711354&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/transaction.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/transaction.c Thu Oct 29 20:09:52 2015
@@ -1287,10 +1287,9 @@ bump_txn_key(svn_fs_t *fs,
/* Increment the key and add a trailing \n to the string so the
txn-current file has a newline in it. */
- SVN_ERR(svn_io_file_rename2(txn_next_path, txn_current_path, FALSE,
- scratch_pool));
- SVN_ERR(svn_fs_x__batch_fsync_new_path(batch, txn_current_path,
- scratch_pool));
+ SVN_ERR(svn_fs_x__move_into_place2(txn_next_path, txn_current_path,
+ txn_current_path, batch,
+ scratch_pool));
return SVN_NO_ERROR;
}
@@ -3692,10 +3691,9 @@ bump_ids(void *baton,
/* Make the revision visible to all processes and threads. */
current_filename = svn_fs_x__path_current(b->fs, scratch_pool);
- SVN_ERR(svn_io_file_rename2(svn_fs_x__path_next(b->fs, scratch_pool),
- current_filename, FALSE, scratch_pool));
- SVN_ERR(svn_fs_x__batch_fsync_new_path(b->batch, current_filename,
- scratch_pool));
+ SVN_ERR(svn_fs_x__move_into_place2(svn_fs_x__path_next(b->fs, scratch_pool),
+ current_filename, current_filename,
+ b->batch, scratch_pool));
/* Bump txn id. */
SVN_ERR(bump_txn_key(b->fs, b->batch, scratch_pool));
Modified: subversion/trunk/subversion/libsvn_fs_x/util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/util.c?rev=1711354&r1=1711353&r2=1711354&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/util.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/util.c Thu Oct 29 20:09:52 2015
@@ -717,6 +717,28 @@ svn_fs_x__read_number_from_stream(apr_in
}
svn_error_t *
+svn_fs_x__move_into_place2(const char *old_filename,
+ const char *new_filename,
+ const char *perms_reference,
+ svn_fs_x__batch_fsync_t *batch,
+ apr_pool_t *scratch_pool)
+{
+ /* Copying permissions is a no-op on WIN32. */
+ SVN_ERR(svn_io_copy_perms(perms_reference, old_filename, scratch_pool));
+
+ /* TODO: teach svn_fs_x__batch_fsync_t how to properly rename on Win32. */
+
+ /* Move the file into place. */
+ SVN_ERR(svn_io_file_rename2(old_filename, new_filename, FALSE,
+ scratch_pool));
+
+ /* Schedule for synchronization. */
+ SVN_ERR(svn_fs_x__batch_fsync_new_path(batch, new_filename, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_fs_x__move_into_place(const char *old_filename,
const char *new_filename,
const char *perms_reference,
Modified: subversion/trunk/subversion/libsvn_fs_x/util.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/util.h?rev=1711354&r1=1711353&r2=1711354&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/util.h (original)
+++ subversion/trunk/subversion/libsvn_fs_x/util.h Thu Oct 29 20:09:52 2015
@@ -25,6 +25,7 @@
#include "svn_fs.h"
#include "id.h"
+#include "batch_fsync.h"
/* Functions for dealing with recoverable errors on mutable files
*
@@ -467,4 +468,13 @@ svn_fs_x__move_into_place(const char *ol
const char *perms_reference,
apr_pool_t *scratch_pool);
+/* Like svn_fs_x__move_into_place but schedules fsync operations in BATCH.
+ Also, OLD_FILENAME and NEW_FILENAME must point to the same volume. */
+svn_error_t *
+svn_fs_x__move_into_place2(const char *old_filename,
+ const char *new_filename,
+ const char *perms_reference,
+ svn_fs_x__batch_fsync_t *batch,
+ apr_pool_t *scratch_pool);
+
#endif