From dev-return-695-archive-asf-public=cust-asf.ponee.io@zipkin.apache.org Mon May 13 17:51:01 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id 1222A180675 for ; Mon, 13 May 2019 19:51:00 +0200 (CEST) Received: (qmail 446 invoked by uid 500); 13 May 2019 17:51:00 -0000 Mailing-List: contact dev-help@zipkin.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@zipkin.apache.org Delivered-To: mailing list dev@zipkin.apache.org Received: (qmail 433 invoked by uid 99); 13 May 2019 17:51:00 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 13 May 2019 17:51:00 +0000 From: GitBox To: dev@zipkin.apache.org Subject: [GitHub] [incubator-zipkin-brave] devinsba commented on a change in pull request #908: Fixes some edge cases around sampler resetting Message-ID: <155776985538.32341.5831181497034864170.gitbox@gitbox.apache.org> Date: Mon, 13 May 2019 17:50:55 -0000 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit devinsba commented on a change in pull request #908: Fixes some edge cases around sampler resetting URL: https://github.com/apache/incubator-zipkin-brave/pull/908#discussion_r283461739 ########## File path: brave/src/main/java/brave/sampler/RateLimitingSampler.java ########## @@ -55,14 +55,17 @@ public static Sampler create(int tracesPerSecond) { long updateAt = nextReset.get(); long nanosUntilReset = -(now - updateAt); // because nanoTime can be negative - boolean shouldReset = nanosUntilReset <= 0; - if (shouldReset) { - if (nextReset.compareAndSet(updateAt, updateAt + NANOS_PER_SECOND)) { - usage.set(0); - } + if (nanosUntilReset <= 0) { + // Attempt to move into the next sampling interval. + // nanosUntilReset is now invalid regardless of race winner, so we can't sample based on it. + if (nextReset.compareAndSet(updateAt, updateAt + NANOS_PER_SECOND)) usage.set(0); Review comment: The recursion below should also solve that, but having not seen that problem (`updateAt` being more than a second in the past) in my first reading, the recursion is now screaming stack overflow to me so I think that needs to be addressed ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: users@infra.apache.org With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@zipkin.apache.org For additional commands, e-mail: dev-help@zipkin.apache.org