Skip to content

Commit 09cb3f0

Browse files
committed
undoing changes
1 parent 5bb6397 commit 09cb3f0

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

sql/core/src/test/scala/org/apache/spark/sql/execution/streaming/state/StateStoreSuite.scala

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,10 +1035,6 @@ class StateStoreSuite extends StateStoreSuiteBase[HDFSBackedStateStoreProvider]
10351035
}
10361036
}
10371037

1038-
override def getData(store: StateStore): Set[((String, Int), Int)] = {
1039-
store.iterator().map(rowPairToDataPair).toSet
1040-
}
1041-
10421038
override def getDefaultSQLConf(
10431039
minDeltasForSnapshot: Int,
10441040
numOfVersToRetainInMemory: Int): SQLConf = {
@@ -1118,10 +1114,6 @@ class StateStoreSuite extends StateStoreSuiteBase[HDFSBackedStateStoreProvider]
11181114
filePath.delete()
11191115
filePath.createNewFile()
11201116
}
1121-
1122-
override def getLatestVersion(storeProvider: HDFSBackedStateStoreProvider): Long = {
1123-
if (storeProvider.loadedMaps.isEmpty) 0 else storeProvider.loadedMaps.firstKey()
1124-
}
11251117
}
11261118

11271119
abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
@@ -1136,46 +1128,65 @@ abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
11361128
testWithAllCodec("get, put, remove, commit, and all data iterator") { colFamiliesEnabled =>
11371129
tryWithProviderResource(newStoreProvider(colFamiliesEnabled)) { provider =>
11381130
// Verify state before starting a new set of updates
1131+
assert(getLatestData(provider, useColumnFamilies = colFamiliesEnabled).isEmpty)
11391132

11401133
val store = provider.getStore(0)
1141-
assert(getData(store).isEmpty)
11421134
assert(!store.hasCommitted)
11431135
assert(get(store, "a", 0) === None)
11441136
assert(store.iterator().isEmpty)
1137+
11451138
// Verify state after updating
11461139
put(store, "a", 0, 1)
11471140
assert(get(store, "a", 0) === Some(1))
1141+
11481142
assert(store.iterator().nonEmpty)
1149-
assert(getLatestVersion(provider) === 0)
1143+
assert(getLatestData(provider, useColumnFamilies = colFamiliesEnabled).isEmpty)
1144+
11501145
// Make updates, commit and then verify state
11511146
put(store, "b", 0, 2)
11521147
put(store, "aa", 0, 3)
11531148
remove(store, _._1.startsWith("a"))
11541149
assert(store.commit() === 1)
11551150
assert(store.metrics.numKeys === 1)
1151+
11561152
assert(store.hasCommitted)
1157-
val store1 = provider.getStore(1)
1158-
assert(rowPairsToDataSet(store1.iterator()) === Set(("b", 0) -> 2))
1159-
assert(getData(store1) === Set(("b", 0) -> 2))
1160-
store1.commit()
1153+
assert(rowPairsToDataSet(provider.getStore(1).iterator()) === Set(("b", 0) -> 2))
1154+
assert(getLatestData(provider,
1155+
useColumnFamilies = colFamiliesEnabled) === Set(("b", 0) -> 2))
1156+
11611157
// Trying to get newer versions should fail
11621158
var e = intercept[SparkException] {
1163-
provider.getStore(3)
1159+
provider.getStore(2)
11641160
}
11651161
assert(e.getMessage.contains("does not exist"))
1162+
11661163
e = intercept[SparkException] {
1167-
getData(provider, 3, useColumnFamilies = colFamiliesEnabled)
1164+
getData(provider, 2, useColumnFamilies = colFamiliesEnabled)
11681165
}
11691166
assert(e.getMessage.contains("does not exist"))
1167+
1168+
// New updates to the reloaded store with new version, and does not change old version
1169+
tryWithProviderResource(newStoreProvider(store.id, colFamiliesEnabled)) { reloadedProvider =>
1170+
val reloadedStore = reloadedProvider.getStore(1)
1171+
put(reloadedStore, "c", 0, 4)
1172+
assert(reloadedStore.commit() === 2)
1173+
assert(rowPairsToDataSet(reloadedProvider.getStore(2).iterator()) ===
1174+
Set(("b", 0) -> 2, ("c", 0) -> 4))
1175+
assert(getLatestData(provider, useColumnFamilies = colFamiliesEnabled)
1176+
=== Set(("b", 0) -> 2, ("c", 0) -> 4))
1177+
assert(getData(provider, version = 1, useColumnFamilies = colFamiliesEnabled)
1178+
=== Set(("b", 0) -> 2))
1179+
}
11701180
}
11711181
}
11721182

