Author: stefan2
Date: Fri Mar  7 22:11:24 2014
New Revision: 1575428

URL: http://svn.apache.org/r1575428
Log:
In FSFS, remove padding from cache key structs to simplify handling.
Also, document why we want them to be 16 bytes whenever we can help it.

* subversion/libsvn_fs_fs/fs.h
  (pair_cache_key_t): Widen revision type to eliminate padding on
                      platforms with sizeof(long) != 8.  Document the
                      struct size rationale.
  (window_cache_key_t): Document the struct size rationale.

Modified:
    subversion/trunk/subversion/libsvn_fs_fs/fs.h

Modified: subversion/trunk/subversion/libsvn_fs_fs/fs.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs.h?rev=1575428&r1=1575427&r2=1575428&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs.h (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs.h Fri Mar  7 22:11:24 2014
@@ -254,20 +254,27 @@ typedef struct fs_fs_dag_cache_t fs_fs_d
 
 /* Key type for all caches that use revision + offset / counter as key.
 
-   NOTE: always initialize this using calloc() or '= {0};'!  This is used
-   as a cache key and the padding bytes on 32 bit archs should be zero for
-   cache effectiveness. */
+   Note: Cache keys should be 16 bytes for best performance and there
+         should be no padding. */
 typedef struct pair_cache_key_t
 {
-  svn_revnum_t revision;
+  /* The object's revision.  Use the 64 data type to prevent padding. */
+  apr_int64_t revision;
 
+  /* Sub-address: item index, revprop generation, packed flag, etc. */
   apr_int64_t second;
 } pair_cache_key_t;
 
-/* Key type that identifies a txdelta window. */
+/* Key type that identifies a txdelta window.
+
+   Note: Cache keys should be 16 bytes for best performance and there
+         should be no padding. */
 typedef struct window_cache_key_t
 {
-  /* Revision that contains the representation */
+  /* Revision that contains the representation.
+     We limit this to 32 bit because it revision numbers are practically
+     limited to 32 bits by the RA layer, ATM, and we want to keep this
+     struct 16 bytes long. */
   apr_uint32_t revision;
 
   /* Window number within that representation */


Reply via email to