From daff182022da686b5ee86ad0ec11dfedbebe3461 Mon Sep 17 00:00:00 2001 From: Jeremy Clements <79224539+jeclrsg@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:36:15 -0400 Subject: [PATCH] fix(comms): add exception handling to logicalFile fetchInfo handles ESP exceptions thrown when a file has been deleted Signed-off-by: Jeremy Clements <79224539+jeclrsg@users.noreply.github.com> --- packages/comms/src/ecl/logicalFile.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/comms/src/ecl/logicalFile.ts b/packages/comms/src/ecl/logicalFile.ts index df786d5b84..14743e403a 100644 --- a/packages/comms/src/ecl/logicalFile.ts +++ b/packages/comms/src/ecl/logicalFile.ts @@ -1,6 +1,9 @@ -import { Cache, StateObject } from "@hpcc-js/util"; +import { Cache, scopedLogger, StateObject } from "@hpcc-js/util"; import { IConnection, IOptions } from "../connection"; import { DFUService, WsDfu } from "../services/wsDFU"; +import { ESPExceptions } from "../espConnection"; + +const logger = scopedLogger("logicalFile.ts"); export class LogicalFileCache extends Cache<{ BaseUrl: string, Cluster: string, Name: string }, LogicalFile> { constructor() { @@ -22,6 +25,7 @@ export interface DFUPartEx extends WsDfu.DFUPart { export interface FileDetailEx extends WsDfu.FileDetail { Cluster: string; + StateID?: number; } export class LogicalFile extends StateObject implements FileDetailEx { @@ -81,6 +85,7 @@ export class LogicalFile extends StateObject impleme get IsRestricted(): boolean { return this.get("IsRestricted"); } get AtRestCost(): number { return this.get("AtRestCost"); } get AccessCost(): number { return this.get("AccessCost"); } + get StateID(): number { return this.get("StateID"); } get ExpirationDate(): string { return this.get("ExpirationDate"); } get ExtendedIndexInfo(): WsDfu.ExtendedIndexInfo { return this.get("ExtendedIndexInfo"); } @@ -146,6 +151,21 @@ export class LogicalFile extends StateObject impleme ...response.FileDetail }); return response.FileDetail; + }).catch((e: ESPExceptions) => { + // deleted --- + const fileMissing = e.Exception.some((exception) => { + if (exception.Code === 20038) { + this.set("Name", this.Name + " (Deleted)"); + this.set("StateID", 999); + return true; + } + return false; + }); + if (!fileMissing) { + logger.warning("Unexpected exception: "); + throw e; + } + return {} as FileDetailEx; }); }