You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2013/06/28 08:27:46 UTC
git commit: Remove homegrown and now unused Throttle class
Updated Branches:
refs/heads/trunk c432e6733 -> cc83177af
Remove homegrown and now unused Throttle class
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/cc83177a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/cc83177a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/cc83177a
Branch: refs/heads/trunk
Commit: cc83177af8a81499d4dfa2ba182427f2c2443359
Parents: c432e67
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Fri Jun 28 08:27:38 2013 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Fri Jun 28 08:27:38 2013 +0200
----------------------------------------------------------------------
.../org/apache/cassandra/utils/Throttle.java | 111 -------------------
1 file changed, 111 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/cc83177a/src/java/org/apache/cassandra/utils/Throttle.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/Throttle.java b/src/java/org/apache/cassandra/utils/Throttle.java
deleted file mode 100644
index d33fab2..0000000
--- a/src/java/org/apache/cassandra/utils/Throttle.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * 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.utils;
-
-import java.util.concurrent.TimeUnit;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.util.concurrent.Uninterruptibles;
-
-/**
- * Encapsulates the timing/state required to throttle a caller to a target throughput in
- * bytes per millisecond, when periodically passed an absolute count of bytes.
- */
-public class Throttle
-{
- private static final Logger logger = LoggerFactory.getLogger(Throttle.class);
-
- private final String name;
- private final ThroughputFunction fun;
-
- // the bytes that had been handled the last time we delayed to throttle,
- // and the time in milliseconds when we last throttled
- private long bytesAtLastDelay;
- private long timeAtLastDelay;
-
- // current target bytes of throughput per millisecond
- private int targetBytesPerMS = -1;
-
- public Throttle(String name, ThroughputFunction fun)
- {
- this.name = name;
- this.fun = fun;
- }
-
- /** @param currentBytes Bytes of throughput since the beginning of the task. */
- public void throttle(long currentBytes)
- {
- throttleDelta(currentBytes - bytesAtLastDelay);
- }
-
- /** @param bytesDelta Bytes of throughput since the last call to throttle*() */
- public void throttleDelta(long bytesDelta)
- {
- int newTargetBytesPerMS = fun.targetThroughput();
- if (newTargetBytesPerMS < 1)
- // throttling disabled
- return;
-
- if (newTargetBytesPerMS != targetBytesPerMS)
- {
- // restart throttling based on the new target to avoid getting bogus answers based on comparing
- // the rate under the old throttle, with the desired rate under the new. (If the new rate is higher
- // than the old, it doesn't much matter, but if the new rate is lower, it would result in a long
- // sleep to bring the average down. See CASSANDRA-5087.)
- logger.debug("{} target throughput now {} bytes/ms.", this, newTargetBytesPerMS);
- targetBytesPerMS = newTargetBytesPerMS;
- bytesAtLastDelay += bytesDelta;
- timeAtLastDelay = System.nanoTime();
- return;
- }
-
- // time passed since last delay
- long msSinceLast = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - timeAtLastDelay);
- // the excess bytes in this period
- long excessBytes = bytesDelta - msSinceLast * targetBytesPerMS;
-
- // the time to delay to recap the deficit
- long timeToDelay = excessBytes / Math.max(1, targetBytesPerMS);
- if (timeToDelay > 0)
- {
- if (logger.isTraceEnabled())
- logger.trace(String.format("%s actual throughput was %d bytes in %d ms: throttling for %d ms",
- this, bytesDelta, msSinceLast, timeToDelay));
- Uninterruptibles.sleepUninterruptibly(timeToDelay, TimeUnit.MILLISECONDS);
- }
- bytesAtLastDelay += bytesDelta;
- timeAtLastDelay = System.nanoTime();
- }
-
- @Override
- public String toString()
- {
- return "Throttle(for=" + name + ")";
- }
-
- public interface ThroughputFunction
- {
- /**
- * @return The instantaneous target throughput in bytes per millisecond. Targets less
- * than or equal to zero will disable throttling.
- */
- public int targetThroughput();
- }
-}