Как определить причину прерывистой ошибки облачной функции базы данных - PullRequest
0 голосов
/ 30 октября 2019

У меня есть две разные облачные функции, которые иногда имеют одну и ту же ошибку.

Одна - это триггер пожарного хранилища для объединения нескольких счетчиков, а другая - запланированная задача для очистки старых данных.

Кажется, я не вижу какой-либо картины ошибок, и информации не так много. Также я не нашел много здесь или с поиском 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...