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 2010/08/08 17:34:48 UTC

svn commit: r983430 [3/3] - in /subversion/branches/performance/subversion/libsvn_fs_fs: caching.c fs.h fs_fs.c temp_serializer.c temp_serializer.h

Propchange: subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.c
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.h (from r982376, subversion/branches/performance/subversion/libsvn_fs_fs/fs_fs.h)
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.h?p2=subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.h&p1=subversion/branches/performance/subversion/libsvn_fs_fs/fs_fs.h&r1=982376&r2=983430&rev=983430&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_fs_fs/fs_fs.h (original)
+++ subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.h Sun Aug  8 15:34:48 2010
@@ -1,4 +1,4 @@
-/* fs_fs.h : interface to the native filesystem layer
+/* temp_serializer.h : serialization functions for caching of FSFS structures
  *
  * ====================================================================
  *    Licensed to the Apache Software Foundation (ASF) under one
@@ -20,558 +20,61 @@
  * ====================================================================
  */
 
-#ifndef SVN_LIBSVN_FS__FS_FS_H
-#define SVN_LIBSVN_FS__FS_FS_H
+#ifndef SVN_LIBSVN_FS__TEMP_SERIALIZER_H
+#define SVN_LIBSVN_FS__TEMP_SERIALIZER_H
 
 #include "fs.h"
 
