如何知道云存储触发器何时重试?

问题描述 投票:0回答:1

我阅读了此文档并将最佳实践应用到我的云功能中。我观察到,当发生错误时它实际上会重试。但是当我重读文档时,我感到有点困惑,因为当一个函数像这样重试时,我怎么知道在这个触发器中,该函数实际上重试了,并且我想以尽可能详细的方式记录该函数的重试,并且如果重试失败,我如何检测失败并将其注销?

我确实尝试过,就像最佳实践指导我一样,这是我的云存储触发器的示例代码

const { onObjectFinalized, onObjectDeleted, onObjectMetadataUpdated } = require('firebase-functions/v2/storage');
const env = require('./env.dev.json');
exports.storageInsertTrigger = onObjectFinalized({
    bucket: env.BUCKET_ARRAY[1],
    memory: '2GiB',
    timeoutSeconds: 120,
    retry: true
}, async event => {
    const eventAge = Date.now() - Date.parse(event.time);
    const eventMaxAge = 10000;
    const metadata = event.data ? Object.assign({}, event.data.metadata) : {};
    const eventId = event.id;

    // Ignore events that are too old
    if (eventAge > eventMaxAge) {
        console.log(`DROPPING EVENT TRIGGERED - PATH FILE: ${event.data.name} / EVENT ID: ${eventId} with age ${eventAge} ms.`, "[EVENT MAX AGE REACHED]");
        return Promise.resolve();
    }

    // .... Processing data .... => create object newObjFS for firestore insert.
        const functionResult = await admin.firestore().collection(myCollection).doc(eventId).set(newObjFS).then(() => {
            console.log(`FIRESTORE - Object ID: ${event.data.name} - Event ID: ${eventId}`);
            return Promise.resolve();
        }).catch((error) => {
            console.log(error);
            return Promise.reject(error);
        });
        return functionResult;
    } catch (error) {
        console.error(error);
        return Promise.reject(error);
    }
});
node.js firebase google-cloud-functions google-cloud-storage
1个回答
0
投票

我怎么知道在这个触发器中,函数实际上重试了

使用提供的Event.context来查找

eventId
,它在重试之间不会改变。 您可以在调用之间自行跟踪 eventId(保存到数据库或其他数据存储) - Cloud Functions 不会为您执行此操作。

如果重试失败,我如何检测失败并将其注销

执行失败没有回调或通知。 在函数执行过程中,您可以捕获并处理任何错误,让您满意。

如果函数执行成功,重试是否会在第二次尝试时停止?

成功完成的函数不一定会立即停止重试,因为不能保证 Cloud Functions 会从您的函数中获得成功结果。 函数结果是异步报告的,如果出现系统错误,可能会丢失。 如果函数没有生成错误,重试将“最终”停止。 您的代码需要具有逻辑来防止意外重试。 我建议仔细阅读

文档

以获取更具体的案例和示例。

© www.soinside.com 2019 - 2024. All rights reserved.