Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

174
Visualizações
Cómo detener con gracia una transacción de larga duración en Hana DB

Estoy usando una herramienta hana-client de https://www.npmjs.com/package/@sap/hana-client Esencialmente, tengo una devolución de llamada que lleva mucho tiempo, así que decido ejecutarla en paralelo en Promise.race para lanzar un error después de 1000 ms (tiempo de espera en asíncrono/espera )

Esto no interrumpirá la operación que se está ejecutando actualmente en la devolución de llamada, pero esperaba que la reversión la terminará una vez que se alcance el bloque catch después de 1000 ms. Sin embargo, esta reversión no parece funcionar y solo espera hasta que se complete la devolución de llamada. Esto bloquea una tabla en mi base de datos durante bastante tiempo.

Mi siguiente idea fue usar db.abort() de https://help.sap.com/viewer/f1b440ded6144a54ada97ff95dac7adf/2.12/en-US/b98b880fc6a344aa85ef0b471fa19af4.html Sin embargo, esto tampoco parece romper la larga devolución de llamada. ¿Estoy haciendo algo mal?

 try { db = await this.acquire(); db.connection.setAutoCommit(false); const wrapper = new HanaClientAsyncWrapper(db); await Promise.race([ callback(wrapper), new Promise((_, reject) => setTimeout( async () => { reject(new Error("Timeout due to a long-running operation")); // await db.abort(); <- does not work }, 1000, )), ]); await db.commit(); } catch (err) { if (db) { await db.rollback(); } throw err; } finally { if (db) { db.connection.setAutoCommit(true); await this.release(db); } }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La detención de declaraciones activas durante la ejecución puede retrasarse en HANA. La gestión de tareas internas en HANA es un enfoque multitarea "cooperativo", en términos generales. Y algunas partes del motor de ejecución de consultas no buscan un indicador de cancelación con la suficiente frecuencia. Este suele ser el caso, cuando la comprobación de dicho indicador con mayor frecuencia incurriría en un mayor costo de rendimiento, y la suposición de referencia es no cancelar las declaraciones.

En caso de que el tiempo de ejecución excesivo provoque bloqueos que, a su vez, provoquen bloqueos reales de la aplicación, puede ser una buena opción considerar el uso de clases de administración de carga de trabajo para esas declaraciones. Consulte la documentación para obtener detalles al respecto.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda