code wiki / _hdl_build / nx_gen_orchestrator_daemon.nx

nx_gen_orchestrator_daemon.nx source

↩ module page · 66 lines · 3144 B

1// nx_gen_orchestrator_daemon.nx -- the deployable Elder AI gen daemon: argv config + accept-fork 2// loop calling go_serve_conn (nx_gen_orchestrator lib). Runs behind nx_gen_gateway on loopback. 3// argv: [1]=listen_port [2..5]=worker IPv4 octets [6]=worker_port [7]=store_prefix [8]=blobdir 4// [9]=sidecar [10]=generator_host [11]=budget(opt) 5// license_tier: ORIGINAL 6import "nx_gen_orchestrator.nx" 7import "nx_syscalls.nx" 8const K_MAGIC_1000000: i64 = 1000000 9 10func main(argc: i64, argv: *i64) -> i64 { 11 if argc < 11 { 12 sys_write(1, "usage: nx_gen_orchestrator_daemon <port> <wa> <wb> <wc> <wd> <wport> <store> <blobdir> <sidecar> <genhost> [budget]\n" as *u8, 116) 13 sys_exit(2); return 2 14 } 15 let port: i64 = go_atoi(argv[1] as *u8) 16 let cfg: *i64 = sys_mmap(8 * 32) as *i64 17 cfg[0] = go_atoi(argv[2] as *u8); cfg[1] = go_atoi(argv[3] as *u8); cfg[2] = go_atoi(argv[4] as *u8); cfg[3] = go_atoi(argv[5] as *u8) 18 cfg[4] = go_atoi(argv[6] as *u8) 19 cfg[5] = argv[7]; cfg[6] = argv[8]; cfg[7] = argv[9]; cfg[8] = argv[10] 20 // cfg[9] = # EXTRA workers, listed in the supervisor's OWN launch command (sovereign, NO file): argv[12]=count, 21 // then argv[13..] = count*(a b c d port). Add west-server / cloud / other laptops there + redeploy. 0 = laptop only. 22 cfg[9] = 0 23 if argc > 12 { 24 let xc: i64 = go_atoi(argv[12] as *u8) 25 cfg[9] = xc 26 var xi: i64 = 0 27 while xi < xc { if xi < 4 { 28 let ab: i64 = 13 + 5*xi; let cb: i64 = 10 + 5*xi 29 cfg[cb] = go_atoi(argv[ab] as *u8); cfg[cb+1] = go_atoi(argv[ab+1] as *u8); cfg[cb+2] = go_atoi(argv[ab+2] as *u8); cfg[cb+3] = go_atoi(argv[ab+3] as *u8); cfg[cb+4] = go_atoi(argv[ab+4] as *u8) 30 } xi = xi + 1 } 31 } 32 var budget: i64 = K_MAGIC_1000000 33 if argc > 11 { budget = go_atoi(argv[11] as *u8) } 34 35 let addr: *u8 = sys_mmap(16) 36 addr[0]=2 as u8; addr[1]=0 as u8; addr[2]=((port>>8)&0xff) as u8; addr[3]=(port&0xff) as u8 37 addr[4]=0 as u8; addr[5]=0 as u8; addr[6]=0 as u8; addr[7]=0 as u8 38 var zi: i64=8; while zi<16 { addr[zi]=0 as u8; zi=zi+1 } 39 let lfd: i64 = sys_socket(2, 1, 0) 40 if lfd < 0 { sys_write(1, "SOCKET-FAIL\n" as *u8, 12); sys_exit(1); return 1 } 41 let optv: *u8 = sys_mmap(4); optv[0]=1 as u8 42 sys_setsockopt(lfd, 1, 2, optv, 4) 43 if sys_bind(lfd, addr, 16) < 0 { sys_write(1, "BIND-FAIL\n" as *u8, 10); sys_exit(1); return 1 } 44 if sys_listen(lfd, 16) < 0 { sys_write(1, "LISTEN-FAIL\n" as *u8, 12); sys_exit(1); return 1 } 45 sys_write(1, "GEN-ORCH-UP\n" as *u8, 12) 46 47 let st: *i64 = sys_mmap(16) as *i64 48 var served: i64 = 0 49 while served < budget { 50 let cfd: i64 = sys_accept(lfd) 51 if cfd >= 0 { 52 let pid: i64 = sys_fork() 53 if pid == 0 { 54 sys_close(lfd) 55 go_serve_conn(cfd, cfg) 56 sys_close(cfd) 57 sys_exit(0) 58 } 59 sys_close(cfd) 60 var reaped: i64 = 1 61 while reaped > 0 { reaped = sys_wait4(0 - 1, st, 1) } 62 } 63 served = served + 1 64 } 65 sys_close(lfd); sys_exit(0); return 0 66}