Skip to content

Commit

Permalink
fixed rounding bug
Browse files Browse the repository at this point in the history
  • Loading branch information
sief committed Jan 23, 2015
1 parent 0189624 commit 911cd51
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 6 deletions.
2 changes: 1 addition & 1 deletion module/app/com/sief/ratelimit/TokenBucketGroup.scala
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ private class TokenBucketGroup(size: Int, rate: Float, clock: Clock) extends Act
private def refillAll() {
val now: Long = clock.now
val diff: Long = now - lastRefill
val tokensToAdd: Long = Math.round(diff * ratePerMilli)
val tokensToAdd: Long = (diff * ratePerMilli).toLong
if (tokensToAdd > 0) {
buckets = buckets.mapValues(addTokens(_, tokensToAdd)).filterNot(_._2 >= size)
lastRefill = now - diff % intervalMillis
Expand Down
2 changes: 1 addition & 1 deletion module/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name := """play-guard"""

organization := """com.sief"""

version := "1.3.0"
version := "1.3.1"

lazy val root = (project in file(".")).enablePlugins(PlayScala)

Expand Down
16 changes: 13 additions & 3 deletions module/test/com/sief/ratelimit/TokenBucketGroupSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ class TokenBucketGroupSpec extends TestKit(ActorSystem("TokenBucketGroupTest"))
fakeClock.ts += 50
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1

fakeClock.ts += 50
fakeClock.ts += 51
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1

Expand All @@ -104,17 +104,26 @@ class TokenBucketGroupSpec extends TestKit(ActorSystem("TokenBucketGroupTest"))
val ref = TokenBucketGroup.create(system, 10, 0.1f, fakeClock)
TokenBucketGroup.consume(ref, "x", 10).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1
TokenBucketGroup.consume(ref, "x", 0).futureValue shouldBe 0

fakeClock.ts += 9999
TokenBucketGroup.consume(ref, "x", 0).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1
TokenBucketGroup.consume(ref, "x", 0).futureValue shouldBe 0

fakeClock.ts += 10000
fakeClock.ts += 2
TokenBucketGroup.consume(ref, "x", 0).futureValue shouldBe 1
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1

fakeClock.ts += 30000
TokenBucketGroup.consume(ref, "x", 0).futureValue shouldBe 3
TokenBucketGroup.consume(ref, "x", 2).futureValue shouldBe 1
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1

fakeClock.ts += 70000
TokenBucketGroup.consume(ref, "x", 0).futureValue shouldBe 7
TokenBucketGroup.consume(ref, "x", 3).futureValue shouldBe 4
TokenBucketGroup.consume(ref, "x", 4).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1
Expand All @@ -140,8 +149,9 @@ class TokenBucketGroupSpec extends TestKit(ActorSystem("TokenBucketGroupTest"))
val ref = TokenBucketGroup.create(system, 100, 10, fakeClock)
TokenBucketGroup.consume(ref, "x", 100).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 100).futureValue shouldBe -100
TokenBucketGroup.consume(ref, "x", 0).futureValue shouldBe 0

fakeClock.ts += 100
fakeClock.ts += 101
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe 0
TokenBucketGroup.consume(ref, "x", 1).futureValue shouldBe -1
}
Expand Down
2 changes: 1 addition & 1 deletion samples/play-guard-sample/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.4"

libraryDependencies ++= Seq(
"com.sief" %% "play-guard" % "1.3.0"
"com.sief" %% "play-guard" % "1.3.1"
)

resolvers ++= Seq("Local" at "file:///Users/simoneffing/.ivy2/local")

0 comments on commit 911cd51

Please sign in to comment.