Skip to content

Commit 94d28f8

Browse files
committed
refactor(model-server): moved file dumping out of InMemoryStoreClient
1 parent 0d5dfc8 commit 94d28f8

File tree

3 files changed

+37
-48
lines changed

3 files changed

+37
-48
lines changed

model-server/src/main/kotlin/org/modelix/model/server/Main.kt

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ import org.modelix.model.server.store.IStoreClient
5656
import org.modelix.model.server.store.IgniteStoreClient
5757
import org.modelix.model.server.store.InMemoryStoreClient
5858
import org.modelix.model.server.store.LocalModelClient
59+
import org.modelix.model.server.store.loadDump
60+
import org.modelix.model.server.store.writeDump
5961
import org.modelix.model.server.templates.PageWithMenuBar
6062
import org.slf4j.LoggerFactory
6163
import java.io.File
62-
import java.io.FileReader
63-
import java.io.FileWriter
6464
import java.io.IOException
6565
import java.nio.charset.StandardCharsets
6666
import java.time.Duration
@@ -111,18 +111,16 @@ object Main {
111111
}
112112
storeClient = InMemoryStoreClient()
113113
if (cmdLineArgs.dumpInName != null) {
114-
val file = File(cmdLineArgs.dumpInName)
115-
val keys = storeClient.load(FileReader(file))
116-
println(
117-
"Values loaded from " + file.absolutePath + " (" + keys + ")",
118-
)
114+
val file = File(cmdLineArgs.dumpInName!!)
115+
val keys = storeClient.loadDump(file)
116+
println("Values loaded from " + file.absolutePath + " (" + keys + ")")
119117
}
120118
if (cmdLineArgs.dumpOutName != null) {
121119
Runtime.getRuntime()
122120
.addShutdownHook(
123121
DumpOutThread(
124122
storeClient,
125-
cmdLineArgs.dumpOutName,
123+
cmdLineArgs.dumpOutName ?: "dump",
126124
),
127125
)
128126
}
@@ -243,24 +241,14 @@ object Main {
243241
}
244242
}
245243

246-
private class DumpOutThread internal constructor(inMemoryStoreClient: InMemoryStoreClient, dumpName: String?) :
244+
private class DumpOutThread internal constructor(storeClient: IStoreClient, dumpName: String) :
247245
Thread(
248246
Runnable {
249-
var fw: FileWriter? = null
250247
try {
251-
fw = FileWriter(File(dumpName))
252-
inMemoryStoreClient.dump(fw!!)
248+
storeClient.writeDump(File(dumpName))
253249
println("[Saved memory store into $dumpName]")
254250
} catch (e: IOException) {
255251
e.printStackTrace()
256-
} finally {
257-
if (fw != null) {
258-
try {
259-
fw!!.close()
260-
} catch (e: IOException) {
261-
e.printStackTrace()
262-
}
263-
}
264252
}
265253
},
266254
)

model-server/src/main/kotlin/org/modelix/model/server/store/IStoreClient.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import kotlinx.coroutines.coroutineScope
1919
import kotlinx.coroutines.launch
2020
import kotlinx.coroutines.withTimeoutOrNull
2121
import org.modelix.model.IKeyListener
22+
import java.io.File
23+
import java.io.IOException
2224
import kotlin.time.Duration.Companion.seconds
2325

2426
interface IStoreClient : AutoCloseable {
@@ -80,3 +82,30 @@ suspend fun pollEntry(storeClient: IStoreClient, key: String, lastKnownValue: St
8082
}
8183
return result
8284
}
85+
86+
fun IStoreClient.loadDump(file: File): Int {
87+
var n = 0
88+
file.useLines { lines ->
89+
val entries = lines.associate { line ->
90+
val parts = line.split("#".toRegex(), limit = 2)
91+
n++
92+
parts[0] to parts[1]
93+
}
94+
putAll(entries, silent = true)
95+
}
96+
return n
97+
}
98+
99+
@Synchronized
100+
@Throws(IOException::class)
101+
fun IStoreClient.writeDump(file: File) {
102+
file.writer().use { writer ->
103+
for ((key, value) in getAll()) {
104+
if (value == null) continue
105+
writer.append(key)
106+
writer.append("#")
107+
writer.append(value)
108+
writer.append("\n")
109+
}
110+
}
111+
}

model-server/src/main/kotlin/org/modelix/model/server/store/InMemoryStoreClient.kt

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ package org.modelix.model.server.store
1616

1717
import org.modelix.model.IKeyListener
1818
import org.slf4j.LoggerFactory
19-
import java.io.BufferedReader
20-
import java.io.FileReader
21-
import java.io.FileWriter
22-
import java.io.IOException
2319
import kotlin.collections.HashMap
2420

2521
fun generateId(idStr: String?): Long {
@@ -104,30 +100,6 @@ class InMemoryStoreClient : IStoreClient {
104100
return id
105101
}
106102

107-
@Synchronized
108-
@Throws(IOException::class)
109-
fun dump(fileWriter: FileWriter) {
110-
for (key in values.keys) {
111-
fileWriter.append(key)
112-
fileWriter.append("#")
113-
fileWriter.append(values[key])
114-
fileWriter.append("\n")
115-
}
116-
}
117-
118-
@Synchronized
119-
fun load(fileReader: FileReader?): Int {
120-
val br = BufferedReader(fileReader)
121-
val n = intArrayOf(0)
122-
br.lines()
123-
.forEach { line: String ->
124-
val parts = line.split("#".toRegex(), limit = 2).toTypedArray()
125-
values[parts[0]] = parts[1]
126-
n[0]++
127-
}
128-
return n[0]
129-
}
130-
131103
@Synchronized
132104
override fun <T> runTransaction(body: () -> T): T {
133105
if (transactionValues == null) {

0 commit comments

Comments
 (0)