Проблемы с получением правильных данных с сервера gremlin - PullRequest
1 голос
/ 24 сентября 2019

У меня есть ряд бессмысленных проблем, которые сводят меня с ума.Есть несколько вещей, которые я пытаюсь выполнить:

  1. Я пытаюсь настроить свой сервер gremlin на «загрузку» определенного json файла в формате graphsonи тут возникают действительно странные проблемы, о которых я подробно расскажу.

  2. Я пытаюсь выполнить простой вызов ajax для запроса этих данных, но не только не могуполучить данные, которые я хочу (что может иметь смысл, поскольку gremlin отказывается их загружать), я, кажется, получаю некоторые данные, которые у меня есть не знаю , откуда они берутся.

  3. Я пытаюсь выяснить, как проверить сервер gremlin на моем терминале, но я не могу выполнить запрос, потому что ./gremlin-server.sh status возвращает Server not running, даже если он работает на 100%, и мой вызов ajax может это увидеть.

Gremlin не загружает файл

Для запуска я использую Gremlin v.3.4.3, и его можно найти здесь .Команда, которую я использую для запуска gremlin:

bin/gremlin-server.sh data/gremlin-server-rest-modern.yaml

Файл Te yaml поставляется с загрузками Gremlin Server, содержимое которых:

#...license stuff...

host: localhost
port: 8182
scriptEvaluationTimeout: 30000
channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer
graphs: {
  graph: conf/tinkergraph-empty.properties}
scriptEngines: {
  gremlin-groovy: {
    plugins: { org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
               org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/generate-modern.groovy]}}}}
serializers:
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}         # application/json
metrics: {
  slf4jReporter: {enabled: true, interval: 180000}}
strictTransactionManagement: false
maxInitialLineLength: 4096
maxHeaderSize: 8192
maxChunkSize: 8192
maxContentLength: 65536
maxAccumulationBufferComponents: 1024
resultIterationBatchSize: 64

Теперь,насколько я понимаю, важно отметить компонент graph, который ведет к файлу properties.Файл свойств, который я загружаю, - tinkergraph-empty.properties, содержимое которого:

gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph
gremlin.tinkergraph.vertexIdManager=LONG

Имя файла, tinkergraph-empty, ссылается на что-то важное: сервер gremlin не будет загружать график.Круто - когда я запускаю сервер gremlin, он нормально загружается с ожидаемыми результатами:

[INFO] GremlinServer - Configuring Gremlin Server from ./conf/gremlin-server-rest-modern.yaml
[INFO] MetricManager - Configured Metrics Slf4jReporter configured with interval=180000ms and loggerName=org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics
[INFO] DefaultGraphManager - Graph [graph] was successfully configured via [conf/tinkergraph-empty.properties].
[INFO] ServerGremlinExecutor - Initialized Gremlin thread pool.  Threads in pool named with pattern gremlin-*
[INFO] ServerGremlinExecutor - Initialized GremlinExecutor and preparing GremlinScriptEngines instances.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/Users/<user>/apache-tinkerpop-gremlin-server-3.4.3/lib/groovy-2.5.7-indy.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] ServerGremlinExecutor - Initialized gremlin-groovy GremlinScriptEngine and registered metrics
[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
[INFO] OpLoader - Adding the standard OpProcessor.
[INFO] OpLoader - Adding the session OpProcessor.
[INFO] OpLoader - Adding the traversal OpProcessor.
[INFO] TraversalOpProcessor - Initialized cache for TraversalOpProcessor with size 1000 and expiration time of 600000 ms
[INFO] GremlinServer - Executing start up LifeCycleHook
[INFO] Logger$info - Loading 'modern' graph data.
[INFO] AbstractChannelizer - Configured application/vnd.gremlin-v3.0+json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0
[INFO] AbstractChannelizer - Configured application/json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0
[INFO] GremlinServer$1 - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
[INFO] GremlinServer$1 - Channel started at port 8182.

Эта строка, в частности, многообещающая: [INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]

График это "load "(я предполагаю, что он должен инициализировать граф) имеет нулевые вершины и ребра.

Когда я запускаю свой вызов ajax, который, как я и обещал, я получу позже, я успешно отправлю сообщение на сервер.Это работает и работает.Все хорошо.

Однако ...

Когда я меняю папку tinkerpop-empty.properties для загрузки графика, все становится действительно странно.Я собираюсь изменить его следующим образом:

gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph
gremlin.tinkergraph.vertexIdManager=LONG
gremlin.tinkergraph.graphLocation=data/tinkerpop-crew.json
gremlin.tinkergraph.graphFormat=graphson

Теперь я загрузил папку данных с именем tinkerpop-crew.json и добавил graphFormat: graphson.Это должно быть правильно.файл json можно найти здесь , а файл свойств соответствует формату этого файла .

Теперь, когда я запускаю это, я получаю совершенно другой результат:

[INFO] GremlinServer - Configuring Gremlin Server from ./conf/gremlin-server-rest-modern.yaml
[INFO] MetricManager - Configured Metrics Slf4jReporter configured with interval=180000ms and loggerName=org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics
[INFO] DefaultGraphManager - Graph [graph] was successfully configured via [conf/tinkergraph-empty.properties].
[INFO] ServerGremlinExecutor - Initialized Gremlin thread pool.  Threads in pool named with pattern gremlin-*
[INFO] ServerGremlinExecutor - Initialized GremlinExecutor and preparing GremlinScriptEngines instances.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/Users/xbbn1xn/apache-tinkerpop-gremlin-server-3.4.3/lib/groovy-2.5.7-indy.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] ServerGremlinExecutor - Initialized gremlin-groovy GremlinScriptEngine and registered metrics
[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:6 edges:14], standard]
[INFO] OpLoader - Adding the standard OpProcessor.
[INFO] OpLoader - Adding the session OpProcessor.
[INFO] OpLoader - Adding the traversal OpProcessor.
[INFO] TraversalOpProcessor - Initialized cache for TraversalOpProcessor with size 1000 and expiration time of 600000 ms
[INFO] GremlinServer - Executing start up LifeCycleHook
[INFO] Logger$info - Loading 'modern' graph data.
[ERROR] GremlinServer - Gremlin Server Error
java.lang.IllegalArgumentException: Vertex with id already exists: 1
    at org.apache.tinkerpop.gremlin.structure.Graph$Exceptions.vertexWithIdAlreadyExists(Graph.java:1196)
    at org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph.addVertex(TinkerGraph.java:167)
    at org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory.generateModern(TinkerFactory.java:90)
    at org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory$generateModern.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
    at Script1$_run_closure1.doCall(Script1.groovy:28)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:101)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:263)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
    at groovy.lang.Closure.call(Closure.java:405)
    at org.codehaus.groovy.runtime.ConvertedMap.invokeCustom(ConvertedMap.java:54)
    at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:122)
    at com.sun.proxy.$Proxy15.onStartUp(Unknown Source)
    at org.apache.tinkerpop.gremlin.server.GremlinServer.lambda$start$1(GremlinServer.java:154)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at org.apache.tinkerpop.gremlin.server.GremlinServer.start(GremlinServer.java:151)
    at org.apache.tinkerpop.gremlin.server.GremlinServer.main(GremlinServer.java:346)
[ERROR] GremlinServer - Gremlin Server was unable to start and will now begin shutdown: Vertex with id already exists: 1
[INFO] GremlinServer - Shutting down OpProcessor[]
[INFO] GremlinServer - Shutting down OpProcessor[session]
[INFO] GremlinServer - Shutting down OpProcessor[traversal]
[INFO] GremlinServer - Shutting down thread pools.
[INFO] GremlinServer - Executing shutdown LifeCycleHook
[INFO] GremlinServer - Closed Graph instance [graph]
[INFO] GremlinServer - Gremlin Server - shutdown complete

А?Вершина уже существует?Это невозможно.У меня никогда не было даже запуска этого файла, с какой стати вообще о нем ничего не было?Что касается гремлина, я никогда даже не загружал график.Может быть, он запускает график и забывает удалить его из памяти или еще чего-нибудь, верно?

Хорошо, давайте создадим наш собственный файл и инициализируем только одну вершину с каким-то странным простым числом и без ребер.Давайте назовем это tinkerpop-crew2.json:

