Unverified Commit 2780da68 authored by Jin Hai's avatar Jin Hai Committed by GitHub
Browse files

Merge pull request #586 from yhmo/0.6.0

#561 Milvus server should report exception/error message or terminate
parents 53ab0bc1 05655580
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ Please mark all change in change log and use the ticket from JIRA.
- \#533 - NSG build failed with MetricType Inner Product
- \#543 - client raise exception in shards when search results is empty
- \#545 - Avoid dead circle of build index thread when error occurs
- \#561 - Milvus server should report exception/error message or terminate on mysql metadata backend error

## Feature
- \#12 - Pure CPU version for Milvus
+35 −30
Original line number Diff line number Diff line
@@ -290,45 +290,50 @@ MySQLMetaImpl::Initialize() {
    // step 4: validate to avoid open old version schema
    ValidateMetaSchema();

    // step 5: create meta tables
    try {
    // step 5: clean shadow files
    if (mode_ != DBOptions::MODE::CLUSTER_READONLY) {
        CleanUpShadowFiles();
    }

        {
    // step 6: try connect mysql server
    mysqlpp::ScopedConnection connectionPtr(*mysql_connection_pool_, safe_grab_);

    if (connectionPtr == nullptr) {
                return Status(DB_ERROR, "Failed to connect to meta server(mysql)");
        std::string msg = "Failed to connect MySQL meta server: " + uri;
        ENGINE_LOG_ERROR << msg;
        throw Exception(DB_INVALID_META_URI, msg);
    }

    if (!connectionPtr->thread_aware()) {
                ENGINE_LOG_ERROR << "MySQL++ wasn't built with thread awareness! Can't run without it.";
                return Status(DB_ERROR, "MySQL++ wasn't built with thread awareness! Can't run without it.");
        std::string msg =
            "Failed to initialize MySQL meta backend: MySQL client component wasn't built with thread awareness";
        ENGINE_LOG_ERROR << msg;
        throw Exception(DB_INVALID_META_URI, msg);
    }

    // step 7: create meta table Tables
    mysqlpp::Query InitializeQuery = connectionPtr->query();

            InitializeQuery << "CREATE TABLE IF NOT EXISTS " << TABLES_SCHEMA.name() << " ("
                            << TABLES_SCHEMA.ToString() + ");";
    InitializeQuery << "CREATE TABLE IF NOT EXISTS " << TABLES_SCHEMA.name() << " (" << TABLES_SCHEMA.ToString() + ");";

    ENGINE_LOG_DEBUG << "MySQLMetaImpl::Initialize: " << InitializeQuery.str();

    if (!InitializeQuery.exec()) {
                return HandleException("Initialization Error", InitializeQuery.error());
        std::string msg = "Failed to create meta table 'Tables' in MySQL";
        ENGINE_LOG_ERROR << msg;
        throw Exception(DB_META_TRANSACTION_FAILED, msg);
    }

    // step 8: create meta table TableFiles
    InitializeQuery << "CREATE TABLE IF NOT EXISTS " << TABLEFILES_SCHEMA.name() << " ("
                    << TABLEFILES_SCHEMA.ToString() + ");";

    ENGINE_LOG_DEBUG << "MySQLMetaImpl::Initialize: " << InitializeQuery.str();

    if (!InitializeQuery.exec()) {
                return HandleException("Initialization Error", InitializeQuery.error());
            }
        }  // Scoped Connection
    } catch (std::exception& e) {
        return HandleException("GENERAL ERROR DURING INITIALIZATION", e.what());
        std::string msg = "Failed to create meta table 'TableFiles' in MySQL";
        ENGINE_LOG_ERROR << msg;
        throw Exception(DB_META_TRANSACTION_FAILED, msg);
    }

    return Status::OK();