我有一个lambda,它可以执行mutation来删除一堆项,但总是会发生超时问题。
这是我用来从dynamoDB中删除项的函数。我向deleteExpiredFcm函数传递一个要删除的对象列表。从日志消息中,我知道这个突变有某种冲突,导致了超时问题。另外,我实现了分页以避免超时问题,因为对象列表可能包含数百甚至数千个项。我错过了什么?
async function deleteExpiredFcm(expiredFcm) {
console.log("Deleting expired FCM...");
const batchSize = 10; // Adjust the batch size as needed
const totalBatches = Math.ceil(expiredFcm.length / batchSize);
for (let i = 0; i < totalBatches; i++) {
const batch = expiredFcm.slice(i * batchSize, (i + 1) * batchSize);
const mutationPromises = batch.map(async (element) => {
const mutationObj = deleteExpiredFcmObj;
const variables = {
input: {
id: element.id,
},
};
let retries = 3; // Number of retries
let success = false;
while (retries > 0 && !success) {
try {
const { data } = await client.mutate({
mutation: mutationObj,
variables: variables,
});
console.log(
"(Mutation): Deleting Data ----------->",
data.deleteFcmNotification
);
success = true;
} catch (error) {
if (
error.graphQLErrors.some(
(err) => err.errorType === "ConflictUnhandled"
)
) {
console.log("Conflict occurred, retrying...");
retries--;
} else {
console.error("Error deleting FCM:", error);
break;
}
}
}
});
await Promise.all(mutationPromises); // Await the completion of each batch
}
}
编辑:我在mutation输入中添加了_version,所以它现在会删除项目。然而,我仍然得到超时问题,{“errorMessage”:“2023-06- 13 T12:56:25.895Z 7 c81 deb 4-ccea-4cf 0-ac 59-f72 c5 e1 becf 9任务在3.05秒后超时”}
我怎么才能摆脱它?
1条答案
按热度按时间vaj7vani1#
为了解决GraphQL错误,我在mutation输入中添加了_version。
为了解决超时问题,我只是在lambda通用配置中增加了超时限制。这解决了目前的问题。请让我知道是否有更合适的方法来解决超时问题。