Skip to content

Commit 733bebe

Browse files
Wr/timeout message (#967)
* refactor: rename files to avoid using command when not a base command * refactor: consolidate bulk utils * refactor: consolidate types * chore: delete defunct dataSoqlQueryTypes * fix: catch timeout error, so timeout handler will handle * chore: use type imports * docs: update messages
1 parent 52913af commit 733bebe

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+315
-303
lines changed

messages/bulk.base.command.md

Lines changed: 0 additions & 24 deletions
This file was deleted.

messages/messages.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
# success
2+
3+
Bulk %s request %s started successfully.
4+
5+
# checkStatus
6+
7+
Run the command "sf data %s resume -i %s -o %s" to check the status.
8+
9+
# checkJobViaUi
10+
11+
To review the details of this job, run:
12+
sf org open --target-org %s --path "/lightning/setup/AsyncApiJobStatus/page?address=%2F%s"
13+
14+
# remainingTimeStatus
15+
16+
Remaining time: %d minutes.
17+
18+
# remainingRecordsStatus
19+
20+
Processed %d | Success %d | Fail %d
21+
22+
# bulkJobFailed
23+
24+
The bulk job %s failed. Check the job status for more information.
25+
126
# perfLogLevelOption
227

328
Get API performance data.

src/BulkBaseCommand.ts

Lines changed: 0 additions & 130 deletions
This file was deleted.

src/api/data/tree/exportApi.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import path from 'node:path';
99
import fs from 'node:fs';
10-
1110
import { Logger, Messages, Org, SfError, Lifecycle } from '@salesforce/core';
1211
import type { DescribeSObjectResult, QueryResult } from '@jsforce/jsforce-node';
1312
import { Ux } from '@salesforce/sf-plugins-core';
@@ -17,7 +16,7 @@ import {
1716
hasNestedRecords,
1817
SObjectTreeFileContents,
1918
SObjectTreeInput,
20-
} from '../../../dataSoqlQueryTypes.js';
19+
} from '../../../types.js';
2120

2221
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
2322
const messages = Messages.loadMessages('@salesforce/plugin-data', 'exportApi');

src/api/data/tree/functions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66
*/
77

8-
import { SObjectTreeInput } from '../../../dataSoqlQueryTypes.js';
8+
import type { SObjectTreeInput } from '../../../types.js';
99

1010
/** This is the format for references created by the export command */
1111
const genericRefRegex = new RegExp('^@\\w+Ref\\d+$');

src/api/data/tree/importApi.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ import path, { dirname } from 'node:path';
1111
import { fileURLToPath } from 'node:url';
1212
import { AnyJson, Dictionary, getString, JsonMap } from '@salesforce/ts-types';
1313
import { Logger, Messages, Org, SchemaValidator, SfError } from '@salesforce/core';
14-
import { DataPlanPart, hasNestedRecords, isAttributesElement, SObjectTreeInput } from '../../../dataSoqlQueryTypes.js';
15-
import { TreeResponse } from './importTypes.js';
16-
import { ResponseRefs } from './importTypes.js';
17-
import { ImportResults } from './importTypes.js';
14+
import { DataPlanPart, hasNestedRecords, isAttributesElement, SObjectTreeInput } from '../../../types.js';
15+
import { TreeResponse, ResponseRefs, ImportResults } from './importTypes.js';
1816

1917
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
2018
const messages = Messages.loadMessages('@salesforce/plugin-data', 'importApi');

src/api/data/tree/importCommon.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66
*/
77
import { Connection, SfError, Messages } from '@salesforce/core';
8-
import { SObjectTreeInput, SObjectTreeFileContents } from '../../../dataSoqlQueryTypes.js';
9-
import { ResponseRefs, TreeResponse } from './importTypes.js';
8+
import type { SObjectTreeInput, SObjectTreeFileContents } from '../../../types.js';
9+
import type { ResponseRefs, TreeResponse } from './importTypes.js';
1010

1111
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
1212
const messages = Messages.loadMessages('@salesforce/plugin-data', 'importApi');

src/api/data/tree/importFiles.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import fs from 'node:fs';
88
import { Logger, Connection, Messages } from '@salesforce/core';
99
import { isFulfilled } from '@salesforce/kit';
1010
import { flattenNestedRecords } from '../../../export.js';
11-
import { SObjectTreeInput, isAttributesEntry } from '../../../dataSoqlQueryTypes.js';
11+
import { SObjectTreeInput, isAttributesEntry } from '../../../types.js';
1212
import {
1313
sendSObjectTreeRequest,
1414
treeSaveErrorHandler,
1515
parseDataFileContents,
1616
getResultsIfNoError,
1717
} from './importCommon.js';
18-
import { ImportResult, ResponseRefs, TreeResponse } from './importTypes.js';
18+
import type { ImportResult, ResponseRefs, TreeResponse } from './importTypes.js';
1919
import { hasUnresolvedRefs } from './functions.js';
2020

