You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2011/07/13 18:50:03 UTC
svn commit: r1146131 - in /subversion/trunk/subversion: include/svn_fs.h
libsvn_fs/fs-loader.c libsvn_fs/fs-loader.h libsvn_fs_base/fs.c
libsvn_fs_fs/fs.c libsvn_fs_fs/fs_fs.c libsvn_fs_fs/fs_fs.h
Author: danielsh
Date: Wed Jul 13 16:50:02 2011
New Revision: 1146131
URL: http://svn.apache.org/viewvc?rev=1146131&view=rev
Log:
Add an svn_fs_verify() function to the public API, and implement
it as a no-op in both backends.
* subversion/include/svn_fs.h
(svn_fs_verify): New.
* subversion/libsvn_fs/fs-loader.h
(fs_library_vtable_t): Add 'fs_verify' member.
* subversion/libsvn_fs/fs-loader.c
(svn_fs_verify): Implement
* subversion/libsvn_fs_base/fs.c
(base_verify): New no-op.
* subversion/libsvn_fs_fs/fs.c
(fs_verify): New, prepares svn_fs_t and forwards to...
* subversion/libsvn_fs_fs/fs_fs.c
(svn_fs_fs__verify): .. this new function. Currently no-op.
* subversion/libsvn_fs_fs/fs_fs.h
(svn_fs_fs__verify): New function.
Modified:
subversion/trunk/subversion/include/svn_fs.h
subversion/trunk/subversion/libsvn_fs/fs-loader.c
subversion/trunk/subversion/libsvn_fs/fs-loader.h
subversion/trunk/subversion/libsvn_fs_base/fs.c
subversion/trunk/subversion/libsvn_fs_fs/fs.c
subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h
Modified: subversion/trunk/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_fs.h?rev=1146131&r1=1146130&r2=1146131&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_fs.h (original)
+++ subversion/trunk/subversion/include/svn_fs.h Wed Jul 13 16:50:02 2011
@@ -246,6 +246,21 @@ svn_fs_upgrade(const char *path,
apr_pool_t *pool);
/**
+ * Perform backend-specific data consistency and correctness validations
+ * to the Subversion filesystem located in the directory @a path.
+ * Use @a pool for necessary allocations.
+ *
+ * @note You probably don't want to use this directly. Take a look at
+ * svn_repos_verify_fs2() instead, which does non-backend-specific
+ * verificatiosn as well.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_verify(const char *path,
+ apr_pool_t *pool);
+
+/**
* Return, in @a *fs_type, a string identifying the back-end type of
* the Subversion filesystem located in @a path. Allocate @a *fs_type
* in @a pool.
Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.c?rev=1146131&r1=1146130&r2=1146131&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs/fs-loader.c (original)
+++ subversion/trunk/subversion/libsvn_fs/fs-loader.c Wed Jul 13 16:50:02 2011
@@ -459,6 +459,27 @@ svn_fs_upgrade(const char *path, apr_poo
return svn_error_trace(err2);
}
+svn_error_t *
+svn_fs_verify(const char *path, apr_pool_t *pool)
+{
+ svn_error_t *err;
+ svn_error_t *err2;
+ fs_library_vtable_t *vtable;
+ svn_fs_t *fs;
+
+ SVN_ERR(fs_library_vtable(&vtable, path, pool));
+ fs = fs_new(NULL, pool);
+ SVN_ERR(acquire_fs_mutex());
+ err = vtable->verify_fs(fs, path, pool, common_pool);
+ err2 = release_fs_mutex();
+ if (err)
+ {
+ svn_error_clear(err2);
+ return svn_error_trace(err);
+ }
+ return svn_error_trace(err2);
+}
+
const char *
svn_fs_path(svn_fs_t *fs, apr_pool_t *pool)
{
Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.h?rev=1146131&r1=1146130&r2=1146131&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs/fs-loader.h (original)
+++ subversion/trunk/subversion/libsvn_fs/fs-loader.h Wed Jul 13 16:50:02 2011
@@ -86,6 +86,11 @@ typedef struct fs_library_vtable_t
apr_pool_t *common_pool);
svn_error_t *(*upgrade_fs)(svn_fs_t *fs, const char *path, apr_pool_t *pool,
apr_pool_t *common_pool);
+ svn_error_t *(*verify_fs)(svn_fs_t *fs, const char *path,
+ /* ### notification? */
+ /* ### cancellation? */
+ apr_pool_t *pool,
+ apr_pool_t *common_pool);
svn_error_t *(*delete_fs)(const char *path, apr_pool_t *pool);
svn_error_t *(*hotcopy)(const char *src_path, const char *dest_path,
svn_boolean_t clean, apr_pool_t *pool);
Modified: subversion/trunk/subversion/libsvn_fs_base/fs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/fs.c?rev=1146131&r1=1146130&r2=1146131&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_base/fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_base/fs.c Wed Jul 13 16:50:02 2011
@@ -874,6 +874,15 @@ base_upgrade(svn_fs_t *fs, const char *p
}
static svn_error_t *
+base_verify(svn_fs_t *fs, const char *path, apr_pool_t *pool,
+ apr_pool_t *common_pool)
+{
+ /* ### Any boilerplate needed here? */
+ /* Verifying is currently a no op for BDB. */
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
base_bdb_recover(svn_fs_t *fs,
svn_cancel_func_t cancel_func, void *cancel_baton,
apr_pool_t *pool)
@@ -1342,6 +1351,7 @@ static fs_library_vtable_t library_vtabl
base_open,
base_open_for_recovery,
base_upgrade,
+ base_verify,
base_delete_fs,
base_hotcopy,
base_get_description,
Modified: subversion/trunk/subversion/libsvn_fs_fs/fs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs.c?rev=1146131&r1=1146130&r2=1146131&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs.c Wed Jul 13 16:50:02 2011
@@ -256,6 +256,18 @@ fs_upgrade(svn_fs_t *fs, const char *pat
}
static svn_error_t *
+fs_verify(svn_fs_t *fs, const char *path, apr_pool_t *pool,
+ apr_pool_t *common_pool)
+{
+ SVN_ERR(svn_fs__check_fs(fs, FALSE));
+ SVN_ERR(initialize_fs_struct(fs));
+ SVN_ERR(svn_fs_fs__open(fs, path, pool));
+ SVN_ERR(svn_fs_fs__initialize_caches(fs, pool));
+ SVN_ERR(fs_serialized_init(fs, common_pool, pool));
+ return svn_fs_fs__verify(fs, pool);
+}
+
+static svn_error_t *
fs_pack(svn_fs_t *fs,
const char *path,
svn_fs_pack_notify_t notify_func,
@@ -342,6 +354,7 @@ static fs_library_vtable_t library_vtabl
fs_open,
fs_open_for_recovery,
fs_upgrade,
+ fs_verify,
fs_delete_fs,
fs_hotcopy,
fs_get_description,
Modified: subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c?rev=1146131&r1=1146130&r2=1146131&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Wed Jul 13 16:50:02 2011
@@ -1323,6 +1323,14 @@ svn_fs_fs__upgrade(svn_fs_t *fs, apr_poo
}
+/** Verifying. **/
+svn_error_t *
+svn_fs_fs__verify(svn_fs_t *fs, apr_pool_t *pool)
+{
+ return SVN_NO_ERROR; /* ### Not implemented. Should dereference rep-cache */
+}
+
+
/* SVN_ERR-like macros for dealing with recoverable errors on mutable files
*
* Revprops, current, and txn-current files are mutable; that is, they
Modified: subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h?rev=1146131&r1=1146130&r2=1146131&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h Wed Jul 13 16:50:02 2011
@@ -38,6 +38,10 @@ svn_error_t *svn_fs_fs__open(svn_fs_t *f
svn_error_t *svn_fs_fs__upgrade(svn_fs_t *fs,
apr_pool_t *pool);
+/* Verify the fsfs filesystem FS. Use POOL for temporary allocations. */
+svn_error_t *svn_fs_fs__verify(svn_fs_t *fs,
+ apr_pool_t *pool);
+
/* Copy the fsfs filesystem at SRC_PATH into a new copy at DST_PATH.
Use POOL for temporary allocations. */
svn_error_t *svn_fs_fs__hotcopy(const char *src_path,