Skip to content

Commit

Permalink
fixes #222
Browse files Browse the repository at this point in the history
  • Loading branch information
simerplaha committed Mar 20, 2020
1 parent 2b562b5 commit d7d4276
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 5 deletions.
25 changes: 20 additions & 5 deletions data/src/main/scala/swaydb/data/accelerate/Accelerator.scala
Expand Up @@ -24,7 +24,10 @@

package swaydb.data.accelerate

import java.util.Optional

import swaydb.data.util.StorageUnits._
import swaydb.data.util.Java._

import scala.concurrent.duration._

Expand All @@ -33,6 +36,12 @@ import scala.concurrent.duration._
*/
object Accelerator {

def apply(nextMapSize: Long, brake: Optional[Brake]): Accelerator =
new Accelerator(
nextMapSize = nextMapSize,
brake = brake.asScala
)

/**
* http://swaydb.io/configuring-levels/acceleration
*/
Expand Down Expand Up @@ -69,6 +78,9 @@ object Accelerator {
)
)

def brakeBuilder(): BrakeBuilder.Step0 =
BrakeBuilder.builder()

/**
* http://swaydb.io/configuring-levels/acceleration/noBrakes
*/
Expand All @@ -78,17 +90,20 @@ object Accelerator {
maxMapSize: Long = 24.mb)(level0Meter: LevelZeroMeter): Accelerator =
Accelerator(
nextMapSize =
nextMapSize(onMapCount, increaseMapSizeBy, maxMapSize, level0Meter),
nextMapSize(
mapCount = onMapCount,
increaseMapSizeBy = increaseMapSizeBy,
maxMapSize = maxMapSize,
level0Meter = level0Meter
),
brake =
None
)

def cruise(level0Meter: LevelZeroMeter): Accelerator =
Accelerator(
nextMapSize =
level0Meter.defaultMapSize,
brake =
None
nextMapSize = level0Meter.defaultMapSize,
brake = None
)
}

Expand Down
79 changes: 79 additions & 0 deletions data/src/main/scala/swaydb/data/accelerate/BrakeBuilder.scala
@@ -0,0 +1,79 @@
package swaydb.data.accelerate

import scala.concurrent.duration.FiniteDuration

class BrakeBuilder {
private var increaseMapSizeOnMapCount: Int = _
private var increaseMapSizeBy: Int = _
private var maxMapSize: Long = _
private var brakeOnMapCount: Int = _
private var brakeFor: FiniteDuration = _
private var releaseRate: FiniteDuration = _
private var levelZeroMeter: LevelZeroMeter = _
}

object BrakeBuilder {

class Step0(builder: BrakeBuilder) {
def withIncreaseMapSizeOnMapCount(increaseMapSizeOnMapCount: Int) = {
builder.increaseMapSizeOnMapCount = increaseMapSizeOnMapCount
new Step1(builder)
}
}

class Step1(builder: BrakeBuilder) {
def withIncreaseMapSizeBy(increaseMapSizeBy: Int) = {
builder.increaseMapSizeBy = increaseMapSizeBy
new Step2(builder)
}
}

class Step2(builder: BrakeBuilder) {
def withMaxMapSize(maxMapSize: Long) = {
builder.maxMapSize = maxMapSize
new Step3(builder)
}
}

class Step3(builder: BrakeBuilder) {
def withBrakeOnMapCount(brakeOnMapCount: Int) = {
builder.brakeOnMapCount = brakeOnMapCount
new Step4(builder)
}
}

class Step4(builder: BrakeBuilder) {
def withBrakeFor(brakeFor: FiniteDuration) = {
builder.brakeFor = brakeFor
new Step5(builder)
}
}

class Step5(builder: BrakeBuilder) {
def withReleaseRate(releaseRate: FiniteDuration) = {
builder.releaseRate = releaseRate
new Step6(builder)
}
}

class Step6(builder: BrakeBuilder) {
def withLevelZeroMeter(levelZeroMeter: LevelZeroMeter) = {
builder.levelZeroMeter = levelZeroMeter
new Step7(builder)
}
}

class Step7(builder: BrakeBuilder) {
def build(): Accelerator =
Accelerator.brake(
increaseMapSizeOnMapCount = builder.increaseMapSizeOnMapCount,
increaseMapSizeBy = builder.increaseMapSizeBy,
maxMapSize = builder.maxMapSize,
brakeOnMapCount = builder.brakeOnMapCount,
brakeFor = builder.brakeFor,
releaseRate = builder.releaseRate
)(builder.levelZeroMeter)
}

def builder() = new Step0(new BrakeBuilder())
}
74 changes: 74 additions & 0 deletions data/src/main/scala/swaydb/data/accelerate/NoBrakesBuilder.scala
@@ -0,0 +1,74 @@
/*
* Copyright (c) 2020 Simer JS Plaha (simer.j@gmail.com - @simerplaha)
*
* This file is a part of SwayDB.
*
* SwayDB is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* SwayDB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with SwayDB. If not, see <https://www.gnu.org/licenses/>.
*
* Additional permission under the GNU Affero GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining
* it with other code, such other code is not for that reason alone subject
* to any of the requirements of the GNU Affero GPL version 3.
*/

package swaydb.data.accelerate

class NoBrakesBuilder {
private var onMapCount: Int = _
private var increaseMapSizeBy: Int = _
private var maxMapSize: Long = _
private var level0Meter: LevelZeroMeter = _
}

object NoBrakesBuilder {

class Step0(builder: NoBrakesBuilder) {
def withOnMapCount(onMapCount: Int) = {
builder.onMapCount = onMapCount
new Step1(builder)
}
}

class Step1(builder: NoBrakesBuilder) {
def withIncreaseMapSizeBy(increaseMapSizeBy: Int) = {
builder.increaseMapSizeBy = increaseMapSizeBy
new Step2(builder)
}
}

class Step2(builder: NoBrakesBuilder) {
def withMaxMapSize(maxMapSize: Long) = {
builder.maxMapSize = maxMapSize
new Step3(builder)
}
}

class Step3(builder: NoBrakesBuilder) {
def withLevel0Meter(level0Meter: LevelZeroMeter) = {
builder.level0Meter = level0Meter
new Step4(builder)
}
}

class Step4(builder: NoBrakesBuilder) {
def build(): Accelerator =
Accelerator.noBrakes(
onMapCount = builder.onMapCount,
increaseMapSizeBy = builder.increaseMapSizeBy,
maxMapSize = builder.maxMapSize
)(builder.level0Meter)
}

def builder() = new Step0(new NoBrakesBuilder())
}

0 comments on commit d7d4276

Please sign in to comment.