0

tglman で OrientDB ライブラリを使用し、サンプル コードを実行しようとしています @ https://github.com/tglman/orientdb-c/wiki/Start

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

DB に接続して、orientDB の値を正常に設定 + 取得できます -

ただし、を使用してクエリを実行すると、o_database_document_query実行が終了せず、無期限にハングします。

これを修正する方法は?

マルチスレッドライブラリとしてデッドロックが発生している可能性があります。

o_engine_get_factoryコードでは、 、o_engine_get_storageo_database_operation_context.....などの概念があります。

私はこれらの概念やその仕組みにあまり詳しくありません。

続行する方法についてのアイデアはありますか???

4

3 に答える 3

1

私もデバッグして同じ問題を発見しました...修正してgithubにプッシュしました!

于 2013-09-29T04:07:49.963 に答える
0

バグを見つけました。クエリの後にレコードの「メタデータ」を取得するときに発生します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

乾杯!

于 2013-09-27T21:36:54.333 に答える