ecomplus / app-tiny-erp

E-Com Plus app to integrate Tiny ERP
GNU General Public License v3.0
0 stars 4 forks source link

Fix/pubsub webhook tiny #130

Closed wisley7l closed 1 year ago

wisley7l commented 1 year ago

@leomp12 crie a sequinte função no lugar da saveToQueue

const launchRetry = (err) => {
  if (err) {
     console.error(err)
     return reject(err)
  }
  return reject(new Error(`Unexpected error=> ${context.eventId}`))
}

Porém em alguns tests que realizei aqui, o pub/Sub retorna seguinte mensagem Exception from a finished function: Error: XXXX

e acaba não realizando novas tentativas :cry: , tem algo mais que está errado, ou essa função para lancar o erro não se resolve dessa forma?

leomp12 commented 1 year ago

Porém em alguns tests que realizei aqui, o pub/Sub retorna seguinte mensagem Exception from a finished function: Error: XXXX e acaba não realizando novas tentativas cry , tem algo mais que está errado, ou essa função para lancar o erro não se resolve dessa forma?

O log era o esperado mesmo. Rejeitar uma função sem catch dá um unhanded exception, e fatal error, até aí tudo certo, sobre não ter retentativa, você tá testando isso onde? Não é alguma limitação de conta talvez? 🤔

leomp12 commented 1 year ago

Tá dando erro aí no função do Pub/Sub mesmo né? Não na função HTTP do webhook do Tiny, certo? E como você forçou erro pra testar isso? 👀

wisley7l commented 1 year ago

Então os testes foram feitos isolados em uma conta que tenho do Firebase e uma conta q criei no tiny. Testei a importação e exportação e funcionam corretamente, e pra forcar o erro eu alterei a URL que bate a StoreApi

Para ser mais exato aqui: https://github.com/ecomplus/app-tiny-erp/blob/475fd038060e2ff9351b86765e27f5e1c2478ac5/functions/lib/integration/import-product.js#L151

Mudei o .json, para .jso, forcando um erro.

Não acredito que seja erro de HTTP, pois estava verificando apenas o log da Pub/Sub

leomp12 commented 1 year ago

Certo, e tem certeza que não teve retentativa? Tira um print dos logs no período próximo desse teste e joga aqui por favor, acho que vai facilitar ...

wisley7l commented 1 year ago

ontiny-1

ontiny-2

leomp12 commented 1 year ago

Não encerrou a função com erro, por isso não teve retentativa. Tiveram logs da mesma execução na sequência, só bateu um console.error da request que falhou: https://github.com/ecomplus/app-tiny-erp/blob/master/functions/lib/integration/import-product.js#L163 https://github.com/ecomplus/app-tiny-erp/blob/master/functions/lib/integration/import-product.js#L197

leomp12 commented 1 year ago

Nem toda request nos processos de importação/exportação dão error throw, nem deveriam na verdade. O catch no importProduct por exemplo seria útil somente em casos de rate limit ou algum erro 5xx de uma das APIs, um erro não mapeado ou um client error só deve ir pra log, sem colocá-lo de volta à fila (retentativa) porque nesse último caso os erros só seriam fixados depois de correção do código, ou seja, se eles resultassem em retentativa geraria um loop infinito.

leomp12 commented 1 year ago

O jeito mais fácil de você testar retentativa seria falhar o getAppData na função da PubSub, ou então teria que ver em qual ponto a função de importação daria throw e portanto bateria o catch ali..