Библиотека C ++ OrientDB от tglman

Использование библиотеки OrientDB от tglman и попытка запустить пример кода @ https://github.com/tglman/orientdb-c/wiki/Start

https://github.com/tglman/orientdb-c

Я могу подключиться к БД и установить + получить значение в orientDB успешно —

Однако, когда я запускаю запрос, используя o_database_document_query, он не завершает выполнение — вместо этого он просто висит бесконечно.

Как это исправить?

Может быть, возникла какая-то тупиковая ситуация в виде многопоточной библиотеки.

В коде есть такие понятия, как o_engine_get_factory а также o_engine_get_storage, o_database_operation_context …..

Я не очень знаком с этими понятиями или как это работает.

Есть идеи как поступить ???

0

Решение

Я также отладил и обнаружил ту же проблему … исправлена ​​и нажата на github!

1

Другие решения

Я думаю, что вы можете догадаться, кто я (по моему нику)

o_engine_get_factory, o_engine_get_storage, o_database_operation_context

три разные концепции:

o_engine_get_factory: «фабрика соединений», основанная на используемом вами протоколе, теперь только поддерживается восточный «удаленный»

o_engine_get_storage: фабрика для o_storage, который является интерфейсом низкого уровня для экземпляра orient db.

o_datebase_operation_context: высокоуровневый интерфейс с базой данных, используется для управления документами и транзакциями на стороне клиента!

фактическая реализация протокола находится внутри o_storage_remote.c и o_query_engine_remote.c, и я думаю, что вам нужно взглянуть на второй, чтобы попытаться найти что-то о проблеме!

что вы тестируете, можете ли вы привести пример кода, чтобы я мог воспроизвести / отладить !!

тнкс пока

tglman

1

Я обнаружил ошибку. Это происходит при извлечении «метаданных» для записи после запроса: o_database_document_query,

Вот мой тестовый код:

https://gist.github.com/willmoss/6735670

Я поставил отладку сокета ввода / вывода, чтобы вы могли видеть, в чем проблема.

https://gist.github.com/willmoss/6735553

В o_database.c, строка # 290 в функции o_database_metadata () вы создали пустую запись с o_storage_get_metadata_rid ,

https://github.com/tglman/orientdb-c/blob/master/src/o_database.c

Затем на следующей строке вы пытаетесь получить эту пустую запись из базы данных с o_database_load,

Библиотека висит на линии int select_ret = epoll_wait(selector->epoll, events, 1, timeout); — потому что никакая информация не возвращается из БД. Строка № 64.

https://github.com/tglman/orientdb-c/blob/master/src/o_native_socket_selector.c

Если вы посмотрите на поток вывода байтов, который отправляется на сервер после RECORD_LOAD, это просто «0», без данных (см. Последний раздел).

https://gist.github.com/willmoss/6735553

Могу ли я задать вопрос здесь. Как этот код работал для вас? Или, может быть, из-за некоторых изменений в протоколе. Я использую OrientDB Server v1.5.1 (build @BUILD@),

Также — самое главное — как это исправить? : D

Ура!

0
По вопросам рекламы [email protected]