Skip to content

Commit

Permalink
improve of actualize all
Browse files Browse the repository at this point in the history
  • Loading branch information
InsanusMokrassar committed Feb 20, 2024
1 parent 15a2eee commit ccc0002
Show file tree
Hide file tree
Showing 11 changed files with 183 additions and 58 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

## 0.20.36

* `Repos`:
* `Cache`:
* Improve work and functionality of `actualizeAll` and subsequent functions
* All internal repos `invalidate`/`actualizeAll` now use common `actualizeAll` functions

## 0.20.35

* `Versions`:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import dev.inmo.micro_utils.coroutines.withReadAcquire
import dev.inmo.micro_utils.coroutines.withWriteLock
import dev.inmo.micro_utils.repos.*
import dev.inmo.micro_utils.repos.cache.cache.KVCache
import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
Expand All @@ -29,7 +30,7 @@ open class ReadCRUDCacheRepo<ObjectType, IdType>(
kvCache.getAll()
}.takeIf { it.size.toLong() == count() } ?: parentRepo.getAll().also {
locker.withWriteLock {
kvCache.actualizeAll(true) { it }
kvCache.actualizeAll(clearMode = ActualizeAllClearMode.BeforeSet) { it }
}
}
}
Expand Down Expand Up @@ -148,7 +149,9 @@ open class CRUDCacheRepo<ObjectType, IdType, InputValueType>(
locker,
idGetter
),
CRUDRepo<ObjectType, IdType, InputValueType>
CRUDRepo<ObjectType, IdType, InputValueType> {
override suspend fun invalidate() = kvCache.actualizeAll(parentRepo, locker = locker)
}

fun <ObjectType, IdType, InputType> CRUDRepo<ObjectType, IdType, InputType>.cached(
kvCache: KVCache<IdType, ObjectType>,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package dev.inmo.micro_utils.repos.cache

interface CacheRepo {
interface InvalidatableRepo {
/**
* Invalidates its internal data. It __may__ lead to autoreload of data. In case when repo makes autoreload,
* it must do loading of data __before__ clear
*/
suspend fun invalidate()
}

typealias CacheRepo = InvalidatableRepo
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock
import dev.inmo.micro_utils.pagination.*
import dev.inmo.micro_utils.repos.*
import dev.inmo.micro_utils.repos.cache.cache.KVCache
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.*
Expand Down Expand Up @@ -48,9 +49,7 @@ open class ReadKeyValueCacheRepo<Key,Value>(
}
}

override suspend fun invalidate() = locker.withWriteLock {
kvCache.clear()
}
override suspend fun invalidate() = kvCache.actualizeAll(parentRepo, locker = locker)
}

fun <Key, Value> ReadKeyValueRepo<Key, Value>.cached(
Expand All @@ -75,10 +74,6 @@ open class KeyValueCacheRepo<Key,Value>(
}
}.launchIn(scope)

override suspend fun invalidate() = locker.withWriteLock {
kvCache.clear()
}

override suspend fun clear() {
parentRepo.clear()
locker.withWriteLock {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import dev.inmo.micro_utils.pagination.*
import dev.inmo.micro_utils.pagination.utils.*
import dev.inmo.micro_utils.repos.*
import dev.inmo.micro_utils.repos.cache.cache.KVCache
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.*
Expand Down Expand Up @@ -47,9 +48,7 @@ open class ReadKeyValuesCacheRepo<Key,Value>(
kvCache.contains(k)
} || parentRepo.contains(k)

override suspend fun invalidate() = locker.withWriteLock {
kvCache.clear()
}
override suspend fun invalidate() = kvCache.actualizeAll(parentRepo, locker = locker)
}

fun <Key, Value> ReadKeyValuesRepo<Key, Value>.cached(
Expand Down Expand Up @@ -84,10 +83,6 @@ open class KeyValuesCacheRepo<Key,Value>(
kvCache.unset(it)
}
}.launchIn(scope)

override suspend fun invalidate() = locker.withWriteLock {
kvCache.clear()
}
}