2121
export type FileInfo = {

src/api/data/tree/importPlan.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import { createHash } from 'node:crypto';
1212

1313
import { AnyJson, isString } from '@salesforce/ts-types';
1414
import { Logger, SchemaValidator, SfError, Connection, Messages } from '@salesforce/core';
15-
import { GenericObject } from '../../../types.js';
16-
import { SObjectTreeInput } from '../../../dataSoqlQueryTypes.js';
17-
import { DataPlanPartFilesOnly, ImportResult } from './importTypes.js';
15+
import type { GenericObject, SObjectTreeInput } from '../../../types.js';
16+
import type { DataPlanPartFilesOnly, ImportResult } from './importTypes.js';
1817
import {
1918
getResultsIfNoError,
2019
parseDataFileContents,

src/api/data/tree/importTypes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* Licensed under the BSD 3-Clause license.
55
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66
*/
7-
import { Dictionary } from '@salesforce/ts-types';
8-
import { DataPlanPart } from '../../../dataSoqlQueryTypes.js';
7+
import type { Dictionary } from '@salesforce/ts-types';
8+
import type { DataPlanPart } from '../../../types.js';
99

1010
/*
1111
* Copyright (c) 2023, salesforce.com, inc.

src/bulkDataRequestCache.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import { TTLConfig, Global, Logger, Messages, Org } from '@salesforce/core';
99
import { Duration } from '@salesforce/kit';
10-
import { ResumeOptions } from './types.js';
10+
import type { ResumeOptions } from './types.js';
1111

1212
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
1313
const messages = Messages.loadMessages('@salesforce/plugin-data', 'messages');

src/bulkOperationCommand.ts renamed to src/bulkOperationBase.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ReadStream } from 'node:fs';
99
import os from 'node:os';
1010
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
1111
import { Duration } from '@salesforce/kit';
12-
import { Connection, Messages } from '@salesforce/core';
12+
import { Connection, Messages, SfError } from '@salesforce/core';
1313
import { Ux } from '@salesforce/sf-plugins-core/Ux';
1414
import type { Schema } from '@jsforce/jsforce-node';
1515
import {
@@ -21,15 +21,17 @@ import {
2121
} from '@jsforce/jsforce-node/lib/api/bulk2.js';
2222
import { orgFlags } from './flags.js';
2323
import { BulkDataRequestCache, BulkDeleteRequestCache, BulkUpsertRequestCache } from './bulkDataRequestCache.js';
24-
import { BulkResultV2 } from './types.js';
24+
import type { BulkResultV2 } from './types.js';
2525
import {
2626
POLL_FREQUENCY_MS,
2727
isBulkV2RequestDone,
2828
transformResults,
2929
validateSobjectType,
3030
remainingTime,
31+
displayBulkV2Result,
32+
getRemainingTimeStatus,
33+
setupLifecycleListeners,
3134
} from './bulkUtils.js';
32-
import { displayBulkV2Result, getRemainingTimeStatus, setupLifecycleListeners } from './BulkBaseCommand.js';
3335

3436
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
3537
const messages = Messages.loadMessages('@salesforce/plugin-data', 'bulk.operation.command');
@@ -100,7 +102,7 @@ export const runBulkOperation = async ({
100102
const isAsync = !wait;
101103
try {
102104
const [cache] = await Promise.all([getCache(operation), validateSobjectType(sobject, connection)]);
103-
const csvRecords: ReadStream = fs.createReadStream(csvFileName, { encoding: 'utf-8' });
105+
const csvRecords = fs.createReadStream(csvFileName, { encoding: 'utf-8' });
104106
cmd.spinner.start(`Running ${isAsync ? 'async ' : ''}bulk ${operation} request`);
105107
const endWaitTime = Date.now() + wait.milliseconds;
106108
// eslint-disable-next-line no-param-reassign
@@ -185,7 +187,14 @@ const executeBulkV2DataRequest = async <J extends Schema>(
185187
job.emit('jobProgress', { remainingTime: remainingTime(Date.now())(endWaitTime), stage: 'uploadComplete' });
186188
await job.close();
187189
if (endWaitTime && Date.now() < endWaitTime) {
188-
await job.poll(POLL_FREQUENCY_MS, remainingTime(Date.now())(endWaitTime));
190+
try {
191+
await job.poll(POLL_FREQUENCY_MS, remainingTime(Date.now())(endWaitTime));
192+
} catch (e) {
193+
if (e instanceof Error && e.name !== 'JobPollingTimeout') {
194+
// timeout errors are handled by the 'job.once('jobTimeout')' listener - throw anything else
195+
throw SfError.wrap(e);
196+
}
197+
}
189198
}
190199
return job.check();
191200
};

0 commit comments

Comments
 (0)