Skip to main content

tuwunel_database/
maps.rs

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), // intentionally match shorteventid_authchain
47		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];