Necesito usar transacciones gremlin usando la biblioteca npm gremlin . Revisé la sintaxis de transacción estándar mencionada para javascript en la documentación de tinkerpop: https://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript-transactions . Estoy usando AWS Lambda para lo mismo. Mantengo 1024 MB de RAM con un tiempo de espera de 10 segundos en mi lambda. Pero mi lambda está agotando el tiempo todo el tiempo.
La siguiente es mi función lambda:
'use strict'; const gremlin = require('gremlin'); const { t: { id } } = gremlin.process; exports.handler = async (event, context) => { const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection; const g = gremlin.process.traversal().withRemote(new DriverRemoteConnection(`<ws_graph_url>:8182/gremlin`,{})); console.log('initializing the transaction'); const tx = g.tx(); console.log('beginning of the transaction'); const gtx = tx.begin(); try { let id1 = 'kanhai-test-tx-1', id2 = 'kanhai-test-tx-2'; console.log('before ops'); await Promise.all([ gtx.addV('TX1').property(id, id1).iterate(), gtx.addV('TX2').property(id, id2).iterate(), ]); console.log('after tx ops'); console.log('before tx commit'); await tx.commit(); console.log('after tx commit'); } catch(err) { console.error('Failed to complete the transaction:', err); tx.rollback(); } };La lambda se agota durante la ejecución de Promise.all() que involucra las 2 operaciones de creación.
Si elimino la await de todos los lugares, mi lambda se ejecuta con éxito en menos de un segundo y regresa con éxito. Todas las líneas de registro se imprimen como se esperaba. Pero mis operaciones no se realizan porque no las he esperado.
Pero cuando mantengo la await en todas partes donde he mencionado, la última línea de registro que se imprime antes de que se agote el tiempo de espera de mi lambda es "antes de las operaciones", que es la línea de registro justo antes de mis operaciones de escritura que están dentro de Promise.all .
Esta lambda se ejecuta en la misma VPC donde está alojado mi clúster de Neptune. Probé varias consultas sin las transacciones y funcionan correctamente a través de gremlin y OpenCypher a través de HTTP.
No he encontrado ninguna documentación concreta que pueda ayudarme en la ejecución paso a paso de una transacción exitosa usando javascript. Cualquier ayuda sería apreciada.
La compatibilidad con transacciones de bytecode, g.tx() , etc. requiere una versión de servidor TinkerPop de 3.5.x. La primera versión de Neptune compatible con esa versión es la versión 1.1.1.0 (19 de abril de 2022). Es probable que esa sea la razón por la que su Lambda no está haciendo nada, ya que el servidor no es compatible g.tx() en el nivel de Neptune 1.0.5.1. Esa versión anterior del motor Neptune está en el nivel TinkerPop 3.4.11.
Las notas de la versión 1.1.1.0 del motor Neptune están aquí: https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.1.1.0.html