Skip to content

Commit 67bc00f

Browse files
committed
basic database setup
1 parent 47ce013 commit 67bc00f

10 files changed

Lines changed: 4051 additions & 284 deletions

File tree

Cargo.lock

Lines changed: 3799 additions & 276 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ prost = { version = "0.14", optional = true }
2727
tonic-prost = { version = "0.14", optional = true }
2828
tracing = { version = "0.1", optional = true }
2929
tracing-subscriber = { version = "0.3.20", features = ["env-filter", "fmt"], optional = true }
30+
surrealdb = { version = "3.0.0", features = ["kv-rocksdb", "kv-mem"], optional = true }
3031

3132

3233
[build-dependencies]
@@ -50,6 +51,7 @@ ssr = [
5051
"leptos/ssr",
5152
"leptos_meta/ssr",
5253
"leptos_router/ssr",
54+
"dep:surrealdb",
5355
]
5456

5557
# Defines a size-optimized profile for the WASM bundle in release mode

data/avored.db/CURRENT

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MANIFEST-000005

data/avored.db/IDENTITY

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
8eca97fc-f2e6-441c-9ab0-c27682231a83

data/avored.db/LOCK

Whitespace-only changes.

data/avored.db/LOG

Whitespace-only changes.

data/avored.db/MANIFEST-000005

116 Bytes
Binary file not shown.

