You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@serf.apache.org by rh...@apache.org on 2015/09/08 21:33:33 UTC

svn commit: r1701860 - in /serf/branches/get-remaining: ./ buckets/ test/

Author: rhuijben
Date: Tue Sep  8 19:33:32 2015
New Revision: 1701860

URL: http://svn.apache.org/r1701860
Log:
On the get-remaining branch: Revert r1700019

Modified:
    serf/branches/get-remaining/buckets/aggregate_buckets.c
    serf/branches/get-remaining/buckets/barrier_buckets.c
    serf/branches/get-remaining/buckets/chunk_buckets.c
    serf/branches/get-remaining/buckets/copy_buckets.c
    serf/branches/get-remaining/buckets/dechunk_buckets.c
    serf/branches/get-remaining/buckets/deflate_buckets.c
    serf/branches/get-remaining/buckets/file_buckets.c
    serf/branches/get-remaining/buckets/limit_buckets.c
    serf/branches/get-remaining/buckets/log_wrapper_buckets.c
    serf/branches/get-remaining/buckets/mmap_buckets.c
    serf/branches/get-remaining/buckets/request_buckets.c
    serf/branches/get-remaining/buckets/response_body_buckets.c
    serf/branches/get-remaining/buckets/response_buckets.c
    serf/branches/get-remaining/buckets/simple_buckets.c
    serf/branches/get-remaining/buckets/socket_buckets.c
    serf/branches/get-remaining/buckets/ssl_buckets.c
    serf/branches/get-remaining/serf.h
    serf/branches/get-remaining/test/mock_sock_buckets.c
    serf/branches/get-remaining/test/test_buckets.c

Modified: serf/branches/get-remaining/buckets/aggregate_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/aggregate_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/aggregate_buckets.c (original)
+++ serf/branches/get-remaining/buckets/aggregate_buckets.c Tue Sep  8 19:33:32 2015
@@ -492,6 +492,29 @@ static serf_bucket_t * serf_aggregate_re
     return serf_bucket_read_bucket(ctx->list->bucket, type);
 }
 
+static apr_uint64_t serf_aggregate_get_remaining(serf_bucket_t *bucket)
+{
+    aggregate_context_t *ctx = bucket->data;
+    apr_uint64_t remaining = 0;
+    bucket_list_t *cur;
+
+    if (ctx->hold_open) {
+        return SERF_LENGTH_UNKNOWN;
+    }
+
+    for(cur = ctx->list; cur != NULL; cur = cur->next) {
+        apr_uint64_t bucket_remaining = serf_bucket_get_remaining(cur->bucket);
+
+        if (bucket_remaining == SERF_LENGTH_UNKNOWN) {
+            return SERF_LENGTH_UNKNOWN;
+        }
+
+        remaining += bucket_remaining;
+    }
+
+    return remaining;
+}
+
 static apr_status_t serf_aggregate_set_config(serf_bucket_t *bucket,
                                               serf_config_t *config)
 {
@@ -524,5 +547,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_aggregate_peek,
     serf_aggregate_destroy_and_data,
     serf_aggregate_read_bucket,
+    serf_aggregate_get_remaining,
     serf_aggregate_set_config,
 };

Modified: serf/branches/get-remaining/buckets/barrier_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/barrier_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/barrier_buckets.c (original)
+++ serf/branches/get-remaining/buckets/barrier_buckets.c Tue Sep  8 19:33:32 2015
@@ -79,6 +79,13 @@ static void serf_barrier_destroy(serf_bu
     serf_default_destroy(bucket);
 }
 
+static apr_uint64_t serf_barrier_get_remaining(serf_bucket_t *bucket)
+{
+    serf_bucket_t *stream = bucket->data;
+
+    return serf_bucket_get_remaining(stream);
+}
+
 static apr_status_t serf_barrier_set_config(serf_bucket_t *bucket,
                                             serf_config_t *config)
 {
@@ -99,5 +106,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_barrier_peek,
     serf_barrier_destroy,
     serf_default_read_bucket,
+    serf_barrier_get_remaining,
     serf_barrier_set_config,
 };

