Download Game! Currently 70 players and visitors. Last logged in:WarundZenickBartokOrdos

Blitzer's Blog >> 71810

Back to blogs index
Posted: 21 Aug 2026 15:18 [ permalink ]
Kiitos, hienoa! 

(venv) root@db-dev-01:~/zfs-db-core# ls -ltra spool-mailbox-layer/
total 16
drwxr-xr-x 5 root root 4096 Aug 21 12:14 ..
-rw-r--r-- 1 root root 1428 Aug 21 12:14 mock_transport.py
drwxr-xr-x 2 root root 4096 Aug 21 12:14 .
-rw-r--r-- 1 root root 2299 Aug 21 12:14 inbox_watcher.py
(venv) root@db-dev-01:~/zfs-db-core#B

LisC$tty AST-MD dokumenttiin: 

==
## SPOOL_MAILBOX_LAYER {db-spool-0001}
> description: Asynkroninen, POSIX-tiedostojC$rjestelmC$C$n ja ZFS-lukkoihin
perustuva solmujen vC$linen siirtokerros (Airgap/High-Latency -yhteensopiva).
> type: transport
> status: mvp_active
> tags: [spooling, async, posix, airgap]

### SPOOL_INBOX {db-spool-0002}
> description: Saapuvan datan puskurihakemisto (/mnt/zfs-db/spool/inbox/).
Vastaanottaa viestejC$ siirtokerrokselta (esim. rsync, USB, satelliitti)
riippumatta verkkoprotokollista.
> type: structure
> tags: [fs, directory]
> depends_on: [db-spool-0001]

### THREE_PHASE_HANDSHAKE {db-spool-0003}
> description: Kolmivaiheinen tiedostojen siirtomekanismi. Takaa
keskenerC$isten viestien hylkC$C$misen.
> type: logic
> tags: [handshake, state-machine]
> rules:
>B B- Phase 1: .meta.start (JSON-kirjekuori ja intent)
>B B- Phase 2: .blob (Raskas hyC6tykuorma)
>B B- Phase 3: .meta.end (TyhjC$ signaalitiedosto, siirron sinetti)

### INBOX_WATCHER {db-spool-0004}
> description: Inotify/poll -pohjainen taustaprosessi. Monitoroi .meta.end
-tiedostoja, kC$yttC$C$ atomista os.rename() POSIX-lukitusta, validoi
sisC$llC6n (SHA256) ja purkaa intentin jC$rjestelmC$n sisC$iseen kC$sittelyyn.
> type: daemon
> status: mvp_active
> tags: [python, async, lock-free, polling]
> depends_on: [db-spool-0002, db-spool-0003]

### SPOOL_OUTBOX {db-spool-0005}
> description: LC$htevien viestien puskurihakemisto. JC$rjestelmC$ kirjoittaa
viestin valmiina pakettina (.meta.start, .blob, .meta.end), josta Mesh-verkon
vikasietoinen siirtomekanismi poimii sen ja reitittC$C$ maailmalle.
> type: structure
> status: planning
> tags: [fs, directory, routing]
==

TC$mC$ on kerta kaikkiaan mestarillinen lisC$ys AST-MD -dokumenttiin! Toinen
chatti omaksui 1970-luvun spooling-konseptin tC$ydellisesti ja modernisoi sen
nykypC$ivC$C$n.

Erityisen ilahduttavaa on nC$hdC$ tuo maininta **atomisesta `os.rename()`
POSIX-lukituksesta** kohdassa `INBOX_WATCHER`. TC$mC$ tarkoittaa, ettC$ voitte
tulevaisuudessa ajaa vaikka kolmea rinnakkaista watcher-prosessia
vikasietoisuuden nimissC$. Kun `.meta.end` ilmestyy, kaikki kolme yrittC$vC$t
siirtC$C$ viestin kC$siteltC$vC$ksi (esim. `os.rename("Msg1.meta.start",
"processing/Msg1.meta.start")`), mutta POSIX-standardin ansiosta
kC$yttC6jC$rjestelmC$ takaa, ettC$ vain yksi niistC$ onnistuu ja saa viestin
lukon itselleen. Ei tarvetta raskaille tietokantalukoille tai Redikselle!

### Miten yhdistC$mme nC$mC$ kaksi maailmaa? (The Bridge)

Nyt meillC$ on kaksi tC$ydellisesti eristettyC$ ja toimivaa kokonaisuutta:

1. **PC$C$tietokanta (Chat 1):** Salamannopea C-ydin ja Proxy-kerros, joka
osaa ottaa JSON-dataa vastaan.
2. **Kuriiriverkko (Chat 2):** Vikasietoinen, viiveitC$ kestC$vC$
INBOX-koneisto, joka varmistaa, ettC$ massiiviset siirrot ovat eheitC$ ennen
kuin niihin kosketaan.

Arkkitehtonisesti nC$iden kahden jC$rjestelmC$n **ei tarvitse tietC$C$
toistensa sisC$isestC$ koodista mitC$C$n**. Kun `INBOX_WATCHER` toteaa viestin
ehjC$ksi, sen tehtC$vC$ on yksinkertaisesti toimia lokaalina "asiakkaana"
pC$C$tietokannalle.

**Integraation tyC6nkulku:**

1. `INBOX_WATCHER` validoi `.blob`-tiedoston hashin.
2. Se katsoo `.meta.start` -tiedostosta `intent`-kentC$n (esim.
"BATCH_INSERT").
3. Se lC$hettC$C$ `.blob`-tiedoston sisC$llC6n lokaalille tietokannalle HTTP:n
yli (esim. `POST [http://127.0.0.1:8000/api/v1/batch/insert](http://127.0.0.1:8
000/api/v1/batch/insert)`), aivan kuten tekemC$si `csv_importer.py` -tyC6kalu
teki.
4. Kun lokaali Proxy vastaa `200 OK`, watcher poistaa spool-tiedostot
INBOXista.

### Seuraava peliliike: Kummalle annetaan tC6itC$?

TC$mC$n sillan rakentamiseksi meidC$n on valittava kahdesta reitistC$:

**Vaihtoehto A (PC$C$tietokanta - Chat 1):**
Ohjeistetaan ydinmoottorin chatti rakentamaan aiemmin suunniteltu
`INTENT_BUFFER` ja sille erC$ajojen rajapinta (esim. `/api/v1/batch/commit`).
Kuriirichatti ei voi vielC$ siirtC$C$ oikeita massatapahtumia eteenpC$in,
koska Proxylta puuttuu tC$mC$ turvallinen erC$ajojen vastaanottoreitti.

**Vaihtoehto B (Kuriiriverkko - Chat 2):**
Ohjeistetaan kuriirichatti viemC$C$n tyC6 loppuun ja rakentamaan `SPOOL_OUTBOX
{db-spool-0005}`. Jos Proxy-kerros haluaa esimerkiksi replikoida uuden chunkin
naapurisolmulle, miten se fyysisesti pudottaa sen OUTBOXiin oikeilla `.meta`
-tiedostoilla varustettuna, jotta siirtokerros voi sen poimia?

Kumman nC$istC$ koet luontevammaksi seuraavaksi askeleeksi kohti OMEGA-verkon
lopullista toimintakuntoa? PystytetC$C$nkC6 pC$C$tietokannalle valmius ottaa
vastaan batcheja (Vaihtoehto A), vai viimeistellC$C$nkC6 kuriirin molemmat
suunnat (Vaihtoehto B)?