Проблема с .project (). By () в Gremlin JS 3.4.0 - PullRequest
0 голосов
/ 17 января 2019

Я вижу .project().by() обходы, возвращающиеся {} под Gremlin JS 3.4.0. Когда я понижаю до 3.2.10, они работают правильно.

gremlin> g.addV("trip").property(single, "trackName", "Ohio")

==>v[1]

In Gremlin JS `3.4.0`:

const result = await g.V("1").project("trackName").by("trackName").next();

результат:

{
  "value": {},
  "done": false
}

но когда я понижаюсь до Gremlin 3.2.10, результат верен:

{
  "value": {
    "trackName": "Ohio"
  },
  "done": false
}

Нужно ли мне изменить способ использования project в 3.4.0?

РЕДАКТИРОВАТЬ: Результаты тестирования на разных версиях. Я запускал каждый тест для версии gremlin, собирал результаты, затем увеличивал версию и снова запускал тесты. Я использую только один экземпляр Neptune, поэтому мы можем быть уверены, что это одни и те же данные.

enter image description here

Неудачный тест означает, что он вернул данные в виде:

"results": {
 "value": {},
 "done": false
}

Для тестирования консоли я снял финальную .next().

Среда, в которой я тестирую:

AWS Lambda Node 8.10

AWS Neptune 1.0.1.0

РЕДАКТИРОВАТЬ 2: Добавление файлов JS, используемых во время теста Нептуна.

index.js

const gremlin = require("gremlin");

const { DriverRemoteConnection } = gremlin.driver;
const { Graph } = gremlin.structure;

const initGremlinClient = () => {
  try {
    const dc = new DriverRemoteConnection(
      `ws://my-cluster.XXXXXXX.us-east-1.neptune.amazonaws.com:8182/gremlin`,
      {}
    );
    const graph = new Graph();
    return {
      g: graph.traversal().withRemote(dc),
      closeGremlinConnection: () => dc.close()
    };
  } catch (error) {
    console.log("[GREMLIN INIT ERROR]", error);
    throw new Error(error);
  }
};

exports.handler = async event => {
  const { g, closeGremlinConnection } = initGremlinClient();

  const result = await g
    .addV("test")
    .property("myProp", "myValue")
    .project("myProp")
    .by("myProp")
    .next();
  closeGremlinConnection();
  return result;
};

package.json

{
  "name": "gremlinTest",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "gremlin": "3.4.0"
  }
}

1 Ответ

0 голосов
/ 22 марта 2019

Я говорил с кем-то из команды AWS. Существует ошибка, влияющая на совместимость между Gremlin ^3.3.5 и Lambda. В частности, проблема связана с базовым движком GraphSON v3 и тем, как Lambda анализирует JSON.

Временное решение - использовать GraphSON v2 при создании экземпляра DriverRemoteConnection:

const dc = new DriverRemoteConnection(
  `ws://my-neptune-cluster.us-east-1.neptune.amazonaws.com:8182/gremlin`,
  { mimeType: "application/vnd.gremlin-v2.0+json" } // Fall back to GraphSON v2
);
...