Firestore несколько синхронизированных пакетных коммитов зависает без какого-либо ответа - PullRequest
0 голосов
/ 06 сентября 2018

У меня возникла проблема с пакетными операциями Firestore при попытке регулярно обновлять коллекцию документов или при попытке записать большой набор данных. Похоже, что Firestore просто зависает и не отправляет ответ. В обоих случаях соблюдаются рекомендации по максимальному размеру партии (500) и размеру документа. Например, при использовании заданий cron коммиты в течение некоторого времени успешно выполняются, а затем полностью останавливаются без трассировки ошибок.

Например, приведенный ниже код выполняется 6 раз подряд перед тем, как он начинает плохо себя вести.

public updateCoins = async () =>{
  const markets = await this.getMarkets('usd')
  const maxCount = Math.round(markets.length/this.FB_BATCH_SIZE) + 1
  for(let i=0; i< maxCount; i++){
    const marketBatch = markets.slice(i*this.FB_BATCH_SIZE, (i+1)*this.FB_BATCH_SIZE  > markets.length ? markets.length : (i+1)*this.FB_BATCH_SIZE)
    const batchCoins = this.fbService.db.batch()
    marketBatch.map((entry)=>{
    const coin = this.mapCoin(entry)
      if(coin){
        const coinRef = this.coinsCol.doc(coin.id);
                    batchCoins.set(coinRef,coin,{merge:true})
      }
    }) 
            
    await batchCoins.commit()
    .then(()=>{
      console.log('Commited coins batch update')
    }).catch((_e)=>{
      console.log('Exception saving coins',_e)
    })
  }
}
...