Я использую клиент gremlin javascript (3.4.2) для запроса janusgraph через сервер gremlin. Я заметил, что после того, как сервер работал некоторое время во время разработки, некоторые из запросов, которые запрашивают график, начинают долго оставаться в ожидании (время ожидания, установленное на gremlin-server).
Глядя на консоль сервера, я вижу это сообщение:
Pausing response writing as writeBufferHighWaterMark exceeded on RequestMessage{, requestId=9697c61a-34de-4764-a8c4-72d7f7a154ac, op='bytecode', processor='traversal', args={gremlin=[[], [V(), has(User, identityid, NQ05cGsB3uhLm-BIAGPq), outE(worked), choose([[], [values(dateto)]], [[], [project(vertexId, role, businessId, business, relationId, dateinsert, datefrom, dateto), by([[], [inV(), hasLabel(Job), id()]]), by([[], [inV(), hasLabel(Job), values(role)]]), by([[], [inV(), hasLabel(Job), outE(), hasLabel(at), inV(), id()]]), by([[], [inV(), hasLabel(Job), outE(), hasLabel(at), inV(), values(name)]]), by(id), by(dateinsert), by(datefrom), by(dateto)]], [[], [project(vertexId, role, businessId, business, relationId, dateinsert, datefrom), by([[], [inV(), hasLabel(Job), id()]]), by([[], [inV(), hasLabel(Job), values(role)]]), by([[], [inV(), hasLabel(Job), outE(), hasLabel(at), inV(), id()]]), by([[], [inV(), hasLabel(Job), outE(), hasLabel(at), inV(), values(name)]]), by(id), by(dateinsert), by(datefrom)]])]], aliases={g=refeenet}}} - writing will continue once client has caught up
И через некоторое время появляется таймаут ПРЕДУПРЕЖДЕНИЕ.
Я не уверен, почему это происходит, и я не нашел ничего полезного в поиске решения.
Я использую машинопись.
Это класс, который управляет источником обхода:
import gremlin from "gremlin";
const GREMLIN_URL = "ws://localhost:8182/gremlin";
const GRAPH_NAME = "maingraph";
const { Graph } = gremlin.structure;
const { DriverRemoteConnection } = gremlin.driver;
export class GremlinApi {
public static g: gremlin.process.GraphTraversalSource;
public static connection: gremlin.driver.DriverRemoteConnection;
public static getTraversalSource() {
if (!GremlinApi.g) {
const graph = new Graph();
GremlinApi.connection = new DriverRemoteConnection(GREMLIN_URL, { traversalSource: GRAPH_NAME });
GremlinApi.g = graph.traversal().withRemote(GremlinApi.connection);
}
return GremlinApi.g;
}
public static closeTraversal() {
if (GremlinApi.connection && GremlinApi.connection.close) {
GremlinApi.connection.close();
GremlinApi.connection = null;
GremlinApi.g = null;
}
}
}
И это пример того, как я обычно использую обход:
import { GremlinApi } from "../db/gremlinApi/gremlinApi";
// Get the traversal
const g = GremlinApi.getTraversalSource();
// Do something with the traversal
GremlinApi.closeTraversal();
Это обычно случается, когда что-то вроде 3/4 запросов действительно близко друг к другу Некоторые из них уходят в тайм-аут.
Есть идеи о том, что может быть причиной этой проблемы?