KamoCRM

Un computer non potrebbe mai ricominciare a dormire

FixKlusterServices
Shipped
23 settembre 2026 alle ore 19:02 UTC
Author
Kamo
Commit
2266930

Il primo vero computer ospitato ha raggiunto AWAKE e poi è rimasto sveglio per sempre. Ibernazione segnalato curriculumConfigurato: falso, IdleWatcher solo braccia quando la disponibilità è vero, quindi la macchina ha tenuto un nodo memoria con nulla da mostrare per esso, ma un ultimoError nessuno legge. Il cablaggio era tutto corretto su disco — il frammento grub.d, il gancio initramfs, lo swapfile in fstab, e riprendere=UUUID=... riprendere offset=... nel grub.cfg generato. Quello che non è mai successo è il riavvio che ne mette uno su /proc/cmdline, che è l'unico posto da cui il kernel lo legge. Il riavvio era condizionale su configurare() segnalando che aveva appena scritto il cablaggio. configurare() è chiamato da due posti: il filo di avvio dell'agente, su ogni inizio, e /prepare-sleep, che computeservice POSTs alla fine del provisioning. Su questa macchina si sovrappongono — il filo di avvio aggiornato-grub 40 millisecondi dopo l'arrivo del POST, quindi il POST configura() trovato entrambi file già corretti, non ha segnalato alcun cambiamento, e ha saltato il riavvio. Codice corretto, entrambi i chiamanti che fanno il loro lavoro, il deadlock permanente, e non un errore da nessuna parte. Quindi la decisione non chiede più chi ha scritto un fascicolo. curriculum restart decision() chiede lo stato: eseguire kernel non ha curriculum=, un boot potrebbe risolvere questo, e il cablaggio è già in grub.cfg. Entrambe le protezioni anti-loop sono portanti di carico, perché la modalità di guasto dall'altra parte sta riavviando computer di qualcuno in un ciclo: - grub.cfg deve già portare la corda esatta. update-grub funziona con check= Falso, quindi fallisce è reale, e riavviare senza che si riavvia nella riga di comando identica. - un timbro sotto /var/lib/kamo-hc record COSA è stato riavviato per, e sopravvive il riavviarlo guardie. Lo stesso cablaggio due volte significa che il kernel sta rilasciando la riga di comando e un secondo riavvio non avrebbe aiutato. Un swapfile che MOVED è una stringa diversa, e guadagna un nuovo tentativo. Ogni percorso registra, rifiuti inclusi. L'insetto era silenzioso in entrambe le direzioni subito: niente di riavviato e nulla ha detto perché no. configurare() è anche serializzato ora. Quei due chiamanti erano in esecuzione update-initramfs contro gli stessi initrd contemporaneamente, che era fortuna piuttosto che design. Il filetto di avvio ottiene lo stesso self-heal, gated su config.json esistente: su un primo avvio fornire spinta non è ancora atterrato e riavviare avrebbe tirare la macchina fuori da sotto di esso, ma su ogni boot dopo di che è quello che recupera un computer il cui curriculum compensa un aggiornamento del kernel invalidato, senza aspettare di essere chiesto. Nove test. Quello che conta afferma che un chiamante che vede "nessun cambiamento" ottiene ancora il riavvio — la vecchia suite ha testato il meccanismo e superato mentre il sistema si bloccava.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing