From pr-return-1386-apmail-cassandra-pr-archive=cassandra.apache.org@cassandra.apache.org Mon Oct 15 22:34:27 2018 Return-Path: X-Original-To: apmail-cassandra-pr-archive@minotaur.apache.org Delivered-To: apmail-cassandra-pr-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8114F18584 for ; Mon, 15 Oct 2018 22:34:27 +0000 (UTC) Received: (qmail 29939 invoked by uid 500); 15 Oct 2018 22:34:27 -0000 Delivered-To: apmail-cassandra-pr-archive@cassandra.apache.org Received: (qmail 29855 invoked by uid 500); 15 Oct 2018 22:34:27 -0000 Mailing-List: contact pr-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: pr@cassandra.apache.org Delivered-To: mailing list pr@cassandra.apache.org Received: (qmail 29179 invoked by uid 99); 15 Oct 2018 22:34:26 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Oct 2018 22:34:26 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D42CFE0BBC; Mon, 15 Oct 2018 22:34:25 +0000 (UTC) From: aweisberg To: pr@cassandra.apache.org Reply-To: pr@cassandra.apache.org References: In-Reply-To: Subject: [GitHub] cassandra pull request #283: CASSANDRA-14459: DynamicEndpointSnitch should n... Content-Type: text/plain Message-Id: <20181015223425.D42CFE0BBC@git1-us-west.apache.org> Date: Mon, 15 Oct 2018 22:34:25 +0000 (UTC) Github user aweisberg commented on a diff in the pull request: https://github.com/apache/cassandra/pull/283#discussion_r225335637 --- Diff: src/java/org/apache/cassandra/locator/DynamicEndpointSnitchEMA.java --- @@ -0,0 +1,181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.cassandra.locator; + +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.cassandra.gms.Gossiper; +import org.apache.cassandra.metrics.ExponentialMovingAverage; +import org.apache.cassandra.net.LatencyMeasurementType; + + +/** + * A dynamic snitching implementation that uses Exponentially Decaying Histograms to prefer or + * de-prefer hosts + * + * This was the default implementation prior to Cassandra 4.0 and is being left as the default + * in 4.0 + */ +public class DynamicEndpointSnitchEMA extends DynamicEndpointSnitch +{ + // A ~10 sample EMA + private static final double EMA_ALPHA = 0.10; + + private final ConcurrentHashMap samples = new ConcurrentHashMap<>(); + + /** + * Adds two boolean markers to the ExponentialMovingAverage for telling if the data has been + * updated or requested recently. + * + * recentlyMeasured is updated through {@link AnnotatedEMA#update(long, boolean)} + * recentlyRequested is updated through {@link DynamicEndpointSnitch#markRequested} + * + * Both markers are periodically reset via {@link DynamicEndpointSnitch#latencyProbeNeeded(long)} + */ + private static class AnnotatedEMA extends ExponentialMovingAverage --- End diff -- You can use a common base with and compose instead of extending so that the base class can contain all the type specific functionality. I think you want to wrap anyways so we can adapt the methods from the underlying reservoir. Then the map can be in the base class since it's basically common anyways. --- --------------------------------------------------------------------- To unsubscribe, e-mail: pr-unsubscribe@cassandra.apache.org For additional commands, e-mail: pr-help@cassandra.apache.org