C++ OrientDB library by tglman

C++ OrientDB library by tglman

本文关键字:tglman by library OrientDB C++      更新时间:2023-10-16

使用 tglman 的 OrientDB 库并尝试运行示例代码 @ https://github.com/tglman/orientdb-c/wiki/Start

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

我可以连接到数据库并成功在 orientDB 中设置 + 检索一个值 -

但是,当我使用 o_database_document_query 运行查询时,它不会完成执行 - 相反,它只是无限期挂起。

如何解决这个问题?

也许发生了一些死锁,因为它是一个多线程库。

在代码中,它具有诸如o_engine_get_factoryo_engine_get_storageo_database_operation_context.....

我不太熟悉这些概念或其工作原理。

有什么想法如何进行吗???

我也调试并发现了同样的问题......修复并推送在 GitHub 上!

我想你可以猜到我是谁(从我的昵称(

o_engine_get_factory,o_engine_get_storage,o_database_operation_context

是三个不同的概念:

o_engine_get_factory:是"连接工厂"基于您使用的协议,现在只支持东方"远程">

o_engine_get_storage:是定向数据库实例的低级接口的o_storage的工厂。

o_datebase_operation_context:是与数据库的高级接口,用于管理文档和客户端事务!

该协议的实际实现是在 o_storage_remote.c 和 o_query_engine_remote.c 中,我认为您必须查看第二个协议以尝试发现有关问题的一些内容!

您测试的内容可以给出一些代码示例,以便我可以重现/调试!

TNKS 再见

特格尔曼

我已经找到了错误。在查询后检索记录的"元数据"时,会发生此问题:o_database_document_query

这是我的测试代码:

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

我把套接字输入/输出调试,所以你可以看到问题出在哪里。

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

在 o_database.c 中,函数 o_database_metadata(( 中的 #290 行创建了一个带有 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

干杯!