|
17 | 17 |
|
18 | 18 | package org.apache.spark.serializer
|
19 | 19 |
|
20 |
| -import java.io.{ByteArrayInputStream, ByteArrayOutputStream} |
| 20 | +import java.io.{ByteArrayInputStream, ByteArrayOutputStream, FileOutputStream, FileInputStream} |
21 | 21 |
|
22 | 22 | import scala.collection.JavaConverters._
|
23 | 23 | import scala.collection.mutable
|
24 | 24 | import scala.reflect.ClassTag
|
25 | 25 |
|
26 | 26 | import com.esotericsoftware.kryo.Kryo
|
| 27 | +import com.esotericsoftware.kryo.io.{Input => KryoInput, Output => KryoOutput} |
| 28 | + |
| 29 | +import org.roaringbitmap.RoaringBitmap |
27 | 30 |
|
28 | 31 | import org.apache.spark.{SharedSparkContext, SparkConf, SparkFunSuite}
|
29 | 32 | import org.apache.spark.scheduler.HighlyCompressedMapStatus
|
30 | 33 | import org.apache.spark.serializer.KryoTest._
|
| 34 | +import org.apache.spark.util.Utils |
31 | 35 | import org.apache.spark.storage.BlockManagerId
|
32 | 36 |
|
33 | 37 | class KryoSerializerSuite extends SparkFunSuite with SharedSparkContext {
|
@@ -350,6 +354,28 @@ class KryoSerializerSuite extends SparkFunSuite with SharedSparkContext {
|
350 | 354 | assert(thrown.getMessage.contains(kryoBufferMaxProperty))
|
351 | 355 | }
|
352 | 356 |
|
| 357 | + test("SPARK-12222: deserialize RoaringBitmap throw Buffer underflow exception") { |
| 358 | + val dir = Utils.createTempDir() |
| 359 | + val tmpfile = dir.toString + "/RoaringBitmap" |
| 360 | + val outStream = new FileOutputStream(tmpfile) |
| 361 | + val output = new KryoOutput(outStream) |
| 362 | + val bitmap = new RoaringBitmap |
| 363 | + bitmap.add(1) |
| 364 | + bitmap.add(3) |
| 365 | + bitmap.add(5) |
| 366 | + bitmap.serialize(new KryoOutputDataOutputBridge(output)) |
| 367 | + output.flush() |
| 368 | + output.close() |
| 369 | + |
| 370 | + val inStream = new FileInputStream(tmpfile) |
| 371 | + val input = new KryoInput(inStream) |
| 372 | + val ret = new RoaringBitmap |
| 373 | + ret.deserialize(new KryoInputDataInputBridge(input)) |
| 374 | + input.close() |
| 375 | + assert(ret == bitmap) |
| 376 | + Utils.deleteRecursively(dir) |
| 377 | + } |
| 378 | + |
353 | 379 | test("getAutoReset") {
|
354 | 380 | val ser = new KryoSerializer(new SparkConf).newInstance().asInstanceOf[KryoSerializerInstance]
|
355 | 381 | assert(ser.getAutoReset)
|
|
0 commit comments