C++ C++;tglman提供的OrientDB库
tglman使用OrientDB库并尝试运行示例代码@ 我可以连接到数据库并成功设置并检索orientDB中的值- 但是,当我使用C++ C++;tglman提供的OrientDB库,c++,c,orientdb,C++,C,Orientdb,tglman使用OrientDB库并尝试运行示例代码@ 我可以连接到数据库并成功设置并检索orientDB中的值- 但是,当我使用o\u database\u document\u query运行查询时,它并没有完成执行,而是无限期地挂起 如何解决这个问题 由于它是一个多线程库,可能会发生一些死锁 在代码中,它有一些概念,如o_engine\u get_factory和o_engine\u get_storage,o_database\u operation\u context 我不太熟悉这些
o\u database\u document\u query
运行查询时,它并没有完成执行,而是无限期地挂起
如何解决这个问题
由于它是一个多线程库,可能会发生一些死锁
在代码中,它有一些概念,如o_engine\u get_factory
和o_engine\u get_storage
,o_database\u operation\u context
我不太熟悉这些概念,也不太熟悉它们的工作原理
你知道怎么做吗?我想你可以猜出我是谁(从我的昵称) o_engine_get_工厂、o_engine_get_存储、o_数据库_操作_上下文 有三个不同的概念: o_engine_get_factory:是基于您使用的协议的“连接工厂”,现在只支持orient“remote” o_engine_get_storage:是o_存储的工厂,它是orient db实例的低级接口 o_数据库\u操作\u上下文:是与数据库的高级接口,用于管理文档和客户端事务 协议的实际实现在o_storage_remote.c和o_query_engine_remote.c中,我认为您必须查看第二个,以尝试发现有关问题的信息 你能给我一些代码示例吗,这样我就可以复制/调试 再见
tglman我已经找到了漏洞。在查询后检索记录的“元数据”时发生:
o\u数据库\u文档\u查询
以下是我的测试代码:
我将socket输入/输出调试放在这里,以便您可以看到问题所在
在o_database.c中,函数o_database_metadata()中的第290行,您已经用o_storage\u get_metadata\u rid
创建了一条空白记录
然后在下一行,您尝试使用o\u database\u load
从数据库检索此空白记录
库挂起在行int select\u ret=epoll\u wait处(选择器->epoll,事件,1,超时)代码>-因为数据库没有返回任何信息。第64行
如果查看在记录加载后发送到服务器的字节输出流,它只是“0”,没有数据(请参阅最后一节)
我可以在这里问个问题吗。这段代码是如何为您工作的?或者可能是因为协议的一些变化。Im使用的是OrientDB服务器v1.5.1(build@build@)
最重要的是,如何解决这个问题D
干杯 我也进行了调试,发现了同样的问题。。。修复并在github上推送 您好-找到了错误,请看我下面的评论。谢谢,我已经测试过了。看起来它起作用了。顺便说一句,我还提交了一份关于Makefile:D的小改动的PR