From 2e1c1fd3c8deecb0105c44507b1c12e19abd046a Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sun, 27 Mar 2022 20:19:52 +0200 Subject: [PATCH] Remove duplicated instance check Deduplicate instance existence check for requests in master. --- packages/master/src/ControlConnection.js | 34 +++++------------------- packages/master/src/Master.js | 21 +++++++++++---- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/packages/master/src/ControlConnection.js b/packages/master/src/ControlConnection.js index 068076ee..5a10a780 100644 --- a/packages/master/src/ControlConnection.js +++ b/packages/master/src/ControlConnection.js @@ -159,10 +159,7 @@ class ControlConnection extends BaseConnection { async getInstanceRequestHandler(message) { let id = message.data.id; - let instance = this._master.instances.get(id); - if (!instance) { - throw new libErrors.RequestError(`Instance with ID ${id} does not exist`); - } + let instance = this._master.getRequestInstance(id); return { id, @@ -249,11 +246,7 @@ class ControlConnection extends BaseConnection { } async deleteInstanceRequestHandler(message, request) { - let instance = this._master.instances.get(message.data.instance_id); - if (!instance) { - throw new libErrors.RequestError(`Instance with ID ${message.data.instance_id} does not exist`); - } - + let instance = this._master.getRequestInstance(message.data.instance_id); if (instance.config.get("instance.assigned_slave") !== null) { await this.forwardRequestToInstance(message, request); } @@ -266,11 +259,7 @@ class ControlConnection extends BaseConnection { } async getInstanceConfigRequestHandler(message) { - let instance = this._master.instances.get(message.data.instance_id); - if (!instance) { - throw new libErrors.RequestError(`Instance with ID ${message.data.instance_id} does not exist`); - } - + let instance = this._master.getRequestInstance(message.data.instance_id); return { serialized_config: instance.config.serialize("control"), }; @@ -290,11 +279,7 @@ class ControlConnection extends BaseConnection { } async setInstanceConfigFieldRequestHandler(message) { - let instance = this._master.instances.get(message.data.instance_id); - if (!instance) { - throw new libErrors.RequestError(`Instance with ID ${message.data.instance_id} does not exist`); - } - + let instance = this._master.getRequestInstance(message.data.instance_id); if (message.data.field === "instance.assigned_slave") { throw new libErrors.RequestError("instance.assigned_slave must be set through the assign-slave interface"); } @@ -309,11 +294,7 @@ class ControlConnection extends BaseConnection { } async setInstanceConfigPropRequestHandler(message) { - let instance = this._master.instances.get(message.data.instance_id); - if (!instance) { - throw new libErrors.RequestError(`Instance with ID ${message.data.instance_id} does not exist`); - } - + let instance = this._master.getRequestInstance(message.data.instance_id); let { field, prop, value } = message.data; instance.config.setProp(field, prop, value, "control"); await this.updateInstanceConfig(instance); @@ -321,10 +302,7 @@ class ControlConnection extends BaseConnection { async assignInstanceCommandRequestHandler(message, request) { let { slave_id, instance_id } = message.data; - let instance = this._master.instances.get(instance_id); - if (!instance) { - throw new libErrors.RequestError(`Instance with ID ${instance_id} does not exist`); - } + let instance = this._master.getRequestInstance(instance_id); // Check if target slave is connected let newSlaveConnection; diff --git a/packages/master/src/Master.js b/packages/master/src/Master.js index 3d83e849..863bf48a 100644 --- a/packages/master/src/Master.js +++ b/packages/master/src/Master.js @@ -424,6 +424,21 @@ class Master { } } + /** + * Get instance by ID for a request + * + * @param {number} instanceId - ID of instance to get. + * @returns {object} instance + * @throws {module:lib/errors.RequestError} if the instance does not exist. + */ + getRequestInstance(instanceId) { + let instance = this.instances.get(instanceId); + if (!instance) { + throw new libErrors.RequestError(`Instance with ID ${instanceId} does not exist`); + } + return instance; + } + addInstanceHooks(instance) { instance.config.on("fieldChanged", (group, field, prev) => { if (group.name === "instance" && field === "name") { @@ -608,11 +623,7 @@ class Master { * @returns {object} data returned from the request. */ async forwardRequestToInstance(request, data) { - let instance = this.instances.get(data.instance_id); - if (!instance) { - throw new libErrors.RequestError(`Instance with ID ${data.instance_id} does not exist`); - } - + let instance = this.getRequestInstance(data.instance_id); let slaveId = instance.config.get("instance.assigned_slave"); if (slaveId === null) { throw new libErrors.RequestError("Instance is not assigned to a slave");