mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-25 03:45:46 -06:00
fix: make gateway nodes and local inference reliable under stress (#115185)
This commit is contained in:
committed by
GitHub
parent
6d4e7b765c
commit
107bc4f963
@@ -200,6 +200,31 @@ describe("runNodeDaemonStatus", () => {
|
||||
mocks.service.readRuntime.mockReset().mockResolvedValue({ status: "running" });
|
||||
});
|
||||
|
||||
it("reports a failed service check instead of claiming the node is not installed", async () => {
|
||||
mocks.service.isLoaded.mockRejectedValue(new Error("systemd unavailable"));
|
||||
|
||||
await runNodeDaemonStatus();
|
||||
|
||||
expect(mocks.runtime.error).toHaveBeenCalledWith(
|
||||
"Node service check failed: Error: systemd unavailable",
|
||||
);
|
||||
expect(mocks.runtime.exit).toHaveBeenCalledWith(1);
|
||||
expect(stdout()).not.toContain("not loaded");
|
||||
expect(stdout()).not.toContain("openclaw node install");
|
||||
});
|
||||
|
||||
it("reports a failed service check as JSON without inventing node status", async () => {
|
||||
mocks.service.isLoaded.mockRejectedValue(new Error("systemd unavailable"));
|
||||
|
||||
await runNodeDaemonStatus({ json: true });
|
||||
|
||||
expect(mocks.runtime.writeJson).toHaveBeenCalledWith({
|
||||
error: "Node service check failed: Error: systemd unavailable",
|
||||
});
|
||||
expect(mocks.runtime.exit).toHaveBeenCalledWith(1);
|
||||
expect(mocks.runtime.error).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("keeps missing service-unit status on stderr and prints recovery hints on stdout", async () => {
|
||||
mocks.service.readRuntime.mockResolvedValue({ status: "stopped", missingUnit: true });
|
||||
|
||||
|
||||
@@ -215,8 +215,20 @@ export async function runNodeDaemonStop(opts: NodeDaemonLifecycleOptions = {}) {
|
||||
export async function runNodeDaemonStatus(opts: NodeDaemonStatusOptions = {}) {
|
||||
const json = Boolean(opts.json);
|
||||
const service = resolveNodeService();
|
||||
const [loaded, command, runtime] = await Promise.all([
|
||||
service.isLoaded({ env: process.env }).catch(() => false),
|
||||
let loaded: boolean;
|
||||
try {
|
||||
loaded = await service.isLoaded({ env: process.env });
|
||||
} catch (error) {
|
||||
const message = `Node service check failed: ${String(error)}`;
|
||||
if (json) {
|
||||
defaultRuntime.writeJson({ error: message });
|
||||
} else {
|
||||
defaultRuntime.error(message);
|
||||
}
|
||||
defaultRuntime.exit(1);
|
||||
return;
|
||||
}
|
||||
const [command, runtime] = await Promise.all([
|
||||
service.readCommand(process.env).catch(() => null),
|
||||
service
|
||||
.readRuntime(process.env)
|
||||
|
||||
Reference in New Issue
Block a user