У меня есть две разные облачные функции, которые иногда имеют одну и ту же ошибку.
Одна - это триггер пожарного хранилища для объединения нескольких счетчиков, а другая - запланированная задача для очистки старых данных.
Кажется, я не вижу какой-либо картины ошибок, и информации не так много. Также я не нашел много здесь или с поиском Google. Это происходит только иногда, возможно, каждые несколько дней или до нескольких недель без ошибок. Это происходит примерно менее чем в 2% случаев, когда функция запускается.
Я относительно новичок в firebase и использую async await, так что это может быть связано с этим (async / await).
Ошибка и коддля одной из функций ниже.
{ Error
at Http2CallStream.call.on (/srv/node_modules/@grpc/grpc-js/build/src/client.js:96:45)
at emitOne (events.js:121:20)
at Http2CallStream.emit (events.js:211:7)
at process.nextTick (/srv/node_modules/@grpc/grpc-js/build/src/call-stream.js:71:22)
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at process._tickDomainCallback (internal/process/next_tick.js:219:9)
code: 13,
details: '',
metadata: Metadata { options: undefined, internalRepr: Map {} } }
export const clearOldAvailabilityInternal = async () => {
const limit = 500;
let vehicleAvailabilityIds: string[] = [];
let vehicleTypeAvailabilityIds: string[] = [];
const now = new Date();
const twoWeeksAgo = moment(now).subtract(14, "days");
do {
vehicleAvailabilityIds = [];
const batch1 = db.batch();
const vehicleAvailabilityDocs = await db.collection('vehicleAvailability')
.where('dateInterval', '<', twoWeeksAgo.toDate())
.limit(limit)
.get();
for (const doc of vehicleAvailabilityDocs.docs) {
vehicleAvailabilityIds.push(doc.id);
};
for(const id of vehicleAvailabilityIds) {
const deleteRef = db.doc(`vehicleAvailability/${id}`)
batch1.delete(deleteRef);
}
try {
const result = await batch1.commit();
console.log('Deleted ' + vehicleAvailabilityIds.length + ' vehicleAvailability documents');
} catch (err) {
console.log(err);
throw err;
}
}
while (vehicleAvailabilityIds.length === limit)
do {
vehicleTypeAvailabilityIds = [];
const batch2 = db.batch();
const vehicleTypeAvailabilityDocs = await db.collection('vehicleTypeAvailability')
.where('dateInterval', '<', twoWeeksAgo.toDate())
.limit(limit)
.get();
for (const doc of vehicleTypeAvailabilityDocs.docs) {
vehicleTypeAvailabilityIds.push(doc.id);
};
for(const id of vehicleTypeAvailabilityIds) {
const deleteRef = db.doc(`vehicleTypeAvailability/${id}`)
batch2.delete(deleteRef);
}
try {
const result = await batch2.commit();
console.log('Deleted ' + vehicleTypeAvailabilityIds.length + ' vehicleTypeAvailability documents');
} catch (err) {
console.log(err);
throw err;
}
}
while (vehicleTypeAvailabilityIds.length === limit)
console.log('clearOldAvailabilityInternal complete');
return Promise.resolve(true);
}