From 4f8d58965b85f320e97689d9dc7db83b9037212e Mon Sep 17 00:00:00 2001 From: Conrad Kramer Date: Sun, 7 Jun 2026 09:05:05 -0700 Subject: [PATCH] Extend Namespace dispatcher timeout --- ...nfrastructure-and-store-upload-pipeline.md | 3 +++ .../infra/forgejo-nsc-autoscaler-config.age | Bin 1745 -> 1761 bytes .../infra/forgejo-nsc-dispatcher-config.age | Bin 1240 -> 1240 bytes secrets/infra/forgejo-nsc-token.age | Bin 828 -> 828 bytes services/forgejo-nsc/autoscaler.example.yaml | 1 + services/forgejo-nsc/deploy/autoscaler.yaml | 1 + .../forgejo-nsc/internal/autoscaler/config.go | 2 +- 7 files changed, 6 insertions(+), 1 deletion(-) diff --git a/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md b/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md index 90c605a..e95e0b9 100644 --- a/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md +++ b/evolution/proposals/BEP-0009-release-infrastructure-and-store-upload-pipeline.md @@ -116,6 +116,9 @@ The same change also makes the forge itself the release authority: release tags - Do not destroy Namespace Linux runners until `nsc describe` shows a real terminal container state or tombstone. Empty describe payloads mean the environment is still starting, not that the one-job runner has finished. +- Keep the autoscaler-to-dispatcher HTTP timeout longer than the runner TTL. + Dispatch requests intentionally block until the one-job runner exits, so short + HTTP client timeouts cancel macOS provisioning mid-bootstrap. - Run forge Namespace services with the repo-owned `nsc` package and keep it current with the token format expected by Namespace. `nsc 0.0.520` is the first required baseline for revokable token-file auth. The dispatcher and diff --git a/secrets/infra/forgejo-nsc-autoscaler-config.age b/secrets/infra/forgejo-nsc-autoscaler-config.age index 8e2caafea7a7c77155122446503efc70db328ede..13ec1143756db8fac5f09adf4a6045d4972adbb3 100644 GIT binary patch delta 1717 zcmcb}`;d2nPQ8i0L2zJpVS!nsc3GZ>VL*sWic6JoMp;sJn4^oakBNSnV{u`jze_>7 zBbTFpXi#dQcBo%UVzP0PX^?hgflFGEsjqpcdrq)LNotOhONovRl3}RtVVaa180D90X;L3isUMhZXzH1!otWcjz?EF)=BKY;Zjxr45?ENC z7VefA8kk#A=x^YfXOL7L6;zb#m1t3snU?J8$)&5St6&xtXq=XmR}fg5;cAj<;bD6TUM8SD{Yz!mxM?bEs~DrP+SB^JwVm#MJZ?82#z6^5UftS%EKJh_Wp%3o-I2FV~#y6XU1AIIn-X zwVvBsi^HCQ>jD~Hs%i1*sIa}-IC17Q)*Gq*DmR37#<#dl+j7i3nxppOf{?$5HYR$8 z*ayAx!u9r;dYdX&EKbe;A6y!X7oqD=z+SNPuTzqOMiv2IrV<73+=Z&lYc z)-+m}mR!s%o*vw{C-wi~Cw5Km9Yr&y9pheGx$)mYhRu^$XUv?z?Y4OJw2e9q%}klh zuRa`KYjafc_^X%v42NcHd&y{9s`D>$(({ZLzi%vVz4F)BPO?!YGSbv_4sz1&KJ z?g{1!>EC5U@9eh=y?AH)%f2PkO=h<4@_o^fZg0=^LdR{wbu*sdMrwCDZq1tD`&qF& z@eXHy*~$~Yx@+U)-bGDS*(fdfPAKFKm)geM%gr8NET=jyIyf_gYmP&*eT)0t4`ttf ztWi0^ebwAaFmpzN$>*+)@$l}=d@?cer7bi^4;3)Z3*dmhQ+Tw_O4y4t(+Wqg>ByRyi-$r=IJ%M zw?3WF<=L>tR&o8u=}kf2KG&WT;9ZbI+q96{mylv^5>@_^ilaU-Tqo z!?|7luCu}!B@*u3J>Va+E_HtWJC|eX88?nD*xCB-ANT9BWJ9f~b5{Ir6Igc0=!eJi ziYYG_hP8`?H7wKbJA65XX>RsQ{ku6qiylpzexj_7MY{X@&&YQkcJjX_7xI_wF)a6H zKX-ze=c7y0boL7`8b72QtGUK8eV4hro}}2!JoC3@!h9TQ7S+j7N2dI!OK>VcIfbdU17US!$G2>@^Z4C4R* delta 1701 zcmaFJdy#j7PQAZHdQOH#Sz>r%a85~Px{;HAqH9#TcTurHQdDtBcxr%`VY;@3TZ*r{ zCzp$PWPVjqk*8-+P_TK1M~PvYSz3;9kZW0$xsOwJXn0X*T4g|fh^wcE0hg|wLUD11 zZfc5=si~o*f@e`wu4B4_V^WS+WKddRday}kR%vjmyIY=Dc1V7nXR@EAm#48yQJ$k? zfwyawk4uOFSA{`dxqEh4v1NsiYmsqYcu-18xO1Ej_CB>PZPF{Jw9#Ixy8CAYHUS6)g;UTVEiC*Sr z`GI9wW&z&m5xJ>pzWNoF`XOa`p2kJ);f}@r$)4Gsg|1OvIYwZgL_j=Yo?~uq8njV##A6n&K5awDM z9$8kHZx(53X6Y23l3M2Dq3!4B85w3!X>Q`nrK_u}kQ!i;S`wO<A=5nAk4Zk+3vl%-t}Vv-qU&1#o5TRD#POikC0G^j6Cl-sjp zqLsSU@#OC|h38i-zr`?jMu{{3RfBh8Nr79oojH4U&mxfvadS8RX1gJ%v-EIN-kwto zZe|~Y_I{pqykosR)2hxgq@pyvP-`^y}x#IS$ycFkp7~s->U0gR!s4p zQ_~-|t=?5@g6NTL8(tiX`4nw^cB}W=cA+n)%}Nuea<^Y7b$^UGIll~{s zg&~VmESU7?A5K}=H^E5dw9y6o-X*qo*Z*~|>v;Nmxwh|#`iUP}9{gXmQ~qV=+ea3s z-?$2y7WVA@5^}`)^S@PVrmx#qeD;)L&Q-w&40n9`4T5z_nwPGA=}@-%fQq=vsV5h# z966sEtW$g`A;#rVAF?j_YVE4_RmUPrj$S&HBYW+b!28S(CZB?Gf2%5*hcB1h#u((g zME7^%YQfDp)mH3#*qT)8j|U%nBHDTO{K*w3?KZsVJ&^BuI8MwV+0v?Mb*}u5w>iZx zlAT?&&2t?J-FM%X{`K~x>e}}O_u`AsemDLjwJ!2YW4`9=ZFZe+x0fG0ob0d8w~x!d zpx1uc+KR(rvJX$VeqM0F=4PM%m!j<1cUOg``$hbAn&+#pr1s5xu6pyti*M@hEYA(| z*?VR8nBH z&XzI~;-N}P$22+oY|nV?JT-eOWBjhV?fR^L)7m@gIJY0oS2$IFX7d$QkBjv?v(N3< zNIV_9UwG-7EX72nxCF^U;Y-V=#|0itweF1C@N(z7^xyt<5)SK5UNpNanv>P|{7*&> z$I=~3lj`TsRFn71yLi8G;)fZB|5$rZEN4DY?QmdW0`mc}$e<5dZ__t;bNt`k9^(9-MEH!q97!!h}px%O0cu^W>Ynzab+R+EYR&im-?D#^O@(s2vcabSH;UBjt) zZ}NwdbX&uJ^V|#coEaO==Vh`zK0SBdw{S(Ve`kg zHlJRu7TMG(YA9c~y9cX%`T9>-&P{dJd=(Ap*EQGb(>fCCuNa2Coho(l)L&-F8B<-}-My)t>RB*r F8UT2_4i*3a diff --git a/secrets/infra/forgejo-nsc-dispatcher-config.age b/secrets/infra/forgejo-nsc-dispatcher-config.age index c7a9113b53f3b71a366054a90c3d04deb9278bb6..fe5523389559c1682af2da9be5ce6a1e7211bb7f 100644 GIT binary patch delta 1192 zcmcb?d4qF;PJM7;g|WL~l5tK&QMo~$zh{J7WlD0fML|?{iJ88uQHEKnk*Tk#r>V1X zI#<3+U_ef~qpO>7c)oY4pRci7X=S#jb8u2&Vt!^tqIq^eXpv=wZ)IYBB$uw8LUD11 zZfc5=si~o*f@e`wu4B4FQchKRX_;kkT2W?IN>pyPn_F6DS*f>+d6H9PigR{pc4oFq zWlmJOw^wjFSD;gHew9~pfO(mhforN?c2Gf7g^{Isa8j7JS5c@%ev*ZOnMI0Qg-J^K z#E;_jQ9dUAULj>ELH_=!VO1&aMV^tqK~AMcQR(JhE{0k9QKiW#nU!UQX5oQcX=Y{R zUg06R;X&TT9zNmuIk`oN#m0dlB_>YpK}Es7X4#b?5yf5}X-2LfpF}`BVOCV=oL}T* znC4oLo#yLQP-YQn>aU+@9O9JW<5KVK>yqk`?q`{4?C)=s&E->G9$4Y+u3Z$CZ5rt1 z6qRV2QCOVr?p|5pKNvq?jM=!%cZNUtDqf`ljvGr?p|S@=~!Or>gQNh z>8o9&pIc^-W0q;|?Ue7RU*PMWl9_Jo$aO8{jN`VXImrrUllLzUzHp2$Bu}#bmTK+Q z)!EZ(lSE_uSofrS&LyYSy}uEPqJrus_a7gzK;Pwu=a8~*3R)|~uXesTvtai2dcUaa=64P@n;j`I_z}3()}J?7ecMv5m2*|2 zpU!_eQOYjWboP?NNx?oI2KgpG=GMCY-%@WQ6;ZrZcR%6h&+1(*YWzqDN>*_)jOD{O>*2w((VwY}R2J>&X|icWOMbz&LiSGc62VNyD?8k{ccD_%f{@}sT^56N%vl#kvsV1LiCE-qv4&x zPX8`cEu6p?y(7KgA^UxodA6l-vh-ss~e24SR=--~Ra+BV8*nK}~Bbm6rD0gY@IZfu~^Do@~cg8X0oD>iZ zuQG@*x#0NISjWgW^5c`Bea4KJa+d47+CBG}Z?Ilnq!IVG{d@efboOjn%T(4Uc2wn( zZBcpNZfgcV%RseD_2|$wD ze<;nk<-gDsv!IR->*pkX_xa1~Bjo(X%W2zVyK|h?3|nvbXvg*52zVtgd20`w(b-v2 z*83*)FFa}UGwX8T#o7f+C4zPKES=kRwJa~gZvC&%5BFc$9XPE0?aFLUD11 zZfc5=si~o*f@e`wu4B4_wvT&Co_m>PP*QrOdzq12s$00FcUE$uNobIhc78yc7R*3e_)WIbA@Z9o2f^TZ?>m}p=CgZQ&@yil3zuxyLNW* z#E;_jA#Ta3W`UN@xgp*e!6Dk|*^vg7K4m^x0hSfn1!evQ-l3$JrVUdnSd4cI^#Yt6;dHzM=X5~TU&aU~M&hC|#W>wyXu9ev!pF}`BQB|6sQB|5^ zKU3Jni%MxqwQ%J>Rw+E;B6LR>|&T0l$KhV&1IbL7@1yLU|JSwYV6}) zVG@w# zW>?*9(M8h%jx<~1<+tX!#Qv@S?2lO_89 zBJQ#YZJQMqo-r=I@Pl_3NBSSpSI^Vu2eH+E^M0^xX7+*gue{eDSd_b%<%R8roQ+mG zvdmS+x^>U@{C~uBsF5)|Eo<(xKao~zehaM36{(ZEedTFeb={AMD7K@>)*<=Kja~=Qq;oU6 z*2Gt)zpYoEwp!K2_)>F~j(EA_TWA7 zyCiusa?6dATC^%wr98Ad!u-p@ai-<<*vvmBH}mx#s>nUa4h$FhC}hyIv~*gF7O(51 z60JgpGfZNEdXLVs-?fmia6EMI%apc;^7p&$ZWgh-CpdY1{aitX^Z#asCv2GhUHHq| zwLP|Wv-57f6*V=MEAjUI+rel1lbk-z!H!5Lv{_uC6+tvv9|yViYCkmlnQ|J2(TKksH|YN1$Ss8O<@<bL<5lzgXJ^Bcu0ERf z%AM(#Hdm4&(--b~iTyXc->*2$yZo~Itrd%u#X>))%E*fcGUhb$iFByd-B@KLQO|5q nEB!?6T##k{)Xwuii_Rw8IlnJbed63N$)a-eU4!Sp*!La)_oD&& diff --git a/secrets/infra/forgejo-nsc-token.age b/secrets/infra/forgejo-nsc-token.age index 0682b2afc3d2b24cc6e3162fd204833f42f8c3e8..c018ce4f7f844b7788e5b641679729f07742668a 100644 GIT binary patch delta 777 zcmdnPwufzkPQAWcNt(7xiJwtOZmO@lX>wL_dWnCOSy54LXnIvrR$+LcMTTcYS$0~4 zCzns4X{Co@W>RsYuTODtSWu#2imP)#c~x4Dsi9|fdWo-gu47?xq@%xiIhU@TLUD11 zZfc5=si~o*f@e`wu4B4Fda!?_XO>|`Xn}r8s84u~g@JMM=58Yk7%BRb_fwx{0=*cBpxgSyFbCn_+>rQC^_3 zSQ(IHlH`_N;FIfKS{mdP>R#?$?CF?k?o^dt&ZVoXt59Z?lIfS`<(X2MT^t#n8dw}$ zY#18sW@hXb73`60ROx6MVqBE29hv48%GEBd!u9LHvwyilU9!{S%R)TDx<1ysN<>W! z3^#v2FFLHb>fF-er0Qqw5%;r1BKg((KL2~I{ds|sXwg}<7yb1@WktfAzgNqxn0I{@ zqp8}J7KOPd{g$u)n&(u~_RRlV$s6W#)$+fePjz{4nez)1`?nu6)+qk>zO~#)AzbU? zj;Rcf60~v`@4Wy0dr_{o(#%;84Zgjc*H-@|Zu?`7@DF`@6JGMJ&}Nu_QeiX0nxLgg z<}rSYbfy}q>8CgwKbj?!VYx-@teAGm0-k?bvT@v#-psC>D9dlYymhwqoexQVAJc55 zw_ALFV6`Th;mhroTb&nW^X@0?lI!lz>8{yPsrdJM|Mm@TqJNyGEaPxbEMEBk+1>rG zzkU_dw6K(VxL!GkbIad~@6(z*_n%=7ReijlW8HZ`ik$0|5R!Hqih8 delta 777 zcmdnPwufzkPJOw#MUZh>s+)O6cvWSlVUb6Pu}^tbKx9%@fop-Qvzd{;nPsG#S*m4~ zCs(CGxSNwEs6kzufz zOR{^qeo<&7SGs4aM@XP|p?0CUMYdC*mz#dMcZyeNW?{CWd1OU}w`G}yze#yyKvq@p z#E;_jiP-_+!9^ZsM&5zRE@k>g={ZKh5s4wrB}GLgo)+0ro&oM<9!@3ZIhom9iRrFc zE=8qY5k^tTMjjz%K7nPAmQv^z;U1;$=UwPx zSXgOPs_!4+nNyMEsqL9qTxeoh>FVX-rtKf;%B8ETs}Saz?BS7>84=*DZ=UQM9Bz{8 zYZ(?0WE!CF6;zs%?VjOXm>Zs+=oRT+&c&$pf6d>tEkErn7p2E3+BL|oe;Z!kF8|}? zB;o2mZ+%pJbJ#iizHy`_T-h|yQ^$9krEI#uiF(83hi{cusPCV&qNZe`+u`d|!Wis7 z|9|z}?L?>vSM#E6iVdGGRh*N273-t z*Ll;=6xU{UQ*RGv>Yr}UYW*3H89!%g*1MeueHQUXTJMxsv*oW0$=Q{jd4E&&)|)M` zy`woZYTGT1*1X*(TNviN+b{0>|IKsvr!1D{4gVJYk1{DJY1rQD>o4@GDd?NShQ&>Z z+uk?q$eg;F+579kpj)pctGUh^|DSEolO>S4pvO9WuG2H6f*ZF5*<;)8m&U3dXo-@r zT(rqz^0wF6O}kl(M6>Rc{NHsWu-5fA=ZnZi9i6L_Y;LMbYub14y}cxLK(97*7Ta=; P0}|S^6~3f+y^;n1>cKH; diff --git a/services/forgejo-nsc/autoscaler.example.yaml b/services/forgejo-nsc/autoscaler.example.yaml index cc60368..35ba07a 100644 --- a/services/forgejo-nsc/autoscaler.example.yaml +++ b/services/forgejo-nsc/autoscaler.example.yaml @@ -1,6 +1,7 @@ listen: ":8090" dispatcher: url: "http://localhost:8080" + timeout: "2h" instances: - name: burrow diff --git a/services/forgejo-nsc/deploy/autoscaler.yaml b/services/forgejo-nsc/deploy/autoscaler.yaml index febc287..cd39e05 100644 --- a/services/forgejo-nsc/deploy/autoscaler.yaml +++ b/services/forgejo-nsc/deploy/autoscaler.yaml @@ -2,6 +2,7 @@ listen: "127.0.0.1:8090" dispatcher: url: "http://127.0.0.1:8080" + timeout: "2h" instances: - name: burrow diff --git a/services/forgejo-nsc/internal/autoscaler/config.go b/services/forgejo-nsc/internal/autoscaler/config.go index 7603e67..d252664 100644 --- a/services/forgejo-nsc/internal/autoscaler/config.go +++ b/services/forgejo-nsc/internal/autoscaler/config.go @@ -70,7 +70,7 @@ func LoadConfig(path string) (Config, error) { return Config{}, fmt.Errorf("dispatcher.url is required") } if cfg.Dispatcher.Timeout.Duration == 0 { - cfg.Dispatcher.Timeout = config.Duration{Duration: 15 * time.Second} + cfg.Dispatcher.Timeout = config.Duration{Duration: 2 * time.Hour} } if len(cfg.Instances) == 0 { return Config{}, fmt.Errorf("at least one instance must be configured")