Skip to content

Commit b3f7fe5

Browse files
seanroheadSean Rohead
andauthored
Fix deserialization backwards-compatibility (#52)
* Renamed CanGenerateHashFromStringCharArray back to CanGenerateHashFromString to preserve deserialization backwards-compatibility * Restored private valueOffset field to CanGenerateHashFromString to revert the serialVersionUID back to the same value it had in the 0.12 release * Added tests for deserializing bloom filters that were serialized with the 0.12 release * Reverted deserialization tests because they only work when running tests with the same jdk and scala version that were used to create the .ser files Co-authored-by: Sean Rohead <[email protected]>
1 parent 5ec6871 commit b3f7fe5

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

bloom-filter/src/main/scala/bloomfilter/CanGenerate128HashFrom.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,26 @@ object CanGenerate128HashFrom {
2323

2424
import bloomfilter.util.Unsafe.unsafe
2525

26-
case object CanGenerate128HashFromStringCharArray extends CanGenerate128HashFrom[String] {
26+
case object CanGenerate128HashFromString extends CanGenerate128HashFrom[String] {
27+
private val valueOffset = unsafe.objectFieldOffset(stringValueField)
28+
2729
override def generateHash(from: String): (Long, Long) = {
2830
val value = unsafe.getObject(from, valueOffset).asInstanceOf[Array[Char]]
2931
MurmurHash3Generic.murmurhash3_x64_128(value, 0, from.length * 2, 0)
3032
}
3133
}
3234

3335
case object CanGenerate128HashFromStringByteArray extends CanGenerate128HashFrom[String] {
36+
private val valueOffset = unsafe.objectFieldOffset(stringValueField)
37+
3438
override def generateHash(from: String): (Long, Long) = {
3539
val value = unsafe.getObject(from, valueOffset).asInstanceOf[Array[Byte]]
3640
MurmurHash3Generic.murmurhash3_x64_128(value, 0, from.length, 0)
3741
}
3842
}
3943

4044
private val stringValueField: Field = classOf[String].getDeclaredField("value")
41-
private val valueOffset = unsafe.objectFieldOffset(stringValueField)
42-
4345
implicit val canGenerate128HashFromString: CanGenerate128HashFrom[String] = {
44-
if (stringValueField.getType.getComponentType == java.lang.Byte.TYPE) CanGenerate128HashFromStringByteArray else CanGenerate128HashFromStringCharArray
46+
if (stringValueField.getType.getComponentType == java.lang.Byte.TYPE) CanGenerate128HashFromStringByteArray else CanGenerate128HashFromString
4547
}
4648
}

bloom-filter/src/main/scala/bloomfilter/CanGenerateHashFrom.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,26 @@ object CanGenerateHashFrom {
2020

2121
import bloomfilter.util.Unsafe.unsafe
2222

23-
case object CanGenerateHashFromStringCharArray extends CanGenerateHashFrom[String] {
23+
case object CanGenerateHashFromString extends CanGenerateHashFrom[String] {
24+
private val valueOffset = unsafe.objectFieldOffset(stringValueField)
25+
2426
override def generateHash(from: String): Long = {
2527
val value = unsafe.getObject(from, valueOffset).asInstanceOf[Array[Char]]
2628
MurmurHash3Generic.murmurhash3_x64_64(value, 0, from.length * 2, 0)
2729
}
2830
}
2931

3032
case object CanGenerateHashFromStringByteArray extends CanGenerateHashFrom[String] {
33+
private val valueOffset = unsafe.objectFieldOffset(stringValueField)
34+
3135
override def generateHash(from: String): Long = {
3236
val value = unsafe.getObject(from, valueOffset).asInstanceOf[Array[Byte]]
3337
MurmurHash3Generic.murmurhash3_x64_64(value, 0, from.length, 0)
3438
}
3539
}
3640

3741
private val stringValueField: Field = classOf[String].getDeclaredField("value")
38-
private val valueOffset = unsafe.objectFieldOffset(stringValueField)
39-
4042
implicit val canGenerateHashFromString: CanGenerateHashFrom[String] = {
41-
if (stringValueField.getType.getComponentType == java.lang.Byte.TYPE) CanGenerateHashFromStringByteArray else CanGenerateHashFromStringCharArray
43+
if (stringValueField.getType.getComponentType == java.lang.Byte.TYPE) CanGenerateHashFromStringByteArray else CanGenerateHashFromString
4244
}
4345
}

0 commit comments

Comments
 (0)