]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: driver-cassandra - Extract uncertain ascertainment to function
authorMarkus Valentin <markus.valentin@open-xchange.com>
Thu, 16 Apr 2020 05:32:36 +0000 (07:32 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 27 May 2020 11:08:51 +0000 (11:08 +0000)
src/lib-sql/driver-cassandra.c

index f636da60e7cf9806d93a520c5e1b6bcc7a78c793..22bdb859f0c1d6040d1298b2b2350964e4d2c4c5 100644 (file)
@@ -1136,6 +1136,20 @@ static bool query_error_want_fallback(CassError error)
        }
 }
 
+static enum sql_result_error_type
+driver_cassandra_error_is_uncertain(CassError error)
+{
+       switch (error) {
+       case CASS_ERROR_SERVER_WRITE_FAILURE:
+       case CASS_ERROR_SERVER_WRITE_TIMEOUT:
+       case CASS_ERROR_SERVER_UNAVAILABLE:
+       case CASS_ERROR_LIB_REQUEST_TIMED_OUT:
+               return SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN;
+       default:
+               return SQL_RESULT_ERROR_TYPE_UNKNOWN;
+       }
+}
+
 static void query_callback(CassFuture *future, void *context)
 {
        struct cassandra_result *result = context;
@@ -1155,12 +1169,7 @@ static void query_callback(CassFuture *future, void *context)
                /* Timeouts bring uncertainty whether the query succeeded or
                   not. Also _SERVER_UNAVAILABLE could have actually written
                   enough copies of the data for the query to succeed. */
-               result->api.error_type = error == CASS_ERROR_SERVER_WRITE_TIMEOUT ||
-                       error == CASS_ERROR_SERVER_WRITE_FAILURE ||
-                       error == CASS_ERROR_SERVER_UNAVAILABLE ||
-                       error == CASS_ERROR_LIB_REQUEST_TIMED_OUT ?
-                       SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN :
-                       SQL_RESULT_ERROR_TYPE_UNKNOWN;
+               result->api.error_type = driver_cassandra_error_is_uncertain(error);
                result->error = i_strdup_printf("Query '%s' failed: %.*s (in %u.%03u secs%s)",
                        result->query, (int)errsize, errmsg, msecs/1000, msecs%1000,
                        result->page_num == 0 ? "" : t_strdup_printf(", page %u", result->page_num));