Neptune InternalFailureException: не удается получить присоединяемый из вершины хоста - PullRequest
0 голосов
/ 08 октября 2018

Я использую базу данных графов Нептуна с гремлиновыми запросами через python для хранения адресов в базе данных.Большинство запросов выполняются нормально, но как только я попробую следующий запрос, neptune возвращает исключение внутреннего сбоя:

g.V(address).outE('isPartOf').inV().
  dedup().as_('groupNode').
  inE('isPartOf').outV().dedup().as_('children').
  addE('isPartOf').to(group).
  select('groupNode').drop().
  fold().
  coalesce(__.unfold(), 
           g.V(address).addE('isPartOf').to(group)).next()

Каждый адрес имеет возможность принадлежать группе.когда адрес уже назначен группе, я пытаюсь взять все адреса, назначенные этой группе, и назначить их новой группе, удаляя старую группу.Если адрес еще не назначен группе, я просто хочу немедленно назначить адрес новой группе.

Если я попробую этот запрос сам по себе, все выполнится идеально (хотя это немного медленный запрос).Однако, как только я пытаюсь выполнить этот запрос параллельно на нескольких адресах, этот запрос завершается с ошибкой:

Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 804, in __bootstrap_inner
    self.run()
  File "gremlinExample.py", line 30, in run
    processTx(self.tx, self.g, self.parentBlock)
  File "gremlinExample.py", line 152, in processTx
    g.V(address).outE('isPartOf').inV().dedup().as_('groupNode').inE('isPartOf').outV().dedup().as_('children').select('children').addE('isPartOf').to(group).select('groupNode').drop().fold().coalesce(__.unfold(), g.V(address).addE('isPartOf').to(group)).next()
  File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 70, in next
    return self.__next__()
  File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 43, in __next__
    self.traversal_strategies.apply_strategies(self)
  File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 346, in apply_strategies
    traversal_strategy.apply(traversal)
  File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/driver/remote_connection.py", line 143, in apply
    remote_traversal = self.remote_connection.submit(traversal.bytecode)
  File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py", line 54, in submit
    results = result_set.all().result()
  File "/usr/lib/python2.7/site-packages/concurrent/futures/_base.py", line 405, in result
    return self.__get_result()
  File "/usr/lib/python2.7/site-packages/concurrent/futures/_base.py", line 357, in __get_result
    raise type(self._exception), self._exception, self._traceback
GremlinServerError: 500: {"requestId":"a42015b7-6b22-4bd1-9e7d-e3252e8f3ab6","code":"InternalFailureException","detailedMessage":"Can not get the attachable from the host vertex: v[64b32957-ef71-be47-c8d7-0109cfc4d9fd]-/->neptunegraph[org.apache.commons.configuration.PropertiesConfiguration@6db0f02]"}

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

Извините за плохой английский, это не мой родной язык

1 Ответ

0 голосов
/ 18 июня 2019

Для всех, кто ищет обновление здесь - OP смог решить проблему, заменив .next () на .iterate ().Чтобы лучше понять запрос и данные, потребовались некоторые последующие действия, но ОП отказался от проекта и перешел к другому решению.

...