From e390099eb0c603a62fcc4afef0f360852b20252b Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 17 Jan 2025 15:53:09 +0100 Subject: [PATCH] chore: Rounding of epoch seconds --- .../akka/persistence/r2dbc/internal/BySliceQuery.scala | 3 ++- .../akka/persistence/r2dbc/query/BucketCountSpec.scala | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/akka/persistence/r2dbc/internal/BySliceQuery.scala b/core/src/main/scala/akka/persistence/r2dbc/internal/BySliceQuery.scala index 779e906f..bac2d078 100644 --- a/core/src/main/scala/akka/persistence/r2dbc/internal/BySliceQuery.scala +++ b/core/src/main/scala/akka/persistence/r2dbc/internal/BySliceQuery.scala @@ -235,7 +235,8 @@ import org.slf4j.Logger protected def appendEmptyBucketIfLastIsMissing( buckets: IndexedSeq[Bucket], toTimestamp: Instant): IndexedSeq[Bucket] = { - val startTimeOfLastBucket = (toTimestamp.getEpochSecond / 10) * 10 + // db epoch seconds is rounding, but Instant is not + val startTimeOfLastBucket = (toTimestamp.plusMillis(500).getEpochSecond / 10) * 10 if (buckets.last.startTime != startTimeOfLastBucket) buckets :+ Bucket(startTimeOfLastBucket, 0) else diff --git a/core/src/test/scala/akka/persistence/r2dbc/query/BucketCountSpec.scala b/core/src/test/scala/akka/persistence/r2dbc/query/BucketCountSpec.scala index 4b315c90..faa5fcf2 100644 --- a/core/src/test/scala/akka/persistence/r2dbc/query/BucketCountSpec.scala +++ b/core/src/test/scala/akka/persistence/r2dbc/query/BucketCountSpec.scala @@ -4,6 +4,8 @@ package akka.persistence.r2dbc.query +import java.time.Instant + import org.scalatest.wordspec.AnyWordSpecLike import akka.actor.testkit.typed.scaladsl.LogCapturing @@ -38,7 +40,8 @@ class BucketCountSpec val slice2 = persistenceExt.sliceForPersistenceId(pid2) val startTime = InstantFactory.now().minusSeconds(3600) - val bucketStartTime = (startTime.getEpochSecond / 10) * 10 + // db epoch seconds is rounding, but Instant is not + val bucketStartTime = (startTime.plusMillis(500).getEpochSecond / 10) * 10 (0 until 10).foreach { i => writeEvent(slice1, pid1, 1 + i, startTime.plusSeconds(Buckets.BucketDurationSeconds * i), s"e1-$i") @@ -69,7 +72,8 @@ class BucketCountSpec val limit = 100 val startTime = InstantFactory.now().minusSeconds(3600) - val bucketStartTime = (startTime.getEpochSecond / 10) * 10 + // db epoch seconds is rounding, but Instant is not + val bucketStartTime = (startTime.plusMillis(500).getEpochSecond / 10) * 10 (0 until 10).foreach { i => writeEvent(slice1, pid1, 1 + i, startTime.plusSeconds(Buckets.BucketDurationSeconds * i), s"e1-$i")