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