1
1
package com .comcast .xfinity .sirius .api
2
2
3
3
import java .util .concurrent .ConcurrentHashMap
4
+ import java .util .function .BiFunction
4
5
5
6
abstract class AbstractParallelBootstrapRequestHandler [K , M ] extends RequestHandler {
6
7
private var sequences : Option [ConcurrentHashMap [K , Long ]] = None
@@ -38,12 +39,16 @@ abstract class AbstractParallelBootstrapRequestHandler[K, M] extends RequestHand
38
39
var result : SiriusResult = SiriusResult .none()
39
40
// deserialize the body before calling compute to reduce lock contention
40
41
val message = deserialize(body)
41
- map.compute(k, (_, existing) => {
42
- if (existing < sequence) {
43
- result = handlePutImpl(sequence, k, message)
42
+
43
+ // Scala 2.11 has limited support for Java functional interfaces
44
+ val updateFunction = new BiFunction [K , Long , Long ]() {
45
+ override def apply (key : K , existing : Long ): Long = if (existing < sequence) {
46
+ result = handlePutImpl(sequence, key, message)
44
47
sequence
45
48
} else existing
46
- })
49
+ }
50
+
51
+ map.compute(k, updateFunction)
47
52
result
48
53
}
49
54
case None => handlePutImpl(sequence, createKey(key), deserialize(body))
@@ -54,12 +59,17 @@ abstract class AbstractParallelBootstrapRequestHandler[K, M] extends RequestHand
54
59
sequences match {
55
60
case Some (map) =>
56
61
var result : SiriusResult = SiriusResult .none()
57
- map.compute(createKey(key), (k, existing) => {
58
- if (existing < sequence) {
59
- result = handleDeleteImpl(sequence, k)
60
- sequence
61
- } else existing
62
- })
62
+
63
+ // Scala 2.11 has limited support for Java functional interfaces
64
+ val updateFunction = new BiFunction [K , Long , Long ] {
65
+ override def apply (key : K , existing : Long ): Long =
66
+ if (existing < sequence) {
67
+ result = handleDeleteImpl(sequence, key)
68
+ sequence
69
+ } else existing
70
+ }
71
+
72
+ map.compute(createKey(key), updateFunction)
63
73
result
64
74
case None => handleDeleteImpl(sequence, createKey(key))
65
75
}
0 commit comments