|
|
@@ -347,6 +347,40 @@ get_tracking_id(ngx_http_request_t * r)
|
|
347
|
347
|
return NULL;
|
|
348
|
348
|
}
|
|
349
|
349
|
|
|
|
350
|
+
|
|
|
351
|
+static void log_node(ngx_rbtree_node_t *node, ngx_log_t * log)
|
|
|
352
|
+{
|
|
|
353
|
+ ngx_http_uploadprogress_node_t *up;
|
|
|
354
|
+ up = (ngx_http_uploadprogress_node_t *) node;
|
|
|
355
|
+
|
|
|
356
|
+ ngx_log_debug4(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node %s [%uO/%uO,%d,%d]",up->data, up->rest, up->length, up->err_status, up->timeout );
|
|
|
357
|
+}
|
|
|
358
|
+
|
|
|
359
|
+static void log_rbtree(ngx_http_uploadprogress_ctx_t * ctx, ngx_log_t * log)
|
|
|
360
|
+{
|
|
|
361
|
+ ngx_http_uploadprogress_node_t *up;
|
|
|
362
|
+ ngx_rbtree_node_t *node;
|
|
|
363
|
+
|
|
|
364
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
365
|
+ "upload-progress: logging the whole rbtree");
|
|
|
366
|
+
|
|
|
367
|
+ node = (ngx_rbtree_node_t *) ctx->list_tail.prev;
|
|
|
368
|
+ for (;;) {
|
|
|
369
|
+ if (node == &ctx->list_head.node) {
|
|
|
370
|
+ break;
|
|
|
371
|
+ }
|
|
|
372
|
+
|
|
|
373
|
+ up = (ngx_http_uploadprogress_node_t *) node;
|
|
|
374
|
+
|
|
|
375
|
+ log_node(node, log);
|
|
|
376
|
+
|
|
|
377
|
+ node = (ngx_rbtree_node_t *)up->prev;
|
|
|
378
|
+ }
|
|
|
379
|
+
|
|
|
380
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
381
|
+ "upload-progress: end logging the whole rbtree");
|
|
|
382
|
+}
|
|
|
383
|
+
|
|
350
|
384
|
static ngx_http_uploadprogress_node_t *
|
|
351
|
385
|
find_node(ngx_str_t * id, ngx_http_uploadprogress_ctx_t * ctx, ngx_log_t * log)
|
|
352
|
386
|
{
|
|
|
@@ -358,23 +392,30 @@ find_node(ngx_str_t * id, ngx_http_uploadprogress_ctx_t * ctx, ngx_log_t * log)
|
|
358
|
392
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node %V", id);
|
|
359
|
393
|
|
|
360
|
394
|
hash = ngx_crc32_short(id->data, id->len);
|
|
|
395
|
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node hash %08XD", hash);
|
|
361
|
396
|
|
|
362
|
397
|
node = ctx->rbtree->root;
|
|
363
|
398
|
sentinel = ctx->rbtree->sentinel;
|
|
364
|
399
|
|
|
365
|
400
|
while (node != sentinel) {
|
|
366
|
401
|
|
|
|
402
|
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node testing hash %08XD", node->key);
|
|
|
403
|
+ log_node(node, log);
|
|
|
404
|
+
|
|
367
|
405
|
if (hash < node->key) {
|
|
|
406
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node going left");
|
|
368
|
407
|
node = node->left;
|
|
369
|
408
|
continue;
|
|
370
|
409
|
}
|
|
371
|
410
|
|
|
372
|
411
|
if (hash > node->key) {
|
|
|
412
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node going right");
|
|
373
|
413
|
node = node->right;
|
|
374
|
414
|
continue;
|
|
375
|
415
|
}
|
|
376
|
416
|
|
|
377
|
417
|
/* hash == node->key */
|
|
|
418
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node hash matching");
|
|
378
|
419
|
|
|
379
|
420
|
do {
|
|
380
|
421
|
up = (ngx_http_uploadprogress_node_t *) node;
|
|
|
@@ -392,6 +433,7 @@ find_node(ngx_str_t * id, ngx_http_uploadprogress_ctx_t * ctx, ngx_log_t * log)
|
|
392
|
433
|
} while (node != sentinel && hash == node->key);
|
|
393
|
434
|
|
|
394
|
435
|
/* found a key with unmatching hash (and value), let's keep comparing hashes then */
|
|
|
436
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: find_node hash not matching anymore");
|
|
395
|
437
|
}
|
|
396
|
438
|
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "upload-progress: can't find node");
|
|
397
|
439
|
return NULL;
|
|
|
@@ -594,6 +636,7 @@ ngx_http_reportuploads_handler(ngx_http_request_t * r)
|
|
594
|
636
|
} else {
|
|
595
|
637
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
|
596
|
638
|
"reportuploads not found: %V", id);
|
|
|
639
|
+ log_rbtree(ctx,r->connection->log);
|
|
597
|
640
|
}
|
|
598
|
641
|
ngx_shmtx_unlock(&shpool->mutex);
|
|
599
|
642
|
ngx_free(id);
|