]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
cassandra: Support configuring heartbeat_interval and idle_timeout
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 9 Jan 2017 15:48:56 +0000 (17:48 +0200)
committerGitLab <gitlab@git.dovecot.net>
Tue, 10 Jan 2017 12:26:48 +0000 (14:26 +0200)
src/lib-sql/driver-cassandra.c

index 64e6064c3a9973dfd68c3da97766234fa3abd97e..843d41ccf750d0d911cb7150cf00b752fdbd4843 100644 (file)
@@ -61,6 +61,7 @@ struct cassandra_db {
        unsigned int num_threads;
        unsigned int connect_timeout_msecs, request_timeout_msecs;
        unsigned int warn_timeout_msecs;
+       unsigned int heartbeat_interval_secs, idle_timeout_secs;
        in_port_t port;
 
        CassCluster *cluster;
@@ -451,6 +452,12 @@ static void driver_cassandra_parse_connect_string(struct cassandra_db *db,
                } else if (strcmp(key, "num_threads") == 0) {
                        if (str_to_uint(value, &db->num_threads) < 0)
                                i_fatal("cassandra: Invalid num_threads: %s", value);
+               } else if (strcmp(key, "heartbeat_interval") == 0) {
+                       if (settings_get_time(value, &db->heartbeat_interval_secs, &error) < 0)
+                               i_fatal("cassandra: Invalid heartbeat_interval '%s': %s", value, error);
+               } else if (strcmp(key, "idle_timeout") == 0) {
+                       if (settings_get_time(value, &db->idle_timeout_secs, &error) < 0)
+                               i_fatal("cassandra: Invalid idle_timeout '%s': %s", value, error);
                } else if (strcmp(key, "connect_timeout") == 0) {
                        if (settings_get_time_msecs(value, &db->connect_timeout_msecs, &error) < 0)
                                i_fatal("cassandra: Invalid connect_timeout '%s': %s", value, error);
@@ -579,6 +586,10 @@ static struct sql_db *driver_cassandra_init_v(const char *connect_string)
                cass_cluster_set_num_threads_io(db->cluster, db->num_threads);
        if (db->latency_aware_routing)
                cass_cluster_set_latency_aware_routing(db->cluster, cass_true);
+       if (db->heartbeat_interval_secs != 0)
+               cass_cluster_set_connection_heartbeat_interval(db->cluster, db->heartbeat_interval_secs);
+       if (db->idle_timeout_secs != 0)
+               cass_cluster_set_connection_idle_timeout(db->cluster, db->idle_timeout_secs);
        db->session = cass_session_new();
        if (db->metrics_path != NULL)
                db->to_metrics = timeout_add(1000, driver_cassandra_metrics_write, db);