diff --git a/cpp/src/db/Exception.h b/cpp/src/db/Exception.h new file mode 100644 index 0000000000..a5b4b4c421 --- /dev/null +++ b/cpp/src/db/Exception.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright 上海赜睿信息科技有限公司(Zilliz) - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited. + * Proprietary and confidential. + ******************************************************************************/ +#pragma once + +#include +#include + +namespace zilliz { +namespace vecwise { +namespace engine { + +class Exception : public std::exception { +public: + Exception(const std::string& message) + : message_(message) { + } + + Exception() + : message_() { + } + + virtual const char* what() const throw() { + if (message_.empty()) { + return "Default Exception."; + } else { + return message_.c_str(); + } + } + + virtual ~Exception() throw() {}; + +protected: + + std::string message_; +}; + +class InvalidArgumentException : public Exception { +public: + InvalidArgumentException() : Exception("Invalid Argument"){}; + InvalidArgumentException(const std::string& message) : Exception(message) {}; +}; + +class OutOfRangeException : public Exception { +public: + OutOfRangeException() : Exception("Out Of Range"){}; + OutOfRangeException(const std::string& message) : Exception(message) {}; +}; + +} // namespace engine +} // namespace vecwise +} // namespace zilliz diff --git a/cpp/src/db/Options.cpp b/cpp/src/db/Options.cpp index 2a15f0722d..dfd6311b61 100644 --- a/cpp/src/db/Options.cpp +++ b/cpp/src/db/Options.cpp @@ -11,6 +11,7 @@ #include "Options.h" #include "Env.h" #include "DBMetaImpl.h" +#include "Exception.h" namespace zilliz { namespace vecwise { @@ -46,24 +47,29 @@ void ArchiveConf::ParseCritirias(const std::string& criterias) { LOG(WARNING) << "Invalid ArchiveConf Criterias: " << token << " Ignore!"; continue; } - auto value = std::stoi(kv[1]); - criterias_[kv[0]] = value; + try { + auto value = std::stoi(kv[1]); + criterias_[kv[0]] = value; + } + catch (std::out_of_range&){ + LOG(ERROR) << "Out of range: '" << kv[1] << "'"; + throw OutOfRangeException(); + } + catch (...){ + LOG(ERROR) << "Invalid argument: '" << kv[1] << "'"; + throw InvalidArgumentException(); + } } } void ArchiveConf::ParseType(const std::string& type) { if (type != "delete" && type != "swap") { - LOG(ERROR) << "Invalid Archive"; - assert(false); + LOG(ERROR) << "Invalid argument: type='" << type << "'"; + throw InvalidArgumentException(); } type_ = type; } -/* DBMetaOptions::DBMetaOptions(const std::string& dbpath, */ -/* const std::string& uri) */ -/* : path(dbpath), backend_uri(uri) { */ -/* } */ - } // namespace engine } // namespace vecwise } // namespace zilliz