Skip to content

Commit

Permalink
HCK-9245: add error message if inserted data has duplicate key (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
serhii-filonenko authored Dec 27, 2024
1 parent 2d89257 commit 93c54ae
Showing 1 changed file with 39 additions and 53 deletions.
92 changes: 39 additions & 53 deletions forward_engineering/services/applyToInstanceService.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const { trim } = require('lodash');
const async = require('async');
const { backOff } = require('exponential-backoff');
const clusterHelper = require('../../shared/helpers/clusterHelper');
const logHelper = require('../../shared/helpers/logHelper');
const {
APPLY_QUERY,
COUCHBASE_APPLY_TO_INSTANCE_SKIPPED_ERROR,
Expand Down Expand Up @@ -31,48 +32,45 @@ const applyScript = async ({ bucketName, script, cluster, logger, callback }) =>
const maxNumberStatements = scripts.length;
let previousApplyingProgress = 0;

try {
async.eachOfSeries(
scripts,
async (script, index) => {
logger.info(APPLY_QUERY);
try {
await backOff(async () => cluster.query(script), {
numOfAttempts: MAX_APPLY_ATTEMPTS,
retry: (err, attemptNumber) => {
logApplyScriptAttempt({ attemptNumber, bucketName, logger });
return true;
},
startingDelay: DEFAULT_START_DELAY,
});
const appliedStatements = index + 1;
const applyingProgress = Math.round((appliedStatements / maxNumberStatements) * 100);
if (applyingProgress - previousApplyingProgress >= 5) {
previousApplyingProgress = applyingProgress;
logger.progress(getApplyingScriptPercentMessage(applyingProgress));
}
} catch (err) {
if (isIndexAlreadyCreatedError(err)) {
logger.info(COUCHBASE_APPLY_TO_INSTANCE_SKIPPED_ERROR);
} else if (isDuplicateDocumentKeyError(err)) {
logger.info(COUCHBASE_APPLY_TO_INSTANCE_ERROR);
logger.progress(getApplyingScriptPercentMessage(script));
} else {
throw err;
}
async.eachOfSeries(
scripts,
async (script, index) => {
logger.info(APPLY_QUERY);
try {
await backOff(async () => cluster.query(script), {
numOfAttempts: MAX_APPLY_ATTEMPTS,
retry: (err, attemptNumber) => {
logApplyScriptAttempt({ attemptNumber, bucketName, logger });
return true;
},
startingDelay: DEFAULT_START_DELAY,
});
const appliedStatements = index + 1;
const applyingProgress = Math.round((appliedStatements / maxNumberStatements) * 100);
if (applyingProgress - previousApplyingProgress >= 5) {
previousApplyingProgress = applyingProgress;
logger.progress(getApplyingScriptPercentMessage(applyingProgress));
}
},
() => {
logger.info(SCRIPT_SUCCESSFULLY_APPLIED);
logger.progress(SUCCESSFULLY_APPLIED);
callback();
},
);
} catch (err) {
logger.error(err);
logger.progress(ERROR_HAS_BEEN_THROWN_WHILE_APPLYING_SCRIPT_TO_COUCHBASE_INSTANCE);
return callback(err);
}
} catch (err) {
if (isIndexAlreadyCreatedError(err)) {
logger.info(COUCHBASE_APPLY_TO_INSTANCE_SKIPPED_ERROR);
} else {
throw err;
}
}
},
error => {
if (error) {
logger.error(error);
logger.progress(ERROR_HAS_BEEN_THROWN_WHILE_APPLYING_SCRIPT_TO_COUCHBASE_INSTANCE);
return callback(logHelper.createError(error));
}

logger.info(SCRIPT_SUCCESSFULLY_APPLIED);
logger.progress(SUCCESSFULLY_APPLIED);
callback();
},
);
};

/**
Expand All @@ -87,18 +85,6 @@ const isIndexAlreadyCreatedError = err => {
return errorCode === COUCHBASE_ERROR_CODE.indexAlreadyCreated || errorMessage.includes('already exist');
};

/**
*
* @param {object} err
* @returns {boolean}
*/
const isDuplicateDocumentKeyError = err => {
const errorCode = clusterHelper.getErrorCode({ error: err });
const errorMessage = clusterHelper.getErrorMessage({ error: err });

return errorCode === COUCHBASE_ERROR_CODE.duplicateDocumentKey && errorMessage.includes('Duplicate Key');
};

/**
*
* @param {{attemptNumber: number, bucketName: string, logger: object}} param
Expand Down

0 comments on commit 93c54ae

Please sign in to comment.