11731183
testWithAllCodec("prefix scan") { colFamiliesEnabled =>
11741184
tryWithProviderResource(newStoreProvider(keySchema, PrefixKeyScanStateEncoderSpec(keySchema, 1),
11751185
colFamiliesEnabled)) { provider =>
11761186
// Verify state before starting a new set of updates
1187+
assert(getLatestData(provider, useColumnFamilies = false).isEmpty)
1188+
11771189
var store = provider.getStore(0)
1178-
assert(getData(store).isEmpty)
11791190

11801191
def putCompositeKeys(keys: Seq[(String, Int)]): Unit = {
11811192
val randomizedKeys = scala.util.Random.shuffle(keys.toList)
@@ -1202,21 +1213,27 @@ abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
12021213
verifyScan(key1AtVersion0, key2AtVersion0)
12031214

12041215
assert(store.prefixScan(dataToPrefixKeyRow("non-exist")).isEmpty)
1216+
12051217
// committing and loading the version 1 (the version being committed)
12061218
store.commit()
12071219
store = provider.getStore(1)
1220+
12081221
// before putting the new key-value pairs, verify prefix scan works for existing keys
12091222
verifyScan(key1AtVersion0, key2AtVersion0)
1223+
12101224
val key1AtVersion1 = Seq("c", "d")
12111225
val key2AtVersion1 = Seq(4, 5, 6)
12121226
val keysAtVersion1 = for (k1 <- key1AtVersion1; k2 <- key2AtVersion1) yield (k1, k2)
1227+
12131228
// put a new key-value pairs, and verify that prefix scan reflects the changes
12141229
putCompositeKeys(keysAtVersion1)
12151230
verifyScan(Seq("c"), Seq(1, 2, 3, 4, 5, 6))
12161231
verifyScan(Seq("d"), Seq(4, 5, 6))
1232+
12171233
// aborting and loading the version 1 again (keysAtVersion1 should be rolled back)
12181234
store.abort()
12191235
store = provider.getStore(1)
1236+
12201237
// prefix scan should not reflect the uncommitted changes
12211238
verifyScan(key1AtVersion0, key2AtVersion0)
12221239
verifyScan(Seq("d"), Seq.empty)
@@ -1226,7 +1243,7 @@ abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
12261243
testWithAllCodec(s"numKeys metrics") { colFamiliesEnabled =>
12271244
tryWithProviderResource(newStoreProvider(colFamiliesEnabled)) { provider =>
12281245
// Verify state before starting a new set of updates
1229-
// assert(getLatestData(provider, useColumnFamilies = colFamiliesEnabled).isEmpty)
1246+
assert(getLatestData(provider, useColumnFamilies = colFamiliesEnabled).isEmpty)
12301247

12311248
val store = provider.getStore(0)
12321249
put(store, "a", 0, 1)
@@ -1254,6 +1271,7 @@ abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
12541271
testWithAllCodec(s"removing while iterating") { colFamiliesEnabled =>
12551272
tryWithProviderResource(newStoreProvider(colFamiliesEnabled)) { provider =>
12561273
// Verify state before starting a new set of updates
1274+
assert(getLatestData(provider, useColumnFamilies = colFamiliesEnabled).isEmpty)
12571275
val store = provider.getStore(0)
12581276
put(store, "a", 0, 1)
12591277
put(store, "b", 0, 2)
@@ -1271,7 +1289,6 @@ abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
12711289
tuple => keyRowToData(tuple.key) == ("b", 0) }
12721290
filtered2.foreach { tuple => store.remove(tuple.key) }
12731291
assert(get(store, "b", 0) === None)
1274-
store.commit()
12751292
}
12761293
}
12771294

@@ -1280,10 +1297,10 @@ abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
12801297
val store = provider.getStore(0)
12811298
put(store, "a", 0, 1)
12821299
store.commit()
1300+
assert(rowPairsToDataSet(provider.getStore(1).iterator()) === Set(("a", 0) -> 1))
12831301

12841302
// cancelUpdates should not change the data in the files
12851303
val store1 = provider.getStore(1)
1286-
assert(rowPairsToDataSet(store1.iterator()) === Set(("a", 0) -> 1))
12871304
put(store1, "b", 0, 1)
12881305
store1.abort()
12891306
}
@@ -1826,18 +1843,13 @@ abstract class StateStoreSuiteBase[ProviderClass <: StateStoreProvider]
18261843
def getLatestData(storeProvider: ProviderClass,
18271844
useColumnFamilies: Boolean): Set[((String, Int), Int)]
18281845

1829-
/** Get the latest data referred to by the given provider but not using this provider */
1830-
def getLatestVersion(storeProvider: ProviderClass): Long
1831-
18321846
/**
18331847
* Get a specific version of data referred to by the given provider but not using
18341848
* this provider
18351849
*/
18361850
def getData(storeProvider: ProviderClass, version: Int,
18371851
useColumnFamilies: Boolean): Set[((String, Int), Int)]
18381852

1839-
def getData(store: StateStore): Set[((String, Int), Int)]
1840-
18411853
protected def testQuietly(name: String)(f: => Unit): Unit = {
18421854
test(name) {
18431855
quietly {

0 commit comments

Comments
 (0)