Modified: serf/branches/get-remaining/buckets/chunk_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/chunk_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/chunk_buckets.c (original)
+++ serf/branches/get-remaining/buckets/chunk_buckets.c Tue Sep  8 19:33:32 2015
@@ -255,5 +255,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_chunk_peek,
     serf_chunk_destroy,
     serf_default_read_bucket,
+    NULL,
     serf_chunk_set_config,
 };

Modified: serf/branches/get-remaining/buckets/copy_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/copy_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/copy_buckets.c (original)
+++ serf/branches/get-remaining/buckets/copy_buckets.c Tue Sep  8 19:33:32 2015
@@ -198,5 +198,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_copy_peek,
     serf_copy_destroy,
     serf_copy_read_bucket,
+    NULL,
     serf_copy_set_config,
 };

Modified: serf/branches/get-remaining/buckets/dechunk_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/dechunk_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/dechunk_buckets.c (original)
+++ serf/branches/get-remaining/buckets/dechunk_buckets.c Tue Sep  8 19:33:32 2015
@@ -212,5 +212,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_dechunk_peek,
     serf_dechunk_destroy_and_data,
     serf_default_read_bucket,
+    NULL,
     serf_dechunk_set_config,
 };

Modified: serf/branches/get-remaining/buckets/deflate_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/deflate_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/deflate_buckets.c (original)
+++ serf/branches/get-remaining/buckets/deflate_buckets.c Tue Sep  8 19:33:32 2015
@@ -458,5 +458,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_deflate_peek,
     serf_deflate_destroy_and_data,
     serf_default_read_bucket,
+    NULL,
     serf_deflate_set_config,
 };

Modified: serf/branches/get-remaining/buckets/file_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/file_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/file_buckets.c (original)
+++ serf/branches/get-remaining/buckets/file_buckets.c Tue Sep  8 19:33:32 2015
@@ -27,6 +27,7 @@ typedef struct file_context_t {
     apr_file_t *file;
 
     serf_databuf_t databuf;
+    apr_uint64_t remaining;
 } file_context_t;
 
 
