@@ -39,8 +39,11 @@ internal const val MAX_CONFIG_DELTA_CACHE_ENTRIES = 500
3939internal const val MAX_AVAILABLE_REVISIONS_CACHE_ENTRIES = 50
4040internal const val MAX_REVISIONS_WITH_DATA_CACHE_ENTRIES = 50
4141internal const val MAX_MANIFEST_HAS_CHANGES_CACHE_ENTRIES = 2000
42+ internal const val MAX_CONFIG_TABLE_SEARCH_CACHE_ENTRIES = 2000
43+ internal const val MAX_CONFIG_ROWS_CACHE_ENTRIES = 200
4244
4345internal const val AVAILABLE_REVISIONS_CACHE_TTL_MS = 60_000L
46+ internal const val CONFIG_TABLE_SEARCH_CACHE_TTL_MS = 60 * 60 * 1000L
4447
4548internal data class CachedConfigContent (val hash : String , val lines : List <Map <String , Any ?>>)
4649
@@ -96,6 +99,27 @@ internal data class SpriteEtagCacheKey(
9699 val id : Int ,
97100)
98101
102+ internal data class ConfigTableSearchCacheKey (
103+ val game : String ,
104+ val environment : String ,
105+ val type : String ,
106+ val base : Int ,
107+ val rev : Int ,
108+ val mode : String ,
109+ val q : String ,
110+ )
111+
112+ internal data class CachedConfigTableSearch (
113+ val expiresAtMs : Long ,
114+ val matchingIds : List <Int >,
115+ )
116+
117+ /* * Pre-built allRows list + id→row lookup, keyed by game/env/type/base/rev. */
118+ internal data class CachedConfigRows (
119+ val allRows : List <Map <String , Any ?>>,
120+ val rowById : Map <Int , Map <String , Any ?>>,
121+ )
122+
99123internal data class ConfigBlockDto (
100124 val id : Int ,
101125 val sectionId : String ,
@@ -124,6 +148,11 @@ internal data class SpriteDelta(
124148/* * All diff-route bounded in-memory caches + single-flight locks (one place to tune sizes). */
125149internal object DiffRouteCaches {
126150 val configTable = LruMutexCache <String , CachedConfigTable >(MAX_CONFIG_TABLE_CACHE_ENTRIES , 128 )
151+ val configTableSearch = LruMutexCache <ConfigTableSearchCacheKey , CachedConfigTableSearch >(
152+ MAX_CONFIG_TABLE_SEARCH_CACHE_ENTRIES ,
153+ 512 ,
154+ )
155+ val configRows = LruMutexCache <GameEnvTypeBaseRevKey , CachedConfigRows >(MAX_CONFIG_ROWS_CACHE_ENTRIES , 64 )
127156 val configContent = LruMutexCache <String , CachedConfigContent >(MAX_CONFIG_CONTENT_CACHE_ENTRIES , 128 )
128157 val configContentComputeMutexes = ConcurrentHashMap <String , Mutex >()
129158
0 commit comments