fun <Key, Value> KeyValuesRepo<Key, Value>.cached(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import dev.inmo.micro_utils.repos.ReadCRUDRepo
import dev.inmo.micro_utils.repos.cache.fallback.ActionWrapper
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo
import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode
import dev.inmo.micro_utils.repos.set
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
Expand Down Expand Up @@ -56,7 +57,7 @@ open class AutoRecacheReadCRUDRepo<RegisteredObject, Id>(
override suspend fun getAll(): Map<Id, RegisteredObject> = actionWrapper.wrap {
originalRepo.getAll()
}.onSuccess {
kvCache.actualizeAll(clear = true) { it }
kvCache.actualizeAll(clearMode = ActualizeAllClearMode.BeforeSet) { it }
}.getOrElse {
kvCache.getAll()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import dev.inmo.micro_utils.repos.ReadKeyValueRepo
import dev.inmo.micro_utils.repos.cache.fallback.ActionWrapper
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo
import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode
import dev.inmo.micro_utils.repos.set
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
Expand Down Expand Up @@ -56,7 +57,7 @@ open class AutoRecacheReadKeyValueRepo<Id, RegisteredObject>(
override suspend fun getAll(): Map<Id, RegisteredObject> = actionWrapper.wrap {
originalRepo.getAll()
}.onSuccess {
kvCache.actualizeAll(clear = true) { it }
kvCache.actualizeAll(clearMode = ActualizeAllClearMode.BeforeSet) { it }
}.getOrElse {
kvCache.getAll()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import dev.inmo.micro_utils.pagination.Pagination
import dev.inmo.micro_utils.pagination.PaginationResult
import dev.inmo.micro_utils.repos.*
import dev.inmo.micro_utils.repos.cache.*
import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
Expand Down Expand Up @@ -42,7 +43,7 @@ open class FullReadCRUDCacheRepo<ObjectType, IdType>(
)

protected open suspend fun actualizeAll() {
locker.withWriteLock { kvCache.actualizeAll(parentRepo) }
kvCache.actualizeAll(parentRepo, locker = locker)
}

override suspend fun getByPagination(pagination: Pagination): PaginationResult<ObjectType> = doOrTakeAndActualize(
Expand Down Expand Up @@ -72,7 +73,7 @@ open class FullReadCRUDCacheRepo<ObjectType, IdType>(
override suspend fun getAll(): Map<IdType, ObjectType> = doOrTakeAndActualizeWithWriteLock(
{ getAll().takeIf { it.isNotEmpty() }.optionalOrAbsentIfNull },
{ getAll() },
{ kvCache.actualizeAll(clear = true) { it } }
{ kvCache.actualizeAll(clearMode = ActualizeAllClearMode.BeforeSet) { it } }
)

override suspend fun getById(id: IdType): ObjectType? = doOrTakeAndActualizeWithWriteLock(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import dev.inmo.micro_utils.coroutines.withWriteLock
import dev.inmo.micro_utils.pagination.Pagination
import dev.inmo.micro_utils.pagination.PaginationResult
import dev.inmo.micro_utils.repos.*
import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import dev.inmo.micro_utils.repos.pagination.getAll
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.*
Expand Down Expand Up @@ -41,10 +41,7 @@ open class FullReadKeyValueCacheRepo<Key,Value>(
actualize = { locker.withWriteLock { actualize(it) } }
)
protected open suspend fun actualizeAll() {
locker.withWriteLock {
kvCache.clear()
kvCache.set(parentRepo.getAll())
}
kvCache.actualizeAll(parentRepo, locker)
}

override suspend fun get(k: Key): Value? = doOrTakeAndActualizeWithWriteLock(
Expand Down Expand Up @@ -74,7 +71,7 @@ open class FullReadKeyValueCacheRepo<Key,Value>(
override suspend fun getAll(): Map<Key, Value> = doOrTakeAndActualizeWithWriteLock(
{ getAll().takeIf { it.isNotEmpty() }.optionalOrAbsentIfNull },
{ getAll() },
{ kvCache.actualizeAll(clear = true) { it } }
{ kvCache.actualizeAll(clearMode = ActualizeAllClearMode.BeforeSet) { it } }
)

override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult<Key> = doOrTakeAndActualize(
Expand Down Expand Up @@ -150,9 +147,7 @@ open class FullKeyValueCacheRepo<Key,Value>(
override suspend fun unsetWithValues(toUnset: List<Value>) = parentRepo.unsetWithValues(toUnset)

override suspend fun invalidate() {
locker.withWriteLock {
kvCache.actualizeAll(parentRepo)
}
kvCache.actualizeAll(parentRepo, locker)
}

override suspend fun clear() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock
import dev.inmo.micro_utils.pagination.*
import dev.inmo.micro_utils.pagination.utils.*
import dev.inmo.micro_utils.repos.*
import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
Expand Down Expand Up @@ -41,15 +42,13 @@ open class FullReadKeyValuesCacheRepo<Key,Value>(
)

protected open suspend fun actualizeKey(k: Key) {
locker.withWriteLock {
kvCache.set(k, parentRepo.getAll(k))
kvCache.actualizeAll(locker = locker, clearMode = ActualizeAllClearMode.Never) {
mapOf(k to parentRepo.getAll(k))
}
}

protected open suspend fun actualizeAll() {
locker.withWriteLock {
kvCache.actualizeAll(parentRepo)
}
kvCache.actualizeAll(parentRepo, locker = locker)
}

override suspend fun get(k: Key, pagination: Pagination, reversed: Boolean): PaginationResult<Value> {
Expand Down Expand Up @@ -187,9 +186,7 @@ open class FullKeyValuesCacheRepo<Key,Value>(
}

override suspend fun invalidate() {
locker.withWriteLock {
kvCache.actualizeAll(parentRepo)
}
kvCache.actualizeAll(parentRepo, locker = locker)
}

override suspend fun set(toSet: Map<Key, List<Value>>) {
Expand Down

0 comments on commit ccc0002

Please sign in to comment.