Skip to content

Commit 68ee86a

Browse files
committed
perf(model-server): skip batching for entries cached by ignite
1 parent a9538e3 commit 68ee86a

File tree

6 files changed

+20
-2
lines changed

6 files changed

+20
-2
lines changed

model-datastructure/src/commonMain/kotlin/org/modelix/model/async/CachingAsyncStore.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class CachingAsyncStore(val store: IAsyncObjectStore, cacheSize: Int = 100_000)
5858
}
5959

6060
override fun <T : Any> getIfCached(key: ObjectHash<T>): T? {
61-
return runSynchronized(cache) { cache.get(key) as T? }
61+
return runSynchronized(cache) { cache.get(key) as T? } ?: store.getIfCached(key)
6262
}
6363

6464
override fun getAllAsStream(keys: Observable<ObjectHash<*>>): Observable<Pair<ObjectHash<*>, Any?>> {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ interface IGenericStoreClient<KeyT> : AutoCloseable {
4545
val entries = getAll(keys.toSet())
4646
return keys.map { entries[it] }
4747
}
48+
fun getIfCached(key: KeyT): String?
4849
fun getAll(keys: Set<KeyT>): Map<KeyT, String?>
4950
fun getAll(): Map<KeyT, String?>
5051
fun put(key: KeyT, value: String?, silent: Boolean = false) = putAll(mapOf(key to value))

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import mu.KotlinLogging
1818
import org.apache.ignite.Ignite
1919
import org.apache.ignite.IgniteCache
2020
import org.apache.ignite.Ignition
21+
import org.apache.ignite.cache.CachePeekMode
2122
import org.apache.ignite.cache.query.ScanQuery
2223
import org.apache.ignite.lang.IgniteBiPredicate
2324
import org.apache.ignite.lang.IgniteClosure
@@ -93,6 +94,10 @@ class IgniteStoreClient(jdbcProperties: Properties? = null, private val inmemory
9394
SqlUtils(dataSource.connection).ensureSchemaInitialization()
9495
}
9596

97+
override fun getIfCached(key: ObjectInRepository): String? {
98+
return cache.localPeek(key, CachePeekMode.ONHEAP, CachePeekMode.OFFHEAP)
99+
}
100+
96101
override fun getAll(keys: Set<ObjectInRepository>): Map<ObjectInRepository, String?> {
97102
return cache.getAll(keys)
98103
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ class InMemoryStoreClient : IsolatingStore {
4545
return if (transactionValues?.contains(key) == true) transactionValues!![key] else values[key]
4646
}
4747

48+
override fun getIfCached(key: ObjectInRepository): String? {
49+
return get(key)
50+
}
51+
4852
@Synchronized
4953
override fun getAll(keys: List<ObjectInRepository>): List<String?> {
5054
return keys.map { get(it) }

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ abstract class StoreClientAdapter(val client: IsolatingStore) : IStoreClient {
4242
return keys.map { map[it] }
4343
}
4444

45+
override fun getIfCached(key: String): String? {
46+
val fromRepository = client.getIfCached(key.withRepoScope())
47+
if (fromRepository != null) return fromRepository
48+
// Existing databases may have objects stored without information about the repository.
49+
// Try to load these legacy entries.
50+
return client.getIfCached(ObjectInRepository.global(key))
51+
}
52+
4553
override fun getAll(keys: Set<String>): Map<String, String?> {
4654
val fromRepository = client.getAll(keys.map { it.withRepoScope() }.toSet()).mapKeys { it.key.key }
4755
if (getRepositoryId() == null) return fromRepository

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class StoreClientAsAsyncStore(val store: IStoreClient) : IAsyncObjectStore {
4444
}
4545

4646
override fun <T : Any> getIfCached(key: ObjectHash<T>): T? {
47-
return null
47+
return store.getIfCached(key.hash)?.let { key.deserializer(it) }
4848
}
4949

5050
override fun <T : Any> get(key: ObjectHash<T>): Maybe<T> {

0 commit comments

Comments
 (0)