{"id":{"@type":"g:Int64","@value":47284629},"label":"person"}.

Может не быть простым.Без разницы.Ладно, здорово, это сработало!

[INFO] GremlinServer - Configuring Gremlin Server from ./conf/gremlin-server-rest-modern.yaml
[INFO] MetricManager - Configured Metrics Slf4jReporter configured with interval=180000ms and loggerName=org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics
[INFO] DefaultGraphManager - Graph [graph] was successfully configured via [conf/tinkergraph-empty.properties].
[INFO] ServerGremlinExecutor - Initialized Gremlin thread pool.  Threads in pool named with pattern gremlin-*
[INFO] ServerGremlinExecutor - Initialized GremlinExecutor and preparing GremlinScriptEngines instances.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/Users/xbbn1xn/apache-tinkerpop-gremlin-server-3.4.3/lib/groovy-2.5.7-indy.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] ServerGremlinExecutor - Initialized gremlin-groovy GremlinScriptEngine and registered metrics
[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:1 edges:0], standard]
[INFO] OpLoader - Adding the standard OpProcessor.
[INFO] OpLoader - Adding the session OpProcessor.
[INFO] OpLoader - Adding the traversal OpProcessor.
[INFO] TraversalOpProcessor - Initialized cache for TraversalOpProcessor with size 1000 and expiration time of 600000 ms
[INFO] GremlinServer - Executing start up LifeCycleHook
[INFO] Logger$info - Loading 'modern' graph data.
[INFO] AbstractChannelizer - Configured application/vnd.gremlin-v3.0+json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0
[INFO] AbstractChannelizer - Configured application/json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0
[INFO] GremlinServer$1 - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
[INFO] GremlinServer$1 - Channel started at port 8182.

Обратите внимание: [INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:1 edges:0], standard].Одна вершина.

Что произойдет, когда наш сервер настроен на повторное использование этого файла?

[INFO] GremlinServer - Configuring Gremlin Server from ./conf/gremlin-server-rest-modern.yaml
[INFO] MetricManager - Configured Metrics Slf4jReporter configured with interval=180000ms and loggerName=org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics
[INFO] DefaultGraphManager - Graph [graph] was successfully configured via [conf/tinkergraph-empty.properties].
[INFO] ServerGremlinExecutor - Initialized Gremlin thread pool.  Threads in pool named with pattern gremlin-*
[INFO] ServerGremlinExecutor - Initialized GremlinExecutor and preparing GremlinScriptEngines instances.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/Users/xbbn1xn/apache-tinkerpop-gremlin-server-3.4.3/lib/groovy-2.5.7-indy.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] ServerGremlinExecutor - Initialized gremlin-groovy GremlinScriptEngine and registered metrics
[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:7 edges:6], standard]
[INFO] OpLoader - Adding the standard OpProcessor.
[INFO] OpLoader - Adding the session OpProcessor.
[INFO] OpLoader - Adding the traversal OpProcessor.
[INFO] TraversalOpProcessor - Initialized cache for TraversalOpProcessor with size 1000 and expiration time of 600000 ms
[INFO] GremlinServer - Executing start up LifeCycleHook
[INFO] Logger$info - Loading 'modern' graph data.
[ERROR] GremlinServer - Gremlin Server Error
java.lang.IllegalArgumentException: Vertex with id already exists: 1
    at org.apache.tinkerpop.gremlin.structure.Graph$Exceptions.vertexWithIdAlreadyExists(Graph.java:1196)
    at org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph.addVertex(TinkerGraph.java:167)
    at org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory.generateModern(TinkerFactory.java:90)
    at org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory$generateModern.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
    at Script1$_run_closure1.doCall(Script1.groovy:28)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:101)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:263)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
    at groovy.lang.Closure.call(Closure.java:405)
    at org.codehaus.groovy.runtime.ConvertedMap.invokeCustom(ConvertedMap.java:54)
    at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:122)
    at com.sun.proxy.$Proxy15.onStartUp(Unknown Source)
    at org.apache.tinkerpop.gremlin.server.GremlinServer.lambda$start$1(GremlinServer.java:154)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at org.apache.tinkerpop.gremlin.server.GremlinServer.start(GremlinServer.java:151)
    at org.apache.tinkerpop.gremlin.server.GremlinServer.main(GremlinServer.java:346)
[ERROR] GremlinServer - Gremlin Server was unable to start and will now begin shutdown: Vertex with id already exists: 1
[INFO] GremlinServer - Shutting down OpProcessor[]
[INFO] GremlinServer - Shutting down OpProcessor[session]
[INFO] GremlinServer - Shutting down OpProcessor[traversal]
[INFO] GremlinServer - Shutting down thread pools.
[INFO] GremlinServer - Executing shutdown LifeCycleHook
[INFO] GremlinServer - Closed Graph instance [graph]
[INFO] GremlinServer - Gremlin Server - shutdown complete

Та же ошибка, что и раньше.Что, черт возьми, здесь происходит?Также на глаза бросаются две вещи:

  1. ERROR] GremlinServer - Gremlin Server Error java.lang.IllegalArgumentException: Vertex with id already exists: 1.Это говорит о том, что существует только одна вершина или существует вершина с идентификатором «1»?Потому что ни одна из моих вершин не имеет идентификатора один.То есть до ...

  2. Вы заметили, что это даже не загрузка моего файла![INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:7 edges:6], standard].Мой файл не имеет 7 вершин и 6 ребер.У него 1 вершина и 0 ребер.На самом деле это выглядит подозрительно, как будто он загружает исходный файл tinkerpop-crew.json или что-то подобное, хотя когда мы изначально загружали его, в сообщении INFO говорилось: [INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:6 edges:14], standard].

Хорошо, такЯ понятия не имею, что здесь происходит.

Выполнение моего ajax-запроса, чтобы увидеть, что происходит

У меня действительно очень простой запрос, который я запускаю и публикую, используя вызов AJAX:

$.ajax({
            type: "POST",
            accept: "application/json",
            url: url // http://localhost:8182,
            timeout: timeout // I have it set to 3500,
            data: JSON.stringify({"gremlin" : q}),
            success: function(data, textStatus, jqXHR){
                            var retrvData = data.result.data;
                            console.log(retrvData)
}

Хорошо, так пару важных вещей.Переменная q - это запрос, который я отправляю на сервер Gremlin, чтобы вернуть некоторые данные, и выглядит он так:

q = 'nodes = g.V().limit(15).toList();edges = g.V(nodes).aggregate('node').outE().as('edge').inV().where(within('node')).select('edge').toList();[nodes,edges]'

Этот запрос должен по существу возвращать список узлови края.Теперь есть три случая, которые я хочу рассмотреть:

tinkerpop-empty.properties (фактически пустой):

В первом случае используется неизмененный файл tinkerpop-empty.properties.Помните, когда я загрузил это, я получил вывод, который сказал:

[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]

Это означает, что в тинкерграфе не должно быть никакой информации.Я должен получить пустой список.Однако, когда я запускаю свой вызов, я получаю это:

value: Array(2)
0: Array(7)
0: {id: 1, label: "person", type: "vertex"}
1: {id: 2, label: "person", type: "vertex"}
2: {id: 3, label: "software", type: "vertex"}
3: {id: 47284629, label: "person", type: "vertex"}
4: {id: 4, label: "person", type: "vertex"}
5: {id: 5, label: "software", type: "vertex"}
6: {id: 6, label: "person", type: "vertex"}
length: 7
__proto__: Array(0)
1: Array(6)
0: {id: 9, label: "created", inVLabel: "software", outVLabel: "person", inV: 3, …}
1: {id: 7, label: "knows", inVLabel: "person", outVLabel: "person", inV: 2, …}
2: {id: 8, label: "knows", inVLabel: "person", outVLabel: "person", inV: 4, …}
3: {id: 10, label: "created", inVLabel: "software", outVLabel: "person", inV: 5, …}
4: {id: 11, label: "created", inVLabel: "software", outVLabel: "person", inV: 3, …}
5: {id: 12, label: "created", inVLabel: "software", outVLabel: "person", inV: 3, …}
length: 6

Это вывод в консоли разработчика (из console.log (retrvData)).Есть все виды данных.И посмотрите, длина узлов 7, а края 6. Звучит знакомо?Почему Гремлин загружает эти данные?Почему он отправляет его на мой ajax-запрос?

tinkergraph-empty.properties (изменен для использования tinkerpop-crew.json)

Хорошо, что угодно.Давайте запустим следующий properties файл.Помните, что теперь мы используем tinkerpop-crew.json с параметром graphFormat, установленным на graphson.

Я получаю ту же ошибку, что и раньше, конечно, которая java.lang.IllegalArgumentException: Vertex with id already exists: 1.Мой сервер также выключается:

[ERROR] GremlinServer - Gremlin Server was unable to start and will now begin shutdown: Vertex with id already exists: 1
[INFO] GremlinServer - Shutting down OpProcessor[]
[INFO] GremlinServer - Shutting down OpProcessor[session]
[INFO] GremlinServer - Shutting down OpProcessor[traversal]
[INFO] GremlinServer - Shutting down thread pools.
[INFO] GremlinServer - Executing shutdown LifeCycleHook
[INFO] GremlinServer - Closed Graph instance [graph]
[INFO] GremlinServer - Gremlin Server - shutdown complete

Давайте перейдем к моему AJAX-запросу и посмотрим, что мы получим.

Ничего, конечно.Мой сервер gremlin потерпел крах.Похоже, что это может быть загрузка правильного файла, так как журнал INFO говорит A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:6 edges:14], standard].Я не проверял, что это правильно ... это не так просто.

