blob: 0c402d42b061a2e5beeb9623de027a1f2ad18983 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file
* Declares ignite::IgniteError class.
*/
#ifndef _IGNITE_IGNITE_ERROR
#define _IGNITE_IGNITE_ERROR
#include <stdint.h>
#include <exception>
#include <sstream>
#include <ignite/common/common.h>
#define IGNITE_ERROR_1(code, part1) { \
std::stringstream stream; \
stream << (part1); \
throw ignite::IgniteError(code, stream.str().c_str()); \
}
#define IGNITE_ERROR_2(code, part1, part2) { \
std::stringstream stream; \
stream << (part1) << (part2); \
throw ignite::IgniteError(code, stream.str().c_str()); \
}
#define IGNITE_ERROR_3(code, part1, part2, part3) { \
std::stringstream stream; \
stream << (part1) << (part2) << (part3); \
throw ignite::IgniteError(code, stream.str().c_str()); \
}
#define IGNITE_ERROR_FORMATTED_1(code, msg, key1, val1) { \
std::stringstream stream; \
stream << msg << " [" << key1 << "=" << (val1) << "]"; \
throw ignite::IgniteError(code, stream.str().c_str()); \
}
#define IGNITE_ERROR_FORMATTED_2(code, msg, key1, val1, key2, val2) { \
std::stringstream stream; \
stream << msg << " [" << key1 << "=" << (val1) << ", " << key2 << "=" << (val2) << "]"; \
throw ignite::IgniteError(code, stream.str().c_str()); \
}
#define IGNITE_ERROR_FORMATTED_3(code, msg, key1, val1, key2, val2, key3, val3) { \
std::stringstream stream; \
stream << msg << " [" << key1 << "=" << (val1) << ", " << key2 << "=" << (val2) << ", " << key3 << "=" << (val3) << "]"; \
throw ignite::IgniteError(code, stream.str().c_str()); \
}
#define IGNITE_ERROR_FORMATTED_4(code, msg, key1, val1, key2, val2, key3, val3, key4, val4) { \
std::stringstream stream; \
stream << msg << " [" << key1 << "=" << (val1) << ", " << key2 << "=" << (val2) << ", " << key3 << "=" << (val3) << ", " << key4 << "=" << (val4) << "]"; \
throw ignite::IgniteError(code, stream.str().c_str()); \
}
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable : 4275)
#endif //_MSC_VER
namespace ignite
{
namespace java
{
/* JNI error constants. */
const int IGNITE_JNI_ERR_SUCCESS = 0;
const int IGNITE_JNI_ERR_GENERIC = 1;
const int IGNITE_JNI_ERR_JVM_INIT = 2;
const int IGNITE_JNI_ERR_JVM_ATTACH = 3;
}
/**
* %Ignite error information.
*/
class IGNITE_IMPORT_EXPORT IgniteError : public std::exception
{
public:
/** Success. */
static const int IGNITE_SUCCESS = 0;
/** Failed to initialize JVM. */
static const int IGNITE_ERR_JVM_INIT = 1;
/** Failed to attach to JVM. */
static const int IGNITE_ERR_JVM_ATTACH = 2;
/** JVM library is not found. */
static const int IGNITE_ERR_JVM_LIB_NOT_FOUND = 3;
/** Failed to load JVM library. */
static const int IGNITE_ERR_JVM_LIB_LOAD_FAILED = 4;
/** JVM classpath is not provided. */
static const int IGNITE_ERR_JVM_NO_CLASSPATH = 5;
/** JVM error: no class definition found. */
static const int IGNITE_ERR_JVM_NO_CLASS_DEF_FOUND = 6;
/** JVM error: no such method. */
static const int IGNITE_ERR_JVM_NO_SUCH_METHOD = 7;
/** Memory operation error. */
static const int IGNITE_ERR_MEMORY = 1001;
/** Binary error. */
static const int IGNITE_ERR_BINARY = 1002;
/** Standard library exception. */
static const int IGNITE_ERR_STD = 1003;
/** Generic %Ignite error. */
static const int IGNITE_ERR_GENERIC = 2000;
/** Illegal argument passed. */
static const int IGNITE_ERR_ILLEGAL_ARGUMENT = 2001;
/** Illegal state. */
static const int IGNITE_ERR_ILLEGAL_STATE = 2002;
/** Unsupported operation. */
static const int IGNITE_ERR_UNSUPPORTED_OPERATION = 2003;
/** Thread has been interrup. */
static const int IGNITE_ERR_INTERRUPTED = 2004;
/** Cluster group is empty. */
static const int IGNITE_ERR_CLUSTER_GROUP_EMPTY = 2005;
/** Cluster topology problem. */
static const int IGNITE_ERR_CLUSTER_TOPOLOGY = 2006;
/** Compute execution rejected. */
static const int IGNITE_ERR_COMPUTE_EXECUTION_REJECTED = 2007;
/** Compute job failover. */
static const int IGNITE_ERR_COMPUTE_JOB_FAILOVER = 2008;
/** Compute task cancelled. */
static const int IGNITE_ERR_COMPUTE_TASK_CANCELLED = 2009;
/** Compute task timeout. */
static const int IGNITE_ERR_COMPUTE_TASK_TIMEOUT = 2010;
/** Compute user undeclared exception. */
static const int IGNITE_ERR_COMPUTE_USER_UNDECLARED_EXCEPTION = 2011;
/** Generic cache error. */
static const int IGNITE_ERR_CACHE = 2012;
/** Generic cache loader error. */
static const int IGNITE_ERR_CACHE_LOADER = 2013;
/** Generic cache writer error. */
static const int IGNITE_ERR_CACHE_WRITER = 2014;
/** Generic cache entry processor error. */
static const int IGNITE_ERR_ENTRY_PROCESSOR = 2015;
/** Cache atomic update timeout. */
static const int IGNITE_ERR_CACHE_ATOMIC_UPDATE_TIMEOUT = 2016;
/** Cache partial update. */
static const int IGNITE_ERR_CACHE_PARTIAL_UPDATE = 2017;
/** Transaction optimisitc exception. */
static const int IGNITE_ERR_TX_OPTIMISTIC = 2018;
/** Transaction timeout. */
static const int IGNITE_ERR_TX_TIMEOUT = 2019;
/** Transaction rollback. */
static const int IGNITE_ERR_TX_ROLLBACK = 2020;
/** Transaction heuristic exception. */
static const int IGNITE_ERR_TX_HEURISTIC = 2021;
/** Authentication error. */
static const int IGNITE_ERR_AUTHENTICATION = 2022;
/** Security error. */
static const int IGNITE_ERR_SECURITY = 2023;
/** Future state error. */
static const int IGNITE_ERR_FUTURE_STATE = 2024;
/** Networking error. */
static const int IGNITE_ERR_NETWORK_FAILURE = 2025;
/** SSL/TLS error. */
static const int IGNITE_ERR_SECURE_CONNECTION_FAILURE = 2026;
/** Transaction already started by current thread. */
static const int IGNITE_ERR_TX_THIS_THREAD = 2027;
/** Generic transaction error. */
static const int IGNITE_ERR_TX = 2028;
/** Unknown error. */
static const int IGNITE_ERR_UNKNOWN = -1;
/**
* Throw an error if code is not IGNITE_SUCCESS.
*
* @param err Error.
*/
static void ThrowIfNeeded(const IgniteError& err);
/**
* Default constructor.
* Creates empty error. Code is IGNITE_SUCCESS and message is NULL.
*/
IgniteError();
/**
* Create error with specific code. Message is set to NULL.
*
* @param code Error code.
*/
IgniteError(const int32_t code);
/**
* Create error with specific code and message.
*
* @param code Error code.
* @param msg Message.
*/
IgniteError(const int32_t code, const char* msg);
/**
* Copy constructor.
*
* @param other Other instance.
*/
IgniteError(const IgniteError& other);
/**
* Assignment operator.
*
* @param other Other instance.
* @return *this.
*/
IgniteError& operator=(const IgniteError& other);
/**
* Destructor.
*/
~IgniteError() IGNITE_NO_THROW;
/**
* Get error code.
*
* @return Error code.
*/
int32_t GetCode() const;
/**
* Get error message.
*
* @return Error message. Can be NULL.
*/
const char* GetText() const IGNITE_NO_THROW;
/**
* Implementation of the standard std::exception::what() method.
* Synonym for GetText() method.
*
* @return Error message string.
*/
virtual const char* what() const IGNITE_NO_THROW;
/**
* Initializes IgniteError instance from the JNI error.
*
* @param jniCode Error code.
* @param jniCls Error class.
* @param jniMsg Error message.
* @param err Error. Can not be NULL.
*/
static void SetError(const int jniCode, const char* jniCls, const char* jniMsg, IgniteError& err);
private:
/** Error code. */
int32_t code;
/** Error message. */
char* msg;
};
}
#ifdef _MSC_VER
# pragma warning(pop)
#endif //_MSC_VER
#endif //_IGNITE_IGNITE_ERROR