@@ -45,11 +46,11 @@ serf_bucket_t *serf_bucket_file_create(
 {
     apr_status_t status;
     file_context_t *ctx;
-#if APR_HAS_MMAP
     apr_finfo_t finfo;
 
     status = apr_file_info_get(&finfo, APR_FINFO_SIZE, file);
 
+#if APR_HAS_MMAP
     /* See if we'd be better off mmap'ing this file instead.
      *
      * Note that there is a failure case here that we purposely fall through:
@@ -77,6 +78,13 @@ serf_bucket_t *serf_bucket_file_create(
     ctx->databuf.read = file_reader;
     ctx->databuf.read_baton = ctx;
 
+    if (status == APR_SUCCESS) {
+        ctx->remaining = finfo.size;
+    }
+    else {
+        ctx->remaining = SERF_LENGTH_UNKNOWN;
+    }
+
     return serf_bucket_create(&serf_bucket_type_file, allocator, ctx);
 }
 
@@ -85,8 +93,21 @@ static apr_status_t serf_file_read(serf_
                                    const char **data, apr_size_t *len)
 {
     file_context_t *ctx = bucket->data;
+    apr_status_t status;
+
+    status = serf_databuf_read(&ctx->databuf, requested, data, len);
+
+    if (SERF_BUCKET_READ_ERROR(status))
+    {
+        return status;
+    }
+
+    /* Update remaining length if known. */
+    if (ctx->remaining != SERF_LENGTH_UNKNOWN) {
+        ctx->remaining -= *len;
+    }
 
-    return serf_databuf_read(&ctx->databuf, requested, data, len);
+    return status;
 }
 
 static apr_status_t serf_file_readline(serf_bucket_t *bucket,
@@ -94,8 +115,22 @@ static apr_status_t serf_file_readline(s
                                        const char **data, apr_size_t *len)
 {
     file_context_t *ctx = bucket->data;
+    apr_status_t status;
+
+    status = serf_databuf_readline(&ctx->databuf, acceptable, found, data, len);
+
+    if (SERF_BUCKET_READ_ERROR(status))
+    {
+        return status;
+    }
+
+    /* Update remaining length if known. */
+    if (ctx->remaining != SERF_LENGTH_UNKNOWN) {
+        ctx->remaining -= *len;
+    }
+
+    return status;
 
-    return serf_databuf_readline(&ctx->databuf, acceptable, found, data, len);
 }
 
 static apr_status_t serf_file_peek(serf_bucket_t *bucket,
@@ -107,6 +142,12 @@ static apr_status_t serf_file_peek(serf_
     return serf_databuf_peek(&ctx->databuf, data, len);
 }
 
+static apr_uint64_t serf_file_get_remaining(serf_bucket_t *bucket)
+{
+    file_context_t *ctx = bucket->data;
+    return ctx->remaining;
+}
+
 const serf_bucket_type_t serf_bucket_type_file = {
     "FILE",
     serf_file_read,
@@ -117,5 +158,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_file_peek,
     serf_default_destroy_and_data,
     serf_default_read_bucket,
+    serf_file_get_remaining,
     serf_default_ignore_config,
 };

Modified: serf/branches/get-remaining/buckets/limit_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/limit_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/limit_buckets.c (original)
+++ serf/branches/get-remaining/buckets/limit_buckets.c Tue Sep  8 19:33:32 2015
@@ -121,6 +121,13 @@ static void serf_limit_destroy(serf_buck
     serf_default_destroy_and_data(bucket);
 }
 
+static apr_uint64_t serf_limit_get_remaining(serf_bucket_t *bucket)
+{
+    limit_context_t *ctx = bucket->data;
+
+    return ctx->remaining;
+}
+
 static apr_status_t serf_limit_set_config(serf_bucket_t *bucket,
                                           serf_config_t *config)
 {
@@ -141,5 +148,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_limit_peek,
     serf_limit_destroy,
     serf_default_read_bucket,
+    serf_limit_get_remaining,
     serf_limit_set_config,
 };

Modified: serf/branches/get-remaining/buckets/log_wrapper_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/log_wrapper_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/log_wrapper_buckets.c (original)
+++ serf/branches/get-remaining/buckets/log_wrapper_buckets.c Tue Sep  8 19:33:32 2015
@@ -161,6 +161,7 @@ serf_bucket_t *serf__bucket_log_wrapper_
     bkt_type->read_for_sendfile = wrapped->type->read_for_sendfile;
     if (wrapped->type->read_bucket == serf_buckets_are_v2) {
         bkt_type->read_bucket_v2 = wrapped->type->read_bucket_v2;
+        bkt_type->get_remaining = wrapped->type->get_remaining;
     }
 
     /* Wrap these functions */

Modified: serf/branches/get-remaining/buckets/mmap_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/mmap_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/mmap_buckets.c (original)
+++ serf/branches/get-remaining/buckets/mmap_buckets.c Tue Sep  8 19:33:32 2015
@@ -118,6 +118,12 @@ static apr_status_t serf_mmap_peek(serf_
     return APR_EOF;
 }
 
+static apr_uint64_t serf_mmap_get_remaining(serf_bucket_t *bucket)
+{
+    mmap_context_t *ctx = bucket->data;
+    return ctx->remaining;
+}
+
 const serf_bucket_type_t serf_bucket_type_mmap = {
     "MMAP",
     serf_mmap_read,
@@ -128,6 +134,7 @@ const serf_bucket_type_t serf_bucket_typ
     serf_mmap_peek,
     serf_default_destroy_and_data,
     serf_default_read_bucket,
+    serf_mmap_get_remaining,
     serf_default_ignore_config,
 };
 
@@ -144,6 +151,7 @@ const serf_bucket_type_t serf_bucket_typ
     NULL,
     NULL,
     NULL,
+    NULL,
     NULL,
     NULL,
     NULL,

Modified: serf/branches/get-remaining/buckets/request_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/request_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/request_buckets.c (original)
+++ serf/branches/get-remaining/buckets/request_buckets.c Tue Sep  8 19:33:32 2015
@@ -245,6 +245,7 @@ const serf_bucket_type_t serf_bucket_typ
     serf_request_peek,
     serf_request_destroy,
     serf_default_read_bucket,
+    NULL,
     serf_request_set_config,
 };
 

Modified: serf/branches/get-remaining/buckets/response_body_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/response_body_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/response_body_buckets.c (original)
+++ serf/branches/get-remaining/buckets/response_body_buckets.c Tue Sep  8 19:33:32 2015
@@ -149,5 +149,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_response_body_peek,
     serf_response_body_destroy,
     serf_default_read_bucket,
+    NULL,
     serf_response_body_set_config,
 };

Modified: serf/branches/get-remaining/buckets/response_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/response_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/response_buckets.c (original)
+++ serf/branches/get-remaining/buckets/response_buckets.c Tue Sep  8 19:33:32 2015
@@ -545,5 +545,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_response_peek,
     serf_response_destroy_and_data,
     serf_default_read_bucket,
+    NULL,
     serf_response_set_config,
 };

