diff --git a/core-cache/src/test/scala/swaydb/core/cache/CacheSpec.scala b/core-cache/src/test/scala/swaydb/core/cache/CacheSpec.scala index c6d1192b9..138046384 100644 --- a/core-cache/src/test/scala/swaydb/core/cache/CacheSpec.scala +++ b/core-cache/src/test/scala/swaydb/core/cache/CacheSpec.scala @@ -20,9 +20,9 @@ import org.scalamock.scalatest.MockFactory import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import swaydb.Error.Segment.ExceptionHandler -import swaydb.effect.Base._ import swaydb.effect.{IOStrategy, Reserve} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import swaydb.{Error, IO} import scala.annotation.tailrec diff --git a/core-cache/src/test/scala/swaydb/core/cache/LazySpec.scala b/core-cache/src/test/scala/swaydb/core/cache/LazySpec.scala index c3c78ddd6..bc4a32bd6 100644 --- a/core-cache/src/test/scala/swaydb/core/cache/LazySpec.scala +++ b/core-cache/src/test/scala/swaydb/core/cache/LazySpec.scala @@ -20,8 +20,8 @@ import org.scalamock.scalatest.MockFactory import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import swaydb.IO -import swaydb.effect.Base._ import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import scala.collection.parallel.CollectionConverters._ import scala.concurrent.duration._ diff --git a/core-interop/src/main/scala/swaydb/config/compaction/CompactionConfig.scala b/core-interop/src/main/scala/swaydb/config/compaction/CompactionConfig.scala index 205b96b4c..bb9111b43 100644 --- a/core-interop/src/main/scala/swaydb/config/compaction/CompactionConfig.scala +++ b/core-interop/src/main/scala/swaydb/config/compaction/CompactionConfig.scala @@ -16,8 +16,6 @@ package swaydb.config.compaction -import swaydb.config.compaction.CompactionConfig.CompactionParallelism - import java.util.concurrent.ExecutorService import scala.concurrent.ExecutionContext @@ -26,166 +24,27 @@ object CompactionConfig { def create(resetCompactionPriorityAtInterval: Int, actorExecutionContext: ExecutorService, compactionExecutionContext: ExecutorService, - levelZeroFlattenParallelism: Int, - levelZeroMergeParallelism: Int, - multiLevelTaskParallelism: Int, - levelSegmentAssignmentParallelism: Int, - groupedSegmentDefragParallelism: Int, - defragmentedSegmentParallelism: Int, pushStrategy: PushStrategy): CompactionConfig = CompactionConfig( resetCompactionPriorityAtInterval = resetCompactionPriorityAtInterval, actorExecutionContext = ExecutionContext.fromExecutorService(actorExecutionContext), compactionExecutionContext = ExecutionContext.fromExecutorService(compactionExecutionContext), - levelZeroFlattenParallelism = levelZeroFlattenParallelism, - levelZeroMergeParallelism = levelZeroMergeParallelism, - multiLevelTaskParallelism = multiLevelTaskParallelism, - levelSegmentAssignmentParallelism = levelSegmentAssignmentParallelism, - groupedSegmentDefragParallelism = groupedSegmentDefragParallelism, - defragmentedSegmentParallelism = defragmentedSegmentParallelism, pushStrategy = pushStrategy ) def apply(resetCompactionPriorityAtInterval: Int, actorExecutionContext: ExecutionContext, compactionExecutionContext: ExecutionContext, - levelZeroFlattenParallelism: Int, - levelZeroMergeParallelism: Int, - multiLevelTaskParallelism: Int, - levelSegmentAssignmentParallelism: Int, - groupedSegmentDefragParallelism: Int, - defragmentedSegmentParallelism: Int, pushStrategy: PushStrategy): CompactionConfig = if (resetCompactionPriorityAtInterval <= 0) throw new Exception(s"Invalid resetCompactionPriorityAtInterval $resetCompactionPriorityAtInterval. Should be greater than zero.") - else if (levelZeroFlattenParallelism <= 0) - throw new Exception(s"Invalid levelZeroFlattenParallelism $levelZeroFlattenParallelism. Should be greater than zero.") - else if (levelZeroMergeParallelism <= 0) - throw new Exception(s"Invalid levelZeroMergeParallelism $levelZeroMergeParallelism. Should be greater than zero.") - else if (multiLevelTaskParallelism <= 0) - throw new Exception(s"Invalid multiLevelTaskParallelism $multiLevelTaskParallelism. Should be greater than zero.") - else if (levelSegmentAssignmentParallelism <= 0) - throw new Exception(s"Invalid levelSegmentAssignmentParallelism $levelSegmentAssignmentParallelism. Should be greater than zero.") - else if (groupedSegmentDefragParallelism <= 0) - throw new Exception(s"Invalid groupedSegmentDefragParallelism $groupedSegmentDefragParallelism. Should be greater than zero.") - else if (defragmentedSegmentParallelism <= 0) - throw new Exception(s"Invalid defragmentedSegmentParallelism $defragmentedSegmentParallelism. Should be greater than zero.") else new CompactionConfig( resetCompactionPriorityAtInterval = resetCompactionPriorityAtInterval, actorExecutionContext = actorExecutionContext, compactionExecutionContext = compactionExecutionContext, - levelZeroFlattenParallelism = levelZeroFlattenParallelism, - levelZeroMergeParallelism = levelZeroMergeParallelism, - multiLevelTaskParallelism = multiLevelTaskParallelism, - levelSegmentAssignmentParallelism = levelSegmentAssignmentParallelism, - groupedSegmentDefragParallelism = groupedSegmentDefragParallelism, - defragmentedSegmentParallelism = defragmentedSegmentParallelism, pushStrategy = pushStrategy ) - - object CompactionParallelism { - def availableProcessors(): CompactionParallelism = - new CompactionParallelism { - val cores = Runtime.getRuntime.availableProcessors() - - override def levelZeroFlattenParallelism: Int = - cores - - override def levelZeroMergeParallelism: Int = - cores - - override def levelSegmentAssignmentParallelism: Int = - cores - - override def groupedSegmentDefragParallelism: Int = - cores - - override def defragmentedSegmentParallelism: Int = - cores - - override def multiLevelTaskParallelism: Int = - cores - } - } - - trait CompactionParallelism { - /** - * LevelZero can have multiple overlapping log files. This sets - * the parallelism for each group of overlapping group of key-values. - * - * Eg: if there are logs with the following keys - * Log1 - 10 - 20 - * Log2 - 30 - 40 - * Log3 - 1 - 40 - * - * The above when flattened/assigned will create two groups of overlapping key-values. - * Group1 - 10 - 20 - * - 1 - 20 - * - * Group2 - 30 - 40 - * - 21 - 40 - * - * This configuration sets the parallelism of each group to execute merge. - * The parallelism of merge per group is set via [[levelZeroMergeParallelism]]. - */ - def levelZeroFlattenParallelism: Int - - /** - * Each group (as mentioned in [[levelZeroFlattenParallelism]]) can contain - * multiple stacks of overlapping key-values. For example if there are 4 sets - * of overlapping key-values - * - * key-values1 - 10 - 20 - * key-values2 - 1 - 20 - * key-values3 - 3-5 - * key-values4 2 - 10 - * - * This will perform merge by in groups of 2 - * - * The parallelism will be executed as follows. - * key-values-1 & key-values-2 ---- - * - | ---- merged-key-Values-1-2 - * - | --------> final-merged-key-values-1-2-3-4 - * - | ---- merged-key-values-3-4 - * key-values-3 & key-values-4 ---- - * - */ - def levelZeroMergeParallelism: Int - - /** - * Compaction can assign merge tasks to multiple Levels. - * - * Eg: if a flattened log file from LevelZero ([[levelZeroFlattenParallelism]]) - * results in multiple groups that can be compacted into lower levels Level1, Level2 & Level3 - * then we can control this multi level concurrency via this configuration. - */ - def multiLevelTaskParallelism: Int - - /** - * Compaction can submit merge where there are multiple Segments - * overlapping the new key-values. This sets the number of Segments - * to merge concurrently. - */ - def levelSegmentAssignmentParallelism: Int - - /** - * Applies to Segments of format [[swaydb.config.SegmentFormat.Grouped]] - * where each Segment store a group of key-values per Segment file. - * - * Each group can be defragmented & merged in parallel after the new key-values - * are assigned to their respective groups. - */ - def groupedSegmentDefragParallelism: Int - - /** - * The above [[groupedSegmentDefragParallelism]] can result in multiple groups - * of new key-values and remote Segment instance which can be grouped to create - * new [[swaydb.config.SegmentFormat.Grouped]] Segments. - */ - def defragmentedSegmentParallelism: Int - - } } /** * Configures Compaction strategy. @@ -199,10 +58,4 @@ object CompactionConfig { case class CompactionConfig private(resetCompactionPriorityAtInterval: Int, actorExecutionContext: ExecutionContext, compactionExecutionContext: ExecutionContext, - levelZeroFlattenParallelism: Int, - levelZeroMergeParallelism: Int, - multiLevelTaskParallelism: Int, - levelSegmentAssignmentParallelism: Int, - groupedSegmentDefragParallelism: Int, - defragmentedSegmentParallelism: Int, - pushStrategy: PushStrategy) extends CompactionParallelism + pushStrategy: PushStrategy) diff --git a/core-performance/src/test/scala/swaydb/core/file/BlockCachePerformanceSpec.scala b/core-performance/src/test/scala/swaydb/core/file/BlockCachePerformanceSpec.scala index 8179bcbf4..d2a545212 100644 --- a/core-performance/src/test/scala/swaydb/core/file/BlockCachePerformanceSpec.scala +++ b/core-performance/src/test/scala/swaydb/core/file/BlockCachePerformanceSpec.scala @@ -22,6 +22,7 @@ import swaydb.core.segment.block.BlockCache import swaydb.core.segment.cache.sweeper.MemorySweeper import swaydb.core.{TestBase, TestCaseSweeper} import swaydb.utils.StorageUnits._ +import swaydb.testkit.TestKit._ class BlockCachePerformanceSpec extends TestBase { diff --git a/core-performance/src/test/scala/swaydb/core/segment/SegmentReadPerformanceSpec.scala b/core-performance/src/test/scala/swaydb/core/segment/SegmentReadPerformanceSpec.scala index 173870039..0660714d3 100644 --- a/core-performance/src/test/scala/swaydb/core/segment/SegmentReadPerformanceSpec.scala +++ b/core-performance/src/test/scala/swaydb/core/segment/SegmentReadPerformanceSpec.scala @@ -18,7 +18,6 @@ package swaydb.core.segment import swaydb.Benchmark import swaydb.config.SegmentRefCacheLife -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.TestCaseSweeper._ import swaydb.core.TestData._ import swaydb.core.file.ForceSaveApplier @@ -51,7 +50,6 @@ class SegmentReadPerformanceSpec extends TestBase { implicit val keyOrder = KeyOrder.default implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 1000000 diff --git a/core-series/src/test/scala/swaydb/core/series/map/LimitHashMapSpec.scala b/core-series/src/test/scala/swaydb/core/series/map/LimitHashMapSpec.scala index d185d5efc..67353f65a 100644 --- a/core-series/src/test/scala/swaydb/core/series/map/LimitHashMapSpec.scala +++ b/core-series/src/test/scala/swaydb/core/series/map/LimitHashMapSpec.scala @@ -2,7 +2,7 @@ package swaydb.core.series.map import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers -import swaydb.effect.Base._ +import swaydb.testkit.TestKit._ class ProbeLimitHashMap extends LimitHashMapSpec { def createMap[K, V >: Null](limit: Integer) = LimitHashMap[K, V](limit, 10) diff --git a/core-tools/src/main/scala/swaydb/core/tool/AppendixRepairer.scala b/core-tools/src/main/scala/swaydb/core/tool/AppendixRepairer.scala index 359feb4d0..ec617ae7a 100644 --- a/core-tools/src/main/scala/swaydb/core/tool/AppendixRepairer.scala +++ b/core-tools/src/main/scala/swaydb/core/tool/AppendixRepairer.scala @@ -23,17 +23,18 @@ import swaydb.config.repairAppendix.AppendixRepairStrategy._ import swaydb.config.repairAppendix.{AppendixRepairStrategy, OverlappingSegmentsException, SegmentInfoUnTyped} import swaydb.config.{ForceSave, MMAP} import swaydb.core.file.ForceSaveApplier -import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.file.sweeper.FileSweeper +import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.level.AppendixLogCache import swaydb.core.log.serialiser.LogEntryWriter import swaydb.core.log.{Log, LogEntry} import swaydb.core.segment.Segment import swaydb.core.segment.cache.sweeper.MemorySweeper -import swaydb.effect.{Effect, Extension} +import swaydb.effect.Effect import swaydb.slice.Slice import swaydb.slice.SliceIOImplicits._ import swaydb.slice.order.KeyOrder +import swaydb.utils.Extension import swaydb.utils.StorageUnits._ import java.nio.file.Path diff --git a/core-tools/src/test/scala/swaydb/core/tool/AppendixRepairerSpec.scala b/core-tools/src/test/scala/swaydb/core/tool/AppendixRepairerSpec.scala index e82b28073..1af7396c6 100644 --- a/core-tools/src/test/scala/swaydb/core/tool/AppendixRepairerSpec.scala +++ b/core-tools/src/test/scala/swaydb/core/tool/AppendixRepairerSpec.scala @@ -19,7 +19,6 @@ package swaydb.core.tool import swaydb.Glass import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.LevelThrottle import swaydb.config.repairAppendix.{AppendixRepairStrategy, OverlappingSegmentsException} import swaydb.core.CommonAssertions._ @@ -31,6 +30,7 @@ import swaydb.effect.Effect._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import swaydb.utils.OperatingSystem import swaydb.utils.StorageUnits._ @@ -38,13 +38,11 @@ import java.nio.file.NoSuchFileException import scala.concurrent.duration.{Duration, DurationInt} import scala.util.Random - class AppendixRepairerSpec extends TestBase { implicit val keyOrder: KeyOrder[Slice[Byte]] = KeyOrder.default implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "AppendixRepair" should { "fail if the input path does not exist" in { diff --git a/core/src/main/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner.scala b/core/src/main/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner.scala index 886198a20..288f9dcf1 100644 --- a/core/src/main/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner.scala +++ b/core/src/main/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner.scala @@ -16,7 +16,6 @@ package swaydb.core.compaction.task.assigner -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.PushStrategy import swaydb.core.compaction.task.CompactionTask import swaydb.core.compaction.task.CompactionTask.CompactLogs @@ -28,8 +27,8 @@ import swaydb.core.segment.assigner.Assignable import swaydb.core.segment.data.merge.KeyValueMerger import swaydb.core.segment.data.merge.stats.MergeStats import swaydb.core.segment.data.{KeyValue, Memory} -import swaydb.slice.{MaxKey, Slice} import swaydb.slice.order.{KeyOrder, TimeOrder} +import swaydb.slice.{MaxKey, Slice} import swaydb.utils.{Aggregator, Futures, NonEmptyList} import java.util @@ -53,8 +52,7 @@ case object LevelZeroTaskAssigner { def run(source: LevelZero, pushStrategy: PushStrategy, - lowerLevels: NonEmptyList[Level])(implicit ec: ExecutionContext, - parallelism: CompactionParallelism): Future[CompactLogs] = { + lowerLevels: NonEmptyList[Level])(implicit ec: ExecutionContext): Future[CompactLogs] = { implicit val keyOrder: KeyOrder[Slice[Byte]] = source.keyOrder implicit val timeOrder: TimeOrder[Slice[Byte]] = source.timeOrder implicit val functionStore: FunctionStore = source.functionStore @@ -91,11 +89,10 @@ case object LevelZeroTaskAssigner { def flatten(input: IterableOnce[LevelZeroLog])(implicit ec: ExecutionContext, keyOrder: KeyOrder[Slice[Byte]], timerOrder: TimeOrder[Slice[Byte]], - functionStore: FunctionStore, - parallelism: CompactionParallelism): Future[Iterable[Assignable.Collection]] = + functionStore: FunctionStore): Future[Iterable[Assignable.Collection]] = Future(createStacks(input)) flatMap { stacks => - Futures.traverseBounded(parallelism.levelZeroFlattenParallelism, stacks.values().asScala.map(_.stack))(mergeStack) map { + Future.traverse(stacks.values().asScala.map(_.stack))(mergeStack) map { collection => collection map { keyValues => @@ -319,8 +316,7 @@ case object LevelZeroTaskAssigner { def mergeStack(stack: Iterable[Either[LevelZeroLog, Iterable[Memory]]])(implicit ec: ExecutionContext, keyOrder: KeyOrder[Slice[Byte]], timerOrder: TimeOrder[Slice[Byte]], - functionStore: FunctionStore, - parallelism: CompactionParallelism): Future[Iterable[Memory]] = + functionStore: FunctionStore): Future[Iterable[Memory]] = if (stack.isEmpty) Futures.emptyIterable else if (stack.size == 1) @@ -332,7 +328,7 @@ case object LevelZeroTaskAssigner { Future.successful(keyValues) } else - Futures.traverseBounded(parallelism.levelZeroMergeParallelism, stack.grouped(2).toList) { + Future.traverse(stack.grouped(2).toList) { group => if (group.size == 1) Future.successful(group.head) diff --git a/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactor.scala b/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactor.scala index 267104536..1a0159173 100644 --- a/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactor.scala +++ b/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactor.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.throttle import com.typesafe.scalalogging.LazyLogging import swaydb.DefActor -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.compaction.Compactor import swaydb.core.compaction.throttle.behaviour._ import swaydb.core.file.sweeper.FileSweeper @@ -37,8 +36,7 @@ object ThrottleCompactor { def apply(context: ThrottleCompactorContext)(implicit self: DefActor[ThrottleCompactor], behaviorWakeUp: BehaviorWakeUp, fileSweeper: FileSweeper.On, - ec: ExecutionContext, - parallelism: CompactionParallelism): ThrottleCompactor = + ec: ExecutionContext): ThrottleCompactor = new ThrottleCompactor( context = context, currentFuture = Future.unit, @@ -51,8 +49,7 @@ private[core] class ThrottleCompactor private(@volatile private var context: Thr @volatile private var currentFutureExecuted: Boolean)(implicit self: DefActor[ThrottleCompactor], behaviour: BehaviorWakeUp, fileSweeper: FileSweeper.On, - executionContext: ExecutionContext, - parallelism: CompactionParallelism) extends Compactor with LazyLogging { + executionContext: ExecutionContext) extends Compactor with LazyLogging { @inline private def tailWakeUpCall(nextFuture: => Future[ThrottleCompactorContext]): Unit = //tail Future only if current future (wakeUp) was ignore else ignore. Not point tailing the same message. if (currentFutureExecuted) { diff --git a/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactorCreator.scala b/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactorCreator.scala index b9842ce23..f159bd704 100644 --- a/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactorCreator.scala +++ b/core/src/main/scala/swaydb/core/compaction/throttle/ThrottleCompactorCreator.scala @@ -58,8 +58,7 @@ private[core] object ThrottleCompactorCreator extends CompactorCreator with Lazy self = self, behaviorWakeUp = BehaviorWakeUp, fileSweeper = fileSweeper, - ec = config.compactionExecutionContext, - parallelism = config + ec = config.compactionExecutionContext ) ).onPreTerminate { case (impl, _) => diff --git a/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviorWakeUp.scala b/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviorWakeUp.scala index cf1c0bdb2..2cf05eaeb 100644 --- a/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviorWakeUp.scala +++ b/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviorWakeUp.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.throttle.behaviour import com.typesafe.scalalogging.LazyLogging import swaydb.DefActor -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.PushStrategy import swaydb.core.compaction.task.CompactionTask import swaydb.core.compaction.task.assigner.{LevelTaskAssigner, LevelZeroTaskAssigner} @@ -38,8 +37,7 @@ private[throttle] trait BehaviorWakeUp { def wakeUp(context: ThrottleCompactorContext)(implicit ec: ExecutionContext, self: DefActor[ThrottleCompactor], - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[ThrottleCompactorContext] + fileSweeper: FileSweeper.On): Future[ThrottleCompactorContext] } @@ -50,8 +48,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging def wakeUp(context: ThrottleCompactorContext)(implicit ec: ExecutionContext, self: DefActor[ThrottleCompactor], - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[ThrottleCompactorContext] = { + fileSweeper: FileSweeper.On): Future[ThrottleCompactorContext] = { logger.debug(s"\n\n\n\n\n\n${context.name}: Wakeup - Running compaction!") runWakeUp(context) @@ -96,8 +93,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging } private def runWakeUp(context: ThrottleCompactorContext)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[ThrottleCompactorContext] = + fileSweeper: FileSweeper.On): Future[ThrottleCompactorContext] = Future .unit .mapUnit { @@ -188,8 +184,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging def runCompactions(context: ThrottleCompactorContext, compactionsOrder: Slice[LevelRef], lastLevel: Level)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[ThrottleCompactorContext] = + fileSweeper: FileSweeper.On): Future[ThrottleCompactorContext] = if (context.terminateASAP()) { logger.warn(s"${context.name}: Cannot run jobs. Compaction is terminated.") Future.successful(context) @@ -252,8 +247,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging stateId: Long, lastLevel: Level, pushStrategy: PushStrategy)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[LevelState.Sleeping] = + fileSweeper: FileSweeper.On): Future[LevelState.Sleeping] = level match { case zero: LevelZero => compactLevelZero( @@ -287,8 +281,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging stateId: Long, lastLevel: Level, pushStrategy: PushStrategy)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[LevelState.Sleeping] = + fileSweeper: FileSweeper.On): Future[LevelState.Sleeping] = if (zero.isEmpty) LevelSleepStates.success( zero = zero, @@ -320,8 +313,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging stateId: Long, lastLevel: Level, pushStrategy: PushStrategy)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[LevelState.Sleeping] = + fileSweeper: FileSweeper.On): Future[LevelState.Sleeping] = if (level.isEmpty) LevelSleepStates.success( level = level, @@ -345,8 +337,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging stateId: Long, lastLevel: Level, pushStrategy: PushStrategy)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[LevelState.Sleeping] = { + fileSweeper: FileSweeper.On): Future[LevelState.Sleeping] = { val task = LevelTaskAssigner.assign( source = level, @@ -384,8 +375,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging def compactLastLevel(level: Level, stateId: Long, pushStrategy: PushStrategy)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[LevelState.Sleeping] = + fileSweeper: FileSweeper.On): Future[LevelState.Sleeping] = LevelTaskAssigner.refresh(level = level) match { case Some(task) => //ignore extendLastLevelMayBe if only refresh was executed @@ -450,8 +440,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging stateId: Long, level: Level, pushStrategy: PushStrategy)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[LevelState.Sleeping] = + fileSweeper: FileSweeper.On): Future[LevelState.Sleeping] = if (level.nextLevel.isDefined && newState.sleepDeadline.isOverdue() && LevelTaskAssigner.cleanup(level).isEmpty) { val task = LevelTaskAssigner.assign( @@ -477,8 +466,7 @@ private[throttle] object BehaviorWakeUp extends BehaviorWakeUp with LazyLogging stateId: Long, lastLevel: Level, pushStrategy: PushStrategy)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[LevelState.Sleeping] = + fileSweeper: FileSweeper.On): Future[LevelState.Sleeping] = BehaviourCompactionTask.runSegmentTask( task = task, lastLevel = lastLevel diff --git a/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask.scala b/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask.scala index c0c58e735..3658e8ba7 100644 --- a/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask.scala +++ b/core/src/main/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask.scala @@ -17,7 +17,6 @@ package swaydb.core.compaction.throttle.behaviour import com.typesafe.scalalogging.LazyLogging -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.segment.io.SegmentCompactionIO import swaydb.core.compaction.task.CompactionTask import swaydb.core.file.sweeper.{FileSweeper, FileSweeperCommand} @@ -41,8 +40,7 @@ protected object BehaviourCompactionTask extends LazyLogging { def runSegmentTask(task: CompactionTask.Segments, lastLevel: Level)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[Unit] = + fileSweeper: FileSweeper.On): Future[Unit] = task match { case task: CompactionTask.CompactSegments => compactSegments(task = task, lastLevel = lastLevel) @@ -53,8 +51,7 @@ protected object BehaviourCompactionTask extends LazyLogging { def runCleanupTask(task: CompactionTask.Cleanup, lastLevel: Level)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[Unit] = + fileSweeper: FileSweeper.On): Future[Unit] = task match { case task: CompactionTask.CollapseSegments => collapse(task = task, lastLevel = lastLevel) @@ -88,11 +85,10 @@ protected object BehaviourCompactionTask extends LazyLogging { private def runTasks[A <: Assignable.Collection](tasks: Iterable[CompactionTask.Task[A]], lastLevel: Level)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[Iterable[DefIO[Level, Iterable[DefIO[SegmentOption, Iterable[Segment]]]]]] = { + fileSweeper: FileSweeper.On): Future[Iterable[DefIO[Level, Iterable[DefIO[SegmentOption, Iterable[Segment]]]]]] = { implicit val compactionIO: SegmentCompactionIO.Actor = SegmentCompactionIO.create() - Futures.traverseBounded(parallelism.multiLevelTaskParallelism, tasks) { + Future.traverse(tasks) { task => val removeDeletedRecords = task.target.levelNumber == lastLevel.levelNumber @@ -120,8 +116,7 @@ protected object BehaviourCompactionTask extends LazyLogging { def compactSegments(task: CompactionTask.CompactSegments, lastLevel: Level)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[Unit] = + fileSweeper: FileSweeper.On): Future[Unit] = if (task.tasks.isEmpty) Future.unit else @@ -141,8 +136,7 @@ protected object BehaviourCompactionTask extends LazyLogging { def compactLogs(task: CompactionTask.CompactLogs, lastLevel: Level)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[Unit] = + fileSweeper: FileSweeper.On): Future[Unit] = if (task.logs.isEmpty) Future.unit else @@ -162,8 +156,7 @@ protected object BehaviourCompactionTask extends LazyLogging { def collapse(task: CompactionTask.CollapseSegments, lastLevel: Level)(implicit ec: ExecutionContext, - fileSweeper: FileSweeper.On, - parallelism: CompactionParallelism): Future[Unit] = + fileSweeper: FileSweeper.On): Future[Unit] = if (task.segments.isEmpty) Future.unit else @@ -192,8 +185,7 @@ protected object BehaviourCompactionTask extends LazyLogging { def refresh(task: CompactionTask.RefreshSegments, lastLevel: Level)(implicit fileSweeper: FileSweeper.On, - ec: ExecutionContext, - parallelism: CompactionParallelism): Future[Unit] = + ec: ExecutionContext): Future[Unit] = if (task.segments.isEmpty) Future.unit else diff --git a/core/src/main/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferCleaner.scala b/core/src/main/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferCleaner.scala index fca1ccb5e..827bdab9b 100644 --- a/core/src/main/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferCleaner.scala +++ b/core/src/main/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferCleaner.scala @@ -27,7 +27,7 @@ import java.nio.file.Path import java.nio.{ByteBuffer, MappedByteBuffer} import java.util.concurrent.atomic.AtomicBoolean -private[core] case object ByteBufferCleaner extends LazyLogging { +private[file] case object ByteBufferCleaner extends LazyLogging { object Cleaner { def apply(handle: MethodHandle): Cleaner = diff --git a/core/src/main/scala/swaydb/core/level/Level.scala b/core/src/main/scala/swaydb/core/level/Level.scala index b160790b6..11255d1d0 100644 --- a/core/src/main/scala/swaydb/core/level/Level.scala +++ b/core/src/main/scala/swaydb/core/level/Level.scala @@ -19,7 +19,6 @@ package swaydb.core.level import com.typesafe.scalalogging.LazyLogging import swaydb.Bag.Implicits._ import swaydb.Error.Level.ExceptionHandler -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.{LevelMeter, LevelThrottle} import swaydb.config.storage.LevelStorage import swaydb.core.segment.io.SegmentCompactionIO @@ -50,11 +49,11 @@ import swaydb.core.segment.ref.search.ThreadReadState import swaydb.core.util.Exceptions._ import swaydb.core.util._ import swaydb.effect.Effect._ -import swaydb.effect.{Dir, Effect, Extension, FileLocker} +import swaydb.effect.{Dir, Effect, FileLocker} import swaydb.slice.SliceIOImplicits._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{Slice, SliceOption} -import swaydb.utils.{Aggregator, Futures} +import swaydb.utils.{Aggregator, Extension, Futures, IDGenerator} import swaydb.{Bag, Error, IO} import java.nio.channels.FileChannel @@ -418,10 +417,9 @@ private[core] case class Level(dirs: Seq[Dir], } def refresh(segments: Iterable[Segment], - removeDeletedRecords: Boolean)(implicit ec: ExecutionContext, - parallelism: CompactionParallelism): Future[Iterable[DefIO[Segment, Slice[TransientSegment]]]] = { + removeDeletedRecords: Boolean)(implicit ec: ExecutionContext): Future[Iterable[DefIO[Segment, Slice[TransientSegment]]]] = { logger.debug("{}: Running refresh.", pathDistributor.head) - Futures.traverseBounded(parallelism.levelSegmentAssignmentParallelism, segments) { + Future.traverse(segments) { case segment: MemorySegment => Future { segment.refresh( @@ -450,8 +448,7 @@ private[core] case class Level(dirs: Seq[Dir], */ def collapse(segments: Iterable[Segment], removeDeletedRecords: Boolean)(implicit ec: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - parallelism: CompactionParallelism): Future[LevelCollapseResult] = { + compactionIO: SegmentCompactionIO.Actor): Future[LevelCollapseResult] = { logger.trace(s"{}: Collapsing '{}' segments", pathDistributor.head, segments.size) if (segments.isEmpty || appendix.cache.size == 1) //if there is only one Segment in this Level which is a small segment. No collapse required Future.successful(LevelCollapseResult.Empty) @@ -573,8 +570,7 @@ private[core] case class Level(dirs: Seq[Dir], def merge(assigment: DefIO[Iterable[Assignable], Iterable[Assignment[Iterable[Assignable.Gap[MergeStats.Segment[Memory, ListBuffer]]], ListBuffer[Assignable], Segment]]], removeDeletedRecords: Boolean)(implicit ec: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - parallelism: CompactionParallelism): Future[Iterable[DefIO[SegmentOption, Iterable[Segment]]]] = { + compactionIO: SegmentCompactionIO.Actor): Future[Iterable[DefIO[SegmentOption, Iterable[Segment]]]] = { logger.trace(s"{}: Merging {} KeyValues.", pathDistributor.head, assigment.input.size) if (inMemory) mergeMemory( @@ -634,8 +630,7 @@ private[core] case class Level(dirs: Seq[Dir], @inline private def mergeMemory(newKeyValues: Iterable[Assignable], removeDeletedRecords: Boolean, - assignments: Iterable[Assignment[Iterable[Assignable.Gap[Memory.Builder[Memory, ListBuffer]]], ListBuffer[Assignable], Segment]])(implicit ec: ExecutionContext, - parallelism: CompactionParallelism): Future[Iterable[DefIO[SegmentOption, Iterable[MemorySegment]]]] = + assignments: Iterable[Assignment[Iterable[Assignable.Gap[Memory.Builder[Memory, ListBuffer]]], ListBuffer[Assignable], Segment]])(implicit ec: ExecutionContext): Future[Iterable[DefIO[SegmentOption, Iterable[MemorySegment]]]] = if (assignments.isEmpty) { //if there were not assignments then write new key-values are gap and run Defrag to avoid creating small Segments. val gap = @@ -656,7 +651,7 @@ private[core] case class Level(dirs: Seq[Dir], ).map(Seq(_)) } else { //Assignment successful. Defer merge to target Segments. - Futures.traverseBounded(parallelism.levelSegmentAssignmentParallelism, assignments) { + Future.traverse(assignments) { assignment => assignment.segment.asInstanceOf[MemorySegment].put( //if noGaps == true then headGap and tailGap will be null. Perform null check @@ -679,8 +674,7 @@ private[core] case class Level(dirs: Seq[Dir], @inline private def mergePersistent(newKeyValues: Iterable[Assignable], removeDeletedRecords: Boolean, assignments: Iterable[Assignment[Iterable[Assignable.Gap[Persistent.Builder[Memory, ListBuffer]]], ListBuffer[Assignable], Segment]])(implicit ec: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - parallelism: CompactionParallelism): Future[Iterable[DefIO[SegmentOption, Iterable[PersistentSegment]]]] = + compactionIO: SegmentCompactionIO.Actor): Future[Iterable[DefIO[SegmentOption, Iterable[PersistentSegment]]]] = if (assignments.isEmpty) { //if there were not assignments then write new key-values are gap and run Defrag to avoid creating small Segments. val gap = @@ -708,7 +702,7 @@ private[core] case class Level(dirs: Seq[Dir], ).map(Seq(_)) } else { //Assignment successful. Defer merge to target Segments. - Futures.traverseBounded(parallelism.levelSegmentAssignmentParallelism, assignments) { + Future.traverse(assignments) { assignment => assignment.segment.asInstanceOf[PersistentSegment].put( //if noGaps == true then headGap and tailGap will be null. Perform null check diff --git a/core/src/main/scala/swaydb/core/level/NextLevel.scala b/core/src/main/scala/swaydb/core/level/NextLevel.scala index 70f27f898..9d2f5beb1 100644 --- a/core/src/main/scala/swaydb/core/level/NextLevel.scala +++ b/core/src/main/scala/swaydb/core/level/NextLevel.scala @@ -16,7 +16,6 @@ package swaydb.core.level -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.{LevelMeter, LevelThrottle} import swaydb.core.level.zero.LevelZero.LevelZeroLog import swaydb.core.segment.assigner.{Assignable, Assignment} @@ -91,17 +90,14 @@ trait NextLevel extends LevelRef { def merge(assigment: DefIO[Iterable[Assignable], Iterable[Assignment[Iterable[Assignable.Gap[MergeStats.Segment[Memory, ListBuffer]]], ListBuffer[Assignable], Segment]]], removeDeletedRecords: Boolean)(implicit ec: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - parallelism: CompactionParallelism): Future[Iterable[DefIO[SegmentOption, Iterable[Segment]]]] + compactionIO: SegmentCompactionIO.Actor): Future[Iterable[DefIO[SegmentOption, Iterable[Segment]]]] def refresh(segment: Iterable[Segment], - removeDeletedRecords: Boolean)(implicit ec: ExecutionContext, - parallelism: CompactionParallelism): Future[Iterable[DefIO[Segment, Slice[TransientSegment]]]] + removeDeletedRecords: Boolean)(implicit ec: ExecutionContext): Future[Iterable[DefIO[Segment, Slice[TransientSegment]]]] def collapse(segments: Iterable[Segment], removeDeletedRecords: Boolean)(implicit ec: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - parallelism: CompactionParallelism): Future[LevelCollapseResult] + compactionIO: SegmentCompactionIO.Actor): Future[LevelCollapseResult] def commit(mergeResult: DefIO[SegmentOption, Iterable[TransientSegment]]): IO[Error.Level, Unit] diff --git a/core/src/main/scala/swaydb/core/log/Log.scala b/core/src/main/scala/swaydb/core/log/Log.scala index 7368ce360..840ffe488 100644 --- a/core/src/main/scala/swaydb/core/log/Log.scala +++ b/core/src/main/scala/swaydb/core/log/Log.scala @@ -23,7 +23,7 @@ import swaydb.core.file.ForceSaveApplier import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.file.sweeper.FileSweeper import swaydb.core.log.serialiser.{LogEntryReader, LogEntryWriter} -import swaydb.core.util.IDGenerator +import swaydb.utils.IDGenerator import swaydb.slice.order.KeyOrder import swaydb.utils.StorageUnits._ diff --git a/core/src/main/scala/swaydb/core/log/PersistentLog.scala b/core/src/main/scala/swaydb/core/log/PersistentLog.scala index 1a2a4e20b..5d9105a9e 100644 --- a/core/src/main/scala/swaydb/core/log/PersistentLog.scala +++ b/core/src/main/scala/swaydb/core/log/PersistentLog.scala @@ -26,10 +26,11 @@ import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperAc import swaydb.core.file.{DBFile, ForceSaveApplier} import swaydb.core.log.serialiser.{LogEntryReader, LogEntrySerialiser, LogEntryWriter} import swaydb.effect.Effect._ -import swaydb.effect.{Effect, Extension, IOStrategy} +import swaydb.effect.{Effect, IOStrategy} import swaydb.slice.Slice import swaydb.slice.SliceIOImplicits._ import swaydb.slice.order.KeyOrder +import swaydb.utils.Extension import java.nio.file.Path import scala.annotation.tailrec diff --git a/core/src/main/scala/swaydb/core/segment/MemorySegment.scala b/core/src/main/scala/swaydb/core/segment/MemorySegment.scala index 239c6610b..73d3909dd 100644 --- a/core/src/main/scala/swaydb/core/segment/MemorySegment.scala +++ b/core/src/main/scala/swaydb/core/segment/MemorySegment.scala @@ -17,9 +17,7 @@ package swaydb.core.segment import com.typesafe.scalalogging.LazyLogging -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.file.sweeper.{FileSweeper, FileSweeperCommand} -import swaydb.core.segment.PathsDistributor import swaydb.core.segment.assigner.Assignable import swaydb.core.segment.block.segment.SegmentBlockConfig import swaydb.core.segment.data._ @@ -30,6 +28,7 @@ import swaydb.core.skiplist.SkipListTreeMap import swaydb.core.util._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{MaxKey, Slice, SliceOption} +import swaydb.utils.IDGenerator import java.nio.file.Path import scala.collection.mutable.ListBuffer @@ -79,8 +78,7 @@ private[core] final case class MemorySegment(path: Path, removeDeletes: Boolean, createdInLevel: Int, segmentConfig: SegmentBlockConfig)(implicit idGenerator: IDGenerator, - executionContext: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[DefIO[MemorySegmentOption, Iterable[MemorySegment]]] = + executionContext: ExecutionContext): Future[DefIO[MemorySegmentOption, Iterable[MemorySegment]]] = if (deleted) Future.failed(swaydb.Exception.NoSuchFile(path)) else { diff --git a/core/src/main/scala/swaydb/core/segment/PersistentSegment.scala b/core/src/main/scala/swaydb/core/segment/PersistentSegment.scala index b486dae2e..99d603a26 100644 --- a/core/src/main/scala/swaydb/core/segment/PersistentSegment.scala +++ b/core/src/main/scala/swaydb/core/segment/PersistentSegment.scala @@ -16,11 +16,8 @@ package swaydb.core.segment -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.{MMAP, SegmentRefCacheLife} -import swaydb.core.segment.io.SegmentCompactionIO import swaydb.core.file.DBFile -import swaydb.core.segment.PathsDistributor import swaydb.core.segment.assigner.Assignable import swaydb.core.segment.block.binarysearch.BinarySearchIndexBlockConfig import swaydb.core.segment.block.bloomfilter.BloomFilterBlockConfig @@ -31,8 +28,10 @@ import swaydb.core.segment.block.sortedindex.SortedIndexBlockConfig import swaydb.core.segment.block.values.ValuesBlockConfig import swaydb.core.segment.data.Memory import swaydb.core.segment.data.merge.stats.MergeStats -import swaydb.core.util.{DefIO, IDGenerator} +import swaydb.core.segment.io.SegmentCompactionIO +import swaydb.core.util.DefIO import swaydb.slice.Slice +import swaydb.utils.IDGenerator import java.nio.file.Path import scala.collection.mutable.ListBuffer @@ -71,8 +70,7 @@ trait PersistentSegment extends Segment with PersistentSegmentOption { segmentRefCacheLife: SegmentRefCacheLife, mmap: MMAP.Segment)(implicit idGenerator: IDGenerator, executionContext: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - compactionParallelism: CompactionParallelism): Future[DefIO[PersistentSegmentOption, Iterable[PersistentSegment]]] + compactionIO: SegmentCompactionIO.Actor): Future[DefIO[PersistentSegmentOption, Iterable[PersistentSegment]]] def refresh(removeDeletes: Boolean, createdInLevel: Int, @@ -82,8 +80,7 @@ trait PersistentSegment extends Segment with PersistentSegmentOption { hashIndexConfig: HashIndexBlockConfig, bloomFilterConfig: BloomFilterBlockConfig, segmentConfig: SegmentBlockConfig)(implicit idGenerator: IDGenerator, - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[DefIO[PersistentSegment, Slice[TransientSegment.OneOrRemoteRefOrMany]]] + ec: ExecutionContext): Future[DefIO[PersistentSegment, Slice[TransientSegment.OneOrRemoteRefOrMany]]] } diff --git a/core/src/main/scala/swaydb/core/segment/PersistentSegmentMany.scala b/core/src/main/scala/swaydb/core/segment/PersistentSegmentMany.scala index 6af79aa1e..f01f9a468 100644 --- a/core/src/main/scala/swaydb/core/segment/PersistentSegmentMany.scala +++ b/core/src/main/scala/swaydb/core/segment/PersistentSegmentMany.scala @@ -19,7 +19,6 @@ package swaydb.core.segment import com.typesafe.scalalogging.LazyLogging import swaydb.Error.Segment.ExceptionHandler import swaydb.IO -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.{MMAP, SegmentRefCacheLife} import swaydb.core.cache.{Cache, CacheNoIO} import swaydb.core.segment.io.SegmentCompactionIO @@ -47,9 +46,10 @@ import swaydb.core.segment.ref.search.ThreadReadState import swaydb.core.segment.ref.{SegmentRef, SegmentRefOption, SegmentRefReader} import swaydb.core.skiplist.SkipListTreeMap import swaydb.core.util._ -import swaydb.effect.{Effect, Extension} +import swaydb.effect.Effect import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{MaxKey, Slice, SliceOption} +import swaydb.utils.{Extension, IDGenerator} import java.nio.file.Path import java.util.concurrent.ConcurrentSkipListMap @@ -840,8 +840,7 @@ protected case class PersistentSegmentMany(file: DBFile, segmentRefCacheLife: SegmentRefCacheLife, mmap: MMAP.Segment)(implicit idGenerator: IDGenerator, executionContext: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - compactionParallelism: CompactionParallelism): Future[DefIO[PersistentSegmentOption, Iterable[PersistentSegment]]] = { + compactionIO: SegmentCompactionIO.Actor): Future[DefIO[PersistentSegmentOption, Iterable[PersistentSegment]]] = { implicit val valuesConfigImplicit: ValuesBlockConfig = valuesConfig implicit val sortedIndexConfigImplicit: SortedIndexBlockConfig = sortedIndexConfig implicit val binarySearchIndexConfigImplicit: BinarySearchIndexBlockConfig = binarySearchIndexConfig @@ -870,8 +869,7 @@ protected case class PersistentSegmentMany(file: DBFile, hashIndexConfig: HashIndexBlockConfig, bloomFilterConfig: BloomFilterBlockConfig, segmentConfig: SegmentBlockConfig)(implicit idGenerator: IDGenerator, - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[DefIO[PersistentSegmentMany, Slice[TransientSegment.OneOrRemoteRefOrMany]]] = + ec: ExecutionContext): Future[DefIO[PersistentSegmentMany, Slice[TransientSegment.OneOrRemoteRefOrMany]]] = Segment.refreshForNewLevel( keyValues = iterator(segmentConfig.initialiseIteratorsInOneSeek), removeDeletes = removeDeletes, diff --git a/core/src/main/scala/swaydb/core/segment/PersistentSegmentOne.scala b/core/src/main/scala/swaydb/core/segment/PersistentSegmentOne.scala index 7eb89000c..237c3e24e 100644 --- a/core/src/main/scala/swaydb/core/segment/PersistentSegmentOne.scala +++ b/core/src/main/scala/swaydb/core/segment/PersistentSegmentOne.scala @@ -19,7 +19,6 @@ package swaydb.core.segment import com.typesafe.scalalogging.LazyLogging import swaydb.Error.Segment.ExceptionHandler import swaydb.IO -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.{MMAP, SegmentRefCacheLife} import swaydb.core.segment.io.SegmentCompactionIO import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor @@ -47,6 +46,7 @@ import swaydb.core.segment.ref.search.ThreadReadState import swaydb.core.util._ import swaydb.slice.{MaxKey, Slice} import swaydb.slice.order.{KeyOrder, TimeOrder} +import swaydb.utils.IDGenerator import java.nio.file.{Path, Paths} import scala.collection.mutable.ListBuffer @@ -320,8 +320,7 @@ protected case class PersistentSegmentOne(file: DBFile, segmentRefCacheLife: SegmentRefCacheLife, mmap: MMAP.Segment)(implicit idGenerator: IDGenerator, executionContext: ExecutionContext, - compactionIO: SegmentCompactionIO.Actor, - compactionParallelism: CompactionParallelism): Future[DefIO[PersistentSegmentOption, Iterable[PersistentSegment]]] = { + compactionIO: SegmentCompactionIO.Actor): Future[DefIO[PersistentSegmentOption, Iterable[PersistentSegment]]] = { implicit val valuesConfigImplicit: ValuesBlockConfig = valuesConfig implicit val sortedIndexConfigImplicit: SortedIndexBlockConfig = sortedIndexConfig implicit val binarySearchIndexConfigImplicit: BinarySearchIndexBlockConfig = binarySearchIndexConfig @@ -351,8 +350,7 @@ protected case class PersistentSegmentOne(file: DBFile, hashIndexConfig: HashIndexBlockConfig, bloomFilterConfig: BloomFilterBlockConfig, segmentConfig: SegmentBlockConfig)(implicit idGenerator: IDGenerator, - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[DefIO[PersistentSegment, Slice[TransientSegment.OneOrRemoteRefOrMany]]] = { + ec: ExecutionContext): Future[DefIO[PersistentSegment, Slice[TransientSegment.OneOrRemoteRefOrMany]]] = { // val footer = ref.getFooter() //if it's created in the same level the required spaces for sortedIndex and values //will be the same as existing or less than the current sizes so there is no need to create a diff --git a/core/src/main/scala/swaydb/core/segment/Segment.scala b/core/src/main/scala/swaydb/core/segment/Segment.scala index a6901e383..31d21a02f 100644 --- a/core/src/main/scala/swaydb/core/segment/Segment.scala +++ b/core/src/main/scala/swaydb/core/segment/Segment.scala @@ -18,12 +18,10 @@ package swaydb.core.segment import com.typesafe.scalalogging.LazyLogging import swaydb.Error.Segment.ExceptionHandler -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.{MMAP, SegmentRefCacheLife} import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.file.sweeper.{FileSweeper, FileSweeperItem} import swaydb.core.file.{DBFile, ForceSaveApplier} -import swaydb.core.segment.PathsDistributor import swaydb.core.segment.assigner.{Assignable, Assigner} import swaydb.core.segment.block.BlockCompressionInfo import swaydb.core.segment.block.binarysearch.BinarySearchIndexBlockConfig @@ -48,7 +46,7 @@ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{MaxKey, Slice, SliceOption} import swaydb.utils.Collections._ import swaydb.utils.Futures.FutureUnitImplicits -import swaydb.utils.{Aggregator, FiniteDurations, SomeOrNone} +import swaydb.utils.{Aggregator, FiniteDurations, IDGenerator, SomeOrNone} import java.nio.file.Path import scala.annotation.tailrec @@ -226,8 +224,7 @@ private[core] case object Segment extends LazyLogging { segmentIO: SegmentReadIO, idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Iterable[PersistentSegment]] = + ec: ExecutionContext): Future[Iterable[PersistentSegment]] = SegmentBlock.writeOneOrMany( mergeStats = mergeStats, createdInLevel = createdInLevel, @@ -266,8 +263,7 @@ private[core] case object Segment extends LazyLogging { segmentIO: SegmentReadIO, idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Iterable[PersistentSegment]] = + ec: ExecutionContext): Future[Iterable[PersistentSegment]] = segment match { case segment: PersistentSegment => Future { @@ -364,8 +360,7 @@ private[core] case object Segment extends LazyLogging { segmentIO: SegmentReadIO, idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Iterable[PersistentSegment]] = { + ec: ExecutionContext): Future[Iterable[PersistentSegment]] = { val builder = if (removeDeletes) MergeStats.persistent[Memory, ListBuffer](Aggregator.listBuffer)(KeyValueGrouper.toLastLevelOrNull) @@ -454,8 +449,7 @@ private[core] case object Segment extends LazyLogging { hashIndexConfig: HashIndexBlockConfig, bloomFilterConfig: BloomFilterBlockConfig, segmentConfig: SegmentBlockConfig)(implicit keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = { + ec: ExecutionContext): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = { val sortedIndexSize = sortedIndexBlock.compressionInfo match { @@ -510,8 +504,7 @@ private[core] case object Segment extends LazyLogging { hashIndexConfig: HashIndexBlockConfig, bloomFilterConfig: BloomFilterBlockConfig, segmentConfig: SegmentBlockConfig)(implicit keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = + ec: ExecutionContext): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = Future .unit .mapUnit { diff --git a/core/src/main/scala/swaydb/core/segment/SegmentSerialiser.scala b/core/src/main/scala/swaydb/core/segment/SegmentSerialiser.scala index 36b801345..5fea276a9 100644 --- a/core/src/main/scala/swaydb/core/segment/SegmentSerialiser.scala +++ b/core/src/main/scala/swaydb/core/segment/SegmentSerialiser.scala @@ -24,10 +24,10 @@ import swaydb.core.log.serialiser.ValueSerialiser.MinMaxSerialiser import swaydb.core.segment.cache.sweeper.MemorySweeper import swaydb.core.segment.io.SegmentReadIO import swaydb.core.util.Bytes -import swaydb.effect.{Effect, Extension} +import swaydb.effect.Effect import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{MaxKey, ReaderBase, Slice, SliceMut} -import swaydb.utils.ByteSizeOf +import swaydb.utils.{ByteSizeOf, Extension} import swaydb.utils.Options.OptionsImplicits import java.nio.charset.StandardCharsets diff --git a/core/src/main/scala/swaydb/core/segment/block/segment/SegmentBlock.scala b/core/src/main/scala/swaydb/core/segment/block/segment/SegmentBlock.scala index ab96c1771..0997504d4 100644 --- a/core/src/main/scala/swaydb/core/segment/block/segment/SegmentBlock.scala +++ b/core/src/main/scala/swaydb/core/segment/block/segment/SegmentBlock.scala @@ -18,7 +18,6 @@ package swaydb.core.segment.block.segment import com.typesafe.scalalogging.LazyLogging import swaydb.config._ -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.segment.block._ import swaydb.core.segment.block.binarysearch.{BinarySearchIndexBlock, BinarySearchIndexBlockConfig, BinarySearchIndexBlockState} import swaydb.core.segment.block.bloomfilter.{BloomFilterBlock, BloomFilterBlockConfig} @@ -63,8 +62,7 @@ private[core] case object SegmentBlock extends LazyLogging { sortedIndexConfig: SortedIndexBlockConfig, valuesConfig: ValuesBlockConfig, segmentConfig: SegmentBlockConfig)(implicit keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = + ec: ExecutionContext): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = if (mergeStats.isEmpty) Future.successful(Slice.empty) else @@ -97,8 +95,7 @@ private[core] case object SegmentBlock extends LazyLogging { binarySearchIndexConfig: BinarySearchIndexBlockConfig, valuesConfig: ValuesBlockConfig, segmentConfig: SegmentBlockConfig)(implicit keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = + ec: ExecutionContext): Future[Slice[TransientSegment.OneOrRemoteRefOrMany]] = if (ones.isEmpty) Future.successful(Slice.empty) else @@ -147,8 +144,7 @@ private[core] case object SegmentBlock extends LazyLogging { binarySearchIndexConfig: BinarySearchIndexBlockConfig, valuesConfig: ValuesBlockConfig, segmentConfig: SegmentBlockConfig)(implicit keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[TransientSegment.OneOrRemoteRefOrMany] = + ec: ExecutionContext): Future[TransientSegment.OneOrRemoteRefOrMany] = if (segments.size == 1) Future.successful(segments.head.copyWithFileHeader(headerBytes = PersistentSegmentOne.formatIdSlice)) else @@ -223,8 +219,7 @@ private[core] case object SegmentBlock extends LazyLogging { sortedIndexConfig: SortedIndexBlockConfig, valuesConfig: ValuesBlockConfig, segmentConfig: SegmentBlockConfig)(implicit keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism): Future[Slice[TransientSegment.One]] = + ec: ExecutionContext): Future[Slice[TransientSegment.One]] = if (mergeStats.isEmpty) Future.successful(Slice.empty) else diff --git a/core/src/main/scala/swaydb/core/segment/defrag/DefragMemorySegment.scala b/core/src/main/scala/swaydb/core/segment/defrag/DefragMemorySegment.scala index 0c20aaa03..649784f92 100644 --- a/core/src/main/scala/swaydb/core/segment/defrag/DefragMemorySegment.scala +++ b/core/src/main/scala/swaydb/core/segment/defrag/DefragMemorySegment.scala @@ -16,19 +16,17 @@ package swaydb.core.segment.defrag -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.file.sweeper.FileSweeper -import swaydb.core.segment.PathsDistributor import swaydb.core.segment._ import swaydb.core.segment.assigner.Assignable import swaydb.core.segment.block.segment.SegmentBlockConfig import swaydb.core.segment.block.segment.transient.TransientSegment import swaydb.core.segment.data.Memory import swaydb.core.segment.data.merge.stats.MergeStats -import swaydb.core.util.{DefIO, IDGenerator} +import swaydb.core.util.DefIO import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} -import swaydb.utils.Futures +import swaydb.utils.IDGenerator import scala.collection.mutable.ListBuffer import scala.concurrent.{ExecutionContext, Future} @@ -52,8 +50,7 @@ object DefragMemorySegment { defragSource: DefragSource[SEG], segmentConfig: SegmentBlockConfig, fileSweeper: FileSweeper, - idGenerator: IDGenerator, - compactionParallelism: CompactionParallelism): Future[DefIO[NULL_SEG, Iterable[MemorySegment]]] = + idGenerator: IDGenerator): Future[DefIO[NULL_SEG, Iterable[MemorySegment]]] = Future { Defrag.runOnSegment( segment = segment, @@ -94,8 +91,7 @@ object DefragMemorySegment { defragSource: DefragSource[SEG], segmentConfig: SegmentBlockConfig, fileSweeper: FileSweeper, - idGenerator: IDGenerator, - compactionParallelism: CompactionParallelism): Future[DefIO[NULL_SEG, Iterable[MemorySegment]]] = + idGenerator: IDGenerator): Future[DefIO[NULL_SEG, Iterable[MemorySegment]]] = Defrag.runOnGaps( fragments = ListBuffer.empty[TransientSegment.Fragment[MergeStats.Memory.Builder[Memory, ListBuffer]]], headGap = headGap, @@ -137,9 +133,8 @@ object DefragMemorySegment { functionStore: FunctionStore, segmentConfig: SegmentBlockConfig, fileSweeper: FileSweeper, - idGenerator: IDGenerator, - compactionParallelism: CompactionParallelism): Future[ListBuffer[Slice[MemorySegment]]] = - Futures.traverseBounded(compactionParallelism.defragmentedSegmentParallelism, mergeResult) { + idGenerator: IDGenerator): Future[ListBuffer[Slice[MemorySegment]]] = + Future.traverse(mergeResult) { case remote: TransientSegment.Remote => Future { remote match { diff --git a/core/src/main/scala/swaydb/core/segment/defrag/DefragPersistentSegment.scala b/core/src/main/scala/swaydb/core/segment/defrag/DefragPersistentSegment.scala index fb324ba26..a5dd715dd 100644 --- a/core/src/main/scala/swaydb/core/segment/defrag/DefragPersistentSegment.scala +++ b/core/src/main/scala/swaydb/core/segment/defrag/DefragPersistentSegment.scala @@ -16,13 +16,10 @@ package swaydb.core.segment.defrag -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.{MMAP, SegmentRefCacheLife} -import swaydb.core.segment.io.SegmentCompactionIO import swaydb.core.file.ForceSaveApplier -import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.file.sweeper.FileSweeper -import swaydb.core.segment.PathsDistributor +import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.segment._ import swaydb.core.segment.assigner._ import swaydb.core.segment.block.binarysearch.BinarySearchIndexBlockConfig @@ -36,13 +33,13 @@ import swaydb.core.segment.cache.sweeper.MemorySweeper import swaydb.core.segment.data.Memory import swaydb.core.segment.data.merge.stats.MergeStats import swaydb.core.segment.defrag.DefragSource._ -import swaydb.core.segment.io.{SegmentReadIO, SegmentWriteIO} +import swaydb.core.segment.io.{SegmentCompactionIO, SegmentReadIO, SegmentWriteIO} import swaydb.core.segment.ref.{SegmentRef, SegmentRefOption} -import swaydb.core.util.{DefIO, IDGenerator} +import swaydb.core.util.DefIO import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.utils.Futures.FutureUnitImplicits -import swaydb.utils.{Aggregator, Futures} +import swaydb.utils.{Aggregator, Futures, IDGenerator} import scala.collection.mutable import scala.collection.mutable.ListBuffer @@ -88,8 +85,7 @@ object DefragPersistentSegment { idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, compactionIO: SegmentCompactionIO.Actor, - segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment], - compactionParallelism: CompactionParallelism): Future[DefIO[NULL_SEG, scala.collection.SortedSet[PersistentSegment]]] = + segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment]): Future[DefIO[NULL_SEG, scala.collection.SortedSet[PersistentSegment]]] = Future { Defrag.runOnSegment( segment = segment, @@ -144,8 +140,7 @@ object DefragPersistentSegment { idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, compactionIO: SegmentCompactionIO.Actor, - segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment], - compactionParallelism: CompactionParallelism): Future[DefIO[NULL_SEG, scala.collection.SortedSet[PersistentSegment]]] = + segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment]): Future[DefIO[NULL_SEG, scala.collection.SortedSet[PersistentSegment]]] = Defrag.runOnGaps( fragments = ListBuffer.empty[TransientSegment.Fragment[MergeStats.Persistent.Builder[Memory, ListBuffer]]], headGap = headGap, @@ -203,8 +198,7 @@ object DefragPersistentSegment { idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, compactionIO: SegmentCompactionIO.Actor, - segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment], - compactionParallelism: CompactionParallelism): Future[DefIO[PersistentSegmentOption, scala.collection.SortedSet[PersistentSegment]]] = + segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment]): Future[DefIO[PersistentSegmentOption, scala.collection.SortedSet[PersistentSegment]]] = if (newKeyValues.isEmpty) DefragPersistentSegment.runOnGaps[PersistentSegmentMany, PersistentSegmentOption]( nullSegment = PersistentSegment.Null, @@ -326,9 +320,8 @@ object DefragPersistentSegment { functionStore: FunctionStore, executionContext: ExecutionContext, sortedIndexConfig: SortedIndexBlockConfig, - segmentConfig: SegmentBlockConfig, - compactionParallelism: CompactionParallelism): Future[ListBuffer[TransientSegment.Fragment[MergeStats.Persistent.Builder[Memory, ListBuffer]]]] = - Futures.traverseBounded(compactionParallelism.groupedSegmentDefragParallelism, headFragmentsAndAssignments.assignments) { + segmentConfig: SegmentBlockConfig): Future[ListBuffer[TransientSegment.Fragment[MergeStats.Persistent.Builder[Memory, ListBuffer]]]] = + Future.traverse(headFragmentsAndAssignments.assignments) { assignment => //Segments that did not get assign a key-value should be converted to Fragment straight away. //but if the segment is required for cleanup feed it to defrag so that expired key-values get cleared. @@ -448,8 +441,7 @@ object DefragPersistentSegment { idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, compactionIO: SegmentCompactionIO.Actor, - segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment], - compactionParallelism: CompactionParallelism): Future[scala.collection.SortedSet[PersistentSegment]] = { + segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment]): Future[scala.collection.SortedSet[PersistentSegment]] = { val groups = ListBuffer.empty[ListBuffer[TransientSegment.RemoteRefOrStats[MergeStats.Persistent.Builder[Memory, ListBuffer]]]] val remoteSegments = ListBuffer.empty[TransientSegment.RemotePersistentSegment] @@ -497,7 +489,7 @@ object DefragPersistentSegment { if (groups.isEmpty) Future.successful(buffer) else - Futures.traverseBounded(compactionParallelism.defragmentedSegmentParallelism, groups) { + Future.traverse(groups) { group => commitGroup( group = group, @@ -559,12 +551,11 @@ object DefragPersistentSegment { idGenerator: IDGenerator, forceSaveApplier: ForceSaveApplier, compactionIO: SegmentCompactionIO.Actor, - segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment], - compactionParallelism: CompactionParallelism): Future[Iterable[PersistentSegment]] = + segmentWriteIO: SegmentWriteIO[TransientSegment.Persistent, PersistentSegment]): Future[Iterable[PersistentSegment]] = if (group.isEmpty) Futures.emptyIterable else - Futures.traverseBounded(compactionParallelism.defragmentedSegmentParallelism, group) { + Future.traverse(group) { case ref: TransientSegment.RemoteRef => Future.successful(Slice(ref)) diff --git a/core/src/main/scala/swaydb/core/segment/io/SegmentCompactionIO.scala b/core/src/main/scala/swaydb/core/segment/io/SegmentCompactionIO.scala index e13cdb59d..16eccd4ad 100644 --- a/core/src/main/scala/swaydb/core/segment/io/SegmentCompactionIO.scala +++ b/core/src/main/scala/swaydb/core/segment/io/SegmentCompactionIO.scala @@ -24,7 +24,7 @@ import swaydb.core.segment.block.segment.transient.TransientSegment import swaydb.core.segment.cache.sweeper.MemorySweeper import swaydb.core.segment.data.KeyValue import swaydb.core.segment.{FunctionStore, PathsDistributor, Segment} -import swaydb.core.util.IDGenerator +import swaydb.utils.IDGenerator import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.{Actor, DefActor} diff --git a/core/src/main/scala/swaydb/core/segment/io/SegmentWriteIO.scala b/core/src/main/scala/swaydb/core/segment/io/SegmentWriteIO.scala index 19bc5ccbe..0107fdc69 100644 --- a/core/src/main/scala/swaydb/core/segment/io/SegmentWriteIO.scala +++ b/core/src/main/scala/swaydb/core/segment/io/SegmentWriteIO.scala @@ -18,15 +18,15 @@ package swaydb.core.segment.io import swaydb.config.{MMAP, SegmentRefCacheLife} import swaydb.core.file.ForceSaveApplier -import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.file.sweeper.FileSweeper -import swaydb.core.segment.PathsDistributor +import swaydb.core.file.sweeper.bytebuffer.ByteBufferSweeper.ByteBufferSweeperActor import swaydb.core.segment._ import swaydb.core.segment.block.segment.transient.TransientSegment import swaydb.core.segment.cache.sweeper.MemorySweeper -import swaydb.core.util.{DefIO, IDGenerator} +import swaydb.core.util.DefIO import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} +import swaydb.utils.IDGenerator import swaydb.{Error, IO} /** diff --git a/core/src/main/scala/swaydb/core/segment/io/SegmentWriteMemoryIO.scala b/core/src/main/scala/swaydb/core/segment/io/SegmentWriteMemoryIO.scala index d3c4fb275..782267abc 100644 --- a/core/src/main/scala/swaydb/core/segment/io/SegmentWriteMemoryIO.scala +++ b/core/src/main/scala/swaydb/core/segment/io/SegmentWriteMemoryIO.scala @@ -25,9 +25,10 @@ import swaydb.core.segment.PathsDistributor import swaydb.core.segment._ import swaydb.core.segment.block.segment.transient.TransientSegment import swaydb.core.segment.cache.sweeper.MemorySweeper -import swaydb.core.util.{DefIO, IDGenerator} +import swaydb.core.util.DefIO import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} +import swaydb.utils.IDGenerator import swaydb.{Error, IO} diff --git a/core/src/main/scala/swaydb/core/segment/io/SegmentWritePersistentIO.scala b/core/src/main/scala/swaydb/core/segment/io/SegmentWritePersistentIO.scala index 097c35825..d86638093 100644 --- a/core/src/main/scala/swaydb/core/segment/io/SegmentWritePersistentIO.scala +++ b/core/src/main/scala/swaydb/core/segment/io/SegmentWritePersistentIO.scala @@ -26,10 +26,11 @@ import swaydb.core.segment.PathsDistributor import swaydb.core.segment._ import swaydb.core.segment.block.segment.transient.TransientSegment import swaydb.core.segment.cache.sweeper.MemorySweeper -import swaydb.core.util.{DefIO, IDGenerator} +import swaydb.core.util.DefIO import swaydb.slice.Slice import swaydb.slice.SliceIOImplicits._ import swaydb.slice.order.{KeyOrder, TimeOrder} +import swaydb.utils.IDGenerator import swaydb.{Error, IO} import java.nio.file.Path diff --git a/core/src/test/scala/swaydb/core/CommonAssertions.scala b/core/src/test/scala/swaydb/core/CommonAssertions.scala index 06cf5c07c..992637365 100644 --- a/core/src/test/scala/swaydb/core/CommonAssertions.scala +++ b/core/src/test/scala/swaydb/core/CommonAssertions.scala @@ -22,7 +22,6 @@ import org.scalatest.exceptions.TestFailedException import org.scalatest.matchers.should.Matchers._ import swaydb.Error.Segment.ExceptionHandler import swaydb.IOValues._ -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.PushStrategy import swaydb.config.{Atomic, OptimiseWrites} import swaydb.core.TestData._ @@ -60,6 +59,7 @@ import swaydb.slice.SliceIOImplicits._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{Reader, Slice, SliceOption, SliceReader} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import swaydb.utils.Aggregator import swaydb.{Bag, Error, Glass, IO} @@ -168,51 +168,6 @@ object CommonAssertions { } } - def randomly[T](f: => T): Option[T] = - if (Random.nextBoolean()) - Some(f) - else - None - - def eitherOne[T](left: => T, right: => T): T = - if (Random.nextBoolean()) - left - else - right - - def someOrNone[T](some: => T): Option[T] = - if (Random.nextBoolean()) - None - else - Some(some) - - def orNone[T](option: => Option[T]): Option[T] = - if (Random.nextBoolean()) - None - else - option - - def anyOrder[T](left: => T, right: => T): Unit = - if (Random.nextBoolean()) { - left - right - } else { - right - left - } - - def eitherOne[T](left: => T, mid: => T, right: => T): T = - Random.shuffle(Seq(() => left, () => mid, () => right)).head() - - def eitherOne[T](one: => T, two: => T, three: => T, four: => T): T = - Random.shuffle(Seq(() => one, () => two, () => three, () => four)).head() - - def eitherOne[T](one: => T, two: => T, three: => T, four: => T, five: => T): T = - Random.shuffle(Seq(() => one, () => two, () => three, () => four, () => five)).head() - - def eitherOne[T](one: => T, two: => T, three: => T, four: => T, five: => T, six: => T): T = - Random.shuffle(Seq(() => one, () => two, () => three, () => four, () => five, () => six)).head() - implicit class ValueImplicits(value: Value) { @tailrec @@ -1366,25 +1321,12 @@ object CommonAssertions { } } - def expiredDeadline(): Deadline = { - val deadline = 0.nanosecond.fromNow - 100.millisecond - deadline.hasTimeLeft() shouldBe false - deadline - } - - def randomExpiredDeadlineOption(): Option[Deadline] = - if (randomBoolean()) - None - else - Some(expiredDeadline()) - def readAll(segment: TransientSegment.One)(implicit blockCacheMemorySweeper: Option[MemorySweeper.Block]): IO[swaydb.Error.Segment, Slice[KeyValue]] = readAll(segment.flattenSegmentBytes) def writeAndRead(keyValues: Iterable[Memory])(implicit blockCacheMemorySweeper: Option[MemorySweeper.Block], keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): IO[swaydb.Error.Segment, Slice[KeyValue]] = { + ec: ExecutionContext): IO[swaydb.Error.Segment, Slice[KeyValue]] = { val sortedIndexBlock = SortedIndexBlockConfig.random val segment = @@ -1442,8 +1384,7 @@ object CommonAssertions { bloomFilterConfig: BloomFilterBlockConfig = BloomFilterBlockConfig.random, segmentConfig: SegmentBlockConfig = SegmentBlockConfig.random)(implicit blockCacheMemorySweeper: Option[MemorySweeper.Block], keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext = TestExecutionContext.executionContext, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): IO[Error.Segment, Slice[SegmentBlocks]] = { + ec: ExecutionContext = TestExecutionContext.executionContext): IO[Error.Segment, Slice[SegmentBlocks]] = { val closedSegments = SegmentBlock.writeOnes( mergeStats = @@ -1522,8 +1463,7 @@ object CommonAssertions { bloomFilterConfig: BloomFilterBlockConfig = BloomFilterBlockConfig.random, segmentConfig: SegmentBlockConfig = SegmentBlockConfig.random)(implicit blockCacheMemorySweeper: Option[MemorySweeper.Block], keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): Slice[SegmentBlockCache] = + ec: ExecutionContext): Slice[SegmentBlockCache] = SegmentBlock.writeOnes( mergeStats = MergeStats @@ -1578,9 +1518,6 @@ object CommonAssertions { blockCaches.head } - def randomBlockSize(): Option[Int] = - someOrNone(4096) - def randomIOStrategy(cacheOnAccess: Boolean = randomBoolean(), includeReserved: Boolean = true): IOStrategy = if (randomBoolean()) @@ -1812,10 +1749,6 @@ object CommonAssertions { } } - implicit class BooleanImplicit(bool: Boolean) { - def toInt = - if (bool) 1 else 0 - } implicit class SegmentIOImplicits(io: SegmentReadIO.type) { def random: SegmentReadIO = diff --git a/core/src/test/scala/swaydb/core/PrivateMethodInvokers.scala b/core/src/test/scala/swaydb/core/PrivateMethodInvokers.scala index fd1d60972..e2b27b2b1 100644 --- a/core/src/test/scala/swaydb/core/PrivateMethodInvokers.scala +++ b/core/src/test/scala/swaydb/core/PrivateMethodInvokers.scala @@ -22,7 +22,7 @@ import swaydb.core.log.{Log, LogCache, Logs} import swaydb.core.queue.VolatileQueue import swaydb.core.segment.PersistentSegment import swaydb.core.segment.ref.SegmentRef -import swaydb.core.util.IDGenerator +import swaydb.utils.IDGenerator import swaydb.slice.Slice import swaydb.utils.HashedMap diff --git a/core/src/test/scala/swaydb/core/TestBase.scala b/core/src/test/scala/swaydb/core/TestBase.scala index 8c17d3b0c..097cfdaea 100644 --- a/core/src/test/scala/swaydb/core/TestBase.scala +++ b/core/src/test/scala/swaydb/core/TestBase.scala @@ -22,7 +22,6 @@ import org.scalatest.wordspec.AnyWordSpec import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach} import swaydb.IOValues._ import swaydb.config.accelerate.{Accelerator, LevelZeroMeter} -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.{CompactionConfig, LevelMeter, LevelThrottle, LevelZeroThrottle} import swaydb.config.storage.{Level0Storage, LevelStorage} import swaydb.config.{Atomic, MMAP, OptimiseWrites, RecoveryMode} @@ -30,7 +29,6 @@ import swaydb.core.CommonAssertions._ import swaydb.core.TestCaseSweeper._ import swaydb.core.TestData._ import swaydb.core.compaction._ -import swaydb.core.segment.{PathsDistributor, PersistentSegment, Segment} import swaydb.core.compaction.throttle.ThrottleCompactorCreator import swaydb.core.file.DBFile import swaydb.core.file.reader.FileReader @@ -47,13 +45,14 @@ import swaydb.core.segment.block.values.ValuesBlockConfig import swaydb.core.segment.data.merge.stats.MergeStats import swaydb.core.segment.data.{Memory, Time} import swaydb.core.segment.io.{SegmentCompactionIO, SegmentReadIO} -import swaydb.core.util.IDGenerator +import swaydb.core.segment.{PathsDistributor, PersistentSegment, Segment} import swaydb.effect.{Dir, Effect} import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis.FutureImplicits -import swaydb.utils.OperatingSystem +import swaydb.testkit.TestKit._ import swaydb.utils.StorageUnits._ +import swaydb.utils.{IDGenerator, OperatingSystem} import swaydb.{DefActor, Glass, IO} import java.nio.file._ @@ -313,8 +312,7 @@ trait TestBase extends AnyWordSpec with Matchers with BeforeAndAfterAll with Bef pathsDistributor: PathsDistributor, idGenerator: IDGenerator, sweeper: TestCaseSweeper, - ec: ExecutionContext = TestExecutionContext.executionContext, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): Slice[Segment] = { + ec: ExecutionContext = TestExecutionContext.executionContext): Slice[Segment] = { import sweeper._ implicit val segmentIO: SegmentReadIO = @@ -387,8 +385,7 @@ trait TestBase extends AnyWordSpec with Matchers with BeforeAndAfterAll with Bef segmentConfig: SegmentBlockConfig = SegmentBlockConfig.random2(deleteDelay = Duration.Zero, mmap = mmapSegments), keyValues: Slice[Memory] = Slice.empty)(implicit keyOrder: KeyOrder[Slice[Byte]] = KeyOrder.default, timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long, - sweeper: TestCaseSweeper, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): Level = { + sweeper: TestCaseSweeper): Level = { import sweeper._ val level = @@ -633,12 +630,6 @@ trait TestBase extends AnyWordSpec with Matchers with BeforeAndAfterAll with Bef resetCompactionPriorityAtInterval = randomIntMax(10).max(1), actorExecutionContext = TestExecutionContext.executionContext, compactionExecutionContext = TestExecutionContext.executionContext, - levelZeroFlattenParallelism = randomIntMax(10).max(1), - levelZeroMergeParallelism = randomIntMax(10).max(1), - multiLevelTaskParallelism = randomIntMax(10).max(1), - levelSegmentAssignmentParallelism = randomIntMax(10).max(1), - groupedSegmentDefragParallelism = randomIntMax(10).max(1), - defragmentedSegmentParallelism = randomIntMax(10).max(1), pushStrategy = randomPushStrategy() ), ).value @@ -787,8 +778,7 @@ trait TestBase extends AnyWordSpec with Matchers with BeforeAndAfterAll with Bef level3: Level, assertAllLevels: LevelRef => Unit, assertLevel3ForAllLevels: Boolean)(implicit keyOrder: KeyOrder[Slice[Byte]] = KeyOrder.default, - levelSweeper: TestCaseSweeper, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): Unit = { + levelSweeper: TestCaseSweeper): Unit = { implicit val ec: ExecutionContext = TestExecutionContext.executionContext diff --git a/core/src/test/scala/swaydb/core/TestData.scala b/core/src/test/scala/swaydb/core/TestData.scala index bf8a92a32..8a63d8832 100644 --- a/core/src/test/scala/swaydb/core/TestData.scala +++ b/core/src/test/scala/swaydb/core/TestData.scala @@ -25,13 +25,11 @@ import swaydb.compression.CompressionInternal import swaydb.compression.CompressionTestGen._ import swaydb.config._ import swaydb.config.accelerate.Accelerator -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.{LevelMeter, LevelThrottle} import swaydb.config.storage.{Level0Storage, LevelStorage} import swaydb.core.CommonAssertions._ import swaydb.core.TestCaseSweeper._ import swaydb.core.cache.Cache -import swaydb.core.segment.io.SegmentCompactionIO import swaydb.core.file.DBFile import swaydb.core.level.seek._ import swaydb.core.level.zero.LevelZero @@ -61,23 +59,23 @@ import swaydb.core.segment.data.merge.stats.MergeStats import swaydb.core.segment.data.merge.{KeyValueGrouper, KeyValueMerger} import swaydb.core.segment.entry.id.BaseEntryIdFormatA import swaydb.core.segment.entry.writer.EntryWriter -import swaydb.core.segment.io.{SegmentReadIO, SegmentWritePersistentIO} +import swaydb.core.segment.io.{SegmentCompactionIO, SegmentReadIO, SegmentWritePersistentIO} import swaydb.core.segment.ref.SegmentRef import swaydb.core.segment.ref.search.ThreadReadState import swaydb.core.skiplist.AtomicRanges -import swaydb.core.util.{DefIO, IDGenerator} +import swaydb.core.util.DefIO import swaydb.effect.{Dir, IOAction, IOStrategy} import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{MaxKey, Slice, SliceOption, SliceRO} import swaydb.testkit.RunThis.FutureImplicits +import swaydb.testkit.TestKit._ import swaydb.utils.StorageUnits._ -import swaydb.utils.{Aggregator, FiniteDurations, OperatingSystem} +import swaydb.utils.{Aggregator, FiniteDurations, IDGenerator, OperatingSystem} import swaydb.{ActorConfig, Error, Glass, IO} import java.nio.file.Path -import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger import scala.collection.compat._ import scala.collection.mutable.ListBuffer @@ -106,15 +104,6 @@ object TestData { else SegmentRefCacheLife.Temporary - def randomNextInt(max: Int): Int = - Math.abs(Random.nextInt(max)) - - def randomBoolean(): Boolean = - Random.nextBoolean() - - def randomFiniteDuration(maxSeconds: Int = 10): FiniteDuration = - new FiniteDuration(randomIntMax(maxSeconds), TimeUnit.SECONDS) - implicit class ReopenSegment(segment: PersistentSegment)(implicit keyOrder: KeyOrder[Slice[Byte]] = KeyOrder.default, timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long, sweeper: TestCaseSweeper, @@ -184,7 +173,6 @@ object TestData { //This test function is doing too much. This shouldn't be the case! There needs to be an easier way to write //key-values in a Level without that level copying it forward to lower Levels. def put(keyValues: Iterable[Memory], removeDeletes: Boolean = false)(implicit sweeper: TestCaseSweeper, - compactionParallelism: CompactionParallelism, compactionActor: SegmentCompactionIO.Actor): IO[Error.Level, Unit] = { implicit val idGenerator = level.segmentIDGenerator @@ -241,12 +229,10 @@ object TestData { } def put(segment: Segment)(implicit sweeper: TestCaseSweeper, - compactionParallelism: CompactionParallelism, compactionActor: SegmentCompactionIO.Actor): IO[Error.Level, Unit] = putSegments(Seq(segment)) def putSegments(segments: Iterable[Segment], removeDeletes: Boolean = false)(implicit sweeper: TestCaseSweeper, - parallelism: CompactionParallelism, compactionActor: SegmentCompactionIO.Actor): IO[Error.Level, Unit] = { implicit val ec = TestExecutionContext.executionContext @@ -266,7 +252,6 @@ object TestData { } def putMap(map: LevelZeroLog)(implicit sweeper: TestCaseSweeper, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors(), compactionActor: SegmentCompactionIO.Actor): IO[Error.Level, Unit] = { implicit val ec = TestExecutionContext.executionContext @@ -581,24 +566,6 @@ object TestData { else Slice.Null - def randomString = - randomCharacters() - - def randomDeadlineOption: Option[Deadline] = - randomDeadlineOption() - - def randomDeadlineOption(expired: Boolean = randomBoolean()): Option[Deadline] = - if (randomBoolean()) - Some(randomDeadline(expired)) - else - None - - def randomDeadline(expired: Boolean = randomBoolean()): Deadline = - if (expired && randomBoolean()) - 0.seconds.fromNow - (randomIntMax(30) + 10).seconds - else - (randomIntMax(60) max 30).seconds.fromNow - def randomDeadUpdateOrExpiredPut(key: Slice[Byte]): Memory.Fixed = eitherOne( randomFixedKeyValue(key, includePuts = false), @@ -1222,10 +1189,6 @@ object TestData { def randomBlockOps(): BlockOps[_, _] = Random.shuffle(allBlockOps().to(List)).head - def randomCharacters(size: Int = 10) = Random.alphanumeric.take(size max 1).mkString - - def randomBytes(size: Int = 10) = Array.fill(size)(randomByte()) - def randomByteChunks(size: Int = 10, sizePerChunk: Int = 10): Slice[Slice[Byte]] = { val slice = Slice.of[Slice[Byte]](size) (1 to size) foreach { @@ -1252,28 +1215,6 @@ object TestData { else Some(randomBytesSlice(size)) - def randomByte() = (Random.nextInt(256) - 128).toByte - - def ints(numbers: Int): Int = - (1 to numbers).foldLeft("") { - case (concat, _) => - concat + Math.abs(Random.nextInt(9)).toString - }.toInt - - def randomInt(minus: Int = 0) = Math.abs(Random.nextInt(Int.MaxValue)) - minus - 1 - - def randomIntMax(max: Int = Int.MaxValue) = - Math.abs(Random.nextInt(max)) - - def randomIntMin(min: Int) = - Math.abs(randomIntMax()) max min - - def randomIntMaxOption(max: Int = Int.MaxValue) = - if (randomBoolean()) - Some(randomIntMax(max)) - else - None - def randomIntKeyStringValues(count: Int = 5, startId: Option[Int] = None, valueSize: Int = 50, @@ -1882,8 +1823,7 @@ object TestData { sortedIndexConfig: SortedIndexBlockConfig = SortedIndexBlockConfig.random, valuesConfig: ValuesBlockConfig = ValuesBlockConfig.random, segmentConfig: SegmentBlockConfig = SegmentBlockConfig.random)(implicit keyOrder: KeyOrder[Slice[Byte]], - ec: ExecutionContext, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): TransientSegment.One = { + ec: ExecutionContext): TransientSegment.One = { val segments = SegmentBlock.writeOnes( mergeStats = @@ -2170,7 +2110,6 @@ object TestData { segmentReadIO: SegmentReadIO, timeOrder: TimeOrder[Slice[Byte]], testCaseSweeper: TestCaseSweeper, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors(), compactionActor: SegmentCompactionIO.Actor): DefIO[SegmentOption, Slice[Segment]] = { def toMemory(keyValue: KeyValue) = if (removeDeletes) KeyValueGrouper.toLastLevelOrNull(keyValue) else keyValue.toMemory() @@ -2251,8 +2190,7 @@ object TestData { keyOrder: KeyOrder[Slice[Byte]], segmentReadIO: SegmentReadIO, timeOrder: TimeOrder[Slice[Byte]], - testCaseSweeper: TestCaseSweeper, - compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors()): Slice[Segment] = + testCaseSweeper: TestCaseSweeper): Slice[Segment] = segment match { case segment: MemorySegment => segment.refresh( diff --git a/core/src/test/scala/swaydb/core/TestSweeper.scala b/core/src/test/scala/swaydb/core/TestSweeper.scala index 73b5ff85a..ab7eaae9f 100644 --- a/core/src/test/scala/swaydb/core/TestSweeper.scala +++ b/core/src/test/scala/swaydb/core/TestSweeper.scala @@ -28,6 +28,7 @@ import swaydb.core.segment.cache.sweeper.MemorySweeper import swaydb.utils.StorageUnits._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ private[swaydb] object TestSweeper { diff --git a/core/src/test/scala/swaydb/core/actor/ActorSpec.scala b/core/src/test/scala/swaydb/core/actor/ActorSpec.scala index 5f7d0bc82..72397dd83 100644 --- a/core/src/test/scala/swaydb/core/actor/ActorSpec.scala +++ b/core/src/test/scala/swaydb/core/actor/ActorSpec.scala @@ -24,6 +24,7 @@ import swaydb.core.CommonAssertions._ import swaydb.core.TestCaseSweeper._ import swaydb.core.{TestCaseSweeper, TestExecutionContext} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import java.util.concurrent.{ConcurrentLinkedDeque, ConcurrentSkipListSet} import scala.collection.mutable.ListBuffer @@ -35,8 +36,6 @@ import scala.util.Try class ActorSpec extends AnyWordSpec with Matchers { - import swaydb.core.TestData._ - implicit val ordering = QueueOrder.FIFO implicit val ec = TestExecutionContext.executionContext diff --git a/core/src/test/scala/swaydb/core/build/BuildSpec.scala b/core/src/test/scala/swaydb/core/build/BuildSpec.scala index eb3666b08..eec248622 100644 --- a/core/src/test/scala/swaydb/core/build/BuildSpec.scala +++ b/core/src/test/scala/swaydb/core/build/BuildSpec.scala @@ -22,12 +22,13 @@ import swaydb.IOValues._ import swaydb.config.DataType import swaydb.core.TestData._ import swaydb.core.{TestBase, TestCaseSweeper} -import swaydb.effect.{Effect, Extension} +import swaydb.effect.Effect import swaydb.slice.Slice -import swaydb.utils.ByteSizeOf +import swaydb.utils.{ByteSizeOf, Extension} import java.nio.file.FileAlreadyExistsException import scala.util.Random +import swaydb.testkit.TestKit._ class BuildSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelTaskAssignerSpec.scala b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelTaskAssignerSpec.scala index 6d3b5d49a..0d1860cd1 100644 --- a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelTaskAssignerSpec.scala +++ b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelTaskAssignerSpec.scala @@ -20,7 +20,6 @@ import org.scalamock.scalatest.MockFactory import org.scalatest.OptionValues._ import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core.segment.Segment @@ -35,6 +34,7 @@ import swaydb.utils.OperatingSystem import swaydb.utils.StorageUnits._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class LevelTaskAssignerSpec0 extends LevelTaskAssignerSpec @@ -61,7 +61,6 @@ sealed trait LevelTaskAssignerSpec extends TestBase with MockFactory { implicit val timer = TestTimer.Empty implicit val keyOrder = KeyOrder.default implicit val segmentOrdering = keyOrder.on[Segment](_.minKey) - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "refresh" when { "Level is empty" in { diff --git a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_createStacks_Spec.scala b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_createStacks_Spec.scala index 160c9c9c5..3fd4f831f 100644 --- a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_createStacks_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_createStacks_Spec.scala @@ -25,6 +25,7 @@ import swaydb.serializers._ import swaydb.slice.MaxKey import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import scala.collection.mutable.ListBuffer import scala.jdk.CollectionConverters._ diff --git a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_flatten_Spec.scala b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_flatten_Spec.scala index 67a8b1fc8..307180d4a 100644 --- a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_flatten_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_flatten_Spec.scala @@ -17,7 +17,6 @@ package swaydb.core.compaction.task.assigner import org.scalamock.scalatest.MockFactory -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core._ @@ -29,6 +28,7 @@ import swaydb.slice.{MaxKey, Slice} import swaydb.testkit.RunThis._ import scala.concurrent.duration.DurationInt +import swaydb.testkit.TestKit._ class LevelZeroTaskAssigner_flatten_Spec extends TestBase with MockFactory { @@ -37,7 +37,6 @@ class LevelZeroTaskAssigner_flatten_Spec extends TestBase with MockFactory { implicit val timeOrder = TimeOrder.long implicit val segmentOrdering = keyOrder.on[Segment](_.minKey) implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() /** * TEST STEPS diff --git a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_mergeStack_Spec.scala b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_mergeStack_Spec.scala index 2a3c65837..c5c77cfe0 100644 --- a/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_mergeStack_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/task/assigner/LevelZeroTaskAssigner_mergeStack_Spec.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.task.assigner import org.scalamock.scalatest.MockFactory import org.scalatest.OptionValues._ -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core.level.zero.LevelZero.LevelZeroLog @@ -30,6 +29,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class LevelZeroTaskAssigner_mergeStack_Spec extends TestBase with MockFactory { @@ -38,7 +38,6 @@ class LevelZeroTaskAssigner_mergeStack_Spec extends TestBase with MockFactory { implicit val timeOrder = TimeOrder.long implicit val segmentOrdering = keyOrder.on[Segment](_.minKey) implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "stack is empty" in { TestCaseSweeper { diff --git a/core/src/test/scala/swaydb/core/compaction/task/assigner/TaskAssigner_finaliseSegmentsToCompact_Spec.scala b/core/src/test/scala/swaydb/core/compaction/task/assigner/TaskAssigner_finaliseSegmentsToCompact_Spec.scala index 469908268..4962655d3 100644 --- a/core/src/test/scala/swaydb/core/compaction/task/assigner/TaskAssigner_finaliseSegmentsToCompact_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/task/assigner/TaskAssigner_finaliseSegmentsToCompact_Spec.scala @@ -25,6 +25,7 @@ import swaydb.core.segment.assigner.AssignmentResult import swaydb.testkit.RunThis._ import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ class TaskAssigner_finaliseSegmentsToCompact_Spec extends AnyWordSpec with Matchers with MockFactory { diff --git a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_collapse_Spec.scala b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_collapse_Spec.scala index 4da168da9..79441e6a9 100644 --- a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_collapse_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_collapse_Spec.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.throttle.behaviour import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core._ @@ -36,6 +35,7 @@ import swaydb.utils.StorageUnits._ import java.nio.file.FileAlreadyExistsException import scala.concurrent.duration.Duration +import swaydb.testkit.TestKit._ class BehaviourCompactionTask_collapse_Spec0 extends BehaviourCompactionTask_collapse_Spec @@ -63,7 +63,6 @@ sealed trait BehaviourCompactionTask_collapse_Spec extends TestBase { implicit val keyOrder = KeyOrder.default implicit val segmentOrdering = keyOrder.on[Segment](_.minKey) implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "succeed" in { runThis(10.times, log = true) { diff --git a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_2Levels_Spec.scala b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_2Levels_Spec.scala index 81fa8491c..23a9e1a38 100644 --- a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_2Levels_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_2Levels_Spec.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.throttle.behaviour import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core._ @@ -34,6 +33,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.OperatingSystem import scala.collection.SortedSet +import swaydb.testkit.TestKit._ class BehaviourCompactionTask_compactSegments_2Levels_Spec0 extends BehaviourCompactionTask_compactSegments_2Levels_Spec @@ -61,7 +61,6 @@ sealed trait BehaviourCompactionTask_compactSegments_2Levels_Spec extends TestBa implicit val keyOrder = KeyOrder.default implicit val segmentOrdering = keyOrder.on[Segment](_.minKey) implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "compactSegments" when { "there are 2 levels" should { diff --git a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_MultiLevels_Spec.scala b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_MultiLevels_Spec.scala index 7a25aba4d..87a8478ca 100644 --- a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_MultiLevels_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_compactSegments_MultiLevels_Spec.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.throttle.behaviour import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core._ @@ -33,6 +32,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.OperatingSystem import scala.collection.SortedSet +import swaydb.testkit.TestKit._ class BehaviourCompactionTask_compactSegments_MultiLevels_Spec0 extends BehaviourCompactionTask_compactSegments_MultiLevels_Spec @@ -60,7 +60,6 @@ sealed trait BehaviourCompactionTask_compactSegments_MultiLevels_Spec extends Te implicit val keyOrder = KeyOrder.default implicit val segmentOrdering = keyOrder.on[Segment](_.minKey) implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "compactSegments" when { "there are multi levels" should { diff --git a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_refresh_Spec.scala b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_refresh_Spec.scala index b373f7ce3..89a6c507f 100644 --- a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_refresh_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourCompactionTask_refresh_Spec.scala @@ -17,7 +17,6 @@ package swaydb.core.compaction.throttle.behaviour import swaydb.IO -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core._ @@ -29,6 +28,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class BehaviourCompactionTask_refresh_Spec0 extends BehaviourCompactionTask_refresh_Spec @@ -56,7 +56,6 @@ sealed trait BehaviourCompactionTask_refresh_Spec extends TestBase { implicit val keyOrder = KeyOrder.default implicit val segmentOrdering = keyOrder.on[Segment](_.minKey) implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "succeed" in { runThis(10.times, log = true) { diff --git a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_multiLevel_Spec.scala b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_multiLevel_Spec.scala index b63419656..638344fbc 100644 --- a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_multiLevel_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_multiLevel_Spec.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.throttle.behaviour import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.LevelThrottle import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ @@ -35,7 +34,7 @@ import swaydb.utils.OperatingSystem import swaydb.utils.StorageUnits._ import scala.concurrent.duration._ - +import swaydb.testkit.TestKit._ class BehaviourWakeUp_compactLastLevel_multiLevel_Spec0 extends BehaviourWakeUp_compactLastLevel_multiLevel_Spec @@ -60,7 +59,6 @@ class BehaviourWakeUp_compactLastLevel_multiLevel_Spec3 extends BehaviourWakeUp_ sealed trait BehaviourWakeUp_compactLastLevel_multiLevel_Spec extends TestBase { implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "ignore compaction" when { "empty" in { diff --git a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_singleLevel_Spec.scala b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_singleLevel_Spec.scala index bd9c71cf5..ca4fd75b5 100644 --- a/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_singleLevel_Spec.scala +++ b/core/src/test/scala/swaydb/core/compaction/throttle/behaviour/BehaviourWakeUp_compactLastLevel_singleLevel_Spec.scala @@ -18,7 +18,6 @@ package swaydb.core.compaction.throttle.behaviour import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core.compaction.throttle.LevelState @@ -34,7 +33,7 @@ import swaydb.utils.OperatingSystem import swaydb.utils.StorageUnits._ import scala.concurrent.duration._ - +import swaydb.testkit.TestKit._ class BehaviourWakeUp_singleLevel_compactNonEmptyLastLevel_Spec0 extends BehaviourWakeUp_singleLevel_compactNonEmptyLastLevel_Spec @@ -59,7 +58,6 @@ class BehaviourWakeUp_compactLastLevel_singleLevel_Spec extends BehaviourWakeUp_ sealed trait BehaviourWakeUp_singleLevel_compactNonEmptyLastLevel_Spec extends TestBase { implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "ignore compaction" when { "empty" in { diff --git a/core/src/test/scala/swaydb/core/file/DBFileSpec.scala b/core/src/test/scala/swaydb/core/file/DBFileSpec.scala index 152a2f600..6e9e40125 100644 --- a/core/src/test/scala/swaydb/core/file/DBFileSpec.scala +++ b/core/src/test/scala/swaydb/core/file/DBFileSpec.scala @@ -32,6 +32,7 @@ import swaydb.utils.PipeOps._ import java.nio.ReadOnlyBufferException import java.nio.channels.{NonReadableChannelException, NonWritableChannelException} import java.nio.file.FileAlreadyExistsException +import swaydb.testkit.TestKit._ class DBFileSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/file/EffectSpec.scala b/core/src/test/scala/swaydb/core/file/EffectSpec.scala index 302ffcabe..3b0d55dc5 100644 --- a/core/src/test/scala/swaydb/core/file/EffectSpec.scala +++ b/core/src/test/scala/swaydb/core/file/EffectSpec.scala @@ -20,9 +20,10 @@ import swaydb.{Benchmark, IO} import swaydb.IOValues._ import swaydb.core.TestData._ import swaydb.core.{TestBase, TestCaseSweeper} -import swaydb.effect.{Effect, Extension} +import swaydb.effect.Effect import swaydb.slice.Slice import swaydb.testkit.RunThis._ +import swaydb.utils.Extension import swaydb.utils.StorageUnits._ import java.nio.file.Paths diff --git a/core/src/test/scala/swaydb/core/file/MMAPFileSpec.scala b/core/src/test/scala/swaydb/core/file/MMAPFileSpec.scala index bff8bed88..9e038db51 100644 --- a/core/src/test/scala/swaydb/core/file/MMAPFileSpec.scala +++ b/core/src/test/scala/swaydb/core/file/MMAPFileSpec.scala @@ -31,6 +31,7 @@ import java.nio.channels.FileChannel import java.nio.channels.FileChannel.MapMode import java.nio.file.StandardOpenOption import java.util.concurrent.atomic.AtomicBoolean +import swaydb.testkit.TestKit._ class MMAPFileSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/file/sweeper/FileSweeperSpec.scala b/core/src/test/scala/swaydb/core/file/sweeper/FileSweeperSpec.scala index a725ea983..b9597c909 100644 --- a/core/src/test/scala/swaydb/core/file/sweeper/FileSweeperSpec.scala +++ b/core/src/test/scala/swaydb/core/file/sweeper/FileSweeperSpec.scala @@ -17,8 +17,7 @@ //package swaydb.core.file.sweeper // //import org.scalamock.scalatest.MockFactory -//import swaydb.config.compaction.CompactionConfig.CompactionParallelism -//import swaydb.core.CommonAssertions._ +////import swaydb.core.CommonAssertions._ //import swaydb.core.TestCaseSweeper._ //import swaydb.core.TestData._ //import swaydb.core._ @@ -40,7 +39,6 @@ //class FileSweeperSpec extends TestBase with MockFactory { // // implicit val timer = TestTimer.Empty -// implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() // // private def file(filePath: String): FileSweeperItem = // new FileSweeperItem { diff --git a/core/src/test/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferSweeperSpec.scala b/core/src/test/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferSweeperSpec.scala index 387c89cb3..29a65a33a 100644 --- a/core/src/test/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferSweeperSpec.scala +++ b/core/src/test/scala/swaydb/core/file/sweeper/bytebuffer/ByteBufferSweeperSpec.scala @@ -39,6 +39,7 @@ import scala.collection.mutable import scala.concurrent.Future import scala.concurrent.duration._ import scala.util.Random +import swaydb.testkit.TestKit._ class ByteBufferSweeperSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/level/LevelCollpaseSpec.scala b/core/src/test/scala/swaydb/core/level/LevelCollpaseSpec.scala index 5aa4f884b..d11d84f51 100644 --- a/core/src/test/scala/swaydb/core/level/LevelCollpaseSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelCollpaseSpec.scala @@ -20,7 +20,6 @@ import org.scalatest.OptionValues._ import swaydb.IO import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core._ @@ -62,7 +61,6 @@ sealed trait LevelCollapseSpec extends TestBase { implicit val testTimer: TestTimer = TestTimer.Empty implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 // override def deleteFiles: Boolean = diff --git a/core/src/test/scala/swaydb/core/level/LevelKeyValuesSpec.scala b/core/src/test/scala/swaydb/core/level/LevelKeyValuesSpec.scala index 4b09a667f..0326b45d7 100644 --- a/core/src/test/scala/swaydb/core/level/LevelKeyValuesSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelKeyValuesSpec.scala @@ -21,7 +21,6 @@ import org.scalatest.PrivateMethodTester import swaydb.IO import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core._ @@ -37,6 +36,7 @@ import swaydb.utils.OperatingSystem import swaydb.utils.StorageUnits._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class LevelKeyValuesSpec0 extends LevelKeyValuesSpec @@ -65,7 +65,6 @@ sealed trait LevelKeyValuesSpec extends TestBase with MockFactory with PrivateMe implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long val keyValuesCount = 100 implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() // override def deleteFiles: Boolean = // false diff --git a/core/src/test/scala/swaydb/core/level/LevelMapSpec.scala b/core/src/test/scala/swaydb/core/level/LevelMapSpec.scala index 7af8a196d..8ba79c567 100644 --- a/core/src/test/scala/swaydb/core/level/LevelMapSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelMapSpec.scala @@ -19,7 +19,6 @@ package swaydb.core.level import org.scalamock.scalatest.MockFactory import org.scalatest.PrivateMethodTester import swaydb.IOValues._ -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.{Atomic, MMAP, OptimiseWrites} import swaydb.core.CommonAssertions._ import swaydb.core.TestCaseSweeper._ @@ -35,6 +34,7 @@ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.utils.OperatingSystem import swaydb.utils.StorageUnits._ +import swaydb.testkit.TestKit._ class LevelMapSpec0 extends LevelMapSpec @@ -62,7 +62,6 @@ sealed trait LevelMapSpec extends TestBase with MockFactory with PrivateMethodTe implicit val testTimer: TestTimer = TestTimer.Empty implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 // override def deleteFiles: Boolean = diff --git a/core/src/test/scala/swaydb/core/level/LevelMergeSpec.scala b/core/src/test/scala/swaydb/core/level/LevelMergeSpec.scala index e414a23fb..fd60f3dd1 100644 --- a/core/src/test/scala/swaydb/core/level/LevelMergeSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelMergeSpec.scala @@ -20,7 +20,6 @@ import org.scalamock.scalatest.MockFactory import org.scalatest.PrivateMethodTester import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestCaseSweeper._ import swaydb.core.TestData._ @@ -60,7 +59,6 @@ sealed trait LevelMergeSpec extends TestBase with MockFactory with PrivateMethod implicit val testTimer: TestTimer = TestTimer.Empty implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 "level is empty" should { diff --git a/core/src/test/scala/swaydb/core/level/LevelReadNoneSpec.scala b/core/src/test/scala/swaydb/core/level/LevelReadNoneSpec.scala index 933795eac..90755a913 100644 --- a/core/src/test/scala/swaydb/core/level/LevelReadNoneSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelReadNoneSpec.scala @@ -29,6 +29,7 @@ import swaydb.slice.Slice import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ import swaydb.utils.OperatingSystem +import swaydb.testkit.TestKit._ class LevelReadNoneSpec0 extends LevelReadNoneSpec diff --git a/core/src/test/scala/swaydb/core/level/LevelReadSomeSpec.scala b/core/src/test/scala/swaydb/core/level/LevelReadSomeSpec.scala index ec3ba5648..692b7f2e0 100644 --- a/core/src/test/scala/swaydb/core/level/LevelReadSomeSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelReadSomeSpec.scala @@ -21,7 +21,6 @@ import org.scalatest.exceptions.TestFailedException import swaydb.IO import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core.segment.ref.search.ThreadReadState @@ -32,6 +31,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.OperatingSystem import scala.util.{Failure, Success, Try} +import swaydb.testkit.TestKit._ class LevelReadSomeSpec0 extends LevelReadSomeSpec @@ -56,7 +56,6 @@ class LevelReadSomeSpec3 extends LevelReadSomeSpec { sealed trait LevelReadSomeSpec extends TestBase with MockFactory { // override def deleteFiles = false - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 diff --git a/core/src/test/scala/swaydb/core/level/LevelReadSpec.scala b/core/src/test/scala/swaydb/core/level/LevelReadSpec.scala index eb5de7b94..1c0e525c6 100644 --- a/core/src/test/scala/swaydb/core/level/LevelReadSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelReadSpec.scala @@ -19,7 +19,6 @@ package swaydb.core.level import org.scalamock.scalatest.MockFactory import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.LevelThrottle import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ @@ -41,6 +40,7 @@ import swaydb.utils.OperatingSystem import swaydb.utils.StorageUnits._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class LevelReadSpec0 extends LevelReadSpec @@ -69,7 +69,6 @@ sealed trait LevelReadSpec extends TestBase with MockFactory { implicit val ec = TestExecutionContext.executionContext implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit def segmentIO: SegmentReadIO = SegmentReadIO.random - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 diff --git a/core/src/test/scala/swaydb/core/level/LevelRefreshSpec.scala b/core/src/test/scala/swaydb/core/level/LevelRefreshSpec.scala index 57fee8cf5..a7d051a90 100644 --- a/core/src/test/scala/swaydb/core/level/LevelRefreshSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelRefreshSpec.scala @@ -21,7 +21,6 @@ import org.scalatest.PrivateMethodTester import swaydb.IO import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.TestData._ import swaydb.core._ import swaydb.core.segment.block.segment.SegmentBlockConfig @@ -62,7 +61,6 @@ sealed trait LevelRefreshSpec extends TestBase with MockFactory with PrivateMeth implicit val testTimer: TestTimer = TestTimer.Empty implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 "refresh" should { diff --git a/core/src/test/scala/swaydb/core/level/LevelRemoveSegmentSpec.scala b/core/src/test/scala/swaydb/core/level/LevelRemoveSegmentSpec.scala index 2f8c6d2c9..19cbbe2d9 100644 --- a/core/src/test/scala/swaydb/core/level/LevelRemoveSegmentSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelRemoveSegmentSpec.scala @@ -20,7 +20,6 @@ import org.scalamock.scalatest.MockFactory import org.scalatest.PrivateMethodTester import swaydb.IO import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.TestData._ import swaydb.core.segment.block.segment.SegmentBlockConfig import swaydb.core.{TestBase, TestCaseSweeper, TestForceSave, TestTimer} @@ -57,7 +56,6 @@ sealed trait LevelRemoveSegmentSpec extends TestBase with MockFactory with Priva implicit val keyOrder: KeyOrder[Slice[Byte]] = KeyOrder.default implicit val testTimer: TestTimer = TestTimer.Empty implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 // override def deleteFiles: Boolean = diff --git a/core/src/test/scala/swaydb/core/level/LevelSegmentSpec.scala b/core/src/test/scala/swaydb/core/level/LevelSegmentSpec.scala index 4bc55e65f..d0c068fe5 100644 --- a/core/src/test/scala/swaydb/core/level/LevelSegmentSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelSegmentSpec.scala @@ -19,22 +19,20 @@ package swaydb.core.level import org.scalamock.scalatest.MockFactory import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.storage.LevelStorage import swaydb.core.CommonAssertions._ import swaydb.core.TestCaseSweeper._ import swaydb.core.TestData._ import swaydb.core._ -import swaydb.core.segment.io.SegmentCompactionIO import swaydb.core.segment.block.segment.SegmentBlockConfig import swaydb.core.segment.data._ -import swaydb.core.util.IDGenerator +import swaydb.core.segment.io.SegmentCompactionIO import swaydb.effect.Effect._ -import swaydb.effect.{Dir, Effect, Extension} +import swaydb.effect.{Dir, Effect} import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ -import swaydb.utils.OperatingSystem +import swaydb.utils.{Extension, IDGenerator, OperatingSystem} import swaydb.utils.PipeOps._ import swaydb.utils.StorageUnits._ import swaydb.{Glass, IO} @@ -70,7 +68,6 @@ sealed trait LevelSegmentSpec extends TestBase with MockFactory { implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long val keyValuesCount = 100 implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() // override def deleteFiles: Boolean = // false diff --git a/core/src/test/scala/swaydb/core/level/LevelSpec.scala b/core/src/test/scala/swaydb/core/level/LevelSpec.scala index dfbda8894..57d0ebdbb 100644 --- a/core/src/test/scala/swaydb/core/level/LevelSpec.scala +++ b/core/src/test/scala/swaydb/core/level/LevelSpec.scala @@ -21,7 +21,6 @@ import org.scalatest.PrivateMethodTester import swaydb.Glass import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.storage.LevelStorage import swaydb.core.TestData._ import swaydb.core._ @@ -30,15 +29,17 @@ import swaydb.core.segment.Segment import swaydb.core.segment.block.segment.SegmentBlockConfig import swaydb.core.segment.data._ import swaydb.effect.Effect._ -import swaydb.effect.{Dir, Effect, Extension} +import swaydb.effect.{Dir, Effect} import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} -import swaydb.utils.OperatingSystem +import swaydb.utils.{Extension, OperatingSystem} import swaydb.utils.StorageUnits._ +import swaydb.testkit.TestKit._ import java.nio.channels.OverlappingFileLockException +import swaydb.testkit.TestKit._ class LevelSpec0 extends LevelSpec @@ -66,7 +67,6 @@ sealed trait LevelSpec extends TestBase with MockFactory with PrivateMethodTeste implicit val testTimer: TestTimer = TestTimer.Empty implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() val keyValuesCount = 100 // override def deleteFiles: Boolean = diff --git a/core/src/test/scala/swaydb/core/level/seek/GetNoneSpec.scala b/core/src/test/scala/swaydb/core/level/seek/GetNoneSpec.scala index 2382fb3f3..af23a8baf 100644 --- a/core/src/test/scala/swaydb/core/level/seek/GetNoneSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/GetNoneSpec.scala @@ -30,6 +30,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class GetNoneSpec extends AnyWordSpec with Matchers with MockFactory with OptionValues { diff --git a/core/src/test/scala/swaydb/core/level/seek/GetSomeSpec.scala b/core/src/test/scala/swaydb/core/level/seek/GetSomeSpec.scala index 5cdd76bc2..e3a1bc689 100644 --- a/core/src/test/scala/swaydb/core/level/seek/GetSomeSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/GetSomeSpec.scala @@ -32,6 +32,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class GetSomeSpec extends AnyWordSpec with Matchers with MockFactory with OptionValues { diff --git a/core/src/test/scala/swaydb/core/level/seek/HigherFixedSomeSpec.scala b/core/src/test/scala/swaydb/core/level/seek/HigherFixedSomeSpec.scala index 2c93740ce..8b2fda749 100644 --- a/core/src/test/scala/swaydb/core/level/seek/HigherFixedSomeSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/HigherFixedSomeSpec.scala @@ -31,6 +31,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class HigherFixedSomeSpec extends AnyWordSpec with Matchers with MockFactory with OptionValues { diff --git a/core/src/test/scala/swaydb/core/level/seek/HigherRangeSomeSpec.scala b/core/src/test/scala/swaydb/core/level/seek/HigherRangeSomeSpec.scala index 283430a3e..e1267d1ad 100644 --- a/core/src/test/scala/swaydb/core/level/seek/HigherRangeSomeSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/HigherRangeSomeSpec.scala @@ -31,6 +31,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class HigherRangeSomeSpec extends AnyWordSpec with Matchers with MockFactory { diff --git a/core/src/test/scala/swaydb/core/level/seek/HigherSpec.scala b/core/src/test/scala/swaydb/core/level/seek/HigherSpec.scala index 5731b9a29..960452667 100644 --- a/core/src/test/scala/swaydb/core/level/seek/HigherSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/HigherSpec.scala @@ -26,6 +26,7 @@ import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class HigherSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/level/seek/LowerFixedSomeSpec.scala b/core/src/test/scala/swaydb/core/level/seek/LowerFixedSomeSpec.scala index fd4efb934..b63ec2661 100644 --- a/core/src/test/scala/swaydb/core/level/seek/LowerFixedSomeSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/LowerFixedSomeSpec.scala @@ -31,6 +31,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class LowerFixedSomeSpec extends AnyWordSpec with Matchers with MockFactory with OptionValues { diff --git a/core/src/test/scala/swaydb/core/level/seek/LowerRangeSomeSpec.scala b/core/src/test/scala/swaydb/core/level/seek/LowerRangeSomeSpec.scala index 3d6a76d9c..9a18ecd87 100644 --- a/core/src/test/scala/swaydb/core/level/seek/LowerRangeSomeSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/LowerRangeSomeSpec.scala @@ -34,6 +34,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class LowerRangeSomeSpec extends AnyWordSpec with Matchers with MockFactory { diff --git a/core/src/test/scala/swaydb/core/level/seek/LowerSpec.scala b/core/src/test/scala/swaydb/core/level/seek/LowerSpec.scala index bc32980e5..6ad1a7f0f 100644 --- a/core/src/test/scala/swaydb/core/level/seek/LowerSpec.scala +++ b/core/src/test/scala/swaydb/core/level/seek/LowerSpec.scala @@ -26,6 +26,7 @@ import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class LowerSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/level/zero/LevelZeroLogCacheSpec.scala b/core/src/test/scala/swaydb/core/level/zero/LevelZeroLogCacheSpec.scala index b664166c0..af8bdc366 100644 --- a/core/src/test/scala/swaydb/core/level/zero/LevelZeroLogCacheSpec.scala +++ b/core/src/test/scala/swaydb/core/level/zero/LevelZeroLogCacheSpec.scala @@ -31,6 +31,7 @@ import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.TimeOrder +import swaydb.testkit.TestKit._ class LevelZeroLogCacheSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/level/zero/LevelZeroSpec.scala b/core/src/test/scala/swaydb/core/level/zero/LevelZeroSpec.scala index 819dcabc5..d51d5629d 100644 --- a/core/src/test/scala/swaydb/core/level/zero/LevelZeroSpec.scala +++ b/core/src/test/scala/swaydb/core/level/zero/LevelZeroSpec.scala @@ -21,7 +21,6 @@ import org.scalatest.OptionValues._ import swaydb.IO import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.config.compaction.LevelThrottle import swaydb.config.storage.LevelStorage import swaydb.core.CommonAssertions._ @@ -43,6 +42,7 @@ import swaydb.utils.StorageUnits._ import scala.concurrent.duration._ import scala.util.Random +import swaydb.testkit.TestKit._ class LevelZeroSpec0 extends LevelZeroSpec @@ -69,7 +69,6 @@ sealed trait LevelZeroSpec extends TestBase with MockFactory { implicit val keyOrder: KeyOrder[Slice[Byte]] = KeyOrder.default implicit val testTimer: TestTimer = TestTimer.Empty implicit val timeOrder = TimeOrder.long - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() import swaydb.core.log.serialiser.LevelZeroLogEntryWriter._ diff --git a/core/src/test/scala/swaydb/core/log/LogsSpec.scala b/core/src/test/scala/swaydb/core/log/LogsSpec.scala index fe8e8cb1a..763de65f7 100644 --- a/core/src/test/scala/swaydb/core/log/LogsSpec.scala +++ b/core/src/test/scala/swaydb/core/log/LogsSpec.scala @@ -28,16 +28,17 @@ import swaydb.core.level.zero.LevelZeroLogCache import swaydb.core.segment.data.{Memory, MemoryOption, Value} import swaydb.core.{TestBase, TestCaseSweeper, TestForceSave, TestTimer} import swaydb.effect.Effect._ -import swaydb.effect.{Effect, Extension} +import swaydb.effect.Effect import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ -import swaydb.utils.OperatingSystem +import swaydb.utils.{Extension, OperatingSystem} import swaydb.utils.StorageUnits._ import java.nio.file.NoSuchFileException +import swaydb.testkit.TestKit._ class LogsSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/log/MapSpec.scala b/core/src/test/scala/swaydb/core/log/MapSpec.scala index 268197648..100b1c439 100644 --- a/core/src/test/scala/swaydb/core/log/MapSpec.scala +++ b/core/src/test/scala/swaydb/core/log/MapSpec.scala @@ -33,16 +33,18 @@ import swaydb.core.segment.data.{Memory, MemoryOption, Value} import swaydb.core.segment.io.SegmentReadIO import swaydb.core.skiplist.SkipListConcurrent import swaydb.effect.Effect._ -import swaydb.effect.{Effect, Extension} +import swaydb.effect.Effect import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{Slice, SliceOption} import swaydb.testkit.RunThis._ -import swaydb.utils.OperatingSystem +import swaydb.utils.{Extension, OperatingSystem} import swaydb.utils.StorageUnits._ +import swaydb.testkit.TestKit._ import java.nio.file.{FileAlreadyExistsException, Path} +import swaydb.testkit.TestKit._ class MapSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/log/applied/AppliedFunctionsLogSpec.scala b/core/src/test/scala/swaydb/core/log/applied/AppliedFunctionsLogSpec.scala index 7f8deaf12..35a4f8909 100644 --- a/core/src/test/scala/swaydb/core/log/applied/AppliedFunctionsLogSpec.scala +++ b/core/src/test/scala/swaydb/core/log/applied/AppliedFunctionsLogSpec.scala @@ -30,6 +30,7 @@ import swaydb.slice.Slice import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ import swaydb.utils.StorageUnits._ +import swaydb.testkit.TestKit._ class AppliedFunctionsLogSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/log/counter/CounterLogSpec.scala b/core/src/test/scala/swaydb/core/log/counter/CounterLogSpec.scala index e00195bf1..46bef3e14 100644 --- a/core/src/test/scala/swaydb/core/log/counter/CounterLogSpec.scala +++ b/core/src/test/scala/swaydb/core/log/counter/CounterLogSpec.scala @@ -29,6 +29,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.StorageUnits._ import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ class CounterLogSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/log/serialiser/Level0LogEntrySpec.scala b/core/src/test/scala/swaydb/core/log/serialiser/Level0LogEntrySpec.scala index 1752e1e47..578173bb4 100644 --- a/core/src/test/scala/swaydb/core/log/serialiser/Level0LogEntrySpec.scala +++ b/core/src/test/scala/swaydb/core/log/serialiser/Level0LogEntrySpec.scala @@ -31,6 +31,7 @@ import swaydb.serializers._ import swaydb.slice.order.KeyOrder import swaydb.slice.{Slice, SliceOption} import swaydb.utils.ByteSizeOf +import swaydb.testkit.TestKit._ class Level0LogEntrySpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/log/serialiser/LevelZeroLogEntrySpec.scala b/core/src/test/scala/swaydb/core/log/serialiser/LevelZeroLogEntrySpec.scala index abdf7027e..1423d261f 100644 --- a/core/src/test/scala/swaydb/core/log/serialiser/LevelZeroLogEntrySpec.scala +++ b/core/src/test/scala/swaydb/core/log/serialiser/LevelZeroLogEntrySpec.scala @@ -33,6 +33,7 @@ import swaydb.slice.order.KeyOrder import swaydb.slice.{Slice, SliceOption} import swaydb.testkit.RunThis._ import swaydb.utils.ByteSizeOf +import swaydb.testkit.TestKit._ class LevelZeroLogEntrySpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/log/serialiser/ValueSerialiserSpec.scala b/core/src/test/scala/swaydb/core/log/serialiser/ValueSerialiserSpec.scala index 60b01a60a..126d888a4 100644 --- a/core/src/test/scala/swaydb/core/log/serialiser/ValueSerialiserSpec.scala +++ b/core/src/test/scala/swaydb/core/log/serialiser/ValueSerialiserSpec.scala @@ -26,6 +26,7 @@ import swaydb.slice.Slice import scala.collection.mutable import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ class ValueSerialiserSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/SegmentReadSpec.scala b/core/src/test/scala/swaydb/core/segment/SegmentReadSpec.scala index 69fbb7e2b..74af2c196 100644 --- a/core/src/test/scala/swaydb/core/segment/SegmentReadSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/SegmentReadSpec.scala @@ -39,6 +39,7 @@ import swaydb.utils.OperatingSystem import java.nio.file.NoSuchFileException import scala.concurrent.duration._ import scala.util.Random +import swaydb.testkit.TestKit._ class SegmentReadSpec0 extends SegmentReadSpec { val keyValuesCount = 100 diff --git a/core/src/test/scala/swaydb/core/segment/SegmentSearcherSpec.scala b/core/src/test/scala/swaydb/core/segment/SegmentSearcherSpec.scala index c8e5e5585..0aae195a2 100644 --- a/core/src/test/scala/swaydb/core/segment/SegmentSearcherSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/SegmentSearcherSpec.scala @@ -35,6 +35,7 @@ import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ import scala.util.Try +import swaydb.testkit.TestKit._ class SegmentSearcherSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/segment/SegmentSerialiserSpec.scala b/core/src/test/scala/swaydb/core/segment/SegmentSerialiserSpec.scala index 4652eb538..0bc256b01 100644 --- a/core/src/test/scala/swaydb/core/segment/SegmentSerialiserSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/SegmentSerialiserSpec.scala @@ -26,6 +26,7 @@ import swaydb.core.{TestBase, TestCaseSweeper} import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class SegmentSerialiserSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/segment/SegmentWriteSpec.scala b/core/src/test/scala/swaydb/core/segment/SegmentWriteSpec.scala index 29eb76f8d..d7835357d 100644 --- a/core/src/test/scala/swaydb/core/segment/SegmentWriteSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/SegmentWriteSpec.scala @@ -20,7 +20,6 @@ import org.scalatest.OptionValues.convertOptionToValuable import swaydb.Error.Segment.ExceptionHandler import swaydb.IOValues._ import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.PrivateMethodInvokers._ import swaydb.core.TestCaseSweeper._ @@ -43,16 +42,15 @@ import swaydb.core.segment.data.merge.stats.MergeStats import swaydb.core.segment.io.SegmentReadIO import swaydb.core.segment.ref.SegmentRef import swaydb.core.segment.ref.search.ThreadReadState -import swaydb.core.util.IDGenerator +import swaydb.utils.{ByteSizeOf, Extension, IDGenerator, OperatingSystem} import swaydb.effect.Effect._ -import swaydb.effect.{Dir, Effect, Extension} +import swaydb.effect.{Dir, Effect} import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.slice.{MaxKey, Slice} import swaydb.testkit.RunThis._ import swaydb.utils.StorageUnits._ -import swaydb.utils.{ByteSizeOf, OperatingSystem} import swaydb.{ActorConfig, Benchmark, IO} import java.nio.file.{FileAlreadyExistsException, NoSuchFileException} @@ -60,6 +58,7 @@ import scala.collection.mutable.ListBuffer import scala.concurrent.duration._ import scala.jdk.CollectionConverters._ import scala.util.Random +import swaydb.testkit.TestKit._ class SegmentWriteSpec0 extends SegmentWriteSpec @@ -90,7 +89,6 @@ sealed trait SegmentWriteSpec extends TestBase { implicit val ec = TestExecutionContext.executionContext implicit val keyOrder = KeyOrder.default implicit val timeOrder: TimeOrder[Slice[Byte]] = TimeOrder.long - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() implicit def segmentIO = SegmentReadIO.random "Segment" should { @@ -985,8 +983,7 @@ sealed trait SegmentWriteSpec extends TestBase { forceSaveApplier = forceSaveApplier, segmentIO = segmentIO, idGenerator = segmentIDGenerator, - ec = TestExecutionContext.executionContext, - compactionParallelism = CompactionParallelism.availableProcessors() + ec = TestExecutionContext.executionContext ).awaitInf.map(_.sweep()) } diff --git a/core/src/test/scala/swaydb/core/segment/assigner/Assigner_AssignKeyValues_Spec.scala b/core/src/test/scala/swaydb/core/segment/assigner/Assigner_AssignKeyValues_Spec.scala index 1551b6216..387855312 100644 --- a/core/src/test/scala/swaydb/core/segment/assigner/Assigner_AssignKeyValues_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/assigner/Assigner_AssignKeyValues_Spec.scala @@ -35,6 +35,7 @@ import swaydb.utils.PipeOps._ import scala.collection.mutable.ListBuffer import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class Segment_AssignerAssignKeyValues_Spec0 extends Assigner_AssignKeyValues_Spec { val keyValueCount = 100 diff --git a/core/src/test/scala/swaydb/core/segment/assigner/SegmentAssigner_Assign_Spec.scala b/core/src/test/scala/swaydb/core/segment/assigner/SegmentAssigner_Assign_Spec.scala index 39796f2d5..d129105d6 100644 --- a/core/src/test/scala/swaydb/core/segment/assigner/SegmentAssigner_Assign_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/assigner/SegmentAssigner_Assign_Spec.scala @@ -30,6 +30,7 @@ import swaydb.utils.OperatingSystem import swaydb.utils.PipeOps._ import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ class SegmentAssigner_Assign_Spec0 extends SegmentAssigner_Assign_Spec { val keyValueCount = 100 diff --git a/core/src/test/scala/swaydb/core/segment/block/BlockCacheSpec.scala b/core/src/test/scala/swaydb/core/segment/block/BlockCacheSpec.scala index cbf11e2f7..e3d29582a 100644 --- a/core/src/test/scala/swaydb/core/segment/block/BlockCacheSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/BlockCacheSpec.scala @@ -28,6 +28,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.StorageUnits._ import scala.jdk.CollectionConverters._ +import swaydb.testkit.TestKit._ class BlockCacheSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/segment/block/BlockSpec.scala b/core/src/test/scala/swaydb/core/segment/block/BlockSpec.scala index 90fa643f4..b600cc735 100644 --- a/core/src/test/scala/swaydb/core/segment/block/BlockSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/BlockSpec.scala @@ -10,6 +10,7 @@ import swaydb.core.segment.block.values.{ValuesBlock, ValuesBlockOffset} import swaydb.effect.IOAction import swaydb.slice.Slice import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class BlockSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/segment/block/SegmentBlockCacheSpec.scala b/core/src/test/scala/swaydb/core/segment/block/SegmentBlockCacheSpec.scala index 3d0038bde..ec50587f4 100644 --- a/core/src/test/scala/swaydb/core/segment/block/SegmentBlockCacheSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/SegmentBlockCacheSpec.scala @@ -31,6 +31,7 @@ import scala.collection.parallel.CollectionConverters._ import scala.concurrent.duration._ import scala.jdk.CollectionConverters._ import scala.util.Random +import swaydb.testkit.TestKit._ class SegmentBlockCacheSpec extends TestBase { implicit val order = KeyOrder.default diff --git a/core/src/test/scala/swaydb/core/segment/block/SegmentBlockInitialisationSpec.scala b/core/src/test/scala/swaydb/core/segment/block/SegmentBlockInitialisationSpec.scala index 6bf9077d8..186afe966 100644 --- a/core/src/test/scala/swaydb/core/segment/block/SegmentBlockInitialisationSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/SegmentBlockInitialisationSpec.scala @@ -38,6 +38,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.StorageUnits._ import scala.util.Random +import swaydb.testkit.TestKit._ class SegmentBlockInitialisationSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/segment/block/binarysearch/BinarySearchIndexBlock_Segment_RandomSearch_Spec.scala b/core/src/test/scala/swaydb/core/segment/block/binarysearch/BinarySearchIndexBlock_Segment_RandomSearch_Spec.scala index 96c18071b..22dc0882e 100644 --- a/core/src/test/scala/swaydb/core/segment/block/binarysearch/BinarySearchIndexBlock_Segment_RandomSearch_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/binarysearch/BinarySearchIndexBlock_Segment_RandomSearch_Spec.scala @@ -31,6 +31,7 @@ import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ import scala.util.Try +import swaydb.testkit.TestKit._ class BinarySearchIndexBlock_Segment_RandomSearch_Spec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/segment/block/bloomfilter/BloomFilterBlockSpec.scala b/core/src/test/scala/swaydb/core/segment/block/bloomfilter/BloomFilterBlockSpec.scala index 61b0b04ce..f2a4e9251 100644 --- a/core/src/test/scala/swaydb/core/segment/block/bloomfilter/BloomFilterBlockSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/bloomfilter/BloomFilterBlockSpec.scala @@ -17,7 +17,6 @@ package swaydb.core.segment.block.bloomfilter import org.scalatest.OptionValues._ -import swaydb.core.CommonAssertions.{eitherOne, orNone} import swaydb.core.TestData._ import swaydb.core.segment.block.reader.{BlockRefReader, UnblockedReader} import swaydb.core.segment.block.{Block, BlockCache} @@ -26,6 +25,7 @@ import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import scala.util.Random diff --git a/core/src/test/scala/swaydb/core/segment/block/hashindex/HashIndexBlockSpec.scala b/core/src/test/scala/swaydb/core/segment/block/hashindex/HashIndexBlockSpec.scala index 4fa5daa0b..beb11673a 100644 --- a/core/src/test/scala/swaydb/core/segment/block/hashindex/HashIndexBlockSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/hashindex/HashIndexBlockSpec.scala @@ -27,6 +27,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class HashIndexBlockSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/segment/block/reader/BlockRefReaderSpec.scala b/core/src/test/scala/swaydb/core/segment/block/reader/BlockRefReaderSpec.scala index a613493fb..6dbe18238 100644 --- a/core/src/test/scala/swaydb/core/segment/block/reader/BlockRefReaderSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/reader/BlockRefReaderSpec.scala @@ -18,7 +18,6 @@ package swaydb.core.segment.block.reader import org.scalamock.scalatest.MockFactory import swaydb.compression.CompressionInternal -import swaydb.core.CommonAssertions.orNone import swaydb.core.TestData._ import swaydb.core.file.reader.Reader import swaydb.core.segment.block.segment.SegmentBlockOffset @@ -27,6 +26,7 @@ import swaydb.core.segment.block.values.ValuesBlockOffset.ValuesBlockOps import swaydb.core.segment.block.{Block, BlockCache} import swaydb.core.{TestBase, TestCaseSweeper} import swaydb.slice.{Reader, Slice} +import swaydb.testkit.TestKit._ class BlockRefReaderSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/segment/block/reader/BlockedReaderSpec.scala b/core/src/test/scala/swaydb/core/segment/block/reader/BlockedReaderSpec.scala index cfa404c16..3882d1c53 100644 --- a/core/src/test/scala/swaydb/core/segment/block/reader/BlockedReaderSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/reader/BlockedReaderSpec.scala @@ -17,7 +17,6 @@ package swaydb.core.segment.block.reader import org.scalamock.scalatest.MockFactory -import swaydb.core.CommonAssertions.orNone import swaydb.core.TestData._ import swaydb.core.segment.block.segment.{SegmentBlock, SegmentBlockOffset} import swaydb.core.segment.block.values.ValuesBlockOffset @@ -25,6 +24,7 @@ import swaydb.core.segment.block.{Block, BlockCache, BlockOps} import swaydb.core.{TestBase, TestCaseSweeper} import swaydb.slice.Slice import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class BlockedReaderSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/segment/block/segment/SegmentBlockSpec.scala b/core/src/test/scala/swaydb/core/segment/block/segment/SegmentBlockSpec.scala index d1b89028f..0222c8df0 100644 --- a/core/src/test/scala/swaydb/core/segment/block/segment/SegmentBlockSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/segment/SegmentBlockSpec.scala @@ -17,7 +17,6 @@ package swaydb.core.segment.block.segment import org.scalatest.OptionValues._ -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core.file.reader.Reader @@ -37,6 +36,7 @@ import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ class SegmentBlockSpec extends TestBase { @@ -47,7 +47,6 @@ class SegmentBlockSpec extends TestBase { implicit def testTimer: TestTimer = TestTimer.random implicit def segmentIO: SegmentReadIO = SegmentReadIO.random implicit val ec = TestExecutionContext.executionContext - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "SegmentBlock" should { "convert empty KeyValues and not throw exception but return empty bytes" in { diff --git a/core/src/test/scala/swaydb/core/segment/block/sortedindex/SortedIndexBlockSpec.scala b/core/src/test/scala/swaydb/core/segment/block/sortedindex/SortedIndexBlockSpec.scala index 820c545c7..39a458fec 100644 --- a/core/src/test/scala/swaydb/core/segment/block/sortedindex/SortedIndexBlockSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/sortedindex/SortedIndexBlockSpec.scala @@ -34,6 +34,7 @@ import swaydb.{Benchmark, Compression} import scala.collection.mutable.ListBuffer import scala.collection.parallel.CollectionConverters._ +import swaydb.testkit.TestKit._ class SortedIndexBlockSpec extends TestBase with PrivateMethodTester { diff --git a/core/src/test/scala/swaydb/core/segment/block/values/ValuesBlockSpec.scala b/core/src/test/scala/swaydb/core/segment/block/values/ValuesBlockSpec.scala index 95c7e700d..6172a6126 100644 --- a/core/src/test/scala/swaydb/core/segment/block/values/ValuesBlockSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/block/values/ValuesBlockSpec.scala @@ -32,6 +32,7 @@ import swaydb.testkit.RunThis._ import scala.collection.mutable.ListBuffer import scala.collection.parallel.CollectionConverters._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class ValuesBlockSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_PendingApply_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_PendingApply_Spec.scala index 999ba698c..79274e3a7 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_PendingApply_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_PendingApply_Spec.scala @@ -26,6 +26,7 @@ import swaydb.core.segment.data.Memory import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class FunctionMerger_PendingApply_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Put_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Put_Spec.scala index eba139f98..e708ac603 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Put_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Put_Spec.scala @@ -27,6 +27,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class FunctionMerger_Put_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Remove_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Remove_Spec.scala index baee10130..c0cd47c2d 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Remove_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Remove_Spec.scala @@ -28,6 +28,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class FunctionMerger_Remove_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Update_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Update_Spec.scala index df56b2906..dd6829b8e 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Update_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/FunctionMerger_Update_Spec.scala @@ -30,6 +30,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class FunctionMerger_Update_Spec extends AnyWordSpec with Matchers with MockFactory { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/KeyValueGrouperSpec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/KeyValueGrouperSpec.scala index 7186568e1..f841a0194 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/KeyValueGrouperSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/KeyValueGrouperSpec.scala @@ -24,6 +24,7 @@ import swaydb.core.{TestBase, TestTimer} import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class KeyValueGrouperSpec extends TestBase { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/PutMergerSpec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/PutMergerSpec.scala index e43e011c1..fb0acbf55 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/PutMergerSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/PutMergerSpec.scala @@ -26,6 +26,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class PutMergerSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMergerSpec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMergerSpec.scala index e9c964d73..1df7d7b20 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMergerSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMergerSpec.scala @@ -27,6 +27,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class RemoveMergerSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Function_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Function_Spec.scala index 51f73c217..717d281ed 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Function_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Function_Spec.scala @@ -28,6 +28,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class RemoveMerger_Function_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_PendingApply_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_PendingApply_Spec.scala index fac21a281..6578c67e0 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_PendingApply_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_PendingApply_Spec.scala @@ -27,6 +27,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class RemoveMerger_PendingApply_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Put_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Put_Spec.scala index 925a625db..dadf135d2 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Put_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Put_Spec.scala @@ -26,6 +26,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class RemoveMerger_Put_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Remove_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Remove_Spec.scala index d744ca472..5be346946 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Remove_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Remove_Spec.scala @@ -26,6 +26,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class RemoveMerger_Remove_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Update_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Update_Spec.scala index ea901391b..32d7dbe2c 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Update_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/RemoveMerger_Update_Spec.scala @@ -26,6 +26,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class RemoveMerger_Update_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Function_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Function_Spec.scala index 0d400173c..6f0d6f737 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Function_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Function_Spec.scala @@ -28,6 +28,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class UpdateMerger_Function_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_PendingApply_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_PendingApply_Spec.scala index 96feec4b4..d592688fe 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_PendingApply_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_PendingApply_Spec.scala @@ -27,6 +27,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class UpdateMerger_PendingApply_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Put_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Put_Spec.scala index 230e236aa..5ff6e8a35 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Put_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Put_Spec.scala @@ -26,6 +26,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class UpdateMerger_Put_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Remove_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Remove_Spec.scala index 6238402fe..89f8b44ce 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Remove_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Remove_Spec.scala @@ -26,6 +26,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class UpdateMerger_Remove_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Update_Spec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Update_Spec.scala index 6d1b1cbf9..a8d147fcc 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Update_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/UpdateMerger_Update_Spec.scala @@ -26,6 +26,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class UpdateMerger_Update_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/data/merge/stats/MergeStatsSizeCalculatorSpec.scala b/core/src/test/scala/swaydb/core/segment/data/merge/stats/MergeStatsSizeCalculatorSpec.scala index 300a368c4..2b57e761e 100644 --- a/core/src/test/scala/swaydb/core/segment/data/merge/stats/MergeStatsSizeCalculatorSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/data/merge/stats/MergeStatsSizeCalculatorSpec.scala @@ -26,6 +26,7 @@ import swaydb.core.{TestBase, TestExecutionContext, TestTimer} import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class MergeStatsSizeCalculatorSpec extends TestBase with MockFactory with EitherValues { diff --git a/core/src/test/scala/swaydb/core/segment/defrag/DefragGapSpec.scala b/core/src/test/scala/swaydb/core/segment/defrag/DefragGapSpec.scala index 68735cc17..70ae34812 100644 --- a/core/src/test/scala/swaydb/core/segment/defrag/DefragGapSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/defrag/DefragGapSpec.scala @@ -36,6 +36,7 @@ import swaydb.utils.StorageUnits._ import scala.collection.compat._ import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ /** * Test setup for when input types are [[PersistentSegment]] diff --git a/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunMany_Spec.scala b/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunMany_Spec.scala index 92c016670..140860278 100644 --- a/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunMany_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunMany_Spec.scala @@ -19,7 +19,6 @@ package swaydb.core.segment.defrag import org.scalamock.scalatest.MockFactory import org.scalatest.EitherValues import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core.segment.PathsDistributor @@ -40,6 +39,7 @@ import swaydb.testkit.RunThis._ import scala.collection.mutable.ListBuffer import scala.concurrent.ExecutionContext import scala.util.Random +import swaydb.testkit.TestKit._ class DefragSegment_RunMany_Spec extends TestBase with MockFactory with EitherValues { @@ -49,7 +49,6 @@ class DefragSegment_RunMany_Spec extends TestBase with MockFactory with EitherVa implicit val keyOrder: KeyOrder[Slice[Byte]] = KeyOrder.default implicit val timerOrder: TimeOrder[Slice[Byte]] = TimeOrder.long implicit def segmentReadIO: SegmentReadIO = SegmentReadIO.random - implicit val compactionParallelism: CompactionParallelism = CompactionParallelism.availableProcessors() "NO GAP - empty should result in empty" in { runThis(20.times, log = true) { diff --git a/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunOne_Spec.scala b/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunOne_Spec.scala index 1ecae17f2..3e2890070 100644 --- a/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunOne_Spec.scala +++ b/core/src/test/scala/swaydb/core/segment/defrag/DefragSegment_RunOne_Spec.scala @@ -19,7 +19,6 @@ package swaydb.core.segment.defrag import org.scalamock.scalatest.MockFactory import org.scalatest.EitherValues import swaydb.config.MMAP -import swaydb.config.compaction.CompactionConfig.CompactionParallelism import swaydb.core.CommonAssertions._ import swaydb.core.TestData._ import swaydb.core.segment.assigner.Assignable @@ -42,6 +41,7 @@ import swaydb.testkit.RunThis._ import scala.collection.compat._ import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ class DefragSegment_RunOne_Spec extends TestBase with MockFactory with EitherValues { @@ -51,7 +51,6 @@ class DefragSegment_RunOne_Spec extends TestBase with MockFactory with EitherVal implicit val keyOrder = KeyOrder.default implicit val timerOrder = TimeOrder.long implicit def segmentReadIO = SegmentReadIO.random - implicit val compactionParallelism = CompactionParallelism.availableProcessors() implicit val keyValueKeyOrder = keyOrder.on[KeyValue](_.key) "NO GAPS - no key-values to merge" should { diff --git a/core/src/test/scala/swaydb/core/segment/defrag/DefragSpec.scala b/core/src/test/scala/swaydb/core/segment/defrag/DefragSpec.scala index a5f8625cc..93d1cfb1d 100644 --- a/core/src/test/scala/swaydb/core/segment/defrag/DefragSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/defrag/DefragSpec.scala @@ -38,6 +38,7 @@ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ import scala.collection.mutable.ListBuffer +import swaydb.testkit.TestKit._ /** * Test setup for when input types are [[PersistentSegment]] diff --git a/core/src/test/scala/swaydb/core/segment/entry/EntryReaderWriterSpec.scala b/core/src/test/scala/swaydb/core/segment/entry/EntryReaderWriterSpec.scala index f48dec267..e18d436a2 100644 --- a/core/src/test/scala/swaydb/core/segment/entry/EntryReaderWriterSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/entry/EntryReaderWriterSpec.scala @@ -33,6 +33,7 @@ import swaydb.slice.order.KeyOrder import swaydb.testkit.RunThis._ import scala.util.Random +import swaydb.testkit.TestKit._ class EntryReaderWriterSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/entry/writer/DeadlineReaderWriterSpec.scala b/core/src/test/scala/swaydb/core/segment/entry/writer/DeadlineReaderWriterSpec.scala index d9b48eb51..57dff0c70 100644 --- a/core/src/test/scala/swaydb/core/segment/entry/writer/DeadlineReaderWriterSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/entry/writer/DeadlineReaderWriterSpec.scala @@ -29,6 +29,7 @@ import swaydb.testkit.RunThis._ import java.util.concurrent.TimeUnit import scala.concurrent.duration.{FiniteDuration, _} +import swaydb.testkit.TestKit._ class DeadlineReaderWriterSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/entry/writer/ValueReaderWriterSpec.scala b/core/src/test/scala/swaydb/core/segment/entry/writer/ValueReaderWriterSpec.scala index 012cb645a..e9b3b076e 100644 --- a/core/src/test/scala/swaydb/core/segment/entry/writer/ValueReaderWriterSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/entry/writer/ValueReaderWriterSpec.scala @@ -26,6 +26,7 @@ import swaydb.serializers.Default._ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class ValueReaderWriterSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/ref/SegmentRefGetBehaviorSpec.scala b/core/src/test/scala/swaydb/core/segment/ref/SegmentRefGetBehaviorSpec.scala index eef6429b9..0f90fe469 100644 --- a/core/src/test/scala/swaydb/core/segment/ref/SegmentRefGetBehaviorSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/ref/SegmentRefGetBehaviorSpec.scala @@ -37,6 +37,7 @@ import swaydb.slice.order.{KeyOrder, TimeOrder} import swaydb.testkit.RunThis._ import java.nio.file.Paths +import swaydb.testkit.TestKit._ class SegmentRefGetBehaviorSpec extends TestBase with MockFactory { diff --git a/core/src/test/scala/swaydb/core/segment/ref/search/SegmentReadStateSpec.scala b/core/src/test/scala/swaydb/core/segment/ref/search/SegmentReadStateSpec.scala index 2df690a45..e620d98bc 100644 --- a/core/src/test/scala/swaydb/core/segment/ref/search/SegmentReadStateSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/ref/search/SegmentReadStateSpec.scala @@ -28,6 +28,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.TupleOrNone import java.nio.file.Paths +import swaydb.testkit.TestKit._ class SegmentReadStateSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/segment/ref/search/ThreadReadStateSpec.scala b/core/src/test/scala/swaydb/core/segment/ref/search/ThreadReadStateSpec.scala index 54f186659..8e0fd0980 100644 --- a/core/src/test/scala/swaydb/core/segment/ref/search/ThreadReadStateSpec.scala +++ b/core/src/test/scala/swaydb/core/segment/ref/search/ThreadReadStateSpec.scala @@ -21,6 +21,7 @@ import org.scalatest.wordspec.AnyWordSpec import swaydb.core.TestData._ import java.nio.file.Paths +import swaydb.testkit.TestKit._ class ThreadReadStateSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/util/AtomicRangesSpec.scala b/core/src/test/scala/swaydb/core/util/AtomicRangesSpec.scala index a59e174a5..c600e998d 100644 --- a/core/src/test/scala/swaydb/core/util/AtomicRangesSpec.scala +++ b/core/src/test/scala/swaydb/core/util/AtomicRangesSpec.scala @@ -32,6 +32,7 @@ import java.util.concurrent.ConcurrentSkipListMap import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.util.{Random, Try} +import swaydb.testkit.TestKit._ class AtomicRanges_FutureSpec extends AtomicRangesSpec[Future]()(Bag.future(TestExecutionContext.executionContext)) { diff --git a/core/src/test/scala/swaydb/core/util/BytesSpec.scala b/core/src/test/scala/swaydb/core/util/BytesSpec.scala index 8787c6c53..7d9f80373 100644 --- a/core/src/test/scala/swaydb/core/util/BytesSpec.scala +++ b/core/src/test/scala/swaydb/core/util/BytesSpec.scala @@ -28,6 +28,7 @@ import swaydb.serializers._ import swaydb.slice.Slice import swaydb.testkit.RunThis._ import swaydb.utils.StorageUnits._ +import swaydb.testkit.TestKit._ class BytesSpec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/util/Bytes_ScalaByteOpsAPI_Spec.scala b/core/src/test/scala/swaydb/core/util/Bytes_ScalaByteOpsAPI_Spec.scala index 4b53c6a80..2dbf62291 100644 --- a/core/src/test/scala/swaydb/core/util/Bytes_ScalaByteOpsAPI_Spec.scala +++ b/core/src/test/scala/swaydb/core/util/Bytes_ScalaByteOpsAPI_Spec.scala @@ -10,6 +10,7 @@ import swaydb.utils.ByteSizeOf import java.nio.charset.StandardCharsets import scala.util.Random +import swaydb.testkit.TestKit._ class Bytes_ScalaByteOpsAPI_Spec extends AnyWordSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/util/CRC32Spec.scala b/core/src/test/scala/swaydb/core/util/CRC32Spec.scala index b8878395d..799507ead 100644 --- a/core/src/test/scala/swaydb/core/util/CRC32Spec.scala +++ b/core/src/test/scala/swaydb/core/util/CRC32Spec.scala @@ -21,6 +21,7 @@ import org.scalatest.matchers.should.Matchers import swaydb.core.TestData._ import swaydb.slice.Slice import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ class CRC32Spec extends AnyFlatSpec with Matchers { diff --git a/core/src/test/scala/swaydb/core/util/MinMaxSpec.scala b/core/src/test/scala/swaydb/core/util/MinMaxSpec.scala index 32da4fd79..3d394fd47 100644 --- a/core/src/test/scala/swaydb/core/util/MinMaxSpec.scala +++ b/core/src/test/scala/swaydb/core/util/MinMaxSpec.scala @@ -29,6 +29,7 @@ import swaydb.testkit.RunThis._ import swaydb.utils.ByteSizeOf import scala.util.Random +import swaydb.testkit.TestKit._ class MinMaxSpec extends AnyWordSpec with Matchers { diff --git a/effect/src/main/scala/swaydb/effect/Effect.scala b/effect/src/main/scala/swaydb/effect/Effect.scala index 4227ddc29..f6e87316e 100644 --- a/effect/src/main/scala/swaydb/effect/Effect.scala +++ b/effect/src/main/scala/swaydb/effect/Effect.scala @@ -18,6 +18,7 @@ package swaydb.effect import com.typesafe.scalalogging.LazyLogging import swaydb.IO +import swaydb.utils.Extension import java.io.IOException import java.nio.ByteBuffer diff --git a/effect/src/test/scala/swaydb/effect/Base.scala b/effect/src/test/scala/swaydb/effect/Base.scala index 640611b3a..c6d1caf31 100644 --- a/effect/src/test/scala/swaydb/effect/Base.scala +++ b/effect/src/test/scala/swaydb/effect/Base.scala @@ -39,36 +39,4 @@ object Base { def randomBusyError(busyBoolean: Reserve[Unit] = Reserve.free(name = "randomBusyError")): swaydb.Error.Recoverable = Random.shuffle(busyErrors(busyBoolean)).head - def eitherOne[T](left: => T, right: => T): T = - if (Random.nextBoolean()) - left - else - right - - def orNone[T](option: => Option[T]): Option[T] = - if (Random.nextBoolean()) - None - else - option - - def anyOrder[T](left: => T, right: => T): Unit = - if (Random.nextBoolean()) { - left - right - } else { - right - left - } - - def eitherOne[T](left: => T, mid: => T, right: => T): T = - Random.shuffle(Seq(() => left, () => mid, () => right)).head() - - def eitherOne[T](one: => T, two: => T, three: => T, four: => T): T = - Random.shuffle(Seq(() => one, () => two, () => three, () => four)).head() - - def eitherOne[T](one: => T, two: => T, three: => T, four: => T, five: => T): T = - Random.shuffle(Seq(() => one, () => two, () => three, () => four, () => five)).head() - - def eitherOne[T](one: => T, two: => T, three: => T, four: => T, five: => T, six: => T): T = - Random.shuffle(Seq(() => one, () => two, () => three, () => four, () => five, () => six)).head() } diff --git a/slice/src/test/scala/swaydb/slice/SliceOptionSpec.scala b/slice/src/test/scala/swaydb/slice/SliceOptionSpec.scala index c13e2c0d1..a8c2f9c3b 100644 --- a/slice/src/test/scala/swaydb/slice/SliceOptionSpec.scala +++ b/slice/src/test/scala/swaydb/slice/SliceOptionSpec.scala @@ -23,7 +23,6 @@ import scala.util.Random class SliceOptionSpec extends AnyWordSpec with Matchers { - def randomByte() = (Random.nextInt(256) - 128).toByte val slice: Slice[Int] = Slice(1, 2, 3) "getOrElse" in { diff --git a/stress/src/test/scala/swaydb/stress/simulation/SimulationSpec.scala b/stress/src/test/scala/swaydb/stress/simulation/SimulationSpec.scala index 29e536607..f8ffe4b26 100644 --- a/stress/src/test/scala/swaydb/stress/simulation/SimulationSpec.scala +++ b/stress/src/test/scala/swaydb/stress/simulation/SimulationSpec.scala @@ -37,6 +37,7 @@ import scala.collection.mutable import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.util.{Random, Try} +import swaydb.testkit.TestKit._ sealed trait RemoveAsserted object RemoveAsserted { diff --git a/stress/src/test/scala/swaydb/stress/weather/WeatherDataSpec.scala b/stress/src/test/scala/swaydb/stress/weather/WeatherDataSpec.scala index 907fa9ae6..f7b416c59 100644 --- a/stress/src/test/scala/swaydb/stress/weather/WeatherDataSpec.scala +++ b/stress/src/test/scala/swaydb/stress/weather/WeatherDataSpec.scala @@ -27,6 +27,7 @@ import swaydb.{Bag, IO, OK} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ trait WeatherDataSpec extends TestBase with LazyLogging { diff --git a/swaydb/src/main/scala/swaydb/CommonConfigs.scala b/swaydb/src/main/scala/swaydb/CommonConfigs.scala index ecdeab533..0cd9c6b4c 100644 --- a/swaydb/src/main/scala/swaydb/CommonConfigs.scala +++ b/swaydb/src/main/scala/swaydb/CommonConfigs.scala @@ -33,19 +33,12 @@ case object CommonConfigs { val actorExecutionContext = DefaultExecutionContext.compactionEC(maxThreads = 1) //Remaining threads are the maximum threads minus the one reserved above. - val availableCompactionThreads = maxThreads - 1 - val compactionExecutionContext = DefaultExecutionContext.compactionEC(maxThreads = availableCompactionThreads) + val compactionExecutionContext = DefaultExecutionContext.compactionEC(maxThreads = maxThreads - 1) CompactionConfig( resetCompactionPriorityAtInterval = 3, actorExecutionContext = actorExecutionContext, compactionExecutionContext = compactionExecutionContext, - levelZeroFlattenParallelism = availableCompactionThreads, - levelZeroMergeParallelism = availableCompactionThreads, - multiLevelTaskParallelism = availableCompactionThreads, - levelSegmentAssignmentParallelism = availableCompactionThreads, - groupedSegmentDefragParallelism = availableCompactionThreads, - defragmentedSegmentParallelism = availableCompactionThreads, pushStrategy = PushStrategy.OnOverflow ) } diff --git a/swaydb/src/test/scala/swaydb/api/SwayDBBooPickleSpec.scala b/swaydb/src/test/scala/swaydb/api/SwayDBBooPickleSpec.scala index 04878c8e5..3232c670d 100644 --- a/swaydb/src/test/scala/swaydb/api/SwayDBBooPickleSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/SwayDBBooPickleSpec.scala @@ -25,6 +25,7 @@ import swaydb.core.TestData._ import swaydb.testkit.RunThis.runThis import scala.util.Random +import swaydb.testkit.TestKit._ class SwayDBBooPickleSpec extends TestBaseEmbedded { diff --git a/swaydb/src/test/scala/swaydb/api/SwayDBExpireSpec.scala b/swaydb/src/test/scala/swaydb/api/SwayDBExpireSpec.scala index c351a50bf..49fe46e25 100644 --- a/swaydb/src/test/scala/swaydb/api/SwayDBExpireSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/SwayDBExpireSpec.scala @@ -26,6 +26,7 @@ import swaydb.serializers.Default._ import swaydb.testkit.RunThis._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class SwayDBExpireSpec0 extends SwayDBExpireSpec { val keyValueCount: Int = 1000 diff --git a/swaydb/src/test/scala/swaydb/api/SwayDBFunctionSpec.scala b/swaydb/src/test/scala/swaydb/api/SwayDBFunctionSpec.scala index b73f005d5..286aae4bb 100644 --- a/swaydb/src/test/scala/swaydb/api/SwayDBFunctionSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/SwayDBFunctionSpec.scala @@ -31,6 +31,7 @@ import swaydb.{Apply, IO, Prepare, PureFunction, StorageIntImplicits} import scala.collection.parallel.CollectionConverters._ import scala.concurrent.duration.DurationInt +import swaydb.testkit.TestKit._ sealed trait Key object Key { diff --git a/swaydb/src/test/scala/swaydb/api/SwayDBPutSpec.scala b/swaydb/src/test/scala/swaydb/api/SwayDBPutSpec.scala index 28d0d634e..5509ad8df 100644 --- a/swaydb/src/test/scala/swaydb/api/SwayDBPutSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/SwayDBPutSpec.scala @@ -26,6 +26,7 @@ import swaydb.serializers.Default._ import swaydb.testkit.RunThis._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class SwayDBPutSpec0 extends SwayDBPutSpec { val keyValueCount: Int = 1000 diff --git a/swaydb/src/test/scala/swaydb/api/SwayDBRemoveSpec.scala b/swaydb/src/test/scala/swaydb/api/SwayDBRemoveSpec.scala index e991ab660..b32ce835c 100644 --- a/swaydb/src/test/scala/swaydb/api/SwayDBRemoveSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/SwayDBRemoveSpec.scala @@ -18,11 +18,11 @@ package swaydb.api import swaydb.IOValues._ import swaydb._ -import swaydb.core.CommonAssertions._ import swaydb.core.TestCaseSweeper import swaydb.core.TestCaseSweeper._ import swaydb.serializers.Default._ import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import scala.concurrent.duration._ diff --git a/swaydb/src/test/scala/swaydb/api/SwayDBUpdateSpec.scala b/swaydb/src/test/scala/swaydb/api/SwayDBUpdateSpec.scala index 55bc3cc9c..5f122ca38 100644 --- a/swaydb/src/test/scala/swaydb/api/SwayDBUpdateSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/SwayDBUpdateSpec.scala @@ -26,6 +26,7 @@ import swaydb.serializers.Default._ import swaydb.testkit.RunThis._ import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class SwayDBUpdateSpec0 extends SwayDBUpdateSpec { val keyValueCount: Int = 1000 diff --git a/swaydb/src/test/scala/swaydb/api/TestBaseEmbedded.scala b/swaydb/src/test/scala/swaydb/api/TestBaseEmbedded.scala index c905d28e1..08a6fc4ae 100644 --- a/swaydb/src/test/scala/swaydb/api/TestBaseEmbedded.scala +++ b/swaydb/src/test/scala/swaydb/api/TestBaseEmbedded.scala @@ -22,11 +22,11 @@ import swaydb.IO.ApiIO import swaydb.IOValues._ import swaydb._ import swaydb.config.sequencer.Sequencer -import swaydb.core.CommonAssertions.eitherOne import swaydb.core.{Core, TestBase, TestExecutionContext} import swaydb.multimap.{MultiKey, MultiValue} import swaydb.slice.Slice import swaydb.testkit.RunThis._ +import swaydb.testkit.TestKit._ import scala.annotation.tailrec import scala.concurrent.Future diff --git a/swaydb/src/test/scala/swaydb/api/multimap/FromMultiMapSpec.scala b/swaydb/src/test/scala/swaydb/api/multimap/FromMultiMapSpec.scala index 54d35be23..f18451cd4 100644 --- a/swaydb/src/test/scala/swaydb/api/multimap/FromMultiMapSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/multimap/FromMultiMapSpec.scala @@ -27,6 +27,7 @@ import swaydb.utils.StorageUnits._ import swaydb.{Bag, Glass, MultiMap} import scala.util.Random +import swaydb.testkit.TestKit._ class FromMultiMapSpec0 extends FromMultiMapSpec { val keyValueCount: Int = 1000 diff --git a/swaydb/src/test/scala/swaydb/api/multimap/MultiKeySpec.scala b/swaydb/src/test/scala/swaydb/api/multimap/MultiKeySpec.scala index 2e3ef0f1b..8c97bcc5d 100644 --- a/swaydb/src/test/scala/swaydb/api/multimap/MultiKeySpec.scala +++ b/swaydb/src/test/scala/swaydb/api/multimap/MultiKeySpec.scala @@ -27,6 +27,7 @@ import swaydb.slice.order.KeyOrder import scala.collection.SortedSet import scala.util.{Random, Try} +import swaydb.testkit.TestKit._ class MultiKeySpec extends AnyWordSpec with Matchers { diff --git a/swaydb/src/test/scala/swaydb/api/multimap/MultiMapPutSpec.scala b/swaydb/src/test/scala/swaydb/api/multimap/MultiMapPutSpec.scala index b802a78ec..0ad986fba 100644 --- a/swaydb/src/test/scala/swaydb/api/multimap/MultiMapPutSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/multimap/MultiMapPutSpec.scala @@ -23,6 +23,7 @@ import swaydb.core.TestCaseSweeper._ import swaydb.core.TestData._ import swaydb.serializers.Default._ import swaydb.{Glass, MultiMap} +import swaydb.testkit.TestKit._ class MultiMapPutSpec0 extends MultiMapPutSpec { val keyValueCount: Int = 1000 diff --git a/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec.scala b/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec.scala index 3f271e5c4..0c0d5d18f 100644 --- a/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec.scala +++ b/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec.scala @@ -32,6 +32,7 @@ import swaydb.{Bag, Glass, IO, MultiMap, Prepare} import scala.concurrent.duration._ import scala.util.Random +import swaydb.testkit.TestKit._ class MultiMapSpec0 extends MultiMapSpec { val keyValueCount: Int = 1000 diff --git a/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec_OLD.scala b/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec_OLD.scala index 388424a58..0213d0afe 100644 --- a/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec_OLD.scala +++ b/swaydb/src/test/scala/swaydb/api/multimap/MultiMapSpec_OLD.scala @@ -31,6 +31,7 @@ import swaydb.{Bag, Glass, MultiMap, Prepare} import scala.collection.mutable.ListBuffer import scala.concurrent.duration._ +import swaydb.testkit.TestKit._ class MultiMapSpecOLD0 extends MultiMapSpec_OLD { val keyValueCount: Int = 1000 diff --git a/testkit/src/main/scala/swaydb/testkit/TestKit.scala b/testkit/src/main/scala/swaydb/testkit/TestKit.scala new file mode 100644 index 000000000..ee3ad551f --- /dev/null +++ b/testkit/src/main/scala/swaydb/testkit/TestKit.scala @@ -0,0 +1,127 @@ +package swaydb.testkit + +import java.util.concurrent.TimeUnit +import scala.concurrent.duration.{Deadline, DurationInt, FiniteDuration} +import scala.util.Random + +object TestKit { + + def randomByte() = (Random.nextInt(256) - 128).toByte + + def ints(numbers: Int): Int = + (1 to numbers).foldLeft("") { + case (concat, _) => + concat + Math.abs(Random.nextInt(9)).toString + }.toInt + + def randomInt(minus: Int = 0) = Math.abs(Random.nextInt(Int.MaxValue)) - minus - 1 + + def randomIntMax(max: Int = Int.MaxValue) = + Math.abs(Random.nextInt(max)) + + def randomIntMin(min: Int) = + Math.abs(randomIntMax()) max min + + def randomIntMaxOption(max: Int = Int.MaxValue) = + if (randomBoolean()) + Some(randomIntMax(max)) + else + None + + def randomNextInt(max: Int): Int = + Math.abs(Random.nextInt(max)) + + def randomBoolean(): Boolean = + Random.nextBoolean() + + def randomFiniteDuration(maxSeconds: Int = 10): FiniteDuration = + new FiniteDuration(randomIntMax(maxSeconds), TimeUnit.SECONDS) + + def randomString: String = + randomCharacters() + + def randomDeadlineOption: Option[Deadline] = + randomDeadlineOption() + + def randomDeadlineOption(expired: Boolean = randomBoolean()): Option[Deadline] = + if (randomBoolean()) + Some(randomDeadline(expired)) + else + None + + def randomDeadline(expired: Boolean = randomBoolean()): Deadline = + if (expired && randomBoolean()) + 0.seconds.fromNow - (randomIntMax(30) + 10).seconds + else + (randomIntMax(60) max 30).seconds.fromNow + + def randomCharacters(size: Int = 10) = Random.alphanumeric.take(size max 1).mkString + + def randomBytes(size: Int = 10) = Array.fill(size)(randomByte()) + + def randomly[T](f: => T): Option[T] = + if (Random.nextBoolean()) + Some(f) + else + None + + def eitherOne[T](left: => T, right: => T): T = + if (Random.nextBoolean()) + left + else + right + + def someOrNone[T](some: => T): Option[T] = + if (Random.nextBoolean()) + None + else + Some(some) + + def orNone[T](option: => Option[T]): Option[T] = + if (Random.nextBoolean()) + None + else + option + + def anyOrder[T](left: => T, right: => T): Unit = + if (Random.nextBoolean()) { + left + right + } else { + right + left + } + + def eitherOne[T](left: => T, mid: => T, right: => T): T = + Random.shuffle(Seq(() => left, () => mid, () => right)).head() + + def eitherOne[T](one: => T, two: => T, three: => T, four: => T): T = + Random.shuffle(Seq(() => one, () => two, () => three, () => four)).head() + + def eitherOne[T](one: => T, two: => T, three: => T, four: => T, five: => T): T = + Random.shuffle(Seq(() => one, () => two, () => three, () => four, () => five)).head() + + def eitherOne[T](one: => T, two: => T, three: => T, four: => T, five: => T, six: => T): T = + Random.shuffle(Seq(() => one, () => two, () => three, () => four, () => five, () => six)).head() + + def expiredDeadline(): Deadline = { + val deadline = 0.nanosecond.fromNow - 100.millisecond + assert(!deadline.hasTimeLeft()) + deadline + } + + def randomExpiredDeadlineOption(): Option[Deadline] = + if (randomBoolean()) + None + else + Some(expiredDeadline()) + + def randomBlockSize(): Option[Int] = + someOrNone(4096) + + + implicit class BooleanImplicit(bool: Boolean) { + def toInt = + if (bool) 1 else 0 + } +} diff --git a/utils/src/main/scala/swaydb/utils/Extension.scala b/utils/src/main/scala/swaydb/utils/Extension.scala index 9c05ba1c6..02bdac97b 100644 --- a/utils/src/main/scala/swaydb/utils/Extension.scala +++ b/utils/src/main/scala/swaydb/utils/Extension.scala @@ -14,7 +14,7 @@ * limitations under the License. */ -package swaydb.effect +package swaydb.utils private[swaydb] sealed trait Extension private[swaydb] object Extension { diff --git a/utils/src/main/scala/swaydb/utils/IDGenerator.scala b/utils/src/main/scala/swaydb/utils/IDGenerator.scala index 7d7e4c6b2..b729ac277 100644 --- a/utils/src/main/scala/swaydb/utils/IDGenerator.scala +++ b/utils/src/main/scala/swaydb/utils/IDGenerator.scala @@ -14,13 +14,11 @@ * limitations under the License. */ -package swaydb.core.util - -import swaydb.effect.Extension +package swaydb.utils import java.util.concurrent.atomic.AtomicLong -private[core] object IDGenerator { +private[swaydb] object IDGenerator { @inline final def apply(initial: Long = 0) = new IDGenerator(initial) @@ -28,7 +26,7 @@ private[core] object IDGenerator { s"$id.${Extension.Seg.toString}" } -private[core] class IDGenerator(initial: Long) { +private[swaydb] class IDGenerator(initial: Long) { private val atomicID = new AtomicLong(initial) def next: Long = diff --git a/core/src/test/scala/swaydb/core/util/IDGeneratorSpec.scala b/utils/src/test/scala/swaydb/utils/IDGeneratorSpec.scala similarity index 96% rename from core/src/test/scala/swaydb/core/util/IDGeneratorSpec.scala rename to utils/src/test/scala/swaydb/utils/IDGeneratorSpec.scala index 82716767b..b9f514698 100644 --- a/core/src/test/scala/swaydb/core/util/IDGeneratorSpec.scala +++ b/utils/src/test/scala/swaydb/utils/IDGeneratorSpec.scala @@ -14,10 +14,11 @@ * limitations under the License. */ -package swaydb.core.util +package swaydb.utils import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers +import swaydb.utils.IDGenerator import scala.collection.parallel.CollectionConverters._