1use std::{collections::BTreeMap, sync::Arc};
2
3use rocksdb::DBCompressionType as CompressionType;
4use tuwunel_core::Result;
5
6use crate::{
7 Engine, Map,
8 engine::descriptor::{self, CacheDisp, Descriptor},
9};
10
11pub(super) type Maps = BTreeMap<MapsKey, MapsVal>;
12pub(super) type MapsKey = &'static str;
13pub(super) type MapsVal = Arc<Map>;
14
15pub(super) fn open(engine: &Arc<Engine>) -> Result<Maps> { open_list(engine, MAPS) }
16
17#[tracing::instrument(name = "maps", level = "debug", skip_all)]
18pub(super) fn open_list(engine: &Arc<Engine>, maps: &[Descriptor]) -> Result<Maps> {
19 maps.iter()
20 .filter(|desc| !desc.dropped)
21 .map(|desc| Ok((desc.name, Map::open(engine, desc.name)?)))
22 .collect()
23}
24
25pub(super) static MAPS: &[Descriptor] = &[
26 Descriptor {
27 name: "alias_roomid",
28 ..descriptor::RANDOM_SMALL
29 },
30 Descriptor {
31 name: "alias_userid",
32 ..descriptor::RANDOM_SMALL
33 },
34 Descriptor {
35 name: "aliasid_alias",
36 ..descriptor::RANDOM_SMALL
37 },
38 Descriptor {
39 name: "authchainkey_authchain",
40 cache_disp: CacheDisp::SharedWith("shorteventid_authchain"),
41 compression: CompressionType::None,
42 index_size: 1024,
43 block_size: 4096,
44 key_size_hint: Some(8), val_size_hint: Some(256),
46 ..descriptor::RANDOM_CACHE
47 },
48 Descriptor {
49 name: "backupid_algorithm",
50 ..descriptor::RANDOM_SMALL
51 },
52 Descriptor {
53 name: "backupid_etag",
54 ..descriptor::RANDOM_SMALL
55 },
56 Descriptor {
57 name: "backupkeyid_backup",
58 ..descriptor::RANDOM_SMALL
59 },
60 Descriptor {
61 name: "bannedroomids",
62 ..descriptor::RANDOM_SMALL
63 },
64 Descriptor {
65 name: "disabledroomids",
66 ..descriptor::RANDOM_SMALL
67 },
68 Descriptor {
69 name: "eventid_originalpdu",
70 key_size_hint: Some(48),
71 val_size_hint: Some(1520),
72 block_size: 2048,
73 index_size: 512,
74 ..descriptor::RANDOM
75 },
76 Descriptor {
77 name: "eventid_outlierpdu",
78 cache_disp: CacheDisp::SharedWith("pduid_pdu"),
79 key_size_hint: Some(48),
80 val_size_hint: Some(1488),
81 block_size: 1024,
82 index_size: 512,
83 ..descriptor::RANDOM
84 },
85 Descriptor {
86 name: "eventid_pduid",
87 cache_disp: CacheDisp::Unique,
88 key_size_hint: Some(48),
89 val_size_hint: Some(16),
90 block_size: 512,
91 index_size: 512,
92 ..descriptor::RANDOM
93 },
94 Descriptor {
95 name: "eventid_policysigstate",
96 ..descriptor::RANDOM_SMALL_CACHE
97 },
98 Descriptor {
99 name: "eventid_shorteventid",
100 cache_disp: CacheDisp::Unique,
101 key_size_hint: Some(48),
102 val_size_hint: Some(8),
103 block_size: 512,
104 index_size: 512,
105 ..descriptor::RANDOM
106 },
107 Descriptor {
108 name: "global",
109 ..descriptor::RANDOM_SMALL
110 },
111 Descriptor {
112 name: "id_appserviceregistrations",
113 ..descriptor::RANDOM_SMALL
114 },
115 Descriptor {
116 name: "keychangeid_userid",
117 ..descriptor::RANDOM
118 },
119 Descriptor {
120 name: "keyid_key",
121 ..descriptor::RANDOM_SMALL
122 },
123 Descriptor {
124 name: "lazyloadedids",
125 ..descriptor::RANDOM_SMALL
126 },
127 Descriptor {
128 name: "logintoken_expiresatuserid",
129 ..descriptor::RANDOM_SMALL
130 },
131 Descriptor {
132 name: "mediaid_file",
133 ..descriptor::RANDOM_SMALL
134 },
135 Descriptor {
136 name: "mediaid_pending",
137 ttl: 60 * 60 * 24 * 7,
138 ..descriptor::RANDOM_SMALL_CACHE
139 },
140 Descriptor {
141 name: "mediaid_user",
142 ..descriptor::RANDOM_SMALL
143 },
144 Descriptor {
145 name: "oauthid_session",
146 ..descriptor::RANDOM_SMALL
147 },
148 Descriptor {
149 name: "oauthuniqid_oauthid",
150 ..descriptor::RANDOM_SMALL
151 },
152 Descriptor {
153 name: "oidc_signingkey",
154 ..descriptor::RANDOM_SMALL
155 },
156 Descriptor {
157 name: "oidcclientid_registration",
158 ..descriptor::RANDOM_SMALL_CACHE
159 },
160 Descriptor {
161 name: "oidccode_authsession",
162 ..descriptor::RANDOM_SMALL
163 },
164 Descriptor {
165 name: "oidcdevice_userdeviceid",
166 ..descriptor::RANDOM_SMALL
167 },
168 Descriptor {
169 name: "oidccskeybypass_userid",
170 ..descriptor::RANDOM_SMALL
171 },
172 Descriptor {
173 name: "oidcreqid_authrequest",
174 ..descriptor::RANDOM_SMALL
175 },
176 Descriptor {
177 name: "onetimekeyid_onetimekeys",
178 ..descriptor::DROPPED
179 },
180 Descriptor {
181 name: "onetimekeyid4225_otk",
182 ..descriptor::RANDOM_SMALL
183 },
184 Descriptor {
185 name: "openidtoken_expiresatuserid",
186 ..descriptor::RANDOM_SMALL
187 },
188 Descriptor {
189 name: "pduid_pdu",
190 cache_disp: CacheDisp::SharedWith("eventid_outlierpdu"),
191 key_size_hint: Some(16),
192 val_size_hint: Some(1520),
193 block_size: 2048,
194 index_size: 512,
195 ..descriptor::SEQUENTIAL
196 },
197 Descriptor {
198 name: "publicroomids",
199 ..descriptor::RANDOM_SMALL
200 },
201 Descriptor {
202 name: "pushkey_deviceid",
203 ..descriptor::RANDOM_SMALL
204 },
205 Descriptor {
206 name: "presenceid_presence",
207 ..descriptor::SEQUENTIAL_SMALL
208 },
209 Descriptor {
210 name: "readreceiptid_readreceipt",
211 ..descriptor::RANDOM
212 },
213 Descriptor {
214 name: "referencedevents",
215 ..descriptor::RANDOM
216 },
217 Descriptor {
218 name: "registrationtoken_info",
219 ..descriptor::RANDOM_SMALL
220 },
221 Descriptor {
222 name: "roomid_knockedcount",
223 ..descriptor::RANDOM_SMALL
224 },
225 Descriptor {
226 name: "roomid_invitedcount",
227 ..descriptor::RANDOM_SMALL
228 },
229 Descriptor {
230 name: "roomid_inviteviaservers",
231 ..descriptor::RANDOM_SMALL
232 },
233 Descriptor {
234 name: "roomid_joinedcount",
235 ..descriptor::RANDOM_SMALL
236 },
237 Descriptor {
238 name: "roomid_maxremotepowerlevel",
239 ..descriptor::RANDOM_SMALL
240 },
241 Descriptor {
242 name: "roomid_pduleaves",
243 ..descriptor::RANDOM_SMALL
244 },
245 Descriptor {
246 name: "roomid_shortroomid",
247 val_size_hint: Some(8),
248 ..descriptor::RANDOM_SMALL
249 },
250 Descriptor {
251 name: "roomid_shortstatehash",
252 val_size_hint: Some(8),
253 ..descriptor::RANDOM_SMALL
254 },
255 Descriptor {
256 name: "roomid_spacehierarchy",
257 limit_size: 1024 * 1024 * 64,
258 ..descriptor::RANDOM_SMALL_CACHE
259 },
260 Descriptor {
261 name: "roomid_ts_pducount",
262 val_size_hint: Some(8),
263 ..descriptor::RANDOM
264 },
265 Descriptor {
266 name: "roomserverids",
267 ..descriptor::RANDOM_SMALL
268 },
269 Descriptor {
270 name: "roomsynctoken_shortstatehash",
271 ..descriptor::DROPPED
272 },
273 Descriptor {
274 name: "roomuserdataid_accountdata",
275 ..descriptor::RANDOM_SMALL
276 },
277 Descriptor {
278 name: "roomuserid_invitecount",
279 val_size_hint: Some(8),
280 ..descriptor::RANDOM_SMALL
281 },
282 Descriptor {
283 name: "roomuserid_joined",
284 ..descriptor::RANDOM_SMALL
285 },
286 Descriptor {
287 name: "roomuserid_lastprivatereadupdate",
288 ..descriptor::RANDOM_SMALL
289 },
290 Descriptor {
291 name: "roomuserid_lastnotificationread",
292 ..descriptor::RANDOM_SMALL
293 },
294 Descriptor {
295 name: "roomuserid_leftcount",
296 val_size_hint: Some(8),
297 ..descriptor::RANDOM
298 },
299 Descriptor {
300 name: "roomuserid_knockedcount",
301 val_size_hint: Some(8),
302 ..descriptor::RANDOM_SMALL
303 },
304 Descriptor {
305 name: "roomuserid_privateread",
306 ..descriptor::RANDOM_SMALL
307 },
308 Descriptor {
309 name: "roomuseroncejoinedids",
310 ..descriptor::RANDOM
311 },
312 Descriptor {
313 name: "roomusertype_roomuserdataid",
314 ..descriptor::RANDOM_SMALL
315 },
316 Descriptor {
317 name: "senderkey_pusher",
318 ..descriptor::RANDOM_SMALL
319 },
320 Descriptor {
321 name: "server_signingkeys",
322 ..descriptor::RANDOM
323 },
324 Descriptor {
325 name: "servercurrentevent_data",
326 ..descriptor::RANDOM_SMALL
327 },
328 Descriptor {
329 name: "servername_destination",
330 ..descriptor::RANDOM_SMALL_CACHE
331 },
332 Descriptor {
333 name: "servername_educount",
334 ..descriptor::RANDOM_SMALL
335 },
336 Descriptor {
337 name: "servername_override",
338 ..descriptor::RANDOM_SMALL_CACHE
339 },
340 Descriptor {
341 name: "servernameevent_data",
342 cache_disp: CacheDisp::Unique,
343 val_size_hint: Some(128),
344 ..descriptor::RANDOM
345 },
346 Descriptor {
347 name: "serverroomids",
348 ..descriptor::RANDOM_SMALL
349 },
350 Descriptor {
351 name: "shorteventid_authchain",
352 cache_disp: CacheDisp::SharedWith("authchainkey_authchain"),
353 key_size_hint: Some(8),
354 val_size_hint: Some(256),
355 index_size: 512,
356 block_size: 4096,
357 ..descriptor::SEQUENTIAL
358 },
359 Descriptor {
360 name: "shorteventid_eventid",
361 cache_disp: CacheDisp::Unique,
362 key_size_hint: Some(8),
363 val_size_hint: Some(48),
364 ..descriptor::SEQUENTIAL_SMALL
365 },
366 Descriptor {
367 name: "shorteventid_shortstatehash",
368 key_size_hint: Some(8),
369 val_size_hint: Some(8),
370 block_size: 512,
371 index_size: 512,
372 ..descriptor::SEQUENTIAL
373 },
374 Descriptor {
375 name: "shortstatehash_statediff",
376 key_size_hint: Some(8),
377 ..descriptor::SEQUENTIAL_SMALL
378 },
379 Descriptor {
380 name: "shortstatekey_statekey",
381 cache_disp: CacheDisp::Unique,
382 key_size_hint: Some(8),
383 val_size_hint: Some(1016),
384 ..descriptor::RANDOM_SMALL
385 },
386 Descriptor {
387 name: "softfailedeventids",
388 key_size_hint: Some(48),
389 ..descriptor::RANDOM_SMALL
390 },
391 Descriptor {
392 name: "statehash_shortstatehash",
393 val_size_hint: Some(8),
394 ..descriptor::RANDOM
395 },
396 Descriptor {
397 name: "statekey_shortstatekey",
398 cache_disp: CacheDisp::Unique,
399 key_size_hint: Some(1016),
400 val_size_hint: Some(8),
401 ..descriptor::RANDOM
402 },
403 Descriptor {
404 name: "threadid_userids",
405 ..descriptor::SEQUENTIAL_SMALL
406 },
407 Descriptor {
408 name: "timeredacted_eventid",
409 key_size_hint: Some(57),
410 ..descriptor::SEQUENTIAL_SMALL
411 },
412 Descriptor {
413 name: "todeviceid_events",
414 ..descriptor::RANDOM
415 },
416 Descriptor {
417 name: "tofrom_relation",
418 key_size_hint: Some(8),
419 val_size_hint: Some(8),
420 ..descriptor::RANDOM_SMALL
421 },
422 Descriptor {
423 name: "token_userdeviceid",
424 ..descriptor::RANDOM_SMALL
425 },
426 Descriptor {
427 name: "tokenids",
428 block_size: 512,
429 ..descriptor::RANDOM
430 },
431 Descriptor {
432 name: "url_previews",
433 ..descriptor::RANDOM
434 },
435 Descriptor {
436 name: "userdeviceid_metadata",
437 ..descriptor::RANDOM_SMALL
438 },
439 Descriptor {
440 name: "userdeviceconnid_conn",
441 block_size: 1024 * 16,
442 ..descriptor::RANDOM_SMALL
443 },
444 Descriptor {
445 name: "userdeviceid_refresh",
446 ..descriptor::RANDOM_SMALL
447 },
448 Descriptor {
449 name: "userdeviceid_token",
450 ..descriptor::RANDOM_SMALL
451 },
452 Descriptor {
453 name: "userdeviceidalgorithm_fallback",
454 ..descriptor::RANDOM_SMALL
455 },
456 Descriptor {
457 name: "userdevicesessionid_uiaainfo",
458 ..descriptor::RANDOM_SMALL_CACHE
459 },
460 Descriptor {
461 name: "userdevicetxnid_response",
462 ..descriptor::RANDOM_SMALL
463 },
464 Descriptor {
465 name: "userfilterid_filter",
466 ..descriptor::RANDOM_SMALL
467 },
468 Descriptor {
469 name: "userid_avatarurl",
470 ..descriptor::RANDOM_SMALL
471 },
472 Descriptor {
473 name: "userid_blurhash",
474 ..descriptor::RANDOM_SMALL
475 },
476 Descriptor {
477 name: "userid_dehydrateddevice",
478 ..descriptor::RANDOM_SMALL
479 },
480 Descriptor {
481 name: "userid_devicelistversion",
482 ..descriptor::RANDOM_SMALL
483 },
484 Descriptor {
485 name: "userid_displayname",
486 ..descriptor::RANDOM_SMALL
487 },
488 Descriptor {
489 name: "userid_lastonetimekeyupdate",
490 ..descriptor::RANDOM_SMALL
491 },
492 Descriptor {
493 name: "userid_locked",
494 ..descriptor::RANDOM_SMALL
495 },
496 Descriptor {
497 name: "userid_masterkeyid",
498 ..descriptor::RANDOM_SMALL
499 },
500 Descriptor {
501 name: "userid_oauthid",
502 ..descriptor::RANDOM_SMALL
503 },
504 Descriptor {
505 name: "userid_origin",
506 ..descriptor::RANDOM
507 },
508 Descriptor {
509 name: "userid_password",
510 ..descriptor::RANDOM
511 },
512 Descriptor {
513 name: "userid_presenceid",
514 ..descriptor::RANDOM_SMALL
515 },
516 Descriptor {
517 name: "userid_selfsigningkeyid",
518 ..descriptor::RANDOM_SMALL
519 },
520 Descriptor {
521 name: "userid_suspended",
522 ..descriptor::RANDOM_SMALL
523 },
524 Descriptor {
525 name: "userid_usersigningkeyid",
526 ..descriptor::RANDOM_SMALL
527 },
528 Descriptor {
529 name: "useridcount_notification",
530 limit_size: 1024 * 1024 * 256,
531 ..descriptor::RANDOM_SMALL_CACHE
532 },
533 Descriptor {
534 name: "useridprofilekey_value",
535 ..descriptor::RANDOM_SMALL
536 },
537 Descriptor {
538 name: "userroomid_highlightcount",
539 ..descriptor::RANDOM
540 },
541 Descriptor {
542 name: "userroomid_invitestate",
543 ..descriptor::RANDOM_SMALL
544 },
545 Descriptor {
546 name: "userroomid_joined",
547 ..descriptor::RANDOM
548 },
549 Descriptor {
550 name: "userroomid_leftstate",
551 ..descriptor::RANDOM
552 },
553 Descriptor {
554 name: "userroomid_knockedstate",
555 ..descriptor::RANDOM_SMALL
556 },
557 Descriptor {
558 name: "userroomid_notificationcount",
559 ..descriptor::RANDOM
560 },
561];