tinkerpop-empty.properties loading tinkerpop-crew2.json

Когда мы впервые запустили tinkerpop-crew2.json, всепрошло хорошо.Мы изменили ID на какой-то странный номер и не получили исключение.Кроме того, график, казалось, загружал правильные вещи.Давайте теперь запустим его снова и изменим идентификатор на 4724729456382.

Хорошо, вау, я набираю это на ходу и посмотрю, что я только что нашел:

{"id":{"@type":"g:Int64","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int64","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int64","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int64","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":2},"value":{"@type":"g:Int32","@value":29}}]}}
{"id":{"@type":"g:Int64","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"g:Int32","@value":7},"outV":{"@type":"g:Int64","@value":1},"properties":{"weight":{"@type":"g:Double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"g:Int64","@value":4},"value":{"@type":"g:Int32","@value":27}}]}}
{"id":{"@type":"g:Int64","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"g:Int32","@value":9},"outV":{"@type":"g:Int64","@value":1},"properties":{"weight":{"@type":"g:Double","@value":0.4}}},{"id":{"@type":"g:Int32","@value":11},"outV":{"@type":"g:Int64","@value":4},"properties":{"weight":{"@type":"g:Double","@value":0.4}}},{"id":{"@type":"g:Int32","@value":12},"outV":{"@type":"g:Int64","@value":6},"properties":{"weight":{"@type":"g:Double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"g:Int64","@value":6},"value":"java"}]}}
{"id":{"@type":"g:Int64","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"g:Int32","@value":8},"outV":{"@type":"g:Int64","@value":1},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"g:Int32","@value":10},"inV":{"@type":"g:Int64","@value":5},"properties":{"weight":{"@type":"g:Double","@value":1.0}}},{"id":{"@type":"g:Int32","@value":11},"inV":{"@type":"g:Int64","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":7},"value":"josh"}],"age":[{"id":{"@type":"g:Int64","@value":8},"value":{"@type":"g:Int32","@value":32}}]}}
{"id":{"@type":"g:Int64","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"g:Int32","@value":10},"outV":{"@type":"g:Int64","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"g:Int64","@value":10},"value":"java"}]}}
{"id":{"@type":"g:Int64","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":12},"inV":{"@type":"g:Int64","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":11},"value":"peter"}],"age":[{"id":{"@type":"g:Int64","@value":12},"value":{"@type":"g:Int32","@value":35}}]}}
{"id":{"@type":"g:Int64","@value":47284629},"label":"person"}

