Skip to content
This repository has been archived by the owner on Oct 23, 2024. It is now read-only.

Commit

Permalink
Merge pull request #55 from BonnierNews/feature/reject-in-unrecoverab…
Browse files Browse the repository at this point in the history
…le-handler

Handle reject and unrecoverable in unrecoverable handlers
  • Loading branch information
MattiasOlla authored Jan 23, 2024
2 parents bee0d64 + 8dec22b commit 3a042a9
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 45 deletions.
92 changes: 50 additions & 42 deletions lib/message-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,52 @@ export default async function messageHandler(recipeMap, req, res) {

const { logger } = context;

const handleError = async (error) => {
if (error.rejected) {
logger.error(
`Rejected message with correlationId: ${correlationId}. Error: ${error}. Message: ${JSON.stringify(message)}`
);
await rejectMessage(
{ ...message, error: { message: error.extraMessage } },
{ key, correlationId, parentCorrelationId, siblingCount }
);
metrics.rejectedMessages.inc();
return 200;
}
if (error.retry) {
logger.warn(
`Retrying message ${messageId} with correlationId: :${correlationId}. Error: ${error}. Message: ${JSON.stringify(
message
)}`
);
metrics.retriedMessages.inc();
return 400;
}
if (error.unrecoverable && !key.endsWith(".unrecoverable")) {
try {
// Trigger the unrecoverable handler by publishing a message with the .unrecoverable suffix
await publishMessage(
{ ...message, error: { message: error.extraMessage } },
{ key: `${key}.unrecoverable`, correlationId, parentCorrelationId, siblingCount }
);
return 200;
} catch (publishErr) {
logger.error(
`Unable to handle unrecoverable message with correlationId: ${correlationId}. Error: ${error}. Message: ${JSON.stringify(
message
)}`
);
return 500;
}
}
if (deliveryAttempt < 10) {
logger.warn(`Unexpected error attempt: ${deliveryAttempt} ${error.message}`);
} else {
logger.error(`Unexpected error ${error.message}`);
}
return null;
};

if (!key) {
logger.error(`Got message without key ${messageId}`);
return res.status(400).send();
Expand Down Expand Up @@ -124,6 +170,8 @@ export default async function messageHandler(recipeMap, req, res) {
{ key: `${key}.processed`, correlationId, parentCorrelationId, siblingCount }
);
} catch (err) {
const status = await handleError(err);
if (status) return res.status(status).send();
return res.status(500).send();
}

Expand Down Expand Up @@ -241,48 +289,8 @@ export default async function messageHandler(recipeMap, req, res) {

return res.status(200).send();
} catch (error) {
if (error.rejected) {
logger.error(
`Rejected message with correlationId: ${correlationId}. Error: ${error}. Message: ${JSON.stringify(message)}`
);
await rejectMessage(
{ ...message, error: { message: error.extraMessage } },
{ key, correlationId, parentCorrelationId, siblingCount }
);
metrics.rejectedMessages.inc();
return res.status(200).send();
}
if (error.retry) {
logger.warn(
`Retrying message ${messageId} with correlationId: :${correlationId}. Error: ${error}. Message: ${JSON.stringify(
message
)}`
);
metrics.retriedMessages.inc();
return res.status(400).send();
}
if (error.unrecoverable) {
try {
// Trigger the unrecoverable handler by publishing a message with the .unrecoverable suffix
await publishMessage(
{ ...message, error: { message: error.extraMessage } },
{ key: `${key}.unrecoverable`, correlationId, parentCorrelationId, siblingCount }
);
return res.status(200).send();
} catch (publishErr) {
logger.error(
`Unable to handle unrecoverable message with correlationId: ${correlationId}. Error: ${error}. Message: ${JSON.stringify(
message
)}`
);
return res.status(500).send();
}
}
if (deliveryAttempt < 10) {
logger.warn(`Unexpected error attempt: ${deliveryAttempt} ${error.message}`);
} else {
logger.error(`Unexpected error ${error.message}`);
}
const status = await handleError(error);
if (status) return res.status(status).send();
return res.status(500).send();
}
}
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bonniernews/b0rker",
"version": "7.1.1",
"version": "7.2.0",
"engines": {
"node": ">=16"
},
Expand Down

0 comments on commit 3a042a9

Please sign in to comment.