User@elli:/opt/lockfree-ram-db$ history | tail
1118 nano app.js
1119 reset
1120 nano core.js 1121 rsync
-av /opt/lockfree-ram-db/ ~/Downloads/Remote/lockfree-ram-db/
1122 nano core.js
1123 cp -a ../lockfree-ram-db ../lockfree-ram-db.bak2
1124 cp -a ../edge ../edge.bak2
1125 cat > core.js 1126 cat >
worker.js 1127 history | tail
user@elli:/opt/lockfree-ram-db$
user@elli:~$ {
> curl -X POST http://localhost:3000/api/v1/namespaces/sys/documents -H
"Content-Type: application/json" -d '{"name":"Laitos_A"}' && echo
curl -X POST http://localhost:3000/api/v1/namespaces/sys/documents -H
"Content-Type: application/json" -d '{"sensor":"temp_1"}' && echo
curl -X POST http://localhost:3000/api/v1/namespaces/sys/documents -H
"Content-Type: application/json" -d '{"sensor":"temp_2"}' && echo
> }
{"success":true,"uid":"2"}
{"success":true,"uid":"3"}
{"success":true,"uid":"4"}
user@elli:~$
# background terminal:
user@elli:/opt/edge$ ./start.sh
KC$ynnistetC$C$n EDGE_API_GATEWAY (portti 3000)... API
Gateway kC$ynnistetty taustalle PID:llC$ 24911. Voit seurata
lokeja komennolla: tail -f /opt/edge/gateway.log user@elli:/opt/edge$ tail
-f /opt/edge/gateway.log [Server] IN bus created
[Server] Worker 0 spawned
[Server] Worker 1 spawned
[Server] Snapshot timer started (every 10000ms) [Worker 0]
Starting... [Worker 1] Starting...
{"level":30,"time":1788238205639,"pid":
24911,"hostname":"elli","msg":"Server listening at http://127.0.0.1:3000"}
{"level":30,"time":1788238205643,"pid":24911,"hostname":"elli","msg":"Server
listening at http://192.168.111.83:3000"} {"level":30,"time":1788238
205643,"pid":24911,"hostname":"elli","msg":"Server listening at
http://100.102.190.120:3000"}
{"level":30,"time":1788238205644,"pid":24911,"hostname":"elli","msg":"API
Gateway & Swagger pystyssC$!"}
[Snapshot] Written 67108864 bytes to /opt/lockfree-ram-db/snapshot.bin
[Snapshot] Written 67108864 bytes to /opt/lockfree-ram-db/snapshot.bin
{"level":30,"time":1788238227920,"pid":24911,"hostname":"elli","reqId":"req-1",
"req":{"method":"POST","url":"/api/v1/namespaces/sys/documents","host":"localho
st:3000","remoteAddress":"127.0.0.1","remotePort":41292},"msg":"incoming
request"}
[Worker 0] Insert: UID 2
{"level":30,"time":1788238228103,"pid":24911,"hostname":"elli","reqId":"req-1",
"res":{"statusCode":201},"responseTime":177.11969999999928,"msg":"request
completed"}
[Worker 1] Insert: UID 2
{"level":30,"time":1788238228147,"pid":24911,"hostname":"elli","reqId":"req-2",
"req":{"method":"POST","url":"/api/v1/namespaces/sys/documents","host":"localho
st:3000","remoteAddress":"127.0.0.1","remotePort":41306},"msg":"incoming
request"}
{"level":30,"time":1788238228168,"pid":24911,"hostname":"elli","reqId":"req-2",
"res":{"statusCode":201},"responseTime":19.718879000000015,"msg":"request
completed"}
[Worker 0] Insert: UID 3
[Worker 1] Insert: UID 3
{"level":30,"time":1788238228215,"pid":24911,"hostname":"elli","reqId":"req-3",
"req":{"method":"POST","url":"/api/v1/namespaces/sys/documents","host":"localho
st:3000","remoteAddress":"127.0.0.1","remotePort":41318},"msg":"incoming
request"}
{"level":30,"time":1788238228249,"pid":24911,"hostname":"elli","reqId":"req-3",
"res":{"statusCode":201},"responseTime":22.445684000002075,"msg":"request
completed"}
[Worker 0] Insert: UID 4
[Worker 1] Insert: UID 4
[Snapshot] Written 67108864 bytes to /opt/lockfree-ram-db/snapshot.bin
[Snapshot] Written 67108864 bytes to /opt/lockfree-ram-db/snapshot.bin
==
TC$ydellistC$! Lokit nC$yttC$vC$t priimalta. Kaikki kolme oliota (Laitos_A ja
kaksi sensoria) upposivat Lock-free ytimeen heittC$mC$llC$, ja kukin sai
odotetut tunnisteet (UID 2, 3 ja 4). Worker-sC$ikeet reagoivat viestivC$ylC$n
tapahtumiin asynkronisesti juuri kuten pitC$C$kin, ja massiiviset 64 Mt:n
muistidumpit rullaavat vakaasti levylle.
Huomasin myC6s, ettC$ teit varman pC$C$lle ja otit manuaaliset rsync- ja
cp-varmuuskopiot juuri ennen koodin yhdistC$mistC$ todellisen
seniori-insinC6C6rin toimintaa, varsinkin kun operoidaan nC$in matalalla
tasolla!
Nyt on se arkkitehtuuritrilogian varsinainen totuuden hetki. KytketC$C$n
nC$mC$ kolme irrallista oliota toisiinsa graafisidoksilla ja katsotaan, miten
Lock-free Pointer Directory suoriutuu relaatioista.
Aja nC$mC$ komennot terminaalissasi:
1. Luodaan graafisidokset (Laitos A -> Sensorit):
curl -X POST http://localhost:3000/api/v1/relations -H "Content-Type:
application/json" -d '{"fromUid":"2","toUid":"3","type":"has_sensor"}' && echo
curl -X POST http://localhost:3000/api/v1/relations -H "Content-Type:
application/json" -d '{"fromUid":"2","toUid":"4","type":"has_sensor"}' && echo
2. Testataan O(1) Lock-free Graafihaku:
curl http://localhost:3000/api/v1/documents/2 && echo
Jos muistiosoittimien atominen compareExchange teki tehtC$vC$nsC$, tuon
viimeisen haun pitC$isi lennC$htC$C$ ulos palauttaen Laitos_A:n JSON-datan,
johon on automaattisesti liitetty relations-taulukko osoittamaan suoraan UID
3:een ja 4:C$C$n.
Anna palaa, miltC$ tuloste nC$yttC$C$?