Generalizes the FastEOSE cache for Users

This commit is contained in:
Vitor Pamplona
2025-05-14 14:53:30 -04:00
parent b7ac32d768
commit d0f138e992
3 changed files with 10 additions and 10 deletions
@@ -42,7 +42,7 @@ abstract class PerUserEoseManager<T>(
allKeys: () -> Set<T>, allKeys: () -> Set<T>,
val invalidateAfterEose: Boolean = false, val invalidateAfterEose: Boolean = false,
) : BaseEoseManager<T>(client, allKeys) { ) : BaseEoseManager<T>(client, allKeys) {
private val latestEOSEs = EOSEAccountFast() private val latestEOSEs = EOSEAccountFast<User>()
private val userSubscriptionMap = mutableMapOf<User, String>() private val userSubscriptionMap = mutableMapOf<User, String>()
fun since(key: T) = latestEOSEs.since(user(key)) fun since(key: T) = latestEOSEs.since(user(key))
@@ -33,7 +33,7 @@ class UserWatcherSubAssembler(
allKeys: () -> Set<UserFinderQueryState>, allKeys: () -> Set<UserFinderQueryState>,
) : SingleSubEoseManager<UserFinderQueryState>(client, allKeys) { ) : SingleSubEoseManager<UserFinderQueryState>(client, allKeys) {
var lastUsersOnFilter: Set<User> = emptySet() var lastUsersOnFilter: Set<User> = emptySet()
var latestEOSEs: EOSEAccountFast = EOSEAccountFast(2000) var latestEOSEs: EOSEAccountFast<User> = EOSEAccountFast<User>(2000)
override fun newEose( override fun newEose(
relayUrl: String, relayUrl: String,
@@ -69,7 +69,7 @@ class UserWatcherSubAssembler(
fun groupByRelayPresence( fun groupByRelayPresence(
users: Iterable<User>, users: Iterable<User>,
eoseCache: EOSEAccountFast, eoseCache: EOSEAccountFast<User>,
): Collection<List<User>> = ): Collection<List<User>> =
users users
.groupBy { eoseCache.since(it)?.keys?.hashCode() } .groupBy { eoseCache.since(it)?.keys?.hashCode() }
@@ -81,7 +81,7 @@ class UserWatcherSubAssembler(
fun findMinimumEOSEsForUsers( fun findMinimumEOSEsForUsers(
users: List<User>, users: List<User>,
eoseCache: EOSEAccountFast, eoseCache: EOSEAccountFast<User>,
): Map<String, EOSETime> { ): Map<String, EOSETime> {
val minLatestEOSEs = mutableMapOf<String, EOSETime>() val minLatestEOSEs = mutableMapOf<String, EOSETime>()
@@ -122,13 +122,13 @@ class EOSEAccount(
) = addOrUpdate(user, listCode, relayUrl, time) ) = addOrUpdate(user, listCode, relayUrl, time)
} }
class EOSEAccountFast( class EOSEAccountFast<T : Any>(
cacheSize: Int = 20, cacheSize: Int = 20,
) { ) {
private val users: LruCache<User, EOSERelayList> = LruCache<User, EOSERelayList>(cacheSize) private val users: LruCache<T, EOSERelayList> = LruCache<T, EOSERelayList>(cacheSize)
fun addOrUpdate( fun addOrUpdate(
user: User, user: T,
relayUrl: String, relayUrl: String,
time: Long, time: Long,
) { ) {
@@ -143,14 +143,14 @@ class EOSEAccountFast(
} }
} }
fun removeDataFor(user: User) { fun removeDataFor(user: T) {
users.remove(user) users.remove(user)
} }
fun since(key: User) = users[key]?.relayList fun since(key: T) = users[key]?.relayList
fun newEose( fun newEose(
user: User, user: T,
relayUrl: String, relayUrl: String,
time: Long, time: Long,
) = addOrUpdate(user, relayUrl, time) ) = addOrUpdate(user, relayUrl, time)