/* revprops.h --- everything needed to handle revprops in FSFS * * ==================================================================== * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * ==================================================================== */ #include "svn_fs.h" /* In the filesystem FS, pack all revprop shards up to min_unpacked_rev. * * NOTE: Keep the old non-packed shards around until after the format bump. * Otherwise, re-running upgrade will drop the packed revprop shard but * have no unpacked data anymore. Call upgrade_cleanup_pack_revprops after * the bump. * * NOTIFY_FUNC and NOTIFY_BATON as well as CANCEL_FUNC and CANCEL_BATON are * used in the usual way. Temporary allocations are done in SCRATCH_POOL. */ svn_error_t * svn_fs_fs__upgrade_pack_revprops(svn_fs_t *fs, svn_fs_upgrade_notify_t notify_func, void *notify_baton, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *scratch_pool); /* In the filesystem FS, remove all non-packed revprop shards up to * min_unpacked_rev. Temporary allocations are done in SCRATCH_POOL. * * NOTIFY_FUNC and NOTIFY_BATON as well as CANCEL_FUNC and CANCEL_BATON are * used in the usual way. Cancellation is supported in the sense that we * will cleanly abort the operation. However, there will be remnant shards * that must be removed manually. * * See upgrade_pack_revprops for more info. */ svn_error_t * svn_fs_fs__upgrade_cleanup_pack_revprops(svn_fs_t *fs, svn_fs_upgrade_notify_t notify_func, void *notify_baton, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *scratch_pool); /* Read the revprops for revision REV in FS and return them in *PROPERTIES_P. * * Allocations will be done in POOL. */ svn_error_t * svn_fs_fs__get_revision_proplist(apr_hash_t **proplist_p, svn_fs_t *fs, svn_revnum_t rev, apr_pool_t *pool); /* Set the revision property list of revision REV in filesystem FS to PROPLIST. Use POOL for temporary allocations. */ svn_error_t * svn_fs_fs__set_revision_proplist(svn_fs_t *fs, svn_revnum_t rev, apr_hash_t *proplist, apr_pool_t *pool); /* Return TRUE, if for REVISION in FS, we can find the revprop pack file. * Use POOL for temporary allocations. * Set *MISSING, if the reason is a missing manifest or pack file. */ svn_boolean_t svn_fs_fs__packed_revprop_available(svn_boolean_t *missing, svn_fs_t *fs, svn_revnum_t revision, apr_pool_t *pool); /****** Packing FSFS shards *********/ /* Copy revprop files for revisions [START_REV, END_REV) from SHARD_PATH * to the pack file at PACK_FILE_NAME in PACK_FILE_DIR. * * The file sizes have already been determined and written to SIZES. * Please note that this function will be executed while the filesystem * has been locked and that revprops files will therefore not be modified * while the pack is in progress. * * COMPRESSION_LEVEL defines how well the resulting pack file shall be * compressed or whether is shall be compressed at all. TOTAL_SIZE is * a hint on which initial buffer size we should use to hold the pack file * content. * * CANCEL_FUNC and CANCEL_BATON are used as usual. Temporary allocations * are done in SCRATCH_POOL. */ svn_error_t * svn_fs_fs__copy_revprops(const char *pack_file_dir, const char *pack_filename, const char *shard_path, svn_revnum_t start_rev, svn_revnum_t end_rev, apr_array_header_t *sizes, apr_size_t total_size, int compression_level, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *scratch_pool); /* In the filesystem FS, pack all revprop shards up to min_unpacked_rev. * * NOTE: Keep the old non-packed shards around until after the format bump. * Otherwise, re-running upgrade will drop the packed revprop shard but * have no unpacked data anymore. Call upgrade_cleanup_pack_revprops after * the bump. * * NOTIFY_FUNC and NOTIFY_BATON as well as CANCEL_FUNC and CANCEL_BATON are * used in the usual way. Temporary allocations are done in SCRATCH_POOL. */ svn_error_t * svn_fs_fs__pack_revprops_shard(const char *pack_file_dir, const char *shard_path, apr_int64_t shard, int max_files_per_dir, apr_off_t max_pack_size, int compression_level, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *scratch_pool); /* In the filesystem FS, remove all non-packed revprop shards up to * min_unpacked_rev. Temporary allocations are done in SCRATCH_POOL. * * NOTIFY_FUNC and NOTIFY_BATON as well as CANCEL_FUNC and CANCEL_BATON are * used in the usual way. Cancellation is supported in the sense that we * will cleanly abort the operation. However, there will be remnant shards * that must be removed manually. * * See upgrade_pack_revprops for more info. */ svn_error_t * svn_fs_fs__delete_revprops_shard(const char *shard_path, apr_int64_t shard, int max_files_per_dir, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *scratch_pool);