data/avored.db/OPTIONS-000007

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
# This is a RocksDB option file.
2+
#
3+
# For detailed file format spec, please refer to the example file
4+
# in examples/rocksdb_option_file_example.ini
5+
#
6+
7+
[Version]
8+
rocksdb_version=10.6.2
9+
options_file_version=1.1
10+
11+
[DBOptions]
12+
max_background_flushes=-1
13+
compaction_readahead_size=16777216
14+
strict_bytes_per_sync=false
15+
wal_bytes_per_sync=524288
16+
max_open_files=1024
17+
stats_history_buffer_size=1048576
18+
max_total_wal_size=0
19+
stats_persist_period_sec=600
20+
stats_dump_period_sec=600
21+
avoid_flush_during_shutdown=false
22+
max_subcompactions=4
23+
bytes_per_sync=0
24+
delayed_write_rate=16777216
25+
max_background_compactions=-1
26+
max_background_jobs=24
27+
delete_obsolete_files_period_micros=21600000000
28+
writable_file_max_buffer_size=1048576
29+
follower_catchup_retry_wait_ms=100
30+
file_checksum_gen_factory=nullptr
31+
allow_data_in_errors=false
32+
max_bgerror_resume_count=2147483647
33+
best_efforts_recovery=false
34+
wal_write_temperature=kUnknown
35+
write_identity_file=true
36+
write_dbid_to_manifest=true
37+
atomic_flush=false
38+
manual_wal_flush=true
39+
two_write_queues=false
40+
avoid_flush_during_recovery=false
41+
dump_malloc_stats=false
42+
info_log_level=WARN_LEVEL
43+
write_thread_slow_yield_usec=3
44+
unordered_write=false
45+
follower_refresh_catchup_period_ms=10000
46+
log_readahead_size=0
47+
enable_pipelined_write=true
48+
allow_ingest_behind=false
49+
persist_stats_to_disk=false
50+
WAL_ttl_seconds=0
51+
bgerror_resume_retry_interval=1000000
52+
allow_concurrent_memtable_write=true
53+
paranoid_checks=true
54+
WAL_size_limit_MB=0
55+
metadata_write_temperature=kUnknown
56+
lowest_used_cache_tier=kNonVolatileBlockTier
57+
keep_log_file_num=10
58+
table_cache_numshardbits=6
59+
max_file_opening_threads=16
60+
background_close_inactive_wals=false
61+
wal_recovery_mode=kPointInTimeRecovery
62+
follower_catchup_retry_count=10
63+
db_write_buffer_size=0
64+
allow_2pc=false
65+
skip_checking_sst_file_sizes_on_db_open=false
66+
skip_stats_update_on_db_open=false
67+
recycle_log_file_num=0
68+
db_host_id=__hostname__
69+
track_and_verify_wals_in_manifest=false
70+
use_fsync=false
71+
wal_compression=kNoCompression
72+
compaction_verify_record_count=true
73+
error_if_exists=false
74+
manifest_preallocation_size=4194304
75+
is_fd_close_on_exec=true
76+
enable_write_thread_adaptive_yield=true
77+
track_and_verify_wals=false
78+
enable_thread_tracking=false
79+
avoid_unnecessary_blocking_io=true
80+
allow_fallocate=true
81+
max_log_file_size=0
82+
advise_random_on_open=true
83+
create_missing_column_families=true
84+
max_write_batch_group_size_bytes=1048576
85+
use_adaptive_mutex=false
86+
prefix_seek_opt_in_only=false
87+
wal_filter=nullptr
88+
create_if_missing=true
89+
enforce_single_del_contracts=true
90+
allow_mmap_writes=false
91+
verify_sst_unique_id_in_manifest=true
92+
log_file_time_to_roll=0
93+
use_direct_io_for_flush_and_compaction=false
94+
flush_verify_memtable_count=true
95+
max_manifest_file_size=1073741824
96+
write_thread_max_yield_usec=100
97+
use_direct_reads=false
98+
allow_mmap_reads=false
99+
100+
101+
[CFOptions "default"]
102+
memtable_avg_op_scan_flush_trigger=0
103+
memtable_op_scan_flush_trigger=0
104+
compression_manager=nullptr
105+
bottommost_file_compaction_delay=0
106+
memtable_protection_bytes_per_key=0
107+
compression_per_level=kNoCompression:kNoCompression:kLZ4Compression:kLZ4Compression:kLZ4Compression
108+
bottommost_compression=kDisableCompressionOption
109+
sample_for_compression=0
110+
blob_compression_type=kNoCompression
111+
paranoid_memory_checks=false
112+
blob_garbage_collection_age_cutoff=0.500000
113+
preclude_last_level_data_seconds=0
114+
compaction_options_universal={reduce_file_locking=false;allow_trivial_move=false;stop_style=kCompactionStopStyleTotalSize;max_read_amp=-1;min_merge_width=2;compression_size_percent=-1;max_size_amplification_percent=200;incremental=false;max_merge_width=4294967295;size_ratio=1;}
115+
target_file_size_base=67108864
116+
memtable_whole_key_filtering=false
117+
blob_file_starting_level=0
118+
soft_pending_compaction_bytes_limit=68719476736
119+
max_write_buffer_number=8
120+
ttl=2592000
121+
compaction_options_fifo={trivial_copy_buffer_size=4096;allow_trivial_copy_when_change_temperature=false;age_for_warm=0;file_temperature_age_thresholds=;allow_compaction=false;max_table_files_size=1073741824;}
122+
memtable_huge_page_size=0
123+
max_sequential_skip_in_iterations=8
124+
strict_max_successive_merges=false
125+
max_successive_merges=0
126+
enable_blob_garbage_collection=true
127+
arena_block_size=1048576
128+
bottommost_compression_opts={use_zstd_dict_trainer=true;enabled=false;zstd_max_train_bytes=0;parallel_threads=1;max_compressed_bytes_per_kb=896;checksum=false;max_dict_bytes=0;strategy=0;max_dict_buffer_bytes=0;level=32767;window_bits=-14;}
129+
target_file_size_multiplier=2
130+
max_bytes_for_level_multiplier_additional=1:1:1:1:1:1:1
131+
prepopulate_blob_cache=kDisable
132+
blob_compaction_readahead_size=0
133+
min_blob_size=4096
134+
level0_stop_writes_trigger=36
135+
blob_garbage_collection_force_threshold=0.500000
136+
enable_blob_files=true
137+
level0_slowdown_writes_trigger=20
138+
default_write_temperature=kUnknown
139+
compression=kSnappyCompression
140+
level0_file_num_compaction_trigger=4
141+
block_protection_bytes_per_key=0
142+
prefix_extractor=nullptr
143+
max_bytes_for_level_multiplier=10.000000
144+
write_buffer_size=134217728
145+
uncache_aggressiveness=0
146+
disable_auto_compactions=false
147+
max_compaction_bytes=1677721600
148+
inplace_update_num_locks=10000
149+
periodic_compaction_seconds=0
150+
experimental_mempurge_threshold=0.000000
151+
memtable_prefix_bloom_size_ratio=0.000000
152+
max_bytes_for_level_base=268435456
153+
paranoid_file_checks=false
154+
blob_file_size=268435456
155+
preserve_internal_time_seconds=0
156+
memtable_max_range_deletions=0
157+
compression_opts={use_zstd_dict_trainer=true;enabled=false;zstd_max_train_bytes=0;parallel_threads=1;max_compressed_bytes_per_kb=896;checksum=false;max_dict_bytes=0;strategy=0;max_dict_buffer_bytes=0;level=32767;window_bits=-14;}
158+
hard_pending_compaction_bytes_limit=274877906944
159+
last_level_temperature=kUnknown
160+
table_factory=BlockBasedTable
161+
report_bg_io_stats=false
162+
persist_user_defined_timestamps=true
163+
sst_partitioner_factory=nullptr
164+
compaction_pri=kMinOverlappingRatio
165+
compaction_style=kCompactionStyleLevel
166+
memtable_factory=SkipListFactory
167+
comparator=leveldb.BytewiseComparator
168+
table_properties_collectors={{id=CompactOnDeletionCollector;min_file_size=0;deletion_ratio=0.500000;deletion_trigger=50;window_size=1000;}}
169+
bloom_locality=0
170+
cf_allow_ingest_behind=false
171+
compaction_filter_factory=nullptr
172+
min_write_buffer_number_to_merge=2
173+
max_write_buffer_size_to_maintain=1073741824
174+
compaction_filter=nullptr
175+
optimize_filters_for_hits=false
176+
default_temperature=kUnknown
177+
force_consistency_checks=true
178+
merge_operator=nullptr
179+
num_levels=7
180+
memtable_insert_with_hint_prefix_extractor=nullptr
181+
level_compaction_dynamic_level_bytes=true
182+
disallow_memtable_writes=false
183+
inplace_update_support=false
184+
185+
[TableOptions/BlockBasedTable "default"]
186+
num_file_reads_for_auto_readahead=2
187+
metadata_cache_options={unpartitioned_pinning=kFallback;partition_pinning=kFallback;top_level_index_pinning=kFallback;}
188+
read_amp_bytes_per_bit=0
189+
verify_compression=false
190+
format_version=6
191+
detect_filter_construct_corruption=false
192+
whole_key_filtering=true
193+
optimize_filters_for_memory=true
194+
decouple_partitioned_filters=true
195+
partition_filters=false
196+
initial_auto_readahead_size=8192
197+
max_auto_readahead_size=262144
198+
enable_index_compression=true
199+
checksum=kXXH3
200+
index_block_restart_interval=1
201+
pin_top_level_index_and_filter=true
202+
block_align=false
203+
block_size=65536
204+
index_type=kBinarySearch
205+
filter_policy=bloomfilter
206+
metadata_block_size=4096
207+
no_block_cache=false
208+
index_shortening=kShortenSeparators
209+
block_size_deviation=10
210+
data_block_index_type=kDataBlockBinarySearch
211+
use_delta_encoding=true
212+
data_block_hash_table_util_ratio=0.750000
213+
cache_index_and_filter_blocks=false
214+
fail_if_no_udi_on_open=false
215+
user_defined_index_factory=nullptr
216+
prepopulate_block_cache=kDisable
217+
block_restart_interval=16
218+
pin_l0_filter_and_index_blocks_in_cache=true
219+
cache_index_and_filter_blocks_with_high_priority=true
220+
flush_block_policy_factory=FlushBlockBySizePolicyFactory
221+

