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 2015/04/17 22:55:44 UTC
svn commit: r1674400 - in /subversion/trunk/subversion/libsvn_fs_fs:
cached_data.c dag.c fs_fs.c pack.c recovery.c stats.c transaction.c
Author: stefan2
Date: Fri Apr 17 20:55:44 2015
New Revision: 1674400
URL: http://svn.apache.org/r1674400
Log:
Since EXPANDED_SIZE always contains the actual value now, remove all
the code that tries to patch it.
* subversion/libsvn_fs_fs/cached_data.c
(create_rep_state_body): Use the value as-is.
(build_rep_list): Remove the expanded_size parameter & calculation.
(rep_read_contents): Update caller; assign the LEN directly.
(svn_fs_fs__get_contents,
get_dir_contents): Use the value as-is.
* subversion/libsvn_fs_fs/dag.c
(svn_fs_fs__dag_has_props): Same.
* subversion/libsvn_fs_fs/fs_fs.c
(svn_fs_fs__file_length): Same.
* subversion/libsvn_fs_fs/pack.c
(copy_node_to_temp): Same.
* subversion/libsvn_fs_fs/recovery.c
(recover_find_max_ids): Same.
* subversion/libsvn_fs_fs/stats.c
(parse_representation): Same.
* subversion/libsvn_fs_fs/transaction.c
(choose_delta_base,
get_shared_rep): Same.
Modified:
subversion/trunk/subversion/libsvn_fs_fs/cached_data.c
subversion/trunk/subversion/libsvn_fs_fs/dag.c
subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
subversion/trunk/subversion/libsvn_fs_fs/pack.c
subversion/trunk/subversion/libsvn_fs_fs/recovery.c
subversion/trunk/subversion/libsvn_fs_fs/stats.c
subversion/trunk/subversion/libsvn_fs_fs/transaction.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/cached_data.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/cached_data.c?rev=1674400&r1=1674399&r2=1674400&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/cached_data.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/cached_data.c Fri Apr 17 20:55:44 2015
@@ -847,9 +847,7 @@ create_rep_state_body(rep_state_t **rep_
Since we don't know the depth of the delta chain, let's assume, the
whole contents get rewritten 3 times.
*/
- estimated_window_storage
- = 4 * ( (rep->expanded_size ? rep->expanded_size : rep->size)
- + SVN_DELTA_WINDOW_SIZE);
+ estimated_window_storage = 4 * (rep->expanded_size + SVN_DELTA_WINDOW_SIZE);
estimated_window_storage = MIN(estimated_window_storage, APR_SIZE_MAX);
rs->window_cache = ffd->txdelta_window_cache
@@ -1404,15 +1402,11 @@ set_cached_combined_window(svn_stringbuf
ID, and representation REP.
Also, set *WINDOW_P to the base window content for *LIST, if it
could be found in cache. Otherwise, *LIST will contain the base
- representation for the whole delta chain.
- Finally, return the expanded size of the representation in
- *EXPANDED_SIZE. It will take care of cases where only the on-disk
- size is known. */
+ representation for the whole delta chain. */
static svn_error_t *
build_rep_list(apr_array_header_t **list,
svn_stringbuf_t **window_p,
rep_state_t **src_state,
- svn_filesize_t *expanded_size,
svn_fs_t *fs,
representation_t *first_rep,
apr_pool_t *pool)
@@ -1427,24 +1421,9 @@ build_rep_list(apr_array_header_t **list
*list = apr_array_make(pool, 1, sizeof(rep_state_t *));
rep = *first_rep;
- /* The value as stored in the data struct.
- 0 is either for unknown length or actually zero length. */
- *expanded_size = first_rep->expanded_size;
-
/* for the top-level rep, we need the rep_args */
SVN_ERR(create_rep_state(&rs, &rep_header, &shared_file, &rep, fs, pool,
iterpool));
-
- /* Unknown size or empty representation?
- That implies the this being the first iteration.
- Usually size equals on-disk size, except for empty,
- compressed representations (delta, size = 4).
- Please note that for all non-empty deltas have
- a 4-byte header _plus_ some data. */
- if (*expanded_size == 0)
- if (rep_header->type == svn_fs_fs__rep_plain || first_rep->size != 4)
- *expanded_size = first_rep->size;
-
while (1)
{
svn_pool_clear(iterpool);
@@ -2079,8 +2058,9 @@ rep_read_contents(void *baton,
if (!rb->rs_list)
{
/* Window stream not initialized, yet. Do it now. */
+ rb->len = rb->rep.expanded_size;
SVN_ERR(build_rep_list(&rb->rs_list, &rb->base_window,
- &rb->src_state, &rb->len, rb->fs, &rb->rep,
+ &rb->src_state, rb->fs, &rb->rep,
rb->filehandle_pool));
/* In case we did read from the fulltext cache before, make the
@@ -2147,7 +2127,6 @@ svn_fs_fs__get_contents(svn_stream_t **c
else
{
fs_fs_data_t *ffd = fs->fsap_data;
- svn_filesize_t len = rep->expanded_size ? rep->expanded_size : rep->size;
struct rep_read_baton *rb;
pair_cache_key_t fulltext_cache_key = { 0 };
@@ -2163,7 +2142,7 @@ svn_fs_fs__get_contents(svn_stream_t **c
* cache it. */
if (ffd->fulltext_cache && cache_fulltext
&& SVN_IS_VALID_REVNUM(rep->revision)
- && fulltext_size_is_cachable(ffd, len))
+ && fulltext_size_is_cachable(ffd, rep->expanded_size))
{
rb->fulltext_cache = ffd->fulltext_cache;
}
@@ -2551,9 +2530,7 @@ get_dir_contents(apr_array_header_t **en
/* Undeltify content before parsing it. Otherwise, we could only
* parse it byte-by-byte.
*/
- apr_size_t len = noderev->data_rep->expanded_size
- ? (apr_size_t)noderev->data_rep->expanded_size
- : (apr_size_t)noderev->data_rep->size;
+ apr_size_t len = noderev->data_rep->expanded_size;
svn_stringbuf_t *text;
/* The representation is immutable. Read it normally. */
Modified: subversion/trunk/subversion/libsvn_fs_fs/dag.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/dag.c?rev=1674400&r1=1674399&r2=1674400&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/dag.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/dag.c Fri Apr 17 20:55:44 2015
@@ -527,9 +527,7 @@ svn_fs_fs__dag_has_props(svn_boolean_t *
{
/* Properties are stored as a standard hash stream,
always ending with "END\n" (4 bytes) */
- *has_props = (noderev->prop_rep->expanded_size > 4
- || (noderev->prop_rep->expanded_size == 0
- && noderev->prop_rep->size > 4));
+ *has_props = noderev->prop_rep->expanded_size > 4;
}
return SVN_NO_ERROR;
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=1674400&r1=1674399&r2=1674400&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Fri Apr 17 20:55:44 2015
@@ -1377,38 +1377,9 @@ svn_fs_fs__file_length(svn_filesize_t *l
/* Treat "no representation" as "empty file". */
*length = 0;
}
- else if (data_rep->expanded_size)
- {
- /* Standard case: a non-empty file. */
- *length = data_rep->expanded_size;
- }
else
{
- /* Work around a FSFS format quirk (see issue #4554).
-
- A plain representation may specify its EXPANDED LENGTH as "0"
- in which case, the SIZE value is what we want.
-
- Because EXPANDED_LENGTH will also be 0 for empty files, while
- SIZE is non-null, we need to check wether the content is
- actually empty. We simply compare with the MD5 checksum of
- empty content (sha-1 is not always available).
- */
- svn_checksum_t *empty_md5
- = svn_checksum_empty_checksum(svn_checksum_md5, pool);
-
- if (memcmp(empty_md5->digest, data_rep->md5_digest,
- sizeof(data_rep->md5_digest)))
- {
- /* Contents is not empty, i.e. EXPANDED_LENGTH cannot be the
- actual file length. */
- *length = data_rep->size;
- }
- else
- {
- /* Contents is empty. */
- *length = 0;
- }
+ *length = data_rep->expanded_size;
}
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/libsvn_fs_fs/pack.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/pack.c?rev=1674400&r1=1674399&r2=1674400&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/pack.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/pack.c Fri Apr 17 20:55:44 2015
@@ -737,9 +737,7 @@ copy_node_to_temp(pack_context_t *contex
{
path_order->rep_id.revision = noderev->data_rep->revision;
path_order->rep_id.number = noderev->data_rep->item_index;
- path_order->expanded_size = noderev->data_rep->expanded_size
- ? noderev->data_rep->expanded_size
- : noderev->data_rep->size;
+ path_order->expanded_size = noderev->data_rep->expanded_size;
}
/* Sort path is the key used for ordering noderevs and associated reps.
Modified: subversion/trunk/subversion/libsvn_fs_fs/recovery.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/recovery.c?rev=1674400&r1=1674399&r2=1674400&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/recovery.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/recovery.c Fri Apr 17 20:55:44 2015
@@ -196,9 +196,7 @@ recover_find_max_ids(svn_fs_t *fs,
stored in the representation. Note that this is a directory, i.e.
represented using the hash format on disk and can never have 0 length. */
baton.pool = pool;
- baton.remaining = noderev->data_rep->expanded_size
- ? noderev->data_rep->expanded_size
- : noderev->data_rep->size;
+ baton.remaining = noderev->data_rep->expanded_size;
stream = svn_stream_create(&baton, pool);
svn_stream_set_read2(stream, NULL /* only full read support */,
read_handler_recover);
Modified: subversion/trunk/subversion/libsvn_fs_fs/stats.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/stats.c?rev=1674400&r1=1674399&r2=1674400&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/stats.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/stats.c Fri Apr 17 20:55:44 2015
@@ -436,8 +436,7 @@ parse_representation(rep_stats_t **repre
*/
result = apr_pcalloc(result_pool, sizeof(*result));
result->revision = rep->revision;
- result->expanded_size = (rep->expanded_size ? rep->expanded_size
- : rep->size);
+ result->expanded_size = rep->expanded_size;
result->offset = (apr_off_t)rep->item_index;
result->size = rep->size;
Modified: subversion/trunk/subversion/libsvn_fs_fs/transaction.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/transaction.c?rev=1674400&r1=1674399&r2=1674400&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/transaction.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/transaction.c Fri Apr 17 20:55:44 2015
@@ -1963,9 +1963,7 @@ choose_delta_base(representation_t **rep
/* Very short rep bases are simply not worth it as we are unlikely
* to re-coup the deltification space overhead of 20+ bytes. */
- svn_filesize_t rep_size = (*rep)->expanded_size
- ? (*rep)->expanded_size
- : (*rep)->size;
+ svn_filesize_t rep_size = (*rep)->expanded_size;
if (rep_size < 64)
{
*rep = NULL;
@@ -2213,12 +2211,8 @@ get_shared_rep(representation_t **old_re
if (!*old_rep)
return SVN_NO_ERROR;
- /* We don't want 0-length PLAIN representations to replace non-0-length
- ones (see issue #4554). Take into account that EXPANDED_SIZE may be
- 0 in which case we have to check the on-disk SIZE. Also, this doubles
- as a simple guard against general rep-cache induced corruption. */
- if ( ((*old_rep)->expanded_size != rep->expanded_size)
- || ((rep->expanded_size == 0) && ((*old_rep)->size != rep->size)))
+ /* A simple guard against general rep-cache induced corruption. */
+ if ((*old_rep)->expanded_size != rep->expanded_size)
{
*old_rep = NULL;
}