-/* Open the fsfs filesystem pointed to by PATH and associate it with
-   filesystem object FS.  Use POOL for temporary allocations. */
-svn_error_t *svn_fs_fs__open(svn_fs_t *fs,
-                             const char *path,
-                             apr_pool_t *pool);
-
-/* Upgrade the fsfs filesystem FS.  Use POOL for temporary allocations. */
-svn_error_t *svn_fs_fs__upgrade(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,
-                                const char *dst_path,
-                                apr_pool_t *pool);
-
-/* Recover the fsfs associated with filesystem FS.
-   Use optional CANCEL_FUNC/CANCEL_BATON for cancellation support.
-   Use POOL for temporary allocations. */
-svn_error_t *svn_fs_fs__recover(svn_fs_t *fs,
-                                svn_cancel_func_t cancel_func,
-                                void *cancel_baton,
-                                apr_pool_t *pool);
-
-/* Set *NODEREV_P to the node-revision for the node ID in FS.  Do any
-   allocations in POOL. */
-svn_error_t *svn_fs_fs__get_node_revision(node_revision_t **noderev_p,
-                                          svn_fs_t *fs,
-                                          const svn_fs_id_t *id,
-                                          apr_pool_t *pool);
-
-/* Store NODEREV as the node-revision for the node whose id is ID in
-   FS, after setting its is_fresh_txn_root to FRESH_TXN_ROOT.  Do any
-   necessary temporary allocation in POOL. */
-svn_error_t *svn_fs_fs__put_node_revision(svn_fs_t *fs,
-                                          const svn_fs_id_t *id,
-                                          node_revision_t *noderev,
-                                          svn_boolean_t fresh_txn_root,
-                                          apr_pool_t *pool);
-
-/* Write the node-revision NODEREV into the stream OUTFILE, compatible with
-   filesystem format FORMAT.  Only write mergeinfo-related metadata if
-   INCLUDE_MERGEINFO is true.  Temporary allocations are from POOL. */
-svn_error_t *
-svn_fs_fs__write_noderev(svn_stream_t *outfile,
-                         node_revision_t *noderev,
-                         int format,
-                         svn_boolean_t include_mergeinfo,
-                         apr_pool_t *pool);
-
-/* Read a node-revision from STREAM. Set *NODEREV to the new structure,
-   allocated in POOL. */
-svn_error_t *
-svn_fs_fs__read_noderev(node_revision_t **noderev,
-                        svn_stream_t *stream,
-                        apr_pool_t *pool);
-
-
-/* Set *YOUNGEST to the youngest revision in filesystem FS.  Do any
-   temporary allocation in POOL. */
-svn_error_t *svn_fs_fs__youngest_rev(svn_revnum_t *youngest,
-                                     svn_fs_t *fs,
-                                     apr_pool_t *pool);
-
-/* Set *ROOT_ID to the node-id for the root of revision REV in
-   filesystem FS.  Do any allocations in POOL. */
-svn_error_t *svn_fs_fs__rev_get_root(svn_fs_id_t **root_id,
-                                     svn_fs_t *fs,
-                                     svn_revnum_t rev,
-                                     apr_pool_t *pool);
-
-/* Serialize a directory contents hash.
-   Implements svn_cache__serialize_func_t */
-svn_error_t *
-svn_fs_fs__dir_entries_serialize(char **data,
-                                 apr_size_t *data_len,
-                                 void *in,
-                                 apr_pool_t *pool);
-
-/* Deserialize a directory contents hash.
-   Implements svn_cache__deserialize_func_t */
-svn_error_t *
-svn_fs_fs__dir_entries_deserialize(void **out,
-                                   const char *data,
-                                   apr_size_t data_len,
-                                   apr_pool_t *pool);
-
-/* Set *ENTRIES to an apr_hash_t of dirent structs that contain the
-   directory entries of node-revision NODEREV in filesystem FS.  The
-   returned table (and its keys and values) is allocated in POOL,
-   which is also used for temporary allocations. */
-svn_error_t *svn_fs_fs__rep_contents_dir(apr_hash_t **entries,
-                                         svn_fs_t *fs,
-                                         node_revision_t *noderev,
-                                         apr_pool_t *pool);
-
-/* Set *CONTENTS to be a readable svn_stream_t that receives the text
-   representation of node-revision NODEREV as seen in filesystem FS.
-   Use POOL for temporary allocations. */
-svn_error_t *svn_fs_fs__get_contents(svn_stream_t **contents,
-                                     svn_fs_t *fs,
-                                     node_revision_t *noderev,
-                                     apr_pool_t *pool);
-
-/* Set *STREAM_P to a delta stream turning the contents of the file SOURCE into
-   the contents of the file TARGET, allocated in POOL.
-   If SOURCE is null, the empty string will be used. */
-svn_error_t *svn_fs_fs__get_file_delta_stream(svn_txdelta_stream_t **stream_p,
-                                              svn_fs_t *fs,
-                                              node_revision_t *source,
-                                              node_revision_t *target,
-                                              apr_pool_t *pool);
-
-/* Set *PROPLIST to be an apr_hash_t containing the property list of
-   node-revision NODEREV as seen in filesystem FS.  Use POOL for
-   temporary allocations. */
-svn_error_t *svn_fs_fs__get_proplist(apr_hash_t **proplist,
-                                     svn_fs_t *fs,
-                                     node_revision_t *noderev,
-                                     apr_pool_t *pool);
-
-/* Set *PROPLIST to be an apr_hash_t containing the property list of
-   revision REV as seen in filesystem FS.  Use POOL for temporary
-   allocations. */
-svn_error_t *svn_fs_fs__revision_proplist(apr_hash_t **proplist,
-                                          svn_fs_t *fs,
-                                          svn_revnum_t rev,
-                                          apr_pool_t *pool);
-
-/* Set *LENGTH to the be fulltext length of the node revision
-   specified by NODEREV.  Use POOL for temporary allocations. */
-svn_error_t *svn_fs_fs__file_length(svn_filesize_t *length,
-                                    node_revision_t *noderev,
-                                    apr_pool_t *pool);
-
-/* Return TRUE if the representation keys in A and B both point to the
-   same representation, else return FALSE. */
-svn_boolean_t svn_fs_fs__noderev_same_rep_key(representation_t *a,
-                                              representation_t *b);
-
-
-/* Return a copy of the representation REP allocated from POOL. */
-representation_t *svn_fs_fs__rep_copy(representation_t *rep,
-                                      apr_pool_t *pool);
-
-
-/* Return the recorded checksum of type KIND for the text representation
-   of NODREV into CHECKSUM, allocating from POOL.  If no stored checksum is
-   available, put all NULL into CHECKSUM. */
-svn_error_t *svn_fs_fs__file_checksum(svn_checksum_t **checksum,
-                                      node_revision_t *noderev,
-                                      svn_checksum_kind_t kind,
-                                      apr_pool_t *pool);
-
-/* Find the paths which were changed in revision REV of filesystem FS
-   and store them in *CHANGED_PATHS_P.  Cached copyfrom information
-   will be stored in *COPYFROM_CACHE.  Get any temporary allocations
-   from POOL. */
-svn_error_t *svn_fs_fs__paths_changed(apr_hash_t **changed_paths_p,
-                                      svn_fs_t *fs,
-                                      svn_revnum_t rev,
-                                      apr_hash_t *copyfrom_cache,
-                                      apr_pool_t *pool);
-
-/* Create a new transaction in filesystem FS, based on revision REV,
-   and store it in *TXN_P.  Allocate all necessary variables from
-   POOL. */
-svn_error_t *svn_fs_fs__create_txn(svn_fs_txn_t **txn_p,
-                                   svn_fs_t *fs,
-                                   svn_revnum_t rev,
-                                   apr_pool_t *pool);
-
-/* Set the transaction property NAME to the value VALUE in transaction
-   TXN.  Perform temporary allocations from POOL. */
-svn_error_t *svn_fs_fs__change_txn_prop(svn_fs_txn_t *txn,
-                                        const char *name,
-                                        const svn_string_t *value,
-                                        apr_pool_t *pool);
-
-/* Change transaction properties in transaction TXN based on PROPS.
-   Perform temporary allocations from POOL. */
-svn_error_t *svn_fs_fs__change_txn_props(svn_fs_txn_t *txn,
-                                         const apr_array_header_t *props,
-                                         apr_pool_t *pool);
-
-/* Return whether or not the given FS supports mergeinfo metadata. */
-svn_boolean_t svn_fs_fs__fs_supports_mergeinfo(svn_fs_t *fs);
-
-/* Store a transaction record in *TXN_P for the transaction identified
-   by TXN_ID in filesystem FS.  Allocate everything from POOL. */
-svn_error_t *svn_fs_fs__get_txn(transaction_t **txn_p,
-                                svn_fs_t *fs,
-                                const char *txn_id,
-                                apr_pool_t *pool);
-
-/* Abort the existing transaction TXN, performing any temporary
-   allocations in POOL. */
-svn_error_t *svn_fs_fs__abort_txn(svn_fs_txn_t *txn, apr_pool_t *pool);
-
-/* Create an entirely new mutable node in the filesystem FS, whose
-   node-revision is NODEREV.  Set *ID_P to the new node revision's ID.
-   Use POOL for any temporary allocation.  COPY_ID is the copy_id to
-   use in the node revision ID.  TXN_ID is the Subversion transaction
-   under which this occurs. */
-svn_error_t *svn_fs_fs__create_node(const svn_fs_id_t **id_p,
-                                    svn_fs_t *fs,
-                                    node_revision_t *noderev,
-                                    const char *copy_id,
-                                    const char *txn_id,
-                                    apr_pool_t *pool);
-
-/* Remove all references to the transaction TXN_ID from filesystem FS.
-   Temporary allocations are from POOL. */
-svn_error_t *svn_fs_fs__purge_txn(svn_fs_t *fs,
-                                  const char *txn_id,
-                                  apr_pool_t *pool);
-
-/* Add or set in filesystem FS, transaction TXN_ID, in directory
-   PARENT_NODEREV a directory entry for NAME pointing to ID of type
-   KIND.  Allocations are done in POOL. */
-svn_error_t *svn_fs_fs__set_entry(svn_fs_t *fs,
-                                  const char *txn_id,
-                                  node_revision_t *parent_noderev,
-                                  const char *name,
-                                  const svn_fs_id_t *id,
-                                  svn_node_kind_t kind,
-                                  apr_pool_t *pool);
-
-/* Add a change to the changes record for filesystem FS in transaction
-   TXN_ID.  Mark path PATH, having node-id ID, as changed according to
-   the type in CHANGE_KIND.  If the text representation was changed
-   set TEXT_MOD to TRUE, and likewise for PROP_MOD.  If this change
-   was the result of a copy, set COPYFROM_REV and COPYFROM_PATH to the
-   revision and path of the copy source, otherwise they should be set
-   to SVN_INVALID_REVNUM and NULL.  Perform any temporary allocations
-   from POOL. */
-svn_error_t *svn_fs_fs__add_change(svn_fs_t *fs,
-                                   const char *txn_id,
-                                   const char *path,
-                                   const svn_fs_id_t *id,
-                                   svn_fs_path_change_kind_t change_kind,
-                                   svn_boolean_t text_mod,
-                                   svn_boolean_t prop_mod,
-                                   svn_node_kind_t node_kind,
-                                   svn_revnum_t copyfrom_rev,
-                                   const char *copyfrom_path,
-                                   apr_pool_t *pool);
-
-/* Return a writable stream in *STREAM that allows storing the text
-   representation of node-revision NODEREV in filesystem FS.
-   Allocations are from POOL. */
-svn_error_t *svn_fs_fs__set_contents(svn_stream_t **stream,
-                                     svn_fs_t *fs,
-                                     node_revision_t *noderev,
-                                     apr_pool_t *pool);
-
-/* Create a node revision in FS which is an immediate successor of
-   OLD_ID, whose contents are NEW_NR.  Set *NEW_ID_P to the new node
-   revision's ID.  Use POOL for any temporary allocation.
-
-   COPY_ID, if non-NULL, is a key into the `copies' table, and
-   indicates that this new node is being created as the result of a
-   copy operation, and specifically which operation that was.  If
-   COPY_ID is NULL, then re-use the copy ID from the predecessor node.
-
-   TXN_ID is the Subversion transaction under which this occurs.
-
-   After this call, the deltification code assumes that the new node's
-   contents will change frequently, and will avoid representing other
-   nodes as deltas against this node's contents.  */
-svn_error_t *svn_fs_fs__create_successor(const svn_fs_id_t **new_id_p,
-                                         svn_fs_t *fs,
-                                         const svn_fs_id_t *old_idp,
-                                         node_revision_t *new_noderev,
-                                         const char *copy_id,
-                                         const char *txn_id,
-                                         apr_pool_t *pool);
-
-/* Write a new property list PROPLIST for node-revision NODEREV in
-   filesystem FS.  Perform any temporary allocations in POOL. */
-svn_error_t *svn_fs_fs__set_proplist(svn_fs_t *fs,
-                                     node_revision_t *noderev,
-                                     apr_hash_t *proplist,
-                                     apr_pool_t *pool);
-
-/* Commit the transaction TXN in filesystem FS and return its new
-   revision number in *REV.  If the transaction is out of date, return
-   the error SVN_ERR_FS_TXN_OUT_OF_DATE.  Use POOL for temporary
-   allocations. */
-svn_error_t *svn_fs_fs__commit(svn_revnum_t *new_rev_p,
-                               svn_fs_t *fs,
-                               svn_fs_txn_t *txn,
-                               apr_pool_t *pool);
-
-/* Commit the obliteration transaction TXN in filesystem FS for
-   revision number REV.  If the transaction is out of date (### meaning what?), return
-   the error SVN_ERR_FS_TXN_OUT_OF_DATE.  Use POOL for temporary
-   allocations. */
-svn_error_t *svn_fs_fs__commit_obliteration(svn_revnum_t rev,
-                                            svn_fs_t *fs,
-                                            svn_fs_txn_t *txn,
-                                            apr_pool_t *pool);
-
-/* Return the next available copy_id in *COPY_ID for the transaction
-   TXN_ID in filesystem FS.  Allocate space in POOL. */
-svn_error_t *svn_fs_fs__reserve_copy_id(const char **copy_id,
-                                        svn_fs_t *fs,
-                                        const char *txn_id,
-                                        apr_pool_t *pool);
-
-/* Create a fs_fs fileysystem referenced by FS at path PATH.  Get any
-   temporary allocations from POOL. */
-svn_error_t *svn_fs_fs__create(svn_fs_t *fs,
-                               const char *path,
-                               apr_pool_t *pool);
-
-/* Store the uuid of the repository FS in *UUID.  Allocate space in
-   POOL. */
-svn_error_t *svn_fs_fs__get_uuid(svn_fs_t *fs,
-                                 const char **uuid,
-                                 apr_pool_t *pool);
-
-/* Set the uuid of repository FS to UUID, if UUID is not NULL;
-   otherwise, set the uuid of FS to a newly generated UUID.  Perform
-   temporary allocations in POOL. */
-svn_error_t *svn_fs_fs__set_uuid(svn_fs_t *fs,
-                                 const char *uuid,
-                                 apr_pool_t *pool);
-
-/* Set *NAMES_P to an array of names which are all the active
-   transactions in filesystem FS.  Allocate the array from POOL. */
-svn_error_t *svn_fs_fs__list_transactions(apr_array_header_t **names_p,
-                                          svn_fs_t *fs,
-                                          apr_pool_t *pool);
-
-/* Open the transaction named NAME in filesystem FS.  Set *TXN_P to
- * the transaction. If there is no such transaction, return
-` * SVN_ERR_FS_NO_SUCH_TRANSACTION.  Allocate the new transaction in
- * POOL. */
-svn_error_t *svn_fs_fs__open_txn(svn_fs_txn_t **txn_p,
-                                 svn_fs_t *fs,
-                                 const char *name,
-                                 apr_pool_t *pool);
-
-/* Return the property list from transaction TXN and store it in
-   *PROPLIST.  Allocate the property list from POOL. */
-svn_error_t *svn_fs_fs__txn_proplist(apr_hash_t **proplist,
-                                     svn_fs_txn_t *txn,
+/**
+ * Prepend the @a number to the @c string in a space efficient way that
+ * no other (number,string) combination can produce the same result.
+ * Allocate temporaries as well as the result from @a pool.
+ */
+const char*
+svn_fs_fs__combine_number_and_string(apr_int64_t number,
+                                     const char *string,
                                      apr_pool_t *pool);
 
-/* Delete the mutable node-revision referenced by ID, along with any
-   mutable props or directory contents associated with it.  Perform
-   temporary allocations in POOL. */
-svn_error_t *svn_fs_fs__delete_node_revision(svn_fs_t *fs,
-                                             const svn_fs_id_t *id,
-                                             apr_pool_t *pool);
-
-
-/* Find the paths which were changed in transaction TXN_ID of
-   filesystem FS and store them in *CHANGED_PATHS_P.
-   Get any temporary allocations from POOL. */
-svn_error_t *svn_fs_fs__txn_changes_fetch(apr_hash_t **changes,
-                                          svn_fs_t *fs,
-                                          const char *txn_id,
-                                          apr_pool_t *pool);
-
-
-/* Move a file into place from OLD_FILENAME in the transactions
-   directory to its final location NEW_FILENAME in the repository.  On
-   Unix, match the permissions of the new file to the permissions of
-   PERMS_REFERENCE.  Temporary allocations are from POOL. */
-svn_error_t *svn_fs_fs__move_into_place(const char *old_filename,
-                                        const char *new_filename,
-                                        const char *perms_reference,
-                                        apr_pool_t *pool);
-
-/* Sets *PATH to the path of REV in FS, whether in a pack file or not.
-   Allocate in POOL. */
-svn_error_t *
-svn_fs_fs__path_rev_absolute(const char **path,
-                             svn_fs_t *fs,
-                             svn_revnum_t rev,
-                             apr_pool_t *pool);
-
-/* Return the path to the 'current' file in FS.
-   Perform allocation in POOL. */
-const char *
-svn_fs_fs__path_current(svn_fs_t *fs, apr_pool_t *pool);
-
-/* Obtain a write lock on the filesystem FS in a subpool of POOL, call
-   BODY with BATON and that subpool, destroy the subpool (releasing the write
-   lock) and return what BODY returned. */
-svn_error_t *
-svn_fs_fs__with_write_lock(svn_fs_t *fs,
-                           svn_error_t *(*body)(void *baton,
-                                                apr_pool_t *pool),
-                           void *baton,
-                           apr_pool_t *pool);
-
-/* Find the value of the property named PROPNAME in transaction TXN.
-   Return the contents in *VALUE_P.  The contents will be allocated
-   from POOL. */
-svn_error_t *svn_fs_fs__revision_prop(svn_string_t **value_p, svn_fs_t *fs,
-                                      svn_revnum_t rev,
-                                      const char *propname,
-                                      apr_pool_t *pool);
-
-/* Change, add, or delete a property on a revision REV in filesystem
-   FS.  NAME gives the name of the property, and value, if non-NULL,
-   gives the new contents of the property.  If value is NULL, then the
-   property will be deleted.  If OLD_VALUE_P is not NULL, do nothing unless the
-   preexisting value is *OLD_VALUE_P.  Do any temporary allocation in POOL.  */
-svn_error_t *svn_fs_fs__change_rev_prop(svn_fs_t *fs, svn_revnum_t rev,
-                                        const char *name,
-                                        const svn_string_t *const *old_value_p,
-                                        const svn_string_t *value,
-                                        apr_pool_t *pool);
-
-/* Retrieve information about the Subversion transaction SVN_TXN from
-   the `transactions' table of FS, allocating from POOL.  Set
-   *ROOT_ID_P to the ID of the transaction's root directory.  Set
-   *BASE_ROOT_ID_P to the ID of the root directory of the
-   transaction's base revision.
-
-   If there is no such transaction, SVN_ERR_FS_NO_SUCH_TRANSACTION is
-   the error returned.
-
-   Returns SVN_ERR_FS_TRANSACTION_NOT_MUTABLE if TXN_NAME refers to a
-   transaction that has already been committed.
-
-   Allocate *ROOT_ID_P and *BASE_ROOT_ID_P in POOL.  */
-svn_error_t *svn_fs_fs__get_txn_ids(const svn_fs_id_t **root_id_p,
-                                    const svn_fs_id_t **base_root_id_p,
-                                    svn_fs_t *fs,
-                                    const char *txn_name,
-                                    apr_pool_t *pool);
-
-/* Begin a new transaction in filesystem FS, based on existing
-   revision REV.  The new transaction is returned in *TXN_P.  Allocate
-   the new transaction structure from POOL. */
-svn_error_t *svn_fs_fs__begin_txn(svn_fs_txn_t **txn_p, svn_fs_t *fs,
-                                  svn_revnum_t rev, apr_uint32_t flags,
-                                  apr_pool_t *pool);
-
-/* Begin a new transaction in filesystem FS, intended to replace the
-   existing revision REPLACING_REV.  The new transaction will be based on
-   revision (REPLACING_REV - 1) but will have content identical to revision
-   REPLACING_REV.  Set *TXN_P to the new transaction structure, allocated
-   in POOL. */
-svn_error_t *svn_fs_fs__begin_obliteration_txn(svn_fs_txn_t **txn_p,
-                                               svn_fs_t *fs,
-                                               svn_revnum_t replacing_rev,
-                                               apr_pool_t *pool);
-
-/* Find the value of the property named PROPNAME in transaction TXN.
-   Return the contents in *VALUE_P.  The contents will be allocated
-   from POOL. */
-svn_error_t *svn_fs_fs__txn_prop(svn_string_t **value_p, svn_fs_txn_t *txn,
-                                 const char *propname, apr_pool_t *pool);
-
-/* If directory PATH does not exist, create it and give it the same
-   permissions as FS->path.*/
-svn_error_t *svn_fs_fs__ensure_dir_exists(const char *path,
-                                          svn_fs_t *fs,
-                                          apr_pool_t *pool);
-
-/* Update the node origin index for FS, recording the mapping from
-   NODE_ID to NODE_REV_ID.  Use POOL for any temporary allocations.
-
-   Because this is just an "optional" cache, this function does not
-   return an error if the underlying storage is readonly; it still
-   returns an error for other error conditions.
+/**
+ * Combine the numbers @a a and @a b a space efficient way that no other
+ * combination of numbers can produce the same result.
+ * Allocate temporaries as well as the result from @a pool.
  */
-svn_error_t *
-svn_fs_fs__set_node_origin(svn_fs_t *fs,
-                           const char *node_id,
-                           const svn_fs_id_t *node_rev_id,
-                           apr_pool_t *pool);
-
-/* Set *ORIGIN_ID to the node revision ID from which the history of
-   all nodes in FS whose "Node ID" is NODE_ID springs, as determined
-   by a look in the index.  ORIGIN_ID needs to be parsed in an
-   FS-backend-specific way.  Use POOL for allocations.
-
-   If there is no entry for NODE_ID in the cache, return NULL
-   in *ORIGIN_ID. */
-svn_error_t *
-svn_fs_fs__get_node_origin(const svn_fs_id_t **origin_id,
-                           svn_fs_t *fs,
-                           const char *node_id,
-                           apr_pool_t *pool);
-
-
-/* Sets up the svn_cache__t structures in FS.  POOL is used for
-   temporary allocations. */
-svn_error_t *
-svn_fs_fs__initialize_caches(svn_fs_t *fs, apr_pool_t *pool);
+const char*
+svn_fs_fs__combine_two_numbers(apr_int64_t a,
+                               apr_int64_t b,
+                               apr_pool_t *pool);
 
-/* FSFS cache settings. It controls what caches, in what size and
-   how they will be created. The settings apply for the whole process.
+/**
+ * @ref svn_txdelta_window_t is not sufficient for caching the data it
+ * represents because data read process needs auxilliary information.
  */
-typedef struct svn_fs_fs__cache_config_t
+typedef struct
 {
-  /* total cache size in bytes. May be 0, resulting in no cache being used */
-  apr_uint64_t cache_size;
-
-  /* maximum number of files kept open */
-  apr_size_t file_handle_count;
+  /* the txdelta window information cached / to be cached */
+  svn_txdelta_window_t *window;
 
-  /* shall fulltexts be cached? */
-  svn_boolean_t cache_fulltexts;
+  /* the revision file read pointer position right after reading the window */
+  apr_off_t end_offset;
+} svn_fs_fs__txdelta_cached_window_t;
 
-  /* shall text deltas be cached? */
-  svn_boolean_t cache_txdeltas;
-
-  /* is this a guaranteed single-threaded application? */
-  svn_boolean_t single_threaded;
-} svn_fs_fs__cache_config_t;
-
-/* Get the current FSFS cache configuration. If it has not been set,
-   this function will return the default settings.
+/**
+ * Implements @ref serialize_fn_t for @ref svn_fs_fs__txdelta_cached_window_t.
  */
