From fb73c9c215a453adedc8c4d8bbd7589a6496d4aa Mon Sep 17 00:00:00 2001 From: jonyguo Date: Wed, 17 Jun 2020 21:33:39 +0800 Subject: [PATCH] fix: db close fail --- .../mindrecord/include/shard_index_generator.h | 2 +- .../ccsrc/mindrecord/io/shard_index_generator.cc | 3 ++- mindspore/ccsrc/mindrecord/io/shard_reader.cc | 13 ++++++++++++- mindspore/ccsrc/mindrecord/io/shard_segment.cc | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/mindspore/ccsrc/mindrecord/include/shard_index_generator.h b/mindspore/ccsrc/mindrecord/include/shard_index_generator.h index f91d0f17a76..b081b7a0a01 100644 --- a/mindspore/ccsrc/mindrecord/include/shard_index_generator.h +++ b/mindspore/ccsrc/mindrecord/include/shard_index_generator.h @@ -91,7 +91,7 @@ class ShardIndexGenerator { INDEX_FIELDS GenerateIndexFields(const std::vector &schema_detail); - MSRStatus ExecuteTransaction(const int &shard_no, const std::pair &db, + MSRStatus ExecuteTransaction(const int &shard_no, std::pair &db, const std::vector &raw_page_ids, const std::map &blob_id_to_page_id); MSRStatus CreateShardNameTable(sqlite3 *db, const std::string &shard_name); diff --git a/mindspore/ccsrc/mindrecord/io/shard_index_generator.cc b/mindspore/ccsrc/mindrecord/io/shard_index_generator.cc index f72db49e209..16c730bd4cd 100644 --- a/mindspore/ccsrc/mindrecord/io/shard_index_generator.cc +++ b/mindspore/ccsrc/mindrecord/io/shard_index_generator.cc @@ -514,7 +514,7 @@ INDEX_FIELDS ShardIndexGenerator::GenerateIndexFields(const std::vector &s return {SUCCESS, std::move(fields)}; } -MSRStatus ShardIndexGenerator::ExecuteTransaction(const int &shard_no, const std::pair &db, +MSRStatus ShardIndexGenerator::ExecuteTransaction(const int &shard_no, std::pair &db, const std::vector &raw_page_ids, const std::map &blob_id_to_page_id) { // Add index data to database @@ -556,6 +556,7 @@ MSRStatus ShardIndexGenerator::ExecuteTransaction(const int &shard_no, const std MS_LOG(ERROR) << "Close database failed"; return FAILED; } + db.second = nullptr; return SUCCESS; } diff --git a/mindspore/ccsrc/mindrecord/io/shard_reader.cc b/mindspore/ccsrc/mindrecord/io/shard_reader.cc index 73d297a2af4..6988f4747d2 100644 --- a/mindspore/ccsrc/mindrecord/io/shard_reader.cc +++ b/mindspore/ccsrc/mindrecord/io/shard_reader.cc @@ -115,6 +115,7 @@ MSRStatus ShardReader::Init(const std::vector &file_paths, bool loa MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg; sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; return FAILED; } else { MS_LOG(DEBUG) << "Get " << static_cast(name.size()) << " records from index."; @@ -123,6 +124,7 @@ MSRStatus ShardReader::Init(const std::vector &file_paths, bool loa MS_LOG(ERROR) << "DB file can not match file " << file; sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; return FAILED; } } @@ -220,7 +222,11 @@ void ShardReader::FileStreamsOperator() { } for (int i = static_cast(database_paths_.size()) - 1; i >= 0; --i) { if (database_paths_[i] != nullptr) { - (void)sqlite3_close(database_paths_[i]); + auto ret = sqlite3_close(database_paths_[i]); + if (ret != SQLITE_OK) { + MS_LOG(ERROR) << "Close db failed. Error code: " << ret << "."; + } + database_paths_[i] = nullptr; } } } @@ -348,6 +354,7 @@ MSRStatus ShardReader::ReadAllRowsInShard(int shard_id, const std::string &sql, MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg; sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; return FAILED; } MS_LOG(INFO) << "Get " << static_cast(labels.size()) << " records from shard " << shard_id << " index."; @@ -401,6 +408,7 @@ void ShardReader::GetClassesInShard(sqlite3 *db, int shard_id, const std::string if (ret != SQLITE_OK) { sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; MS_LOG(ERROR) << "Error in select sql statement, sql:" << common::SafeCStr(sql) << ", error: " << errmsg; return; } @@ -525,6 +533,7 @@ std::vector> ShardReader::GetImageOffset(int page_id, int MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg; sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; return std::vector>(); } else { MS_LOG(DEBUG) << "Get " << static_cast(image_offsets.size()) << "records from index."; @@ -664,6 +673,7 @@ std::pair> ShardReader::GetLabelsFromPage( MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg; sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; return {FAILED, {}}; } MS_LOG(DEBUG) << "Get " << label_offsets.size() << "records from index."; @@ -700,6 +710,7 @@ std::pair> ShardReader::GetLabels(int page_id, int MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg; sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; return {FAILED, {}}; } else { MS_LOG(DEBUG) << "Get " << static_cast(labels.size()) << "records from index."; diff --git a/mindspore/ccsrc/mindrecord/io/shard_segment.cc b/mindspore/ccsrc/mindrecord/io/shard_segment.cc index 86c79ca05a0..fb1120b1784 100644 --- a/mindspore/ccsrc/mindrecord/io/shard_segment.cc +++ b/mindspore/ccsrc/mindrecord/io/shard_segment.cc @@ -43,6 +43,7 @@ std::pair> ShardSegment::GetCategoryFields() { MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg; sqlite3_free(errmsg); sqlite3_close(database_paths_[0]); + database_paths_[0] = nullptr; return {FAILED, vector{}}; } else { MS_LOG(INFO) << "Get " << static_cast(field_names.size()) << " records from index."; @@ -53,6 +54,7 @@ std::pair> ShardSegment::GetCategoryFields() { if (field_names[idx].size() < 2) { sqlite3_free(errmsg); sqlite3_close(database_paths_[0]); + database_paths_[0] = nullptr; return {FAILED, vector{}}; } candidate_category_fields_.push_back(field_names[idx][1]); @@ -107,6 +109,7 @@ std::pair>> ShardSegmen MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg; sqlite3_free(errmsg); sqlite3_close(db); + db = nullptr; return {FAILED, std::vector>()}; } else { MS_LOG(INFO) << "Get " << static_cast(field_count.size()) << " records from index.";