Этотеперь содержимое моего tinkerpop-crew2.json!Что здесь происходит?Почему сервер gremlin записал информацию в этот файл?Если вы видите последнюю строку, она имеет исходное содержимое файла:

{"id":{"@type":"g:Int64","@value":47284629},"label":"person"}

Хорошо, правда, @tinkerpop, какого черта?

Думаю, теперь имеет смысл, почему, когда я запустил файл во второй раз, он снова выдал эту ошибку и сказал, что вершина с идентификатором 1 уже существует!

Весело, я отвлекся!Давайте удалим неоригинальную часть этого файла и просто запустим его с:

{"id":{"@type":"g:Int64","@value":47284629},"label":"person"}

Хорошо, все прошло нормально с правильной информацией, которую я должен ожидать: [INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:1 edges:0], standard].

Теперь давайте запустим этот AJAX-вызов ...

Гах !!То же самое !!

value: Array(2)
0: Array(7)
0: {id: 1, label: "person", type: "vertex"}
1: {id: 2, label: "person", type: "vertex"}
2: {id: 3, label: "software", type: "vertex"}
3: {id: 47284629, label: "person", type: "vertex"}
4: {id: 4, label: "person", type: "vertex"}
5: {id: 5, label: "software", type: "vertex"}
6: {id: 6, label: "person", type: "vertex"}
length: 7
__proto__: Array(0)
1: Array(6)
0: {id: 9, label: "created", inVLabel: "software", outVLabel: "person", inV: 3, …}
1: {id: 7, label: "knows", inVLabel: "person", outVLabel: "person", inV: 2, …}
2: {id: 8, label: "knows", inVLabel: "person", outVLabel: "person", inV: 4, …}
3: {id: 10, label: "created", inVLabel: "software", outVLabel: "person", inV: 5, …}
4: {id: 11, label: "created", inVLabel: "software", outVLabel: "person", inV: 3, …}
5: {id: 12, label: "created", inVLabel: "software", outVLabel: "person", inV: 3, …}
length: 6

Обратите внимание на то, что список узлов имеет длину 7, а ребра имеют длину 6!Предполагая, что он загружает что-то, например, и , добавляющие мой файл, это должно быть длиной узла 8 и длиной ребра 7!Что здесь происходит?

Принятый ответ

Решением было перейти к scripts/generate-modern.groovy и закомментировать следующие строки:

globals << [hook : [
  onStartUp: { ctx ->
    ctx.logger.info("Loading 'modern' graph data.")
      org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory.generateModern(graph)
  }
] as LifeCycleHook]

1 Ответ

2 голосов
/ 24 сентября 2019

Я думаю, что здесь у вас все пойдет не так:

Когда я изменяю папку tinkerpop-empty.properties для загрузки графика, все становится действительно странным.Я собираюсь изменить его следующим образом:

gremlin.graph = org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph gremlin.tinkergraph.vertexIdManager = LONG gremlin.tinkergraph.graphLocation = data / tinkerpop-crew.json gremlin.tinkergraph.graphFormat = graphson

Вы получаете ошибку, которую вы делаете, потому что вам не хватает того факта, что запущен скрипт инициализации Gremlin Server - эта строка в вашем yaml:

https://github.com/apache/tinkerpop/blob/3.4.3/gremlin-server/conf/gremlin-server-rest-modern.yaml

, поэтому он пытается загрузить «современный» график в график, который вы пытаетесь указать в качестве графика «экипажа» (или наоборот, я не могупомните, какие загрузки в первую очередь, но я думаю, что я понял это правильно).Решение заключается в следующем:

  1. Закомментируйте строки, которые загружают "современный" график в ваш scripts/generate-modern.groovy, и сохраните ваш файл свойств как ИЛИ
  2. Измените scripts/generate-modern.groovyСкрипт init, чтобы просто загрузить данные «crew» и оставить файл свойств без изменений, чтобы получить пустой график.

У вас есть длинный список других шансов, которые выглядят странно, но мне интересно, насколькоэто связано с отсутствием файла инициализации и тем, что он делает с вами «за вашей спиной».Помогают ли эти знания решить все ваши проблемы?Если нет, дайте мне знать, что все еще не в порядке, и я могу попытаться помочь решить эту проблему.

...