1717
1818package org .apache .spark .sql .execution .streaming .state
1919
20- import java .util .Map .Entry
21-
2220import scala .collection .mutable
2321import scala .jdk .CollectionConverters ._
2422
@@ -29,13 +27,10 @@ import org.apache.spark.sql.types.{StructField, StructType}
2927trait HDFSBackedStateStoreMap {
3028 def size (): Int
3129 def get (key : UnsafeRow ): UnsafeRow
32- def put (key : UnsafeRow , value : UnsafeRowWrapper ): UnsafeRowWrapper
30+ def put (key : UnsafeRow , value : UnsafeRow ): UnsafeRow
3331 def putAll (map : HDFSBackedStateStoreMap ): Unit
34- def remove (key : UnsafeRow ): UnsafeRowWrapper
32+ def remove (key : UnsafeRow ): UnsafeRow
3533 def iterator (): Iterator [UnsafeRowPair ]
36- /** Returns entries in the underlying map and skips additional checks done by [[iterator ]].
37- * [[iterator ]] should be preferred over this. */
38- def entryIterator (): Iterator [Entry [UnsafeRow , UnsafeRowWrapper ]]
3934 def prefixScan (prefixKey : UnsafeRow ): Iterator [UnsafeRowPair ]
4035}
4136
@@ -45,78 +40,50 @@ object HDFSBackedStateStoreMap {
4540 // the map when the iterator was created
4641 // - Any updates to the map while iterating through the filtered iterator does not throw
4742 // java.util.ConcurrentModificationException
48- type MapType = java.util.concurrent.ConcurrentHashMap [UnsafeRow , UnsafeRowWrapper ]
43+ type MapType = java.util.concurrent.ConcurrentHashMap [UnsafeRow , UnsafeRow ]
4944
50- def create (
51- keySchema : StructType ,
52- numColsPrefixKey : Int ,
53- readVerifier : Option [KeyValueIntegrityVerifier ]): HDFSBackedStateStoreMap = {
45+ def create (keySchema : StructType , numColsPrefixKey : Int ): HDFSBackedStateStoreMap = {
5446 if (numColsPrefixKey > 0 ) {
55- new PrefixScannableHDFSBackedStateStoreMap (keySchema, numColsPrefixKey, readVerifier )
47+ new PrefixScannableHDFSBackedStateStoreMap (keySchema, numColsPrefixKey)
5648 } else {
57- new NoPrefixHDFSBackedStateStoreMap (readVerifier)
58- }
59- }
60-
61- /** Get the value row from the value wrapper and verify it */
62- def getAndVerifyValueRow (
63- key : UnsafeRow ,
64- valueWrapper : UnsafeRowWrapper ,
65- readVerifier : Option [KeyValueIntegrityVerifier ]): UnsafeRow = {
66- Option (valueWrapper) match {
67- case Some (value) =>
68- readVerifier.foreach(_.verify(key, value))
69- value.unsafeRow()
70- case None => null
49+ new NoPrefixHDFSBackedStateStoreMap ()
7150 }
7251 }
7352}
7453
75- class NoPrefixHDFSBackedStateStoreMap (private val readVerifier : Option [KeyValueIntegrityVerifier ])
76- extends HDFSBackedStateStoreMap {
54+ class NoPrefixHDFSBackedStateStoreMap extends HDFSBackedStateStoreMap {
7755 private val map = new HDFSBackedStateStoreMap .MapType ()
7856
7957 override def size (): Int = map.size()
8058
81- override def get (key : UnsafeRow ): UnsafeRow = {
82- HDFSBackedStateStoreMap .getAndVerifyValueRow(key, map.get(key), readVerifier)
83- }
59+ override def get (key : UnsafeRow ): UnsafeRow = map.get(key)
8460
85- override def put (key : UnsafeRow , value : UnsafeRowWrapper ): UnsafeRowWrapper = map.put(key, value)
61+ override def put (key : UnsafeRow , value : UnsafeRow ): UnsafeRow = map.put(key, value)
8662
8763 def putAll (other : HDFSBackedStateStoreMap ): Unit = {
8864 other match {
8965 case o : NoPrefixHDFSBackedStateStoreMap => map.putAll(o.map)
90- case _ => other.entryIterator ().foreach { pair => put(pair.getKey , pair.getValue ) }
66+ case _ => other.iterator ().foreach { pair => put(pair.key , pair.value ) }
9167 }
9268 }
9369
94- override def remove (key : UnsafeRow ): UnsafeRowWrapper = map.remove(key)
70+ override def remove (key : UnsafeRow ): UnsafeRow = map.remove(key)
9571
9672 override def iterator (): Iterator [UnsafeRowPair ] = {
9773 val unsafeRowPair = new UnsafeRowPair ()
98- entryIterator().map { entry =>
99- val valueRow = HDFSBackedStateStoreMap
100- .getAndVerifyValueRow(entry.getKey, entry.getValue, readVerifier)
101- unsafeRowPair.withRows(entry.getKey, valueRow)
74+ map.entrySet.asScala.iterator.map { entry =>
75+ unsafeRowPair.withRows(entry.getKey, entry.getValue)
10276 }
10377 }
10478
105- /** Returns entries in the underlying map and skips additional checks done by [[iterator ]].
106- * [[iterator ]] should be preferred over this. */
107- override def entryIterator (): Iterator [Entry [UnsafeRow , UnsafeRowWrapper ]] = {
108- map.entrySet.asScala.iterator
109- }
110-
11179 override def prefixScan (prefixKey : UnsafeRow ): Iterator [UnsafeRowPair ] = {
11280 throw SparkUnsupportedOperationException ()
11381 }
11482}
11583
11684class PrefixScannableHDFSBackedStateStoreMap (
11785 keySchema : StructType ,
118- numColsPrefixKey : Int ,
119- private val readVerifier : Option [KeyValueIntegrityVerifier ]) extends HDFSBackedStateStoreMap {
86+ numColsPrefixKey : Int ) extends HDFSBackedStateStoreMap {
12087
12188 private val map = new HDFSBackedStateStoreMap .MapType ()
12289
@@ -136,11 +103,9 @@ class PrefixScannableHDFSBackedStateStoreMap(
136103
137104 override def size (): Int = map.size()
138105
139- override def get (key : UnsafeRow ): UnsafeRow = {
140- HDFSBackedStateStoreMap .getAndVerifyValueRow(key, map.get(key), readVerifier)
141- }
106+ override def get (key : UnsafeRow ): UnsafeRow = map.get(key)
142107
143- override def put (key : UnsafeRow , value : UnsafeRowWrapper ): UnsafeRowWrapper = {
108+ override def put (key : UnsafeRow , value : UnsafeRow ): UnsafeRow = {
144109 val ret = map.put(key, value)
145110
146111 val prefixKey = prefixKeyProjection(key).copy()
@@ -171,11 +136,11 @@ class PrefixScannableHDFSBackedStateStoreMap(
171136 prefixKeyToKeysMap.put(prefixKey, newSet)
172137 }
173138
174- case _ => other.entryIterator ().foreach { pair => put(pair.getKey , pair.getValue ) }
139+ case _ => other.iterator ().foreach { pair => put(pair.key , pair.value ) }
175140 }
176141 }
177142
178- override def remove (key : UnsafeRow ): UnsafeRowWrapper = {
143+ override def remove (key : UnsafeRow ): UnsafeRow = {
179144 val ret = map.remove(key)
180145
181146 if (ret != null ) {
@@ -191,27 +156,15 @@ class PrefixScannableHDFSBackedStateStoreMap(
191156
192157 override def iterator (): Iterator [UnsafeRowPair ] = {
193158 val unsafeRowPair = new UnsafeRowPair ()
194- entryIterator().map { entry =>
195- val valueRow = HDFSBackedStateStoreMap
196- .getAndVerifyValueRow(entry.getKey, entry.getValue, readVerifier)
197- unsafeRowPair.withRows(entry.getKey, valueRow)
159+ map.entrySet.asScala.iterator.map { entry =>
160+ unsafeRowPair.withRows(entry.getKey, entry.getValue)
198161 }
199162 }
200163
201- /** Returns entries in the underlying map and skips additional checks done by [[iterator ]].
202- * [[iterator ]] should be preferred over this. */
203- override def entryIterator (): Iterator [Entry [UnsafeRow , UnsafeRowWrapper ]] = {
204- map.entrySet.asScala.iterator
205- }
206-
207164 override def prefixScan (prefixKey : UnsafeRow ): Iterator [UnsafeRowPair ] = {
208165 val unsafeRowPair = new UnsafeRowPair ()
209166 prefixKeyToKeysMap.getOrDefault(prefixKey, mutable.Set .empty[UnsafeRow ])
210167 .iterator
211- .map { keyRow =>
212- val valueRow = HDFSBackedStateStoreMap
213- .getAndVerifyValueRow(keyRow, map.get(keyRow), readVerifier)
214- unsafeRowPair.withRows(keyRow, valueRow)
215- }
168+ .map { key => unsafeRowPair.withRows(key, map.get(key)) }
216169 }
217170}
0 commit comments