mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-19 16:57:40 +03:00
kvutils: Add VersionedOffsetBuilder#matchesVersionOf
. (#11212)
This allows a caller to test whether an offset matches a specific version without throwing an exception. CHANGELOG_BEGIN CHANGELOG_END
This commit is contained in:
parent
24c6329579
commit
fe6acb60fb
@ -21,6 +21,7 @@ import java.nio.ByteBuffer
|
||||
* @see com.daml.ledger.offset.Offset
|
||||
*/
|
||||
class VersionedOffsetBuilder(version: Byte) {
|
||||
|
||||
import VersionedOffsetBuilder._
|
||||
|
||||
def onlyKeepHighestIndex(offset: Offset): Offset = {
|
||||
@ -67,6 +68,12 @@ class VersionedOffsetBuilder(version: Byte) {
|
||||
extractedVersion
|
||||
}
|
||||
|
||||
def matchesVersionOf(offset: Offset): Boolean = {
|
||||
val stream = toDataInputStream(offset)
|
||||
val extractedVersion = stream.readByte()
|
||||
extractedVersion == version
|
||||
}
|
||||
|
||||
// `highestIndex` is used a lot, so it's worth optimizing a little rather than reusing `split`.
|
||||
def highestIndex(offset: Offset): Long = {
|
||||
val stream = toDataInputStream(offset)
|
||||
@ -93,7 +100,6 @@ class VersionedOffsetBuilder(version: Byte) {
|
||||
}
|
||||
|
||||
object VersionedOffsetBuilder {
|
||||
|
||||
val MaxHighest: Long = (1L << 56) - 1
|
||||
|
||||
private val highestStartByte = 1
|
||||
|
@ -14,6 +14,7 @@ class VersionedOffsetBuilderSpec
|
||||
extends AnyWordSpec
|
||||
with Matchers
|
||||
with ScalaCheckDrivenPropertyChecks {
|
||||
|
||||
import VersionedOffsetBuilderSpec._
|
||||
|
||||
"VersionedOffsetBuilder" should {
|
||||
@ -79,6 +80,26 @@ class VersionedOffsetBuilderSpec
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"test the version of the offset, returning `true` on a match" in {
|
||||
forAll(genHighest, Gen.posNum[Int], Gen.posNum[Int], arbitrary[Byte]) {
|
||||
(highest, middle, lowest, version) =>
|
||||
val offsetBuilder = VersionedOffsetBuilder(version)
|
||||
val offset = offsetBuilder.of(highest, middle, lowest)
|
||||
|
||||
offsetBuilder.matchesVersionOf(offset) should be(true)
|
||||
}
|
||||
}
|
||||
|
||||
"test the version of the offset, returning `false` on a mismatch" in {
|
||||
forAll(genHighest, Gen.posNum[Int], Gen.posNum[Int], genDifferentVersions) {
|
||||
(highest, middle, lowest, versions) =>
|
||||
val offset = VersionedOffsetBuilder(versions._1).of(highest, middle, lowest)
|
||||
val offsetBuilder = VersionedOffsetBuilder(versions._2)
|
||||
|
||||
offsetBuilder.matchesVersionOf(offset) should be(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user