# HG changeset patch # User Timo Sirainen # Date 1500303063 -10800 # Node ID 2fe6e07903f213b6571ded7186af922209600587 # Parent d950ffd7cbe0940d868953130d07ed237c6f057a cassandra: Add wrapper functions in preparation for following commits No functional changes. Shrinks the following commits. diff -r d950ffd7cbe0 -r 2fe6e07903f2 src/lib-sql/driver-cassandra.c --- a/src/lib-sql/driver-cassandra.c Mon Jul 17 17:54:36 2017 +0300 +++ b/src/lib-sql/driver-cassandra.c Mon Jul 17 17:51:03 2017 +0300 @@ -694,12 +694,37 @@ i_unreached(); } +static void driver_cassandra_log_result(struct cassandra_result *result, + long long reply_usecs) +{ + struct cassandra_db *db = (struct cassandra_db *)result->api.db; + struct timeval now; + const char *str; + + if (db->log_level < CASS_LOG_DEBUG && !db->debug_queries && + reply_usecs/1000000 < db->warn_timeout_secs) + return; + + if (gettimeofday(&now, NULL) < 0) + i_fatal("gettimeofday() failed: %m"); + str = t_strdup_printf( + "cassandra: Finished query '%s' (%u rows, %lld+%lld us): %s", + result->query, result->row_count, reply_usecs, + timeval_diff_usecs(&now, &result->finish_time), + result->error != NULL ? result->error : "success"); + + if (reply_usecs/1000000 >= db->warn_timeout_secs) { + db->counters[CASSANDRA_COUNTER_TYPE_QUERY_SLOW]++; + i_warning("%s", str); + } else { + i_debug("%s", str); + } +} + static void driver_cassandra_result_free(struct sql_result *_result) { struct cassandra_db *db = (struct cassandra_db *)_result->db; struct cassandra_result *result = (struct cassandra_result *)_result; - struct timeval now; - const char *str; long long reply_usecs; i_assert(!result->api.callback); @@ -709,22 +734,7 @@ db->sync_result = NULL; reply_usecs = timeval_diff_usecs(&result->finish_time, &result->start_time); - if (db->log_level >= CASS_LOG_DEBUG || db->debug_queries || - reply_usecs/1000000 >= db->warn_timeout_secs) { - if (gettimeofday(&now, NULL) < 0) - i_fatal("gettimeofday() failed: %m"); - str = t_strdup_printf( - "cassandra: Finished query '%s' (%u rows, %lld+%lld us): %s", - result->query, result->row_count, reply_usecs, - timeval_diff_usecs(&now, &result->finish_time), - result->error != NULL ? result->error : "success"); - - if (reply_usecs/1000000 >= db->warn_timeout_secs) { - db->counters[CASSANDRA_COUNTER_TYPE_QUERY_SLOW]++; - i_warning("%s", str); - } else - i_debug("%s", str); - } + driver_cassandra_log_result(result, reply_usecs); if (result->result != NULL) cass_result_free(result->result); @@ -874,19 +884,24 @@ result_finish(result); } +static void driver_cassandra_init_statement(struct cassandra_result *result) +{ + result->statement = cass_statement_new(result->query, 0); + cass_statement_set_consistency(result->statement, result->consistency); + +#ifdef HAVE_CASSANDRA_SPECULATIVE_POLICY + cass_statement_set_is_idempotent(result->statement, cass_true); +#endif +} + static void driver_cassandra_result_send_query(struct cassandra_result *result) { struct cassandra_db *db = (struct cassandra_db *)result->api.db; CassFuture *future; db->counters[CASSANDRA_COUNTER_TYPE_QUERY_SENT]++; - - result->statement = cass_statement_new(result->query, 0); - cass_statement_set_consistency(result->statement, result->consistency); + driver_cassandra_init_statement(result); -#ifdef HAVE_CASSANDRA_SPECULATIVE_POLICY - cass_statement_set_is_idempotent(result->statement, cass_true); -#endif future = cass_session_execute(db->session, result->statement); driver_cassandra_set_callback(future, db, query_callback, result); } @@ -985,24 +1000,35 @@ { } -static void -driver_cassandra_query_full(struct sql_db *_db, const char *query, +static struct cassandra_result * +driver_cassandra_query_init(struct cassandra_db *db, const char *query, enum cassandra_query_type query_type, sql_query_callback_t *callback, void *context) { - struct cassandra_db *db = (struct cassandra_db *)_db; struct cassandra_result *result; result = i_new(struct cassandra_result, 1); result->api = driver_cassandra_result; - result->api.db = _db; + result->api.db = &db->api; result->api.refcount = 1; result->callback = callback; result->context = context; result->query_type = query_type; result->query = i_strdup(query); array_append(&db->results, &result, 1); + return result; +} +static void +driver_cassandra_query_full(struct sql_db *_db, const char *query, + enum cassandra_query_type query_type, + sql_query_callback_t *callback, void *context) +{ + struct cassandra_db *db = (struct cassandra_db *)_db; + struct cassandra_result *result; + + result = driver_cassandra_query_init(db, query, query_type, + callback, context); (void)driver_cassandra_send_query(result); }