src/error.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,11 @@ impl From<LeptosConfigError> for Error {
2525
}
2626
}
2727

28+
impl From<surrealdb::Error> for Error {
29+
fn from(actual_error: surrealdb::Error) -> Self {
30+
error!("Surreal DB error: {actual_error:?}");
31+
Self::Generic("500 internal".to_string())
32+
}
33+
}
34+
2835
//LeptosConfigError

src/infra/setup.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,54 @@
1+
use crate::error::Result;
12
use axum::extract::FromRef;
2-
use tracing_subscriber::layer::SubscriberExt;
3-
use tracing_subscriber::util::SubscriberInitExt;
4-
use tracing_subscriber::{filter, Layer};
3+
use leptos::config::{get_configuration, LeptosOptions};
54
use std::env;
65
use std::fs::File;
76
use std::path::Path;
87
use std::sync::Arc;
9-
use leptos::config::{LeptosOptions, get_configuration};
10-
use crate::{error::Result};
8+
use surrealdb::engine::local::{Db, RocksDb};
9+
use surrealdb::Surreal;
10+
use tracing_subscriber::layer::SubscriberExt;
11+
use tracing_subscriber::util::SubscriberInitExt;
12+
use tracing_subscriber::{filter, Layer};
1113

1214
pub async fn init_app_state() -> Result<AppState> {
13-
1415
init_log();
16+
let db = init_database().await?;
1517
// rust_i18n::i18n!("resources/locales");
1618

1719
let conf = get_configuration(None)?;
1820
// let addr = conf.leptos_options.site_addr;
1921

2022
Ok(AppState {
2123
leptos_options: conf.leptos_options,
24+
db,
2225
})
2326
}
2427

25-
28+
pub type DB = Surreal<Db>;
2629

2730
#[derive(Clone)]
2831
pub struct AppState {
2932
pub leptos_options: LeptosOptions,
33+
pub db: DB,
3034
}
3135

32-
3336
impl FromRef<AppState> for LeptosOptions {
3437
fn from_ref(app_state: &AppState) -> Self {
3538
app_state.leptos_options.clone()
3639
}
3740
}
3841

42+
async fn init_database() -> Result<DB> {
43+
let db_path = "data/avored.db";
44+
let db = Surreal::new::<RocksDb>(db_path).await?;
3945

46+
db.use_ns("public").use_db("avored").await?;
47+
48+
println!("connected to surrealdb at: {}", db_path);
49+
50+
Ok(db)
51+
}
4052

4153
fn init_log() {
4254
let stdout_log = tracing_subscriber::fmt::layer().pretty();

0 commit comments

Comments
 (0)