Browse Source

!2250 fix: db close fail when close multi times

Merge pull request !2250 from guozhijian/fix_db_close_fail
tags/v0.5.0-beta
mindspore-ci-bot Gitee 5 years ago
parent
commit
60de9089ba
4 changed files with 18 additions and 3 deletions
  1. +1
    -1
      mindspore/ccsrc/mindrecord/include/shard_index_generator.h
  2. +2
    -1
      mindspore/ccsrc/mindrecord/io/shard_index_generator.cc
  3. +12
    -1
      mindspore/ccsrc/mindrecord/io/shard_reader.cc
  4. +3
    -0
      mindspore/ccsrc/mindrecord/io/shard_segment.cc

+ 1
- 1
mindspore/ccsrc/mindrecord/include/shard_index_generator.h View File

@@ -91,7 +91,7 @@ class ShardIndexGenerator {

INDEX_FIELDS GenerateIndexFields(const std::vector<json> &schema_detail);

MSRStatus ExecuteTransaction(const int &shard_no, const std::pair<MSRStatus, sqlite3 *> &db,
MSRStatus ExecuteTransaction(const int &shard_no, std::pair<MSRStatus, sqlite3 *> &db,
const std::vector<int> &raw_page_ids, const std::map<int, int> &blob_id_to_page_id);

MSRStatus CreateShardNameTable(sqlite3 *db, const std::string &shard_name);


+ 2
- 1
mindspore/ccsrc/mindrecord/io/shard_index_generator.cc View File

@@ -514,7 +514,7 @@ INDEX_FIELDS ShardIndexGenerator::GenerateIndexFields(const std::vector<json> &s
return {SUCCESS, std::move(fields)};
}

MSRStatus ShardIndexGenerator::ExecuteTransaction(const int &shard_no, const std::pair<MSRStatus, sqlite3 *> &db,
MSRStatus ShardIndexGenerator::ExecuteTransaction(const int &shard_no, std::pair<MSRStatus, sqlite3 *> &db,
const std::vector<int> &raw_page_ids,
const std::map<int, int> &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;
}



+ 12
- 1
mindspore/ccsrc/mindrecord/io/shard_reader.cc View File

@@ -115,6 +115,7 @@ MSRStatus ShardReader::Init(const std::vector<std::string> &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<int>(name.size()) << " records from index.";
@@ -123,6 +124,7 @@ MSRStatus ShardReader::Init(const std::vector<std::string> &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<int>(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<int>(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<std::vector<uint64_t>> 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<std::vector<uint64_t>>();
} else {
MS_LOG(DEBUG) << "Get " << static_cast<int>(image_offsets.size()) << "records from index.";
@@ -664,6 +673,7 @@ std::pair<MSRStatus, std::vector<json>> 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<MSRStatus, std::vector<json>> 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<int>(labels.size()) << "records from index.";


+ 3
- 0
mindspore/ccsrc/mindrecord/io/shard_segment.cc View File

@@ -43,6 +43,7 @@ std::pair<MSRStatus, vector<std::string>> 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<std::string>{}};
} else {
MS_LOG(INFO) << "Get " << static_cast<int>(field_names.size()) << " records from index.";
@@ -53,6 +54,7 @@ std::pair<MSRStatus, vector<std::string>> ShardSegment::GetCategoryFields() {
if (field_names[idx].size() < 2) {
sqlite3_free(errmsg);
sqlite3_close(database_paths_[0]);
database_paths_[0] = nullptr;
return {FAILED, vector<std::string>{}};
}
candidate_category_fields_.push_back(field_names[idx][1]);
@@ -107,6 +109,7 @@ std::pair<MSRStatus, std::vector<std::tuple<int, std::string, int>>> ShardSegmen
MS_LOG(ERROR) << "Error in select statement, sql: " << sql << ", error: " << errmsg;
sqlite3_free(errmsg);
sqlite3_close(db);
db = nullptr;
return {FAILED, std::vector<std::tuple<int, std::string, int>>()};
} else {
MS_LOG(INFO) << "Get " << static_cast<int>(field_count.size()) << " records from index.";


Loading…
Cancel
Save