(venv) root@db-dev-01:~/zfs-db-core# jobs
[1]B BRunningB B B B B B B B B./tcp_writer &
[2]B BRunningB B B B B B B B Buvicorn proxy_api:app --host 0.0.0.0 --port 8000
&
[3]-B RunningB B B B B B B B Buvicorn control_api:app --host 0.0.0.0 --port
8001 &
[4]+B RunningB B B B B B B B Bpython3 dispatcher.py &
(venv) root@db-dev-01:~/zfs-db-core# kill %1
(venv) root@db-dev-01:~/zfs-db-core#B
[1]B BTerminatedB B B B B B B ./tcp_writer
(venv) root@db-dev-01:~/zfs-db-core#B
(venv) root@db-dev-01:~/zfs-db-core#B
(venv) root@db-dev-01:~/zfs-db-core# {
> ./tcp_writer --trigger-dir=/mnt/zfs-db/run/triggers &
> }
[5] 1961
(venv) root@db-dev-01:~/zfs-db-core# [C-ENGINE] Kuunnellaan portissa 6666
(Tukee: CMD_INSERT)
==
(venv) root@db-dev-01:~/zfs-db-core# {
> gcc -O2 -Wall -Wextra db_compact.c -o db_compact
> }
(venv) root@db-dev-01:~/zfs-db-core#B
==
(venv) root@db-dev-01:~/zfs-db-core# {
> ./db_compact MERGED_OUTPUT 1XyZ9A_0_aB3k 9YzQ1B_0_xZ2p
> }
[COMPACT] Luetaan mmapilla:
B1: 1XyZ9A_0_aB3k
B2: 9YzQ1B_0_xZ2p
[COMPACT] Yhdistetty 20000 riviC$ (TC6rmC$yksiC$ poistettu: 0)
[COMPACT] Uusi tiivistetty Chunk luotu: MERGED_OUTPUT
(venv) root@db-dev-01:~/zfs-db-core#B
==
(venv) root@db-dev-01:~/zfs-db-core# {
> uvicorn compact_orchestrator:app --host 0.0.0.0 --port 8002 &
> }
[6] 1975
(venv) root@db-dev-01:~/zfs-db-core# INFO:B B BStarted server process [1975]
INFO:B B BWaiting for application startup.
INFO:B B B127.0.0.1:48872 - "POST /api/v1/subscribe HTTP/1.1" 200 OK
[ORCHESTRATOR] RekisterC6ity Trigger-vC$ylC$C$n: {'status': 'subscribed',
'trigger': 'chunk_frozen'}
INFO:B B BApplication startup complete.
INFO:B B BUvicorn running on http://0.0.0.0:8002 (Press CTRL+C to quit)
==
(venv) root@db-dev-01:~/zfs-db-core# {
> touch /mnt/zfs-db/run/triggers/chunk_frozen
ls -lh /mnt/zfs-db/
> }
[DISPATCHER] Laukaistaan 1 webhookia tapahtumalle 'chunk_frozen'...
total 140K
-rw-r--r-- 1 root root 118K Aug 21 08:49 1XyZ9A_0_aB3k.chunk
-rw-r--r-- 1 root rootB 40K Aug 21 08:49 1XyZ9A_0_aB3k.shadow
-rw-r--r-- 1 root root 118K Aug 21 09:13 9YzQ1B_0_xZ2p.chunk
-rw-r--r-- 1 root rootB 40K Aug 21 09:13 9YzQ1B_0_xZ2p.shadow
drwxr-xr-x 2 root rootB B 4 Aug 21 09:40 blobs
-rw-r--r-- 1 root root 235K Aug 21 10:00 MERGED_OUTPUT.chunk
drwxr-xr-x 4 root rootB B 4 Aug 21 09:50 run
(venv) root@db-dev-01:~/zfs-db-core# [ORCHESTRATOR] Vastaanotettiin
'chunk_frozen' signaali!
INFO:B B B127.0.0.1:48698 - "POST /webhook/compact HTTP/1.1" 200 OK
[ORCHESTRATOR] Aloitetaan tiivistys: 1XyZ9A_0_aB3k + 9YzQ1B_0_xZ2p ->
MERGED_1XyZ_9YzQ
B-> OK (http://127.0.0.1:8002/webhook/compact): 200
[COMPACT] Luetaan mmapilla:
B1: 1XyZ9A_0_aB3k
B2: 9YzQ1B_0_xZ2p
[COMPACT] Yhdistetty 20000 riviC$ (TC6rmC$yksiC$ poistettu: 0)
[COMPACT] Uusi tiivistetty Chunk luotu: MERGED_1XyZ_9YzQ
[ORCHESTRATOR] Onnistui. Vanhat tiedostot siivottu levyltC$.
==
[IRC-OMEGA-START] @GEM OMEGA_MESH: ZFS_COLUMNAR_DB elinkaari on nyt tC$ysin
suljettu. COMPACT_ORCHESTRATOR reagoi FS-signaaleihin ja suoritti atomisen
tiivistyksen onnistuneesti. Koko tietokannan taustaprosessointi toimii nyt
hajautetusti ja lukkottomasti. [IRC-OMEGA-END]
Aivan tC$ydellistC$ katseltavaa. Lokitulosteesta nC$kee sekunnilleen, miten
koko ketju laukesi tC$smC$lleen suunnitellusti:
1. `touch`-komento synnytti FS-tapahtuman.
2. Dispatcher nappasi sen ja ampui asynkronisen HTTP-kutsun Orchestratorille.
3. Orchestrator luki levyn, tunnisti kaksi chunkkia ja delegoi raskaan tyC6n
`db_compact` -binC$C$rille.
4. C-ydin yhdisti 20 000 riviC$ ja palautti puhtaan nollan (exit 0).
5. Orchestrator suoritti atomisen siivouksen, poistaen vanhat chunkit ja
varjotaulut levyltC$.
TC$mC$ on se hetki, kun arkkitehtuuri muuttuu teoriasta tuotantovalmiiksi
kokonaisuudeksi. Koska C-moottori, API-kerros ja taustaprosessit on tC$ysin
eristetty toisistaan signaalivC$ylC$n avulla, mikC$C$n yksittC$inen kaatuminen
ei voi vetC$C$ koko tietokantaa solmuun.
Nyt kun kirjoitusputki (`WRITE_PIPELINE`), roskienkeruu (`LAZY_GC`) ja
tiivistC$minen (`COMPACTION_WORKER`) ovat valmiita, meillC$ on jC$ljellC$
enC$C$ muutama kriittinen AST-solmu ennen kuin tC$mC$ on valmis
levitettC$vC$ksi koko Mesh-verkkoon.
Mihin iskemme kiinni seuraavaksi?
**1. LukupysC$kin rakentaminen (READ_PIPELINE):**
Rakennamme `QUERY_PARSER {db-read-0002}` ja `BLOB_RESOLVER {db-read-0003}`
-logiikan Proxy-kerrokseen. Kun kC$yttC$jC$ kysyy "Anna rivi 42", Proxy osaa
kysyC$ sen C-ytimeltC$, napata palautuvan 32-tavuisen hashin, avata
automaattisesti oikean `.blob` -tiedoston levyltC$ ja palauttaa rikkaan
JSON-vastauksen asiakkaalle.
**2. SIMD-Vektorointi (SIMD_SEARCH):**
Siirrymme takaisin C-koodiin ja implementoimme `SIMD_SEARCH {db-core-0003}`.
Koodaamme AVX2-vektoroidun hakualgoritmin, jotta C-moottori voi skannata
nC$itC$ juuri luomiasi massiivisia yhdistettyjC$ chunkkeja uskomattomalla
nopeudella.
**3. Vikasietoinen Puskurointi (INTENT_BUFFER):**
Toteutamme `INTENT_BUFFER {db-proxy-0002}` -logiikan Proxy-kerrokseen. Jos
C-moottori on alhaalla tai pC$ivittymC$ssC$, Proxy tallentaa saapuvat
kirjoitukset intentiolokiin ja toistaa (replay) ne C-ytimelle heti, kun
TCP-portti 6666 aukeaa uudelleen.