-const svn_fs_fs__cache_config_t *
-svn_fs_fs__get_cache_config(void);
-
-/* Set the FSFS cache configuration. Please note that it may not change
-   the actual configuration *in use*. Therefore, call it before reading
-   data from any FSFS repo and call it only once.
+svn_error_t *
+svn_fs_fs__serialize_txdelta_window(char **buffer,
+                                    apr_size_t *buffer_size,
+                                    void *item,
+                                    apr_pool_t *pool);
 
-   This function is not thread-safe. Therefore, it should be called once
-   from the processes' initialization code only.
+/**
+ * Implements @ref deserialize_fn_t for 
+ * @ref svn_fs_fs__txdelta_cached_window_t.
  */
-void
-svn_fs_fs__set_cache_config(const svn_fs_fs__cache_config_t *settings);
-
-/* Possibly pack the repository at PATH.  This just take full shards, and
-   combines all the revision files into a single one, with a manifest header.
-   Use optional CANCEL_FUNC/CANCEL_BATON for cancellation support.
-
-   Existing filesystem references need not change.  */
 svn_error_t *
-svn_fs_fs__pack(svn_fs_t *fs,
-                svn_fs_pack_notify_t notify_func,
-                void *notify_baton,
-                svn_cancel_func_t cancel_func,
-                void *cancel_baton,
-                apr_pool_t *pool);
-
+svn_fs_fs__deserialize_txdelta_window(void **item,
+                                      const char *buffer,
+                                      apr_size_t buffer_size,
+                                      apr_pool_t *pool);
 
 #endif

