@@ -251,6 +251,13 @@ typedef struct CassPrepared_ CassPrepared;
251251 */
252252typedef struct CassResult_ CassResult ;
253253
254+ /**
255+ * @struct CassErrorResult
256+ *
257+ * A error result of a request
258+ */
259+ typedef struct CassErrorResult_ CassErrorResult ;
260+
254261/**
255262 * @struct CassIterator
256263 *
@@ -338,6 +345,11 @@ typedef struct CassSchemaMetaField_ CassSchemaMetaField;
338345 */
339346typedef struct CassUuidGen_ CassUuidGen ;
340347
348+ /**
349+ * @struct CassRetryPolicy
350+ */
351+ typedef struct CassRetryPolicy_ CassRetryPolicy ;
352+
341353/**
342354 * @struct CassMetrics
343355 *
@@ -391,6 +403,38 @@ typedef enum CassConsistency_ {
391403 CASS_CONSISTENCY_LOCAL_ONE = 0x000A
392404} CassConsistency ;
393405
406+ #define CASS_CONSISTENCY_MAP (XX ) \
407+ XX(CASS_CONSISTENCY_UNKNOWN, "UNKNOWN") \
408+ XX(CASS_CONSISTENCY_ANY, "ANY") \
409+ XX(CASS_CONSISTENCY_ONE, "ONE") \
410+ XX(CASS_CONSISTENCY_TWO, "TWO") \
411+ XX(CASS_CONSISTENCY_THREE, "THREE") \
412+ XX(CASS_CONSISTENCY_QUORUM, "QUORUM") \
413+ XX(CASS_CONSISTENCY_ALL, "ALL") \
414+ XX(CASS_CONSISTENCY_LOCAL_QUORUM, "LOCAL_QUORUM") \
415+ XX(CASS_CONSISTENCY_EACH_QUORUM, "EACH_QUORUM") \
416+ XX(CASS_CONSISTENCY_SERIAL, "SERIAL") \
417+ XX(CASS_CONSISTENCY_LOCAL_SERIAL, "LOCAL_SERIAL") \
418+ XX(CASS_CONSISTENCY_LOCAL_ONE, "LOCAL_ONE")
419+
420+ typedef enum CassWriteType_ {
421+ CASS_WRITE_TYPE_UKNOWN ,
422+ CASS_WRITE_TYPE_SIMPLE ,
423+ CASS_WRITE_TYPE_BATCH ,
424+ CASS_WRITE_TYPE_UNLOGGED_BATCH ,
425+ CASS_WRITE_TYPE_COUNTER ,
426+ CASS_WRITE_TYPE_BATCH_LOG ,
427+ CASS_WRITE_TYPE_CAS
428+ } CassWriteType ;
429+
430+ #define CASS_WRITE_TYPE_MAP (XX ) \
431+ XX(CASS_WRITE_TYPE_SIMPLE, "SIMPLE") \
432+ XX(CASS_WRITE_TYPE_BATCH, "BATCH") \
433+ XX(CASS_WRITE_TYPE_UNLOGGED_BATCH, "UNLOGGED_BATCH") \
434+ XX(CASS_WRITE_TYPE_COUNTER, "COUNTER") \
435+ XX(CASS_WRITE_TYPE_BATCH_LOG, "BATCH_LOG") \
436+ XX(CASS_WRITE_TYPE_CAS, "CAS")
437+
394438typedef enum CassValueType_ {
395439 CASS_VALUE_TYPE_UNKNOWN = 0xFFFF ,
396440 CASS_VALUE_TYPE_CUSTOM = 0x0000 ,
@@ -468,9 +512,9 @@ typedef enum CassLogLevel_ {
468512} CassLogLevel ;
469513
470514typedef enum CassSslVerifyFlags {
471- CASS_SSL_VERIFY_NONE = 0 ,
472- CASS_SSL_VERIFY_PEER_CERT = 1 ,
473- CASS_SSL_VERIFY_PEER_IDENTITY = 2
515+ CASS_SSL_VERIFY_NONE ,
516+ CASS_SSL_VERIFY_PEER_CERT ,
517+ CASS_SSL_VERIFY_PEER_IDENTITY
474518} CassSslVerifyFlags ;
475519
476520typedef enum CassErrorSource_ {
@@ -1156,6 +1200,23 @@ cass_cluster_set_tcp_keepalive(CassCluster* cluster,
11561200 cass_bool_t enabled ,
11571201 unsigned delay_secs );
11581202
1203+ /**
1204+ * Sets the retry policy used for all requests unless overridden by setting
1205+ * a retry policy on a statement.
1206+ *
1207+ * <b>Default:</b> default retry policy.
1208+ *
1209+ * @public @memberof CassCluster
1210+ *
1211+ * @param[in] cluster
1212+ * @param[in] retry_policy
1213+ *
1214+ * @see cass_statement_set_retry_policy()
1215+ */
1216+ CASS_EXPORT void
1217+ cass_cluster_set_retry_policy (CassCluster * cluster ,
1218+ CassRetryPolicy * retry_policy );
1219+
11591220/***********************************************************************************
11601221 *
11611222 * Session
@@ -1776,6 +1837,23 @@ cass_future_wait_timed(CassFuture* future,
17761837CASS_EXPORT const CassResult *
17771838cass_future_get_result (CassFuture * future );
17781839
1840+ /**
1841+ * Gets the error result from a future that failed as a result of a server error. If the
1842+ * future is not ready this method will wait for the future to be set. The first
1843+ * successful call consumes the future, all subsequent calls will return NULL.
1844+ *
1845+ * @public @memberof CassFuture
1846+ *
1847+ * @param[in] future
1848+ * @return CassErrorResult instance if the request failed with a server error,
1849+ * otherwise NULL if the request was sucessful or the failure was not caused by
1850+ * a server error. The return instance must be freed using cass_error_result_free().
1851+ *
1852+ * @see cass_session_execute() and cass_session_execute_batch()
1853+ */
1854+ CASS_EXPORT const CassErrorResult *
1855+ cass_future_get_error_result (CassFuture * future );
1856+
17791857/**
17801858 * Gets the result of a successful future. If the future is not ready this method will
17811859 * wait for the future to be set. The first successful call consumes the future, all
@@ -1987,6 +2065,19 @@ CASS_EXPORT CassError
19872065cass_statement_set_paging_state (CassStatement * statement ,
19882066 const CassResult * result );
19892067
2068+ /**
2069+ * Sets the statement's retry policy.
2070+ *
2071+ * @public @memberof CassStatement
2072+ *
2073+ * @param[in] statement
2074+ * @param[in] retry_policy
2075+ * @return CASS_OK if successful, otherwise an error occurred.
2076+ */
2077+ CASS_EXPORT CassError
2078+ cass_statement_set_retry_policy (CassStatement * statement ,
2079+ CassRetryPolicy * retry_policy );
2080+
19902081/**
19912082 * Binds null to a query or bound statement at the specified index.
19922083 *
@@ -4719,6 +4810,122 @@ cass_result_first_row(const CassResult* result);
47194810CASS_EXPORT cass_bool_t
47204811cass_result_has_more_pages (const CassResult * result );
47214812
4813+ /***********************************************************************************
4814+ *
4815+ * Error result
4816+ *
4817+ ***********************************************************************************/
4818+
4819+ /**
4820+ * Frees an error result instance.
4821+ *
4822+ * @public @memberof CassErrorResult
4823+ *
4824+ * @param[in] result
4825+ */
4826+ CASS_EXPORT void
4827+ cass_error_result_free (const CassErrorResult * error_result );
4828+
4829+ /**
4830+ * Gets error code for the error result. This error code will always
4831+ * have an server error source.
4832+ *
4833+ * @public @memberof CassErrorResult
4834+ *
4835+ * @param[in] error_result
4836+ * @return The server error code
4837+ */
4838+ CASS_EXPORT CassError
4839+ cass_error_result_code (const CassErrorResult * error_result );
4840+
4841+ /**
4842+ * Gets consistency that triggered the error result of the
4843+ * following types:
4844+ *
4845+ * <ul>
4846+ * <li>CASS_ERROR_SERVER_READ_TIMEOUT</li>
4847+ * <li>CASS_ERROR_SERVER_WRITE_TIMEOUT</li>
4848+ * <li>CASS_ERROR_SERVER_UNAVAILABLE</li>
4849+ * </ul>
4850+ *
4851+ * @public @memberof CassErrorResult
4852+ *
4853+ * @param[in] error_result
4854+ * @return The consistency that triggered the error for a read timeout,
4855+ * write timeout or an unavailable error result. Undefined for other
4856+ * error result types.
4857+ */
4858+ CASS_EXPORT CassConsistency
4859+ cass_error_result_consistency (const CassErrorResult * error_result );
4860+
4861+ /**
4862+ * Gets the acutal number of recieved responses, recieved acknowlegements
4863+ * or alive nodes for following error result types, respectively:
4864+ *
4865+ * <ul>
4866+ * <li>CASS_ERROR_SERVER_READ_TIMEOUT</li>
4867+ * <li>CASS_ERROR_SERVER_WRITE_TIMEOUT</li>
4868+ * <li>CASS_ERROR_SERVER_UNAVAILABLE</li>
4869+ * </ul>
4870+ *
4871+ * @public @memberof CassErrorResult
4872+ *
4873+ * @param[in] error_result
4874+ * @return The actual received responses for a read timeout, actual recieved
4875+ * acknowlegements for a write timeout or actual alive nodes for a unavailable
4876+ * error. Undefined for other error result types.
4877+ */
4878+ CASS_EXPORT cass_int32_t
4879+ cass_error_result_actual (const CassErrorResult * error_result );
4880+
4881+ /**
4882+ * Gets required responses, required acknowlegements or required alive nodes
4883+ * needed to successfully complete the request for following error result types,
4884+ * respectively:
4885+ *
4886+ * <ul>
4887+ * <li>CASS_ERROR_SERVER_READ_TIMEOUT</li>
4888+ * <li>CASS_ERROR_SERVER_WRITE_TIMEOUT</li>
4889+ * <li>CASS_ERROR_SERVER_UNAVAILABLE</li>
4890+ * </ul>
4891+ *
4892+ * @public @memberof CassErrorResult
4893+ *
4894+ * @param[in] error_result
4895+ * @return The required responses for a read time, required acknowlegements
4896+ * for a write timeout or required alive nodes for an unavailable error result.
4897+ * Undefined for other error result types.
4898+ */
4899+ CASS_EXPORT cass_int32_t
4900+ cass_error_result_required (const CassErrorResult * error_result );
4901+
4902+
4903+ /**
4904+ * Gets if the data was actually present in the responses from the replicas when
4905+ * the read timed out (CASS_ERROR_SERVER_READ_TIMEOUT).
4906+ *
4907+ * @public @memberof CassErrorResult
4908+ *
4909+ * @param[in] error_result
4910+ * @return cass_true if the data was present in the recieved responses when the
4911+ * read timeout occured. Undefined for other error result types.
4912+ */
4913+ CASS_EXPORT cass_bool_t
4914+ cass_error_result_data_present (const CassErrorResult * error_result );
4915+
4916+ /**
4917+ * Gets the write type of a request when the write timed out
4918+ * (CASS_ERROR_SERVER_WRITE_TIMEOUT).
4919+ *
4920+ * @public @memberof CassErrorResult
4921+ *
4922+ * @param[in] error_result
4923+ * @return The type of the write that timed out. Undefined for
4924+ * other error result types.
4925+ */
4926+ CASS_EXPORT CassWriteType
4927+ cass_error_result_write_type (const CassErrorResult * error_result );
4928+
47224929/***********************************************************************************
47234930 *
47244931 * Iterator
@@ -5489,6 +5696,104 @@ cass_uuid_from_string_n(const char* str,
54895696 size_t str_length ,
54905697 CassUuid * output );
54915698
5699+
5700+ /***********************************************************************************
5701+ *
5702+ * Retry policies
5703+ *
5704+ ***********************************************************************************/
5705+
5706+ /**
5707+ * Creates a new default retry policy.
5708+ *
5709+ * @public @memberof CassRetryPolicy
5710+ *
5711+ * @return Returns a retry policy that must be freed.
5712+ *
5713+ * @see cass_retry_policy_free()
5714+ */
5715+ CASS_EXPORT CassRetryPolicy *
5716+ cass_default_retry_policy_new ();
5717+
5718+ /**
5719+ * Creates a new downgrading consistency retry policy.
5720+ *
5721+ * @public @memberof CassRetryPolicy
5722+ *
5723+ * @return Returns a retry policy that must be freed.
5724+ *
5725+ * @see cass_retry_policy_free()
5726+ */
5727+ CASS_EXPORT CassRetryPolicy *
5728+ cass_downgrading_consistency_retry_policy_new ();
5729+
5730+ /**
5731+ * Creates a new fallthrough retry policy.
5732+ *
5733+ * @public @memberof CassRetryPolicy
5734+ *
5735+ * @return Returns a retry policy that must be freed.
5736+ *
5737+ * @see cass_retry_policy_free()
5738+ */
5739+ CASS_EXPORT CassRetryPolicy *
5740+ cass_fallthrough_retry_policy_new ();
5741+
5742+ /**
5743+ * Creates a new logging retry policy.
5744+ *
5745+ * @public @memberof CassRetryPolicy
5746+ *
5747+ * @param[in] child_retry_policy
5748+ * @return Returns a retry policy that must be freed. NULL is returned if
5749+ * the child_policy is a logging retry policy.
5750+ *
5751+ * @see cass_retry_policy_free()
5752+ */
5753+ CASS_EXPORT CassRetryPolicy *
5754+ cass_logging_retry_policy (CassRetryPolicy * child_retry_policy );
5755+
5756+ /**
5757+ * Frees a retry policy instance.
5758+ *
5759+ * @public @memberof CassRetryPolicy
5760+ *
5761+ * @param[in] policy
5762+ */
5763+ CASS_EXPORT void
5764+ cass_retry_policy_free (CassRetryPolicy * policy );
5765+
5766+ /***********************************************************************************
5767+ *
5768+ * Consistency
5769+ *
5770+ ***********************************************************************************/
5771+
5772+ /**
5773+ * Gets the string for a consistency.
5774+ *
5775+ * @param[in] consistency
5776+ * @return A null-terminated string for the consistency.
5777+ * Example: "ALL", "ONE", "QUORUM", etc.
5778+ */
5779+ CASS_EXPORT const char *
5780+ cass_consistency_string (CassConsistency consistency );
5781+
5782+ /***********************************************************************************
5783+ *
5784+ * Write type
5785+ *
5786+ ***********************************************************************************/
5787+ /**
5788+ * Gets the string for a write type.
5789+ *
5790+ * @param[in] write_type
5791+ * @return A null-terminated string for the write type.
5792+ * Example: "BATCH", "SIMPLE", "COUNTER", etc.
5793+ */
5794+ CASS_EXPORT const char *
5795+ cass_write_type_string (CassWriteType write_type );
5796+
54925797/***********************************************************************************
54935798 *
54945799 * Error
0 commit comments