From be432fc2184ab1e8084ccc61ee5af3512244ddec Mon Sep 17 00:00:00 2001 From: Eli Bosley Date: Sat, 29 Aug 2026 01:24:22 -0400 Subject: [PATCH] refactor(array): retire direct disk removal mutation --- api/generated-schema.graphql | 5 ----- api/src/unraid-api/cli/generated/graphql.ts | 7 ------- .../array/array.mutations.resolver.ts | 12 ----------- .../resolvers/array/array.resolver.spec.ts | 1 - .../resolvers/array/array.service.spec.ts | 20 ------------------- .../graph/resolvers/array/array.service.ts | 17 ---------------- 6 files changed, 62 deletions(-) diff --git a/api/generated-schema.graphql b/api/generated-schema.graphql index c697f98867..b373873c11 100644 --- a/api/generated-schema.graphql +++ b/api/generated-schema.graphql @@ -1192,11 +1192,6 @@ type ArrayMutations { """Add new disk to array""" addDiskToArray(input: ArrayDiskInput!): UnraidArray! - """ - Remove existing disk from array. NOTE: The array must be stopped before running this otherwise it'll throw an error. - """ - removeDiskFromArray(input: ArrayDiskInput!): UnraidArray! - """Mount a disk in the array""" mountArrayDisk(id: PrefixedID!): ArrayDisk! diff --git a/api/src/unraid-api/cli/generated/graphql.ts b/api/src/unraid-api/cli/generated/graphql.ts index ff32209237..5119a999ad 100644 --- a/api/src/unraid-api/cli/generated/graphql.ts +++ b/api/src/unraid-api/cli/generated/graphql.ts @@ -313,8 +313,6 @@ export type ArrayMutations = { clearArrayDiskStatistics: Scalars['Boolean']['output']; /** Mount a disk in the array */ mountArrayDisk: ArrayDisk; - /** Remove existing disk from array. NOTE: The array must be stopped before running this otherwise it'll throw an error. */ - removeDiskFromArray: UnraidArray; /** Set array state */ setState: UnraidArray; /** Unmount a disk from the array */ @@ -337,11 +335,6 @@ export type ArrayMutationsMountArrayDiskArgs = { }; -export type ArrayMutationsRemoveDiskFromArrayArgs = { - input: ArrayDiskInput; -}; - - export type ArrayMutationsSetStateArgs = { input: ArrayStateInput; }; diff --git a/api/src/unraid-api/graph/resolvers/array/array.mutations.resolver.ts b/api/src/unraid-api/graph/resolvers/array/array.mutations.resolver.ts index 4b7a04ce4a..4771133d15 100644 --- a/api/src/unraid-api/graph/resolvers/array/array.mutations.resolver.ts +++ b/api/src/unraid-api/graph/resolvers/array/array.mutations.resolver.ts @@ -39,18 +39,6 @@ export class ArrayMutationsResolver { return this.arrayService.addDiskToArray(input); } - @ResolveField(() => UnraidArray, { - description: - "Remove existing disk from array. NOTE: The array must be stopped before running this otherwise it'll throw an error.", - }) - @UsePermissions({ - action: AuthAction.UPDATE_ANY, - resource: Resource.ARRAY, - }) - public async removeDiskFromArray(@Args('input') input: ArrayDiskInput): Promise { - return this.arrayService.removeDiskFromArray(input); - } - @ResolveField(() => ArrayDisk, { description: 'Mount a disk in the array' }) @UsePermissions({ action: AuthAction.UPDATE_ANY, diff --git a/api/src/unraid-api/graph/resolvers/array/array.resolver.spec.ts b/api/src/unraid-api/graph/resolvers/array/array.resolver.spec.ts index 809ebd7cfa..ad7bb16352 100644 --- a/api/src/unraid-api/graph/resolvers/array/array.resolver.spec.ts +++ b/api/src/unraid-api/graph/resolvers/array/array.resolver.spec.ts @@ -19,7 +19,6 @@ describe('ArrayResolver', () => { useValue: { updateArrayState: vi.fn(), addDiskToArray: vi.fn(), - removeDiskFromArray: vi.fn(), mountArrayDisk: vi.fn(), unmountArrayDisk: vi.fn(), clearArrayDiskStatistics: vi.fn(), diff --git a/api/src/unraid-api/graph/resolvers/array/array.service.spec.ts b/api/src/unraid-api/graph/resolvers/array/array.service.spec.ts index 0c28cff7b1..f60da4a26f 100644 --- a/api/src/unraid-api/graph/resolvers/array/array.service.spec.ts +++ b/api/src/unraid-api/graph/resolvers/array/array.service.spec.ts @@ -305,26 +305,6 @@ describe('ArrayService', () => { }); }); - describe('removeDiskFromArray', () => { - const input: ArrayDiskInput = { id: 'test-disk', slot: 1 }; - - it('should remove disk from array when STOPPED', async () => { - const result = await service.removeDiskFromArray(input); - expect(result).toEqual(mockArrayData); - expect(mockEmcmd).toHaveBeenCalledWith({ - changeDevice: 'apply', - 'slotId.1': '', - }); - expect(mockGetArrayDataUtil).toHaveBeenCalledTimes(1); - }); - - it('should throw ArrayRunningError when array is STARTED', async () => { - mockEmhttp.mockReturnValue({ var: { mdState: ArrayState.STARTED } } as any); - await expect(service.removeDiskFromArray(input)).rejects.toThrow(new ArrayRunningError()); - expect(mockEmcmd).not.toHaveBeenCalled(); - }); - }); - describe('mountArrayDisk', () => { const diskId = 'test-disk'; diff --git a/api/src/unraid-api/graph/resolvers/array/array.service.ts b/api/src/unraid-api/graph/resolvers/array/array.service.ts index 5b6a1a0c7d..d84bbf1109 100644 --- a/api/src/unraid-api/graph/resolvers/array/array.service.ts +++ b/api/src/unraid-api/graph/resolvers/array/array.service.ts @@ -202,23 +202,6 @@ export class ArrayService { return this.getArrayData(); } - async removeDiskFromArray(input: ArrayDiskInput): Promise { - if (await this.arrayIsRunning()) { - throw new ArrayRunningError(); - } - - const { slot } = input; - const slotStr = slot?.toString() ?? ''; - - // Remove disk - await emcmd({ - changeDevice: 'apply', - [`slotId.${slotStr}`]: '', - }); - - return this.getArrayData(); - } - async mountArrayDisk(id: string): Promise { if (!(await this.arrayIsRunning())) { throw new BadRequestException('Array must be running to mount disks');