This is downright horrible for code maintainability. We have a type for revision numbers.
It's bad enough we don't have a stable type for revision numbers across platforms. But now you're abusing it and using 32-bit integers in some places for them and 64-bit values in others. Now that you're doing this I'm now of the opinion that I should veto the code that limits them to 32-bits at the RA layer. Because all it's done is encourage us to do things like this. On 3/7/14, 2:11 PM, stef...@apache.org wrote: > 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 */ > >