Merge pull request #675 from clusterio/fix-instance-update

Fix instance update
This commit is contained in:
Hornwitser authored and GitHub committed 2024-10-28 20:14:18 +01:00
commit a6033f4171
3 files changed
+17 -4

No files matched your search

+1 -3
View File
@@ -924,9 +924,7 @@ export default class Controller {
addInstanceHooks(instance: InstanceInfo) {
instance.config.on("fieldChanged", (field: string, curr: any, prev: any) => {
instance.updatedAtMs = Date.now();
if (field === "instance.name") {
this.instances.set(instance); // Trigger updated logic
}
this.instances.set(instance); // Trigger update logic
lib.invokeHook(this.plugins, "onInstanceConfigFieldChanged", instance, field, curr, prev);
});
+5
View File
@@ -2,6 +2,7 @@ import fs from "fs-extra";
import { safeOutputFile } from "./file_ops";
import { SubscribableValue } from "./subscriptions";
import { logger } from "./logging";
import { EventEmitter } from "stream";
import { ControllerConfig } from "./config";
import path from "path";
@@ -60,6 +61,7 @@ export class JsonDatastoreProvider<
// Save the data to the json file
async save(data: Map<K, V>) {
logger.verbose(`Saving ${this.filePath}`);
await safeOutputFile(this.filePath, JSON.stringify(Object.fromEntries(data), null, "\t"));
}
@@ -68,6 +70,7 @@ export class JsonDatastoreProvider<
// Read the raw json from the file
let rawJson;
try {
logger.verbose(`Loading ${this.filePath}`);
rawJson = JSON.parse(await fs.readFile(this.filePath, { encoding: "utf8" }));
} catch (err: any) {
if (err.code !== "ENOENT") {
@@ -101,6 +104,7 @@ export class JsonIdDatastoreProvider<
// Save the data to the json file
async save(data: Map<K, V>) {
logger.verbose(`Saving ${this.filePath}`);
await safeOutputFile(this.filePath, JSON.stringify([...data.values()], null, "\t"));
}
@@ -109,6 +113,7 @@ export class JsonIdDatastoreProvider<
// Read the raw json from the file
let rawJson;
try {
logger.verbose(`Loading ${this.filePath}`);
rawJson = JSON.parse(await fs.readFile(this.filePath, { encoding: "utf8" }));
} catch (err: any) {
if (err.code !== "ENOENT") {
+11 -1
View File
@@ -17,7 +17,9 @@ class MockInstanceConfig extends EventEmitter {
}
set(field, value) {
return this._data.set(field, value);
const prev = this.get(field);
this._data.set(field, value);
this.emit("fieldChanged", field, value, prev);
}
}
@@ -179,5 +181,13 @@ describe("controller/src/Controller", function() {
);
});
});
describe(".instances", function() {
it("should set the dirty flag if the config is updated", function() {
controller.instances.dirty = false;
mockInstanceConfig.set("instance.assigned_host", null);
assert(controller.instances.dirty === true, "dirty flag was not set");
});
});
});
});