Modified: serf/branches/get-remaining/buckets/simple_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/simple_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/simple_buckets.c (original)
+++ serf/branches/get-remaining/buckets/simple_buckets.c Tue Sep  8 19:33:32 2015
@@ -153,6 +153,12 @@ static void serf_simple_destroy(serf_buc
     serf_default_destroy_and_data(bucket);
 }
 
+static apr_uint64_t serf_simple_get_remaining(serf_bucket_t *bucket)
+{
+    simple_context_t *ctx = bucket->data;
+    return ctx->remaining;
+}
+
 const serf_bucket_type_t serf_bucket_type_simple = {
     "SIMPLE",
     serf_simple_read,
@@ -163,5 +169,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_simple_peek,
     serf_simple_destroy,
     serf_default_read_bucket,
+    serf_simple_get_remaining,
     serf_default_ignore_config,
 };

Modified: serf/branches/get-remaining/buckets/socket_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/socket_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/socket_buckets.c (original)
+++ serf/branches/get-remaining/buckets/socket_buckets.c Tue Sep  8 19:33:32 2015
@@ -119,5 +119,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_socket_peek,
     serf_default_destroy_and_data,
     serf_default_read_bucket,
+    NULL,
     serf_default_ignore_config,
 };

Modified: serf/branches/get-remaining/buckets/ssl_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/buckets/ssl_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/buckets/ssl_buckets.c (original)
+++ serf/branches/get-remaining/buckets/ssl_buckets.c Tue Sep  8 19:33:32 2015
@@ -2161,6 +2161,7 @@ const serf_bucket_type_t serf_bucket_typ
     serf_ssl_peek,
     serf_ssl_encrypt_destroy_and_data,
     serf_default_read_bucket,
+    NULL,
     serf_ssl_set_config,
 };
 
@@ -2174,5 +2175,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_ssl_peek,
     serf_ssl_decrypt_destroy_and_data,
     serf_default_read_bucket,
+    NULL,
     serf_ssl_set_config,
 };

Modified: serf/branches/get-remaining/serf.h
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/serf.h?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/serf.h (original)
+++ serf/branches/get-remaining/serf.h Tue Sep  8 19:33:32 2015
@@ -779,6 +779,11 @@ serf_bucket_t *serf_request_bucket_reque
  */
 #define SERF_NEWLINE_CRLF_SPLIT 0x0010
 
+/** Used to indicate that length of remaining data in bucket is unknown. See 
+ * serf_bucket_type_t->get_remaining().
+ */
+#define SERF_LENGTH_UNKNOWN ((apr_uint64_t) -1)
+
 struct serf_bucket_type_t {
 
     /** name of this bucket type */
@@ -923,6 +928,13 @@ struct serf_bucket_type_t {
     serf_bucket_t * (*read_bucket_v2)(serf_bucket_t *bucket,
                                       const serf_bucket_type_t *type);
 
+    /* Returns length of remaining data to be read in @a bucket. Returns
+     * SERF_LENGTH_UNKNOWN if length is unknown.
+     *
+     * @since New in 1.4.
+     */
+    apr_uint64_t (*get_remaining)(serf_bucket_t *bucket);
+
     /* Provides a reference to a config object containing all configuration
      * values relevant for this bucket.
      *
@@ -981,6 +993,10 @@ serf_bucket_t * serf_buckets_are_v2(serf
 #define serf_bucket_read_bucket(b,t) ((b)->type->read_bucket(b,t))
 #define serf_bucket_peek(b,d,l) ((b)->type->peek(b,d,l))
 #define serf_bucket_destroy(b) ((b)->type->destroy(b))
+#define serf_bucket_get_remaining(b) \
+            ((b)->type->read_bucket == serf_buckets_are_v2 ? \
+             (b)->type->get_remaining(b) : \
+             SERF_LENGTH_UNKNOWN)
 #define serf_bucket_set_config(b,c) \
             ((b)->type->read_bucket == serf_buckets_are_v2 ? \
             (b)->type->set_config(b,c) : \

Modified: serf/branches/get-remaining/test/mock_sock_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/test/mock_sock_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/test/mock_sock_buckets.c (original)
+++ serf/branches/get-remaining/test/mock_sock_buckets.c Tue Sep  8 19:33:32 2015
@@ -95,5 +95,6 @@ const serf_bucket_type_t serf_bucket_typ
     serf_mock_sock_peek,
     serf_default_destroy_and_data,
     serf_default_read_bucket,
+    NULL,
     serf_mock_sock_set_config,
 };

Modified: serf/branches/get-remaining/test/test_buckets.c
URL: http://svn.apache.org/viewvc/serf/branches/get-remaining/test/test_buckets.c?rev=1701860&r1=1701859&r2=1701860&view=diff
==============================================================================
--- serf/branches/get-remaining/test/test_buckets.c (original)
+++ serf/branches/get-remaining/test/test_buckets.c Tue Sep  8 19:33:32 2015
@@ -606,6 +606,12 @@ static void test_aggregate_buckets(CuTes
     bkt = SERF_BUCKET_SIMPLE_STRING(BODY, alloc);
     serf_bucket_aggregate_append(aggbkt, bkt);
 
+    /* If you see result -1 in the next line, this is most likely caused by
+       not properly detecting v2 buckets via the magic function pointer.
+       Most likely you are seeing a linkage problem which causes seeing
+       different pointers for serf_buckets_are_v2() */
+    CuAssertIntEquals(tc, 62, (int)serf_bucket_get_remaining(aggbkt));
+
     status = serf_bucket_read_iovec(aggbkt, 0, 32,
                                     tgt_vecs, &vecs_used);
     CuAssertIntEquals(tc, APR_SUCCESS, status);
@@ -635,6 +641,8 @@ static void test_aggregate_buckets(CuTes
     bkt = SERF_BUCKET_SIMPLE_STRING_LEN(BODY+15, strlen(BODY)-15, alloc);
     serf_bucket_aggregate_append(aggbkt, bkt);
 
+    CuAssertTrue(tc, serf_bucket_get_remaining(aggbkt) == 62);
+
     read_and_check_bucket(tc, aggbkt, BODY);
 
     /* Test 5: multiple child buckets prepended. */
@@ -645,6 +653,8 @@ static void test_aggregate_buckets(CuTes
     bkt = SERF_BUCKET_SIMPLE_STRING_LEN(BODY, 15, alloc);
     serf_bucket_aggregate_prepend(aggbkt, bkt);
 
+    CuAssertTrue(tc, serf_bucket_get_remaining(aggbkt) == 62);
+
     read_and_check_bucket(tc, aggbkt, BODY);
 
     /* Test 6: ensure peek doesn't return APR_EAGAIN, or APR_EOF incorrectly. */