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. */