Propchange: subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.h
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Sun Aug  8 15:34:48 2010
@@ -0,0 +1,36 @@
+/subversion/branches/1.5.x-r30215/subversion/libsvn_fs_fs/fs_fs.h:870312
+/subversion/branches/bdb-reverse-deltas/subversion/libsvn_fs_fs/fs_fs.h:872050-872529
+/subversion/branches/diff-callbacks3/subversion/libsvn_fs_fs/fs_fs.h:870059-870761
+/subversion/branches/dont-save-plaintext-passwords-by-default/subversion/libsvn_fs_fs/fs_fs.h:870728-871118
+/subversion/branches/double-delete/subversion/libsvn_fs_fs/fs_fs.h:870511-872970
+/subversion/branches/explore-wc/subversion/libsvn_fs_fs/fs_fs.h:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
+/subversion/branches/file-externals/subversion/libsvn_fs_fs/fs_fs.h:871779-873302
+/subversion/branches/fs-rep-sharing/subversion/libsvn_fs_fs/fs_fs.h:869036-873803
+/subversion/branches/fsfs-pack/subversion/libsvn_fs_fs/fs_fs.h:873717-874575
+/subversion/branches/gnome-keyring/subversion/libsvn_fs_fs/fs_fs.h:870558-871410
+/subversion/branches/http-protocol-v2/subversion/libsvn_fs_fs/fs_fs.h:874395-876041
+/subversion/branches/in-memory-cache/subversion/libsvn_fs_fs/fs_fs.h:869829-871452
+/subversion/branches/issue-2843-dev/subversion/libsvn_fs_fs/fs_fs.h:871432-874179
+/subversion/branches/issue-3000/subversion/libsvn_fs_fs/fs_fs.h:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/subversion/libsvn_fs_fs/fs_fs.h:873375-874084
+/subversion/branches/issue-3148-dev/subversion/libsvn_fs_fs/fs_fs.h:875193-875204
+/subversion/branches/issue-3220-dev/subversion/libsvn_fs_fs/fs_fs.h:872210-872226
+/subversion/branches/issue-3242-dev/subversion/libsvn_fs_fs/fs_fs.h:879653-896436
+/subversion/branches/issue-3334-dirs/subversion/libsvn_fs_fs/fs_fs.h:875156-875867
+/subversion/branches/kwallet/subversion/libsvn_fs_fs/fs_fs.h:870785-871314
+/subversion/branches/log-g-performance/subversion/libsvn_fs_fs/fs_fs.h:870941-871032
+/subversion/branches/merge-skips-obstructions/subversion/libsvn_fs_fs/fs_fs.h:874525-874615
+/subversion/branches/ra_serf-digest-authn/subversion/libsvn_fs_fs/fs_fs.h:875693-876404
+/subversion/branches/reintegrate-improvements/subversion/libsvn_fs_fs/fs_fs.h:873853-874164
+/subversion/branches/subtree-mergeinfo/subversion/libsvn_fs_fs/fs_fs.h:876734-878766
+/subversion/branches/svn-mergeinfo-enhancements/subversion/libsvn_fs_fs/fs_fs.h:870119-870195,870197-870288
+/subversion/branches/svn-patch-improvements/subversion/libsvn_fs_fs/fs_fs.h:918519-934609
+/subversion/branches/svnpatch-diff/subversion/libsvn_fs_fs/fs_fs.h:865738-876477
+/subversion/branches/svnraisetc/subversion/libsvn_fs_fs/fs_fs.h:874709-875149
+/subversion/branches/svnserve-logging/subversion/libsvn_fs_fs/fs_fs.h:869828-870893
+/subversion/branches/tc-issue-3334/subversion/libsvn_fs_fs/fs_fs.h:874697-874773
+/subversion/branches/tc-merge-notify/subversion/libsvn_fs_fs/fs_fs.h:874017-874062
+/subversion/branches/tc-resolve/subversion/libsvn_fs_fs/fs_fs.h:874191-874239
+/subversion/branches/tc_url_rev/subversion/libsvn_fs_fs/fs_fs.h:874351-874483
+/subversion/branches/tree-conflicts/subversion/libsvn_fs_fs/fs_fs.h:868291-873154
+/subversion/branches/tree-conflicts-notify/subversion/libsvn_fs_fs/fs_fs.h:873926-874008