From 14cfc043a74c563f81e185b6ba5e40e7eb5d3b5b Mon Sep 17 00:00:00 2001 From: Leif Hedstrom Date: Wed, 23 Jun 2021 17:14:25 -0600 Subject: [PATCH] Cleans up the code bit, including milliseconds consistency --- plugins/experimental/rate_limit/limiter.cc | 5 +++-- plugins/experimental/rate_limit/limiter.h | 6 +++--- plugins/experimental/rate_limit/rate_limit.cc | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/plugins/experimental/rate_limit/limiter.cc b/plugins/experimental/rate_limit/limiter.cc index 5960e9719ef..f7bded852bb 100644 --- a/plugins/experimental/rate_limit/limiter.cc +++ b/plugins/experimental/rate_limit/limiter.cc @@ -30,7 +30,7 @@ RateLimiter::queue_process_cont(TSCont cont, TSEvent event, void *edata) // Try to enable some queued txns (if any) if there are slots available while (limiter->size() > 0 && limiter->reserve()) { auto [txnp, contp, start_time] = limiter->pop(); - std::chrono::microseconds delay = std::chrono::duration_cast(now - start_time); + std::chrono::milliseconds delay = std::chrono::duration_cast(now - start_time); limiter->delayHeader(txnp, delay); TSDebug(PLUGIN_NAME, "Enabling queued txn after %ldms", static_cast(delay.count())); @@ -112,7 +112,7 @@ RateLimiter::setupQueueCont() // for logging, and other types of metrics. // void -RateLimiter::delayHeader(TSHttpTxn txnp, std::chrono::microseconds delay) const +RateLimiter::delayHeader(TSHttpTxn txnp, std::chrono::milliseconds delay) const { if (header.size() > 0) { TSMLoc hdr_loc = nullptr; @@ -122,6 +122,7 @@ RateLimiter::delayHeader(TSHttpTxn txnp, std::chrono::microseconds delay) const if (TS_SUCCESS == TSHttpTxnClientReqGet(txnp, &bufp, &hdr_loc)) { if (TS_SUCCESS == TSMimeHdrFieldCreateNamed(bufp, hdr_loc, header.c_str(), header.size(), &field_loc)) { if (TS_SUCCESS == TSMimeHdrFieldValueIntSet(bufp, hdr_loc, field_loc, -1, static_cast(delay.count()))) { + TSDebug(PLUGIN_NAME, "Added client request header; %s: %d", header.c_str(), static_cast(delay.count())); TSMimeHdrFieldAppend(bufp, hdr_loc, field_loc); } TSHandleMLocRelease(bufp, hdr_loc, field_loc); diff --git a/plugins/experimental/rate_limit/limiter.h b/plugins/experimental/rate_limit/limiter.h index 947f6a9f3ae..bc6463d4893 100644 --- a/plugins/experimental/rate_limit/limiter.h +++ b/plugins/experimental/rate_limit/limiter.h @@ -144,19 +144,19 @@ class RateLimiter } } - void delayHeader(TSHttpTxn txpn, std::chrono::microseconds delay) const; + void delayHeader(TSHttpTxn txpn, std::chrono::milliseconds delay) const; void retryAfter(TSHttpTxn txpn, unsigned after) const; // Continuation creation and scheduling void setupQueueCont(); void - setupTxnCont(void *ih, TSHttpTxn txnp, TSHttpHookID hook) + setupTxnCont(TSHttpTxn txnp, TSHttpHookID hook) { TSCont cont = TSContCreate(rate_limit_cont, nullptr); TSReleaseAssert(cont); - TSContDataSet(cont, ih); + TSContDataSet(cont, this); TSHttpTxnHookAdd(txnp, hook, cont); } diff --git a/plugins/experimental/rate_limit/rate_limit.cc b/plugins/experimental/rate_limit/rate_limit.cc index f9c0835de20..1d0d669cbb5 100644 --- a/plugins/experimental/rate_limit/rate_limit.cc +++ b/plugins/experimental/rate_limit/rate_limit.cc @@ -121,14 +121,14 @@ TSRemapDoRemap(void *ih, TSHttpTxn txnp, TSRemapRequestInfo *rri) if (!limiter->max_queue || limiter->full()) { // We are running at limit, and the queue has reached max capacity, give back an error and be done. TSHttpTxnStatusSet(txnp, static_cast(limiter->error)); - limiter->setupTxnCont(ih, txnp, TS_HTTP_SEND_RESPONSE_HDR_HOOK); + limiter->setupTxnCont(txnp, TS_HTTP_SEND_RESPONSE_HDR_HOOK); TSDebug(PLUGIN_NAME, "Rejecting request, we're at capacity and queue is full"); } else { - limiter->setupTxnCont(ih, txnp, TS_HTTP_POST_REMAP_HOOK); + limiter->setupTxnCont(txnp, TS_HTTP_POST_REMAP_HOOK); TSDebug(PLUGIN_NAME, "Adding rate limiting hook, we are at capacity"); } } else { - limiter->setupTxnCont(ih, txnp, TS_HTTP_TXN_CLOSE_HOOK); + limiter->setupTxnCont(txnp, TS_HTTP_TXN_CLOSE_HOOK); TSDebug(PLUGIN_NAME, "Adding txn-close hook, we're not at capacity"); } }