この RocksDB エラーが何を指しているのか理解できる人はいますか?
/column_family.cc:275: rocksdb::ColumnFamilyData::~ColumnFamilyData(): アサーション `refs_ == 0' が失敗しました。中止 (コアダンプ)
この RocksDB エラーが何を指しているのか理解できる人はいますか?
/column_family.cc:275: rocksdb::ColumnFamilyData::~ColumnFamilyData(): アサーション `refs_ == 0' が失敗しました。中止 (コアダンプ)
これは、RocksDB によって発生するアサーション エラーであり、プログラムの実行を意図的に終了させます。
一般に、プログラマはアサーションを使用して、プログラム内の特定の不変条件を保証します。アサーションには実行時のオーバーヘッドがあるため、完全に無効にすることができます。多くの場合、それらは開発ビルドまたはデバッグ ビルドにコンパイルされますが、運用ビルドでは省略されます。
アサーションが失敗すると、プログラムの実行は を呼び出すことによって意図的に即座に中止されstd::abort
ます。これにより、OS がコア ダンプを書き込む可能性があります (上記のメッセージで明らかになったように) が、コア ダンプが書き込まれるかどうか、およびどこに書き込まれるかは、OS の構成によって異なります。
この特定のアサーションの場合、メンバーの値が 0であるrocksdb::ColumnFamilyData
必要があるため、 のデストラクタがアサーションを発生させました。は参照カウンタであり、オブジェクトのデストラクタが呼び出されたときに参照が実際に保持されていないことをアサートするのは理にかなっています。refs_
refs_
デストラクタ コードを見ただけでは、これが RocksDB ライブラリ自体のバグなのか、それとも間違った方法で使用したために発生したエラーなのか (他のオブジェクトがまだ使用している列ファミリー オブジェクトを破棄するなど) は不明です。
参考までに、アサーションを発生させたコード部分を次に示します (現在、ファイルrocksdb/db/column_family.ccの 365 行目)。
ColumnFamilyData::~ColumnFamilyData() {
assert(refs_.load(std::memory_order_relaxed) == 0);
エラーが続く場合は、ここで RocksDB を使用するコードを提供すると役立つ場合があります。そうしないと、エラーの原因を特定できない場合があります。コア ダンプには、オブジェクトのデストラクタを実際に呼び出したコードのスタック トレースが含まれているため、有用な情報も提供される場合があります。
すべてのcolumn_family.cc
エラー (core_dumped、memory_order_relaxed など) は、rocksdb の不適切なインストール後に発生することに気付きました。私の浮浪者スクリプトで、私は本当の方法を見つけました。
https://github.com/facebook/rocksdb/blob/master/INSTALL.mdを使用する代わりに
私はスクリプトを作成します
cd /opt
git clone https://github.com/facebook/rocksdb.git
cd rocksdb
git checkout tags/v4.1
PORTABLE=1 make shared_lib
export LD_LIBRARY_PATH=/opt/rocksdb
LD_LIBRARY_PATH を環境パス (.bash_rc または /etc/environment) に追加します。