Mercurial > dovecot > core-2.2
annotate src/lib-sql/driver-cassandra.c @ 22962:a58d4fd9e20d
cassandra: Fix consistency=quorum to work
Previously it could have been used by setting "consistency=", but this was
an accident.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 17 May 2018 16:29:28 +0300 |
parents | 34315e5fd52e |
children | 91b975cdeb87 |
rev | line source |
---|---|
22713
cb108f786fb4
Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
22617
diff
changeset
|
1 /* Copyright (c) 2015-2018 Dovecot authors, see the included COPYING file */ |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "array.h" |
19072
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
5 #include "hex-binary.h" |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "str.h" |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "ioloop.h" |
19743
26c805d628f8
lib-sql: Allow port to be configured for Cassandra cluster
Michael M Slusarz <michael.slusarz@dovecot.fi>
parents:
19552
diff
changeset
|
8 #include "net.h" |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "write-full.h" |
19150
a72a65771d8c
cassandra: If log_level=debug, log also how long the queries take.
Timo Sirainen <tss@iki.fi>
parents:
19146
diff
changeset
|
10 #include "time-util.h" |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
11 #include "var-expand.h" |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
12 #include "settings-parser.h" |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 #include "sql-api-private.h" |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #ifdef BUILD_CASSANDRA |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
16 #include <fcntl.h> |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 #include <unistd.h> |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 #include <cassandra.h> |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 #define IS_CONNECTED(db) \ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 ((db)->api.state != SQL_DB_STATE_DISCONNECTED && \ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 (db)->api.state != SQL_DB_STATE_CONNECTING) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
24 #define CASSANDRA_FALLBACK_WARN_INTERVAL_SECS 60 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
25 #define CASSANDRA_FALLBACK_FIRST_RETRY_MSECS 50 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
26 #define CASSANDRA_FALLBACK_MAX_RETRY_MSECS (1000*60) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
27 |
20481
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
28 #define CASS_QUERY_DEFAULT_WARN_TIMEOUT_SECS 5 |
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
29 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 typedef void driver_cassandra_callback_t(CassFuture *future, void *context); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
32 enum cassandra_counter_type { |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
33 CASSANDRA_COUNTER_TYPE_QUERY_SENT, |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
34 CASSANDRA_COUNTER_TYPE_QUERY_RECV_OK, |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
35 CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_NO_HOSTS, |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
36 CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_QUEUE_FULL, |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
37 CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_CLIENT_TIMEOUT, |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
38 CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_SERVER_TIMEOUT, |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
39 CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_SERVER_UNAVAILABLE, |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
40 CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_OTHER, |
21844
afa236a944eb
driver-cassandra: Add metric for slow queries
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21829
diff
changeset
|
41 CASSANDRA_COUNTER_TYPE_QUERY_SLOW, |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
42 |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
43 CASSANDRA_COUNTER_COUNT |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
44 }; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
45 static const char *counter_names[CASSANDRA_COUNTER_COUNT] = { |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
46 "sent", |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
47 "recv_ok", |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
48 "recv_err_no_hosts", |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
49 "recv_err_queue_full", |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
50 "recv_err_client_timeout", |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
51 "recv_err_server_timeout", |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
52 "recv_err_server_unavailable", |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
53 "recv_err_other", |
21844
afa236a944eb
driver-cassandra: Add metric for slow queries
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21829
diff
changeset
|
54 "slow", |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
55 }; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
56 |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
57 enum cassandra_query_type { |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
58 CASSANDRA_QUERY_TYPE_READ, |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
59 CASSANDRA_QUERY_TYPE_READ_MORE, |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
60 CASSANDRA_QUERY_TYPE_WRITE, |
22368
faadf17a3baa
cassandra: Fix read/write buffer overflows after adding CASSANDRA_QUERY_TYPE_READ_MORE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22358
diff
changeset
|
61 CASSANDRA_QUERY_TYPE_DELETE, |
faadf17a3baa
cassandra: Fix read/write buffer overflows after adding CASSANDRA_QUERY_TYPE_READ_MORE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22358
diff
changeset
|
62 |
faadf17a3baa
cassandra: Fix read/write buffer overflows after adding CASSANDRA_QUERY_TYPE_READ_MORE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22358
diff
changeset
|
63 CASSANDRA_QUERY_TYPE_COUNT |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
64 }; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
65 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
66 static const char *cassandra_query_type_names[CASSANDRA_QUERY_TYPE_COUNT] = { |
22368
faadf17a3baa
cassandra: Fix read/write buffer overflows after adding CASSANDRA_QUERY_TYPE_READ_MORE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22358
diff
changeset
|
67 "read", "read-more", "write", "delete" |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
68 }; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
69 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 struct cassandra_callback { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 unsigned int id; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 CassFuture *future; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 struct cassandra_db *db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 driver_cassandra_callback_t *callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 void *context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 struct cassandra_db { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 struct sql_db api; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 |
20046
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
81 char *hosts, *keyspace, *user, *password; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
82 CassConsistency read_consistency, write_consistency, delete_consistency; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
83 CassConsistency read_fallback_consistency, write_fallback_consistency, delete_fallback_consistency; |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
84 CassLogLevel log_level; |
20483
80e064878fab
cassandra: Added debug_queries connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20482
diff
changeset
|
85 bool debug_queries; |
20834
426ae3e75ca5
cassandra: Added latency_aware_routing connect-parameter.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20529
diff
changeset
|
86 bool latency_aware_routing; |
19218
e92af8f36ed0
cassandra: Added "version" parameter to specify a protocol version.
Timo Sirainen <tss@iki.fi>
parents:
19216
diff
changeset
|
87 unsigned int protocol_version; |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
88 unsigned int num_threads; |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
89 unsigned int connect_timeout_secs, request_timeout_secs; |
20481
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
90 unsigned int warn_timeout_secs; |
21384
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
91 unsigned int heartbeat_interval_secs, idle_timeout_secs; |
21531
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
92 unsigned int execution_retry_interval_msecs, execution_retry_times; |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
93 unsigned int page_size; |
19743
26c805d628f8
lib-sql: Allow port to be configured for Cassandra cluster
Michael M Slusarz <michael.slusarz@dovecot.fi>
parents:
19552
diff
changeset
|
94 in_port_t port; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 CassCluster *cluster; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 CassSession *session; |
19216
1e4d2306f1f3
cassandra: Use a local monotonic timestamp generator.
Timo Sirainen <tss@iki.fi>
parents:
19153
diff
changeset
|
98 CassTimestampGen *timestamp_gen; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 int fd_pipe[2]; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 struct io *io_pipe; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
102 ARRAY(struct cassandra_sql_prepared_statement *) pending_prepares; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 ARRAY(struct cassandra_callback *) callbacks; |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
104 ARRAY(struct cassandra_result *) results; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 unsigned int callback_ids; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
107 char *metrics_path; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
108 struct timeout *to_metrics; |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
109 uint64_t counters[CASSANDRA_COUNTER_COUNT]; |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
110 |
21829
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
111 struct timeval primary_query_last_sent[CASSANDRA_QUERY_TYPE_COUNT]; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
112 time_t last_fallback_warning[CASSANDRA_QUERY_TYPE_COUNT]; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
113 unsigned int fallback_failures[CASSANDRA_QUERY_TYPE_COUNT]; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
114 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
115 /* for synchronous queries: */ |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 struct ioloop *ioloop, *orig_ioloop; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 struct sql_result *sync_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 char *error; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 struct cassandra_result { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 struct sql_result api; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 CassStatement *statement; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 const CassResult *result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 CassIterator *iterator; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 char *query; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 char *error; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
129 CassConsistency consistency, fallback_consistency; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
130 enum cassandra_query_type query_type; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
131 struct timeval page0_start_time, start_time, finish_time; |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
132 unsigned int row_count, total_row_count, page_num; |
22728
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
133 cass_int64_t timestamp; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 pool_t row_pool; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 ARRAY_TYPE(const_string) fields; |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
137 ARRAY(size_t) field_sizes; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 sql_query_callback_t *callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 void *context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
142 unsigned int is_prepared:1; |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
143 unsigned int query_sent:1; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 unsigned int finished:1; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
145 unsigned int paging_continues:1; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 struct cassandra_transaction_context { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 struct sql_transaction_context ctx; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 int refcount; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
152 sql_commit2_callback_t *callback; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 void *context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
155 struct cassandra_sql_statement *stmt; |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
156 char *query; |
22810
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
157 cass_int64_t query_timestamp; |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
158 char *error; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 unsigned int begin_succeeded:1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 unsigned int begin_failed:1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 unsigned int failed:1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
165 struct cassandra_sql_arg { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
166 unsigned int column_idx; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
167 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
168 char *value_str; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
169 unsigned char *value_binary; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
170 size_t value_binary_size; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
171 int64_t value_int64; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
172 }; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
173 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
174 struct cassandra_sql_statement { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
175 struct sql_statement stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
176 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
177 struct cassandra_sql_prepared_statement *prep; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
178 CassStatement *cass_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
179 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
180 ARRAY(struct cassandra_sql_arg) pending_args; |
22727
37d5a5c7a7b7
cassandra: Rename cassandra_sql_statement.pending_timestamp to just timestamp
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22713
diff
changeset
|
181 cass_int64_t timestamp; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
182 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
183 struct cassandra_result *result; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
184 }; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
185 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
186 struct cassandra_sql_prepared_statement { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
187 struct sql_prepared_statement prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
188 char *query_template; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
189 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
190 /* NULL, until the prepare is asynchronously finished */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
191 const CassPrepared *prepared; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
192 /* statements waiting for prepare to finish */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
193 ARRAY(struct cassandra_sql_statement *) pending_statements; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
194 /* an error here will cause the prepare to be retried on the next |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
195 execution attempt. */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
196 char *error; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
197 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
198 bool pending; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
199 }; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
200 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
201 extern const struct sql_db driver_cassandra_db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 extern const struct sql_result driver_cassandra_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 static struct { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 CassConsistency consistency; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 const char *name; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
207 } cass_consistency_names[] = { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
208 { CASS_CONSISTENCY_ANY, "any" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
209 { CASS_CONSISTENCY_ONE, "one" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 { CASS_CONSISTENCY_TWO, "two" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
211 { CASS_CONSISTENCY_THREE, "three" }, |
22962
a58d4fd9e20d
cassandra: Fix consistency=quorum to work
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22961
diff
changeset
|
212 { CASS_CONSISTENCY_QUORUM, "quorum" }, |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
213 { CASS_CONSISTENCY_ALL, "all" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
214 { CASS_CONSISTENCY_LOCAL_QUORUM, "local-quorum" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
215 { CASS_CONSISTENCY_EACH_QUORUM, "each-quorum" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
216 { CASS_CONSISTENCY_SERIAL, "serial" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
217 { CASS_CONSISTENCY_LOCAL_SERIAL, "local-serial" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
218 { CASS_CONSISTENCY_LOCAL_ONE, "local-one" } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
219 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
220 |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
221 static struct { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
222 CassLogLevel log_level; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
223 const char *name; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
224 } cass_log_level_names[] = { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
225 { CASS_LOG_CRITICAL, "critical" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
226 { CASS_LOG_ERROR, "error" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
227 { CASS_LOG_WARN, "warn" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
228 { CASS_LOG_INFO, "info" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
229 { CASS_LOG_DEBUG, "debug" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
230 { CASS_LOG_TRACE, "trace" } |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
231 }; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
232 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
233 static void driver_cassandra_prepare_pending(struct cassandra_db *db); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
234 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
235 prepare_finish_pending_statements(struct cassandra_sql_prepared_statement *prep_stmt); |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
236 static void driver_cassandra_result_send_query(struct cassandra_result *result); |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
237 static void driver_cassandra_send_queries(struct cassandra_db *db); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
238 static void result_finish(struct cassandra_result *result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
239 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
240 static int consistency_parse(const char *str, CassConsistency *consistency_r) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
241 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
242 unsigned int i; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
243 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
244 for (i = 0; i < N_ELEMENTS(cass_consistency_names); i++) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
245 if (strcmp(cass_consistency_names[i].name, str) == 0) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
246 *consistency_r = cass_consistency_names[i].consistency; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 return 0; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
248 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
249 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
250 return -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
251 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
252 |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
253 static int log_level_parse(const char *str, CassLogLevel *log_level_r) |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
254 { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
255 unsigned int i; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
256 |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
257 for (i = 0; i < N_ELEMENTS(cass_log_level_names); i++) { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
258 if (strcmp(cass_log_level_names[i].name, str) == 0) { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
259 *log_level_r = cass_log_level_names[i].log_level; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
260 return 0; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
261 } |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
262 } |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
263 return -1; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
264 } |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
265 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
266 static void driver_cassandra_set_state(struct cassandra_db *db, enum sql_db_state state) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
267 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
268 /* switch back to original ioloop in case the caller wants to |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
269 add/remove timeouts */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
270 if (db->ioloop != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
271 io_loop_set_current(db->orig_ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
272 sql_db_set_state(&db->api, state); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
273 if (db->ioloop != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
274 io_loop_set_current(db->ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
275 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
276 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
277 static void driver_cassandra_close(struct cassandra_db *db, const char *error) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
278 { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
279 struct cassandra_sql_prepared_statement *const *prep_stmtp; |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
280 struct cassandra_result *const *resultp; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
281 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
282 if (db->io_pipe != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
283 io_remove(&db->io_pipe); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
284 if (db->fd_pipe[0] != -1) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
285 i_close_fd(&db->fd_pipe[0]); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
286 i_close_fd(&db->fd_pipe[1]); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
287 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
288 driver_cassandra_set_state(db, SQL_DB_STATE_DISCONNECTED); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
289 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
290 array_foreach(&db->pending_prepares, prep_stmtp) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
291 (*prep_stmtp)->pending = FALSE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
292 (*prep_stmtp)->error = i_strdup(error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
293 prepare_finish_pending_statements(*prep_stmtp); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
294 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
295 array_clear(&db->pending_prepares); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
296 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
297 while (array_count(&db->results) > 0) { |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
298 resultp = array_idx(&db->results, 0); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
299 if ((*resultp)->error == NULL) |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
300 (*resultp)->error = i_strdup(error); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
301 result_finish(*resultp); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
302 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
303 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
304 if (db->ioloop != NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
305 /* running a sync query, stop it */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
306 io_loop_stop(db->ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
307 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
308 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
309 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
310 static void driver_cassandra_log_error(CassFuture *future, const char *str) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
311 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
312 const char *message; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
313 size_t size; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
314 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
315 cass_future_error_message(future, &message, &size); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
316 i_error("cassandra: %s: %.*s", str, (int)size, message); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
317 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
318 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
319 static void driver_cassandra_future_callback(CassFuture *future ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
320 void *context) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
321 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
322 struct cassandra_callback *cb = context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
323 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
324 /* this isn't the main thread - communicate with main thread by |
21652
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
325 writing the callback id to the pipe. note that we must not use |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
326 almost any dovecot functions here because most of them are using |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
327 data-stack, which isn't thread-safe. especially don't use |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
328 i_error() here. */ |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
329 if (write_full(cb->db->fd_pipe[1], &cb->id, sizeof(cb->id)) < 0) { |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
330 const char *str = t_strdup_printf( |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
331 "cassandra: write(pipe) failed: %s\n", |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
332 strerror(errno)); |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
333 (void)write_full(STDERR_FILENO, str, strlen(str)); |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
334 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
335 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
336 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
337 static void cassandra_callback_run(struct cassandra_callback *cb) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
338 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
339 cb->callback(cb->future, cb->context); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
340 cass_future_free(cb->future); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
341 i_free(cb); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
342 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
343 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
344 static void driver_cassandra_input_id(struct cassandra_db *db, unsigned int id) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
345 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
346 struct cassandra_callback *cb, *const *cbp; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
347 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
348 /* usually there are only a few callbacks, so don't bother with using |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
349 a hash table */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
350 array_foreach(&db->callbacks, cbp) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
351 cb = *cbp; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
352 if (cb->id == id) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
353 array_delete(&db->callbacks, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
354 array_foreach_idx(&db->callbacks, cbp), 1); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
355 cassandra_callback_run(cb); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
356 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
357 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
358 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
359 i_panic("cassandra: Received unknown ID %u", id); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
360 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
361 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
362 static void driver_cassandra_input(struct cassandra_db *db) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
363 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
364 unsigned int ids[1024]; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
365 ssize_t ret; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
366 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
367 ret = read(db->fd_pipe[0], ids, sizeof(ids)); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
368 if (ret < 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
369 i_error("cassandra: read(pipe) failed: %m"); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
370 else if (ret == 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
371 i_error("cassandra: read(pipe) failed: EOF"); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
372 else if (ret % sizeof(ids[0]) != 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
373 i_error("cassandra: read(pipe) returned wrong amount of data"); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
374 else { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
375 /* success */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
376 unsigned int i, count = ret / sizeof(ids[0]); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
377 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
378 for (i = 0; i < count && db->api.state != SQL_DB_STATE_DISCONNECTED; i++) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
379 driver_cassandra_input_id(db, ids[i]); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
380 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
381 } |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
382 driver_cassandra_close(db, "IPC pipe closed"); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
383 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
384 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
385 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
386 driver_cassandra_set_callback(CassFuture *future, struct cassandra_db *db, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
387 driver_cassandra_callback_t *callback, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
388 void *context) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
389 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
390 struct cassandra_callback *cb; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
391 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
392 cb = i_new(struct cassandra_callback, 1); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
393 cb->id = ++db->callback_ids; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
394 cb->future = future; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
395 cb->callback = callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
396 cb->context = context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
397 cb->db = db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
398 array_append(&db->callbacks, &cb, 1); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
399 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
400 cass_future_set_callback(future, driver_cassandra_future_callback, cb); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
401 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
402 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
403 static void connect_callback(CassFuture *future, void *context) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
404 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
405 struct cassandra_db *db = context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
406 CassError rc; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
407 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
408 if ((rc = cass_future_error_code(future)) != CASS_OK) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
409 driver_cassandra_log_error(future, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
410 "Couldn't connect to Cassandra"); |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
411 driver_cassandra_close(db, "Couldn't connect to Cassandra"); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
412 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
413 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
414 driver_cassandra_set_state(db, SQL_DB_STATE_IDLE); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
415 if (db->ioloop != NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
416 /* driver_cassandra_sync_init() waiting for connection to |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
417 finish */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
418 io_loop_stop(db->ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
419 } |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
420 driver_cassandra_prepare_pending(db); |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
421 driver_cassandra_send_queries(db); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
422 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
423 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
424 static int driver_cassandra_connect(struct sql_db *_db) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
425 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
426 struct cassandra_db *db = (struct cassandra_db *)_db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
427 CassFuture *future; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
428 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
429 i_assert(db->api.state == SQL_DB_STATE_DISCONNECTED); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
430 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
431 if (pipe(db->fd_pipe) < 0) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
432 i_error("pipe() failed: %m"); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
433 return -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
434 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
435 db->io_pipe = io_add(db->fd_pipe[0], IO_READ, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
436 driver_cassandra_input, db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
437 driver_cassandra_set_state(db, SQL_DB_STATE_CONNECTING); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
438 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
439 future = cass_session_connect_keyspace(db->session, db->cluster, db->keyspace); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
440 driver_cassandra_set_callback(future, db, connect_callback, db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
441 return 0; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
442 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
443 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
444 static void driver_cassandra_disconnect(struct sql_db *_db) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
445 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
446 struct cassandra_db *db = (struct cassandra_db *)_db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
447 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
448 driver_cassandra_close(db, "Disconnected"); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
449 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
450 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
451 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
452 driver_cassandra_escape_string(struct sql_db *db ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
453 const char *string) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
454 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
455 string_t *escaped; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
456 unsigned int i; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
457 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
458 if (strchr(string, '\'') == NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
459 return string; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
460 escaped = t_str_new(strlen(string)+10); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
461 for (i = 0; string[i] != '\0'; i++) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
462 if (string[i] == '\'') |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
463 str_append_c(escaped, '\''); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
464 str_append_c(escaped, string[i]); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
465 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
466 return str_c(escaped); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
467 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
468 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
469 static void driver_cassandra_parse_connect_string(struct cassandra_db *db, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
470 const char *connect_string) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
471 { |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
472 const char *const *args, *key, *value, *error; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
473 string_t *hosts = t_str_new(64); |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
474 bool read_fallback_set = FALSE, write_fallback_set = FALSE, delete_fallback_set = FALSE; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
475 |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
476 db->log_level = CASS_LOG_WARN; |
19048
7648b127ca37
cassandra: Changed default consistency levels to local-quorum.
Timo Sirainen <tss@iki.fi>
parents:
19047
diff
changeset
|
477 db->read_consistency = CASS_CONSISTENCY_LOCAL_QUORUM; |
7648b127ca37
cassandra: Changed default consistency levels to local-quorum.
Timo Sirainen <tss@iki.fi>
parents:
19047
diff
changeset
|
478 db->write_consistency = CASS_CONSISTENCY_LOCAL_QUORUM; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
479 db->delete_consistency = CASS_CONSISTENCY_LOCAL_QUORUM; |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
480 db->connect_timeout_secs = SQL_CONNECT_TIMEOUT_SECS; |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
481 db->request_timeout_secs = SQL_QUERY_TIMEOUT_SECS; |
20481
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
482 db->warn_timeout_secs = CASS_QUERY_DEFAULT_WARN_TIMEOUT_SECS; |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
483 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
484 args = t_strsplit_spaces(connect_string, " "); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
485 for (; *args != NULL; args++) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
486 value = strchr(*args, '='); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
487 if (value == NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
488 i_fatal("cassandra: Missing value in connect string: %s", |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
489 *args); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
490 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
491 key = t_strdup_until(*args, value++); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
492 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
493 if (strcmp(key, "host") == 0) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
494 if (str_len(hosts) > 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
495 str_append_c(hosts, ','); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
496 str_append(hosts, value); |
19743
26c805d628f8
lib-sql: Allow port to be configured for Cassandra cluster
Michael M Slusarz <michael.slusarz@dovecot.fi>
parents:
19552
diff
changeset
|
497 } else if (strcmp(key, "port") == 0) { |
26c805d628f8
lib-sql: Allow port to be configured for Cassandra cluster
Michael M Slusarz <michael.slusarz@dovecot.fi>
parents:
19552
diff
changeset
|
498 if (net_str2port(value, &db->port) < 0) |
26c805d628f8
lib-sql: Allow port to be configured for Cassandra cluster
Michael M Slusarz <michael.slusarz@dovecot.fi>
parents:
19552
diff
changeset
|
499 i_fatal("cassandra: Invalid port: %s", value); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
500 } else if (strcmp(key, "dbname") == 0 || |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
501 strcmp(key, "keyspace") == 0) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
502 i_free(db->keyspace); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
503 db->keyspace = i_strdup(value); |
20046
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
504 } else if (strcmp(key, "user") == 0) { |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
505 i_free(db->user); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
506 db->user = i_strdup(value); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
507 } else if (strcmp(key, "password") == 0) { |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
508 i_free(db->password); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
509 db->password = i_strdup(value); |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
510 } else if (strcmp(key, "read_consistency") == 0) { |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
511 if (consistency_parse(value, &db->read_consistency) < 0) |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
512 i_fatal("cassandra: Unknown read_consistency: %s", value); |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
513 } else if (strcmp(key, "read_fallback_consistency") == 0) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
514 if (consistency_parse(value, &db->read_fallback_consistency) < 0) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
515 i_fatal("cassandra: Unknown read_fallback_consistency: %s", value); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
516 read_fallback_set = TRUE; |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
517 } else if (strcmp(key, "write_consistency") == 0) { |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
518 if (consistency_parse(value, &db->write_consistency) < 0) |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
519 i_fatal("cassandra: Unknown write_consistency: %s", value); |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
520 } else if (strcmp(key, "write_fallback_consistency") == 0) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
521 if (consistency_parse(value, &db->write_fallback_consistency) < 0) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
522 i_fatal("cassandra: Unknown write_fallback_consistency: %s", value); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
523 write_fallback_set = TRUE; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
524 } else if (strcmp(key, "delete_consistency") == 0) { |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
525 if (consistency_parse(value, &db->delete_consistency) < 0) |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
526 i_fatal("cassandra: Unknown delete_consistency: %s", value); |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
527 } else if (strcmp(key, "delete_fallback_consistency") == 0) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
528 if (consistency_parse(value, &db->delete_fallback_consistency) < 0) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
529 i_fatal("cassandra: Unknown delete_fallback_consistency: %s", value); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
530 delete_fallback_set = TRUE; |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
531 } else if (strcmp(key, "log_level") == 0) { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
532 if (log_level_parse(value, &db->log_level) < 0) |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
533 i_fatal("cassandra: Unknown log_level: %s", value); |
20483
80e064878fab
cassandra: Added debug_queries connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20482
diff
changeset
|
534 } else if (strcmp(key, "debug_queries") == 0) { |
80e064878fab
cassandra: Added debug_queries connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20482
diff
changeset
|
535 db->debug_queries = TRUE; |
20834
426ae3e75ca5
cassandra: Added latency_aware_routing connect-parameter.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20529
diff
changeset
|
536 } else if (strcmp(key, "latency_aware_routing") == 0) { |
426ae3e75ca5
cassandra: Added latency_aware_routing connect-parameter.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20529
diff
changeset
|
537 db->latency_aware_routing = TRUE; |
19218
e92af8f36ed0
cassandra: Added "version" parameter to specify a protocol version.
Timo Sirainen <tss@iki.fi>
parents:
19216
diff
changeset
|
538 } else if (strcmp(key, "version") == 0) { |
e92af8f36ed0
cassandra: Added "version" parameter to specify a protocol version.
Timo Sirainen <tss@iki.fi>
parents:
19216
diff
changeset
|
539 if (str_to_uint(value, &db->protocol_version) < 0) |
e92af8f36ed0
cassandra: Added "version" parameter to specify a protocol version.
Timo Sirainen <tss@iki.fi>
parents:
19216
diff
changeset
|
540 i_fatal("cassandra: Invalid version: %s", value); |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
541 } else if (strcmp(key, "num_threads") == 0) { |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
542 if (str_to_uint(value, &db->num_threads) < 0) |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
543 i_fatal("cassandra: Invalid num_threads: %s", value); |
21384
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
544 } else if (strcmp(key, "heartbeat_interval") == 0) { |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
545 if (settings_get_time(value, &db->heartbeat_interval_secs, &error) < 0) |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
546 i_fatal("cassandra: Invalid heartbeat_interval '%s': %s", value, error); |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
547 } else if (strcmp(key, "idle_timeout") == 0) { |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
548 if (settings_get_time(value, &db->idle_timeout_secs, &error) < 0) |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
549 i_fatal("cassandra: Invalid idle_timeout '%s': %s", value, error); |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
550 } else if (strcmp(key, "connect_timeout") == 0) { |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
551 if (settings_get_time(value, &db->connect_timeout_secs, &error) < 0) |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
552 i_fatal("cassandra: Invalid connect_timeout '%s': %s", value, error); |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
553 } else if (strcmp(key, "request_timeout") == 0) { |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
554 if (settings_get_time(value, &db->request_timeout_secs, &error) < 0) |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
555 i_fatal("cassandra: Invalid request_timeout '%s': %s", value, error); |
20481
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
556 } else if (strcmp(key, "warn_timeout") == 0) { |
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
557 if (settings_get_time(value, &db->warn_timeout_secs, &error) < 0) |
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
558 i_fatal("cassandra: Invalid warn_timeout '%s': %s", value, error); |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
559 } else if (strcmp(key, "metrics") == 0) { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
560 i_free(db->metrics_path); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
561 db->metrics_path = i_strdup(value); |
21531
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
562 } else if (strcmp(key, "execution_retry_interval") == 0) { |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
563 if (settings_get_time_msecs(value, &db->execution_retry_interval_msecs, &error) < 0) |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
564 i_fatal("cassandra: Invalid execution_retry_interval '%s': %s", value, error); |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
565 #ifndef HAVE_CASSANDRA_SPECULATIVE_POLICY |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
566 i_fatal("cassandra: This cassandra version does not support execution_retry_interval"); |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
567 #endif |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
568 } else if (strcmp(key, "execution_retry_times") == 0) { |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
569 if (str_to_uint(value, &db->execution_retry_times) < 0) |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
570 i_fatal("cassandra: Invalid execution_retry_times %s", value); |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
571 #ifndef HAVE_CASSANDRA_SPECULATIVE_POLICY |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
572 i_fatal("cassandra: This cassandra version does not support execution_retry_times"); |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
573 #endif |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
574 } else if (strcmp(key, "page_size") == 0) { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
575 if (str_to_uint(value, &db->page_size) < 0) |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
576 i_fatal("cassandra: Invalid page_size: %s", value); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
577 } else { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
578 i_fatal("cassandra: Unknown connect string: %s", key); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
579 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
580 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
581 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
582 if (!read_fallback_set) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
583 db->read_fallback_consistency = db->read_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
584 if (!write_fallback_set) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
585 db->write_fallback_consistency = db->write_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
586 if (!delete_fallback_set) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
587 db->delete_fallback_consistency = db->delete_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
588 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
589 if (str_len(hosts) == 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
590 i_fatal("cassandra: No hosts given in connect string"); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
591 if (db->keyspace == NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
592 i_fatal("cassandra: No dbname given in connect string"); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
593 db->hosts = i_strdup(str_c(hosts)); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
594 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
595 |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
596 static void |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
597 driver_cassandra_get_metrics_json(struct cassandra_db *db, string_t *dest) |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
598 { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
599 #define ADD_UINT64(_struct, _field) \ |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
600 str_printfa(dest, "\""#_field"\": %llu,", (unsigned long long)metrics._struct._field); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
601 #define ADD_DOUBLE(_struct, _field) \ |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
602 str_printfa(dest, "\""#_field"\": %02lf,", metrics._struct._field); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
603 CassMetrics metrics; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
604 |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
605 cass_session_get_metrics(db->session, &metrics); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
606 str_append(dest, "{ \"requests\": {"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
607 ADD_UINT64(requests, min); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
608 ADD_UINT64(requests, max); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
609 ADD_UINT64(requests, mean); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
610 ADD_UINT64(requests, stddev); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
611 ADD_UINT64(requests, median); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
612 ADD_UINT64(requests, percentile_75th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
613 ADD_UINT64(requests, percentile_95th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
614 ADD_UINT64(requests, percentile_98th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
615 ADD_UINT64(requests, percentile_99th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
616 ADD_UINT64(requests, percentile_999th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
617 ADD_DOUBLE(requests, mean_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
618 ADD_DOUBLE(requests, one_minute_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
619 ADD_DOUBLE(requests, five_minute_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
620 ADD_DOUBLE(requests, fifteen_minute_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
621 str_truncate(dest, str_len(dest)-1); |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
622 |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
623 str_append(dest, "}, \"stats\": {"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
624 ADD_UINT64(stats, total_connections); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
625 ADD_UINT64(stats, available_connections); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
626 ADD_UINT64(stats, exceeded_pending_requests_water_mark); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
627 ADD_UINT64(stats, exceeded_write_bytes_water_mark); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
628 str_truncate(dest, str_len(dest)-1); |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
629 |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
630 str_append(dest, "}, \"errors\": {"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
631 ADD_UINT64(errors, connection_timeouts); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
632 ADD_UINT64(errors, pending_request_timeouts); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
633 ADD_UINT64(errors, request_timeouts); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
634 str_truncate(dest, str_len(dest)-1); |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
635 |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
636 str_append(dest, "}, \"queries\": {"); |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
637 for (unsigned int i = 0; i < CASSANDRA_COUNTER_COUNT; i++) { |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
638 str_printfa(dest, "\"%s\": %llu,", counter_names[i], |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
639 (unsigned long long)db->counters[i]); |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
640 } |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
641 str_truncate(dest, str_len(dest)-1); |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
642 str_append(dest, "}}"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
643 } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
644 |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
645 static void driver_cassandra_metrics_write(struct cassandra_db *db) |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
646 { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
647 struct var_expand_table tab[] = { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
648 { '\0', NULL, NULL } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
649 }; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
650 string_t *path = t_str_new(64); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
651 string_t *data; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
652 int fd; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
653 |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
654 var_expand(path, db->metrics_path, tab); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
655 |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
656 fd = open(str_c(path), O_WRONLY | O_CREAT | O_TRUNC | O_NONBLOCK, 0600); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
657 if (fd == -1) { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
658 i_error("creat(%s) failed: %m", str_c(path)); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
659 return; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
660 } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
661 data = t_str_new(1024); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
662 driver_cassandra_get_metrics_json(db, data); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
663 if (write_full(fd, str_data(data), str_len(data)) < 0) |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
664 i_error("write(%s) failed: %m", str_c(path)); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
665 i_close_fd(&fd); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
666 } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
667 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
668 static struct sql_db *driver_cassandra_init_v(const char *connect_string) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
669 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
670 struct cassandra_db *db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
671 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
672 db = i_new(struct cassandra_db, 1); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
673 db->api = driver_cassandra_db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
674 db->fd_pipe[0] = db->fd_pipe[1] = -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
675 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
676 T_BEGIN { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
677 driver_cassandra_parse_connect_string(db, connect_string); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
678 } T_END; |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
679 cass_log_set_level(db->log_level); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
680 |
22531
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
681 if (db->protocol_version > 0 && db->protocol_version < 4) { |
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
682 /* binding with column indexes requires v4 */ |
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
683 db->api.v.prepared_statement_init = NULL; |
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
684 db->api.v.prepared_statement_deinit = NULL; |
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
685 db->api.v.statement_init_prepared = NULL; |
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
686 } |
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
687 |
19219
8183663ad7c0
cassandra: copy&paste mistake - use monotonic timestamp generator, not server side..
Timo Sirainen <tss@iki.fi>
parents:
19218
diff
changeset
|
688 db->timestamp_gen = cass_timestamp_gen_monotonic_new(); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
689 db->cluster = cass_cluster_new(); |
19216
1e4d2306f1f3
cassandra: Use a local monotonic timestamp generator.
Timo Sirainen <tss@iki.fi>
parents:
19153
diff
changeset
|
690 cass_cluster_set_timestamp_gen(db->cluster, db->timestamp_gen); |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
691 cass_cluster_set_connect_timeout(db->cluster, db->connect_timeout_secs * 1000); |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
692 cass_cluster_set_request_timeout(db->cluster, db->request_timeout_secs * 1000); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
693 cass_cluster_set_contact_points(db->cluster, db->hosts); |
20046
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
694 if (db->user != NULL && db->password != NULL) |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
695 cass_cluster_set_credentials(db->cluster, db->user, db->password); |
19743
26c805d628f8
lib-sql: Allow port to be configured for Cassandra cluster
Michael M Slusarz <michael.slusarz@dovecot.fi>
parents:
19552
diff
changeset
|
696 if (db->port != 0) |
26c805d628f8
lib-sql: Allow port to be configured for Cassandra cluster
Michael M Slusarz <michael.slusarz@dovecot.fi>
parents:
19552
diff
changeset
|
697 cass_cluster_set_port(db->cluster, db->port); |
19218
e92af8f36ed0
cassandra: Added "version" parameter to specify a protocol version.
Timo Sirainen <tss@iki.fi>
parents:
19216
diff
changeset
|
698 if (db->protocol_version != 0) |
e92af8f36ed0
cassandra: Added "version" parameter to specify a protocol version.
Timo Sirainen <tss@iki.fi>
parents:
19216
diff
changeset
|
699 cass_cluster_set_protocol_version(db->cluster, db->protocol_version); |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
700 if (db->num_threads != 0) |
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
701 cass_cluster_set_num_threads_io(db->cluster, db->num_threads); |
20834
426ae3e75ca5
cassandra: Added latency_aware_routing connect-parameter.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20529
diff
changeset
|
702 if (db->latency_aware_routing) |
20999
dbcc7ae05ad0
Compiler warning fixes with -Wstrict-bool
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20834
diff
changeset
|
703 cass_cluster_set_latency_aware_routing(db->cluster, cass_true); |
21384
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
704 if (db->heartbeat_interval_secs != 0) |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
705 cass_cluster_set_connection_heartbeat_interval(db->cluster, db->heartbeat_interval_secs); |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
706 if (db->idle_timeout_secs != 0) |
f0f626fbfc55
cassandra: Support configuring heartbeat_interval and idle_timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21383
diff
changeset
|
707 cass_cluster_set_connection_idle_timeout(db->cluster, db->idle_timeout_secs); |
21531
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
708 #ifdef HAVE_CASSANDRA_SPECULATIVE_POLICY |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
709 if (db->execution_retry_times > 0 && db->execution_retry_interval_msecs > 0) |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
710 cass_cluster_set_constant_speculative_execution_policy(db->cluster, db->execution_retry_interval_msecs, db->execution_retry_times); |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
711 #endif |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
712 db->session = cass_session_new(); |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
713 if (db->metrics_path != NULL) |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
714 db->to_metrics = timeout_add(1000, driver_cassandra_metrics_write, db); |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
715 i_array_init(&db->results, 16); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
716 i_array_init(&db->callbacks, 16); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
717 i_array_init(&db->pending_prepares, 16); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
718 return &db->api; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
719 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
720 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
721 static void driver_cassandra_deinit_v(struct sql_db *_db) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
722 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
723 struct cassandra_db *db = (struct cassandra_db *)_db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
724 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
725 driver_cassandra_close(db, "Deinitialized"); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
726 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
727 i_assert(array_count(&db->callbacks) == 0); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
728 array_free(&db->callbacks); |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
729 i_assert(array_count(&db->results) == 0); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
730 array_free(&db->results); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
731 i_assert(array_count(&db->pending_prepares) == 0); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
732 array_free(&db->pending_prepares); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
733 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
734 cass_session_free(db->session); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
735 cass_cluster_free(db->cluster); |
19216
1e4d2306f1f3
cassandra: Use a local monotonic timestamp generator.
Timo Sirainen <tss@iki.fi>
parents:
19153
diff
changeset
|
736 cass_timestamp_gen_free(db->timestamp_gen); |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
737 if (db->to_metrics != NULL) |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
738 timeout_remove(&db->to_metrics); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
739 i_free(db->metrics_path); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
740 i_free(db->hosts); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
741 i_free(db->error); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
742 i_free(db->keyspace); |
20046
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
743 i_free(db->user); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
744 i_free(db->password); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
745 array_free(&_db->module_contexts); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
746 i_free(db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
747 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
748 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
749 static void driver_cassandra_result_unlink(struct cassandra_db *db, |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
750 struct cassandra_result *result) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
751 { |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
752 struct cassandra_result *const *results; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
753 unsigned int i, count; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
754 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
755 results = array_get(&db->results, &count); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
756 for (i = 0; i < count; i++) { |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
757 if (results[i] == result) { |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
758 array_delete(&db->results, i, 1); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
759 return; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
760 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
761 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
762 i_unreached(); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
763 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
764 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
765 static void driver_cassandra_log_result(struct cassandra_result *result, |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
766 bool all_pages, long long reply_usecs) |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
767 { |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
768 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
769 struct timeval now; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
770 unsigned int row_count; |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
771 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
772 if (db->log_level < CASS_LOG_DEBUG && !db->debug_queries && |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
773 reply_usecs/1000000 < db->warn_timeout_secs) |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
774 return; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
775 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
776 if (gettimeofday(&now, NULL) < 0) |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
777 i_fatal("gettimeofday() failed: %m"); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
778 |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
779 string_t *str = t_str_new(128); |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
780 str_printfa(str, "cassandra: Finished %squery '%s' (", |
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
781 result->is_prepared ? "prepared " : "", result->query); |
22728
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
782 if (result->timestamp != 0) |
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
783 str_printfa(str, "timestamp=%"PRId64", ", result->timestamp); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
784 if (all_pages) { |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
785 str_printfa(str, "%u pages in total, ", result->page_num); |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
786 row_count = result->total_row_count; |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
787 } else { |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
788 if (result->page_num > 0 || result->paging_continues) |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
789 str_printfa(str, "page %u, ", result->page_num); |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
790 row_count = result->row_count; |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
791 } |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
792 str_printfa(str, "%u rows, %lld+%lld us): %s", row_count, reply_usecs, |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
793 timeval_diff_usecs(&now, &result->finish_time), |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
794 result->error != NULL ? result->error : "success"); |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
795 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
796 if (reply_usecs/1000000 >= db->warn_timeout_secs) { |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
797 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_SLOW]++; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
798 i_warning("%s", str_c(str)); |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
799 } else { |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
800 i_debug("%s", str_c(str)); |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
801 } |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
802 } |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
803 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
804 static void driver_cassandra_result_free(struct sql_result *_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
805 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
806 struct cassandra_db *db = (struct cassandra_db *)_result->db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
807 struct cassandra_result *result = (struct cassandra_result *)_result; |
20481
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
808 long long reply_usecs; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
809 |
19056
97ff15e9a7fd
lib-sql: sql_result.free() should never be reached from the query callback.
Timo Sirainen <tss@iki.fi>
parents:
19048
diff
changeset
|
810 i_assert(!result->api.callback); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
811 i_assert(result->callback == NULL); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
812 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
813 if (_result == db->sync_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
814 db->sync_result = NULL; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
815 |
20481
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
816 reply_usecs = timeval_diff_usecs(&result->finish_time, &result->start_time); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
817 driver_cassandra_log_result(result, FALSE, reply_usecs); |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
818 |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
819 if (result->page_num > 0 && !result->paging_continues) { |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
820 /* Multi-page query finishes now. Log a debug/warning summary |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
821 message about it separate from the per-page messages. */ |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
822 reply_usecs = timeval_diff_usecs(&result->finish_time, |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
823 &result->page0_start_time); |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
824 driver_cassandra_log_result(result, TRUE, reply_usecs); |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
825 } |
19152
ffb377cccd22
cassandra: With debugging, log also how long result was used for before it was freed.
Timo Sirainen <tss@iki.fi>
parents:
19151
diff
changeset
|
826 |
18833
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
827 if (result->result != NULL) |
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
828 cass_result_free(result->result); |
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
829 if (result->iterator != NULL) |
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
830 cass_iterator_free(result->iterator); |
19151
7ddc7d2a3036
cassandra: Don't crash if connection to Cassandra failed.
Timo Sirainen <tss@iki.fi>
parents:
19150
diff
changeset
|
831 if (result->statement != NULL) |
7ddc7d2a3036
cassandra: Don't crash if connection to Cassandra failed.
Timo Sirainen <tss@iki.fi>
parents:
19150
diff
changeset
|
832 cass_statement_free(result->statement); |
7ddc7d2a3036
cassandra: Don't crash if connection to Cassandra failed.
Timo Sirainen <tss@iki.fi>
parents:
19150
diff
changeset
|
833 if (result->row_pool != NULL) |
7ddc7d2a3036
cassandra: Don't crash if connection to Cassandra failed.
Timo Sirainen <tss@iki.fi>
parents:
19150
diff
changeset
|
834 pool_unref(&result->row_pool); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
835 i_free(result->query); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
836 i_free(result->error); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
837 i_free(result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
838 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
839 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
840 static void result_finish(struct cassandra_result *result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
841 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
842 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
843 bool free_result = TRUE; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
844 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
845 result->finished = TRUE; |
19152
ffb377cccd22
cassandra: With debugging, log also how long result was used for before it was freed.
Timo Sirainen <tss@iki.fi>
parents:
19151
diff
changeset
|
846 result->finish_time = ioloop_timeval; |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
847 driver_cassandra_result_unlink(db, result); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
848 |
18834
42cdfb0153d9
cassandra: Added extra asserts and sanity checks to make sure query errors are caught.
Timo Sirainen <tss@iki.fi>
parents:
18833
diff
changeset
|
849 i_assert((result->error != NULL) == (result->iterator == NULL)); |
42cdfb0153d9
cassandra: Added extra asserts and sanity checks to make sure query errors are caught.
Timo Sirainen <tss@iki.fi>
parents:
18833
diff
changeset
|
850 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
851 result->api.callback = TRUE; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
852 T_BEGIN { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
853 result->callback(&result->api, result->context); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
854 } T_END; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
855 result->api.callback = FALSE; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
856 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
857 free_result = db->sync_result != &result->api; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
858 if (db->ioloop != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
859 io_loop_stop(db->ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
860 |
19057
0770ab82703d
lib-sql: Debugging help - Added assert before clearing sql_result.callback.
Timo Sirainen <tss@iki.fi>
parents:
19056
diff
changeset
|
861 i_assert(!free_result || result->api.refcount > 0); |
0770ab82703d
lib-sql: Debugging help - Added assert before clearing sql_result.callback.
Timo Sirainen <tss@iki.fi>
parents:
19056
diff
changeset
|
862 result->callback = NULL; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
863 if (free_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
864 sql_result_unref(&result->api); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
865 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
866 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
867 static void query_resend_with_fallback(struct cassandra_result *result) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
868 { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
869 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
870 time_t last_warning = |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
871 ioloop_time - db->last_fallback_warning[result->query_type]; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
872 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
873 if (last_warning >= CASSANDRA_FALLBACK_WARN_INTERVAL_SECS) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
874 i_warning("%s - retrying future %s queries with consistency %s (instead of %s)", |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
875 result->error, cassandra_query_type_names[result->query_type], |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
876 cass_consistency_string(result->fallback_consistency), |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
877 cass_consistency_string(result->consistency)); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
878 db->last_fallback_warning[result->query_type] = ioloop_time; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
879 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
880 i_free_and_null(result->error); |
21829
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
881 db->fallback_failures[result->query_type]++; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
882 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
883 result->consistency = result->fallback_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
884 driver_cassandra_result_send_query(result); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
885 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
886 |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
887 static void counters_inc_error(struct cassandra_db *db, CassError error) |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
888 { |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
889 switch (error) { |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
890 case CASS_ERROR_LIB_NO_HOSTS_AVAILABLE: |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
891 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_NO_HOSTS]++; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
892 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
893 case CASS_ERROR_LIB_REQUEST_QUEUE_FULL: |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
894 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_QUEUE_FULL]++; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
895 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
896 case CASS_ERROR_LIB_REQUEST_TIMED_OUT: |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
897 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_CLIENT_TIMEOUT]++; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
898 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
899 case CASS_ERROR_SERVER_WRITE_TIMEOUT: |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
900 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_SERVER_TIMEOUT]++; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
901 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
902 case CASS_ERROR_SERVER_UNAVAILABLE: |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
903 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_SERVER_UNAVAILABLE]++; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
904 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
905 default: |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
906 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_RECV_ERR_OTHER]++; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
907 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
908 } |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
909 } |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
910 |
22960
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
911 static bool query_error_want_fallback(CassError error) |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
912 { |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
913 switch (error) { |
22961
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
914 case CASS_ERROR_LIB_WRITE_ERROR: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
915 case CASS_ERROR_LIB_REQUEST_TIMED_OUT: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
916 /* Communication problems on client side. Maybe it will work |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
917 with fallback consistency? */ |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
918 return TRUE; |
22960
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
919 case CASS_ERROR_LIB_NO_HOSTS_AVAILABLE: |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
920 /* The client library couldn't connect to enough Cassandra |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
921 nodes. The error message text is the same as for |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
922 CASS_ERROR_SERVER_UNAVAILABLE. */ |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
923 return TRUE; |
22961
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
924 case CASS_ERROR_SERVER_SERVER_ERROR: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
925 case CASS_ERROR_SERVER_OVERLOADED: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
926 case CASS_ERROR_SERVER_IS_BOOTSTRAPPING: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
927 case CASS_ERROR_SERVER_READ_TIMEOUT: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
928 case CASS_ERROR_SERVER_READ_FAILURE: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
929 case CASS_ERROR_SERVER_WRITE_FAILURE: |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
930 /* Servers are having trouble. Maybe with fallback consistency |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
931 we can reach non-troubled servers? */ |
34315e5fd52e
cassandra: Use fallback_consistency on more types of errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22960
diff
changeset
|
932 return TRUE; |
22960
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
933 case CASS_ERROR_SERVER_UNAVAILABLE: |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
934 /* Cassandra server knows that there aren't enough nodes |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
935 available. "All hosts in current policy attempted and were |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
936 either unavailable or failed". */ |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
937 return TRUE; |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
938 case CASS_ERROR_SERVER_WRITE_TIMEOUT: |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
939 /* Cassandra server couldn't reach all the needed nodes. |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
940 This may be because it hasn't yet detected that the servers |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
941 are down, or because the servers are just too busy. We'll |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
942 try the fallback consistency to avoid unnecessary temporary |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
943 errors. */ |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
944 return TRUE; |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
945 default: |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
946 return FALSE; |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
947 } |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
948 } |
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
949 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
950 static void query_callback(CassFuture *future, void *context) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
951 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
952 struct cassandra_result *result = context; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
953 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
954 CassError error = cass_future_error_code(future); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
955 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
956 if (error != CASS_OK) { |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
957 const char *errmsg; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
958 size_t errsize; |
20482
bde406ffe5b2
cassandra: If query fails, include how long the reply took in the error message.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20481
diff
changeset
|
959 int msecs; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
960 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
961 cass_future_error_message(future, &errmsg, &errsize); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
962 i_free(result->error); |
20482
bde406ffe5b2
cassandra: If query fails, include how long the reply took in the error message.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20481
diff
changeset
|
963 |
bde406ffe5b2
cassandra: If query fails, include how long the reply took in the error message.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20481
diff
changeset
|
964 msecs = timeval_diff_msecs(&ioloop_timeval, &result->start_time); |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
965 counters_inc_error(db, error); |
21740
3ce8158b7fd5
cassandra: Treat CASS_ERROR_SERVER_UNAVAILABLE as "write success is uncertain"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21652
diff
changeset
|
966 /* Timeouts bring uncertainty whether the query succeeded or |
3ce8158b7fd5
cassandra: Treat CASS_ERROR_SERVER_UNAVAILABLE as "write success is uncertain"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21652
diff
changeset
|
967 not. Also _SERVER_UNAVAILABLE could have actually written |
3ce8158b7fd5
cassandra: Treat CASS_ERROR_SERVER_UNAVAILABLE as "write success is uncertain"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21652
diff
changeset
|
968 enough copies of the data for the query to succeed. */ |
21272
1be2f1e78975
cassandra: Treat "Request timed out" also as SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20999
diff
changeset
|
969 result->api.error_type = error == CASS_ERROR_SERVER_WRITE_TIMEOUT || |
21740
3ce8158b7fd5
cassandra: Treat CASS_ERROR_SERVER_UNAVAILABLE as "write success is uncertain"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21652
diff
changeset
|
970 error == CASS_ERROR_SERVER_UNAVAILABLE || |
21272
1be2f1e78975
cassandra: Treat "Request timed out" also as SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20999
diff
changeset
|
971 error == CASS_ERROR_LIB_REQUEST_TIMED_OUT ? |
20527
231c1f214d40
cassandra: Support returning SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20483
diff
changeset
|
972 SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN : |
231c1f214d40
cassandra: Support returning SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20483
diff
changeset
|
973 SQL_RESULT_ERROR_TYPE_UNKNOWN; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
974 result->error = i_strdup_printf("Query '%s' failed: %.*s (in %u.%03u secs%s)", |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
975 result->query, (int)errsize, errmsg, msecs/1000, msecs%1000, |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
976 result->page_num == 0 ? "" : t_strdup_printf(", page %u", result->page_num)); |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
977 |
22960
f10330f73af6
cassandra: Cleanup - Move code to query_error_want_fallback()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22811
diff
changeset
|
978 if (query_error_want_fallback(error) && |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
979 result->fallback_consistency != result->consistency) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
980 /* retry with fallback consistency */ |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
981 query_resend_with_fallback(result); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
982 return; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
983 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
984 result_finish(result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
985 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
986 } |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
987 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_RECV_OK]++; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
988 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
989 if (result->fallback_consistency != result->consistency) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
990 /* non-fallback query finished successfully. if there had been |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
991 any fallbacks, reset them. */ |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
992 db->fallback_failures[result->query_type] = 0; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
993 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
994 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
995 result->result = cass_future_get_result(future); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
996 result->iterator = cass_iterator_from_result(result->result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
997 result_finish(result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
998 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
999 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1000 static void driver_cassandra_init_statement(struct cassandra_result *result) |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1001 { |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1002 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1003 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1004 cass_statement_set_consistency(result->statement, result->consistency); |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1005 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1006 #ifdef HAVE_CASSANDRA_SPECULATIVE_POLICY |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1007 cass_statement_set_is_idempotent(result->statement, cass_true); |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1008 #endif |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1009 if (db->page_size > 0) |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1010 cass_statement_set_paging_size(result->statement, db->page_size); |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1011 } |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1012 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1013 static void driver_cassandra_result_send_query(struct cassandra_result *result) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1014 { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1015 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1016 CassFuture *future; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1017 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1018 i_assert(result->statement != NULL); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1019 |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
1020 db->counters[CASSANDRA_COUNTER_TYPE_QUERY_SENT]++; |
22532
10d5c2886b60
cassandra: Fix paged queries to work again
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22531
diff
changeset
|
1021 if (result->query_type != CASSANDRA_QUERY_TYPE_READ_MORE) |
10d5c2886b60
cassandra: Fix paged queries to work again
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22531
diff
changeset
|
1022 driver_cassandra_init_statement(result); |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1023 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1024 future = cass_session_execute(db->session, result->statement); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1025 driver_cassandra_set_callback(future, db, query_callback, result); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1026 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1027 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1028 static bool |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1029 driver_cassandra_want_fallback_query(struct cassandra_result *result) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1030 { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1031 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1032 unsigned int failure_count = db->fallback_failures[result->query_type]; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1033 unsigned int i, msecs = CASSANDRA_FALLBACK_FIRST_RETRY_MSECS; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1034 struct timeval tv; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1035 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1036 if (failure_count == 0) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1037 return FALSE; |
21829
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1038 /* double the retries every time. */ |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1039 for (i = 1; i < failure_count; i++) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1040 msecs *= 2; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1041 if (msecs >= CASSANDRA_FALLBACK_MAX_RETRY_MSECS) { |
21828
8d30f9e1dcc3
cassandra: Fallback consistency fix - max retry interval was set wrong
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21740
diff
changeset
|
1042 msecs = CASSANDRA_FALLBACK_MAX_RETRY_MSECS; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1043 break; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1044 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1045 } |
21829
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1046 /* If last primary query sent timestamp + msecs is older than current |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1047 time, we need to retry the primary query. Note that this practically |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1048 prevents multiple primary queries from being attempted |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1049 simultaneously, because the caller updates primary_query_last_sent |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1050 immediately when returning. |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1051 |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1052 The only time when multiple primary queries can be running in |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1053 parallel is when the earlier query is being slow and hasn't finished |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1054 early enough. This could even be a wanted feature, since while the |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1055 first query might have to wait for a timeout, Cassandra could have |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1056 been fixed in the meantime and the second query finishes |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1057 successfully. */ |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1058 tv = db->primary_query_last_sent[result->query_type]; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1059 timeval_add_msecs(&tv, msecs); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1060 return timeval_cmp(&ioloop_timeval, &tv) < 0; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1061 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1062 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1063 static int driver_cassandra_send_query(struct cassandra_result *result) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1064 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1065 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1066 int ret; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1067 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1068 if (!SQL_DB_IS_READY(&db->api)) { |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1069 if ((ret = sql_connect(&db->api)) <= 0) { |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1070 if (ret < 0) |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1071 driver_cassandra_close(db, "Couldn't connect to Cassandra"); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1072 return ret; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1073 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1074 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1075 |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1076 if (result->page0_start_time.tv_sec == 0) |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1077 result->page0_start_time = ioloop_timeval; |
19150
a72a65771d8c
cassandra: If log_level=debug, log also how long the queries take.
Timo Sirainen <tss@iki.fi>
parents:
19146
diff
changeset
|
1078 result->start_time = ioloop_timeval; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1079 result->row_pool = pool_alloconly_create("cassandra result", 512); |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1080 switch (result->query_type) { |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1081 case CASSANDRA_QUERY_TYPE_READ: |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1082 result->consistency = db->read_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1083 result->fallback_consistency = db->read_fallback_consistency; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1084 break; |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1085 case CASSANDRA_QUERY_TYPE_READ_MORE: |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1086 /* consistency is already set and we don't want to fallback |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1087 at this point anymore. */ |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1088 result->fallback_consistency = result->consistency; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1089 break; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1090 case CASSANDRA_QUERY_TYPE_WRITE: |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1091 result->consistency = db->write_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1092 result->fallback_consistency = db->write_fallback_consistency; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1093 break; |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1094 case CASSANDRA_QUERY_TYPE_DELETE: |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1095 result->consistency = db->delete_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1096 result->fallback_consistency = db->delete_fallback_consistency; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1097 break; |
22368
faadf17a3baa
cassandra: Fix read/write buffer overflows after adding CASSANDRA_QUERY_TYPE_READ_MORE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22358
diff
changeset
|
1098 case CASSANDRA_QUERY_TYPE_COUNT: |
faadf17a3baa
cassandra: Fix read/write buffer overflows after adding CASSANDRA_QUERY_TYPE_READ_MORE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22358
diff
changeset
|
1099 i_unreached(); |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1100 } |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1101 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1102 if (driver_cassandra_want_fallback_query(result)) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1103 result->consistency = result->fallback_consistency; |
21829
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1104 else |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1105 db->primary_query_last_sent[result->query_type] = ioloop_timeval; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1106 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1107 driver_cassandra_result_send_query(result); |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1108 result->query_sent = TRUE; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1109 return 1; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1110 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1111 |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1112 static void driver_cassandra_send_queries(struct cassandra_db *db) |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1113 { |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1114 struct cassandra_result *const *results; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1115 unsigned int i, count; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1116 |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1117 results = array_get(&db->results, &count); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1118 for (i = 0; i < count; i++) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1119 if (!results[i]->query_sent && results[i]->statement != NULL) { |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1120 if (driver_cassandra_send_query(results[i]) <= 0) |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1121 break; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1122 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1123 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1124 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1125 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1126 static void exec_callback(struct sql_result *_result ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1127 void *context ATTR_UNUSED) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1128 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1129 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1130 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1131 static struct cassandra_result * |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1132 driver_cassandra_query_init(struct cassandra_db *db, const char *query, |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1133 enum cassandra_query_type query_type, |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
1134 bool is_prepared, |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1135 sql_query_callback_t *callback, void *context) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1136 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1137 struct cassandra_result *result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1138 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1139 result = i_new(struct cassandra_result, 1); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1140 result->api = driver_cassandra_result; |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1141 result->api.db = &db->api; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1142 result->api.refcount = 1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1143 result->callback = callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1144 result->context = context; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1145 result->query_type = query_type; |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1146 result->query = i_strdup(query); |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
1147 result->is_prepared = is_prepared; |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1148 array_append(&db->results, &result, 1); |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1149 return result; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1150 } |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1151 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1152 static void |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1153 driver_cassandra_query_full(struct sql_db *_db, const char *query, |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1154 enum cassandra_query_type query_type, |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1155 sql_query_callback_t *callback, void *context) |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1156 { |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1157 struct cassandra_db *db = (struct cassandra_db *)_db; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1158 struct cassandra_result *result; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1159 |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
1160 result = driver_cassandra_query_init(db, query, query_type, FALSE, |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1161 callback, context); |
22529
7b17f52b75b6
cassandra: Cleanup - Create statement earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22528
diff
changeset
|
1162 result->statement = cass_statement_new(query, 0); |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1163 (void)driver_cassandra_send_query(result); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1164 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1165 |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1166 static void driver_cassandra_exec(struct sql_db *db, const char *query) |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1167 { |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1168 driver_cassandra_query_full(db, query, CASSANDRA_QUERY_TYPE_WRITE, exec_callback, NULL); |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1169 } |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1170 |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1171 static void driver_cassandra_query(struct sql_db *db, const char *query, |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1172 sql_query_callback_t *callback, void *context) |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1173 { |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1174 driver_cassandra_query_full(db, query, CASSANDRA_QUERY_TYPE_READ, callback, context); |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1175 } |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1176 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1177 static void cassandra_query_s_callback(struct sql_result *result, void *context) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1178 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1179 struct cassandra_db *db = context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1180 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1181 db->sync_result = result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1182 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1183 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1184 static void driver_cassandra_sync_init(struct cassandra_db *db) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1185 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1186 if (sql_connect(&db->api) < 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1187 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1188 db->orig_ioloop = current_ioloop; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1189 db->ioloop = io_loop_create(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1190 if (IS_CONNECTED(db)) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1191 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1192 i_assert(db->api.state == SQL_DB_STATE_CONNECTING); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1193 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1194 db->io_pipe = io_loop_move_io(&db->io_pipe); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1195 /* wait for connecting to finish */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1196 io_loop_run(db->ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1197 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1198 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1199 static void driver_cassandra_sync_deinit(struct cassandra_db *db) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1200 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1201 if (db->orig_ioloop == NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1202 return; |
18648
d71fa3ae930f
lib-sql: Don't crash in Cassandra if connection to it failed.
Timo Sirainen <tss@iki.fi>
parents:
18640
diff
changeset
|
1203 if (db->io_pipe != NULL) { |
d71fa3ae930f
lib-sql: Don't crash in Cassandra if connection to it failed.
Timo Sirainen <tss@iki.fi>
parents:
18640
diff
changeset
|
1204 io_loop_set_current(db->orig_ioloop); |
d71fa3ae930f
lib-sql: Don't crash in Cassandra if connection to it failed.
Timo Sirainen <tss@iki.fi>
parents:
18640
diff
changeset
|
1205 db->io_pipe = io_loop_move_io(&db->io_pipe); |
d71fa3ae930f
lib-sql: Don't crash in Cassandra if connection to it failed.
Timo Sirainen <tss@iki.fi>
parents:
18640
diff
changeset
|
1206 io_loop_set_current(db->ioloop); |
d71fa3ae930f
lib-sql: Don't crash in Cassandra if connection to it failed.
Timo Sirainen <tss@iki.fi>
parents:
18640
diff
changeset
|
1207 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1208 io_loop_destroy(&db->ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1209 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1210 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1211 static struct sql_result * |
22527
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1212 driver_cassandra_sync_query(struct cassandra_db *db, const char *query, |
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1213 enum cassandra_query_type query_type) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1214 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1215 struct sql_result *result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1216 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1217 i_assert(db->sync_result == NULL); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1218 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1219 switch (db->api.state) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1220 case SQL_DB_STATE_CONNECTING: |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1221 case SQL_DB_STATE_BUSY: |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1222 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1223 case SQL_DB_STATE_DISCONNECTED: |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1224 sql_not_connected_result.refcount++; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1225 return &sql_not_connected_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1226 case SQL_DB_STATE_IDLE: |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1227 break; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1228 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1229 |
22527
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1230 driver_cassandra_query_full(&db->api, query, query_type, |
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1231 cassandra_query_s_callback, db); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1232 if (db->sync_result == NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1233 db->io_pipe = io_loop_move_io(&db->io_pipe); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1234 io_loop_run(db->ioloop); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1235 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1236 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1237 result = db->sync_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1238 if (result == &sql_not_connected_result) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1239 /* we don't end up in cassandra's free function, so sync_result |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1240 won't be set to NULL if we don't do it here. */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1241 db->sync_result = NULL; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1242 } else if (result == NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1243 result = &sql_not_connected_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1244 result->refcount++; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1245 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1246 return result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1247 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1248 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1249 static struct sql_result * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1250 driver_cassandra_query_s(struct sql_db *_db, const char *query) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1251 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1252 struct cassandra_db *db = (struct cassandra_db *)_db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1253 struct sql_result *result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1254 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1255 driver_cassandra_sync_init(db); |
22527
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1256 result = driver_cassandra_sync_query(db, query, |
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1257 CASSANDRA_QUERY_TYPE_READ); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1258 driver_cassandra_sync_deinit(db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1259 return result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1260 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1261 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1262 static int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1263 driver_cassandra_get_value(struct cassandra_result *result, |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1264 const CassValue *value, const char **str_r, |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1265 size_t *len_r) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1266 { |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1267 const unsigned char *output; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1268 void *output_dup; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1269 size_t output_size; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1270 CassError rc; |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1271 const char *type; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1272 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1273 if (cass_value_is_null(value)) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1274 *str_r = NULL; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1275 return 0; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1276 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1277 |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1278 switch (cass_data_type_type(cass_value_data_type(value))) { |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1279 case CASS_VALUE_TYPE_INT: { |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1280 cass_int32_t num; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1281 |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1282 rc = cass_value_get_int32(value, &num); |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1283 if (rc == CASS_OK) { |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1284 const char *str = t_strdup_printf("%d", num); |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1285 output_size = strlen(str); |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1286 output = (const void *)str; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1287 } |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1288 type = "int32"; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1289 break; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1290 } |
22617
655f60aa8cf2
cassandra: Support "timestamp" type fields properly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22616
diff
changeset
|
1291 case CASS_VALUE_TYPE_TIMESTAMP: |
21383
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1292 case CASS_VALUE_TYPE_BIGINT: { |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1293 cass_int64_t num; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1294 |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1295 rc = cass_value_get_int64(value, &num); |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1296 if (rc == CASS_OK) { |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1297 const char *str = t_strdup_printf("%lld", (long long)num); |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1298 output_size = strlen(str); |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1299 output = (const void *)str; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1300 } |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1301 type = "int64"; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1302 break; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1303 } |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1304 default: |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1305 rc = cass_value_get_bytes(value, &output, &output_size); |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1306 type = "bytes"; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1307 break; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1308 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1309 if (rc != CASS_OK) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1310 i_free(result->error); |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1311 result->error = i_strdup_printf("Couldn't get value as %s: %s", |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1312 type, cass_error_desc(rc)); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1313 return -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1314 } |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1315 output_dup = p_malloc(result->row_pool, output_size + 1); |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1316 memcpy(output_dup, output, output_size); |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1317 *str_r = output_dup; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1318 *len_r = output_size; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1319 return 0; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1320 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1321 |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1322 static int driver_cassandra_result_next_page(struct cassandra_result *result) |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1323 { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1324 struct cassandra_db *db = (struct cassandra_db *)result->api.db; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1325 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1326 if (db->page_size == 0) { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1327 /* no paging */ |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1328 return 0; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1329 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1330 if (cass_result_has_more_pages(result->result) == cass_false) |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1331 return 0; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1332 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1333 /* callers that don't support sql_query_more() will still get a useful |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1334 error message. */ |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1335 i_free(result->error); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1336 result->error = i_strdup("Paged query has more results, but not supported by the caller"); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1337 return SQL_RESULT_NEXT_MORE; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1338 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1339 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1340 static int driver_cassandra_result_next_row(struct sql_result *_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1341 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1342 struct cassandra_result *result = (struct cassandra_result *)_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1343 const CassRow *row; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1344 const CassValue *value; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1345 const char *str; |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1346 size_t size; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1347 unsigned int i; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1348 int ret = 1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1349 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1350 if (result->iterator == NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1351 return -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1352 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1353 if (!cass_iterator_next(result->iterator)) |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1354 return driver_cassandra_result_next_page(result); |
19153
7fc709a7b5a5
cassandra: With debugging, log also how many rows were iterated.
Timo Sirainen <tss@iki.fi>
parents:
19152
diff
changeset
|
1355 result->row_count++; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1356 result->total_row_count++; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1357 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1358 p_clear(result->row_pool); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1359 p_array_init(&result->fields, result->row_pool, 8); |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1360 p_array_init(&result->field_sizes, result->row_pool, 8); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1361 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1362 row = cass_iterator_get_row(result->iterator); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1363 for (i = 0; (value = cass_row_get_column(row, i)) != NULL; i++) { |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1364 if (driver_cassandra_get_value(result, value, &str, &size) < 0) { |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1365 ret = -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1366 break; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1367 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1368 array_append(&result->fields, &str, 1); |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1369 array_append(&result->field_sizes, &size, 1); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1370 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1371 return ret; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1372 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1373 |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1374 static void |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1375 driver_cassandra_result_more(struct sql_result **_result, bool async, |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1376 sql_query_callback_t *callback, void *context) |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1377 { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1378 struct cassandra_db *db = (struct cassandra_db *)(*_result)->db; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1379 struct cassandra_result *new_result; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1380 struct cassandra_result *old_result = |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1381 (struct cassandra_result *)*_result; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1382 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1383 /* Initialize the next page as a new sql_result */ |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1384 new_result = driver_cassandra_query_init(db, old_result->query, |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1385 CASSANDRA_QUERY_TYPE_READ_MORE, |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
1386 old_result->is_prepared, |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1387 callback, context); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1388 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1389 /* Preserve the statement and update its paging state */ |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1390 new_result->statement = old_result->statement; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1391 old_result->statement = NULL; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1392 cass_statement_set_paging_state(new_result->statement, |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1393 old_result->result); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1394 old_result->paging_continues = TRUE; |
22432
aff38b5d7f1f
cassandra: Fix confusing debug logging for paged query results.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22373
diff
changeset
|
1395 /* The caller did support paging. Clear out the "...not supported by |
aff38b5d7f1f
cassandra: Fix confusing debug logging for paged query results.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22373
diff
changeset
|
1396 the caller" error text, so it won't be in the debug log output. */ |
aff38b5d7f1f
cassandra: Fix confusing debug logging for paged query results.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22373
diff
changeset
|
1397 i_free_and_null(old_result->error); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1398 |
22811
d880c3334a2f
cassandra: Make sure timestamp is always logged (if set) with debug_queries=y
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22810
diff
changeset
|
1399 new_result->timestamp = old_result->timestamp; |
22532
10d5c2886b60
cassandra: Fix paged queries to work again
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22531
diff
changeset
|
1400 new_result->consistency = old_result->consistency; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1401 new_result->page_num = old_result->page_num + 1; |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1402 new_result->page0_start_time = old_result->page0_start_time; |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1403 new_result->total_row_count = old_result->total_row_count; |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1404 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1405 sql_result_unref(*_result); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1406 *_result = NULL; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1407 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1408 if (async) |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1409 (void)driver_cassandra_send_query(new_result); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1410 else { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1411 i_assert(db->api.state == SQL_DB_STATE_IDLE); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1412 driver_cassandra_sync_init(db); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1413 (void)driver_cassandra_send_query(new_result); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1414 if (new_result->result == NULL) { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1415 db->io_pipe = io_loop_move_io(&db->io_pipe); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1416 io_loop_run(db->ioloop); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1417 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1418 driver_cassandra_sync_deinit(db); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1419 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1420 callback(&new_result->api, context); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1421 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1422 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1423 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1424 static unsigned int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1425 driver_cassandra_result_get_fields_count(struct sql_result *_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1426 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1427 struct cassandra_result *result = (struct cassandra_result *)_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1428 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1429 return array_count(&result->fields); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1430 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1431 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1432 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1433 driver_cassandra_result_get_field_name(struct sql_result *_result ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1434 unsigned int idx ATTR_UNUSED) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1435 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1436 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1437 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1438 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1439 static int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1440 driver_cassandra_result_find_field(struct sql_result *_result ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1441 const char *field_name ATTR_UNUSED) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1442 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1443 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1444 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1445 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1446 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1447 driver_cassandra_result_get_field_value(struct sql_result *_result, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1448 unsigned int idx) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1449 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1450 struct cassandra_result *result = (struct cassandra_result *)_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1451 const char *const *strp; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1452 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1453 strp = array_idx(&result->fields, idx); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1454 return *strp; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1455 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1456 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1457 static const unsigned char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1458 driver_cassandra_result_get_field_value_binary(struct sql_result *_result ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1459 unsigned int idx ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1460 size_t *size_r ATTR_UNUSED) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1461 { |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1462 struct cassandra_result *result = (struct cassandra_result *)_result; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1463 const char *const *strp; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1464 const size_t *sizep; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1465 |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1466 strp = array_idx(&result->fields, idx); |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1467 sizep = array_idx(&result->field_sizes, idx); |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1468 *size_r = *sizep; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1469 return (const void *)*strp; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1470 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1471 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1472 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1473 driver_cassandra_result_find_field_value(struct sql_result *result ATTR_UNUSED, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1474 const char *field_name ATTR_UNUSED) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1475 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1476 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1477 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1478 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1479 static const char *const * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1480 driver_cassandra_result_get_values(struct sql_result *_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1481 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1482 struct cassandra_result *result = (struct cassandra_result *)_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1483 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1484 return array_idx(&result->fields, 0); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1485 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1486 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1487 static const char *driver_cassandra_result_get_error(struct sql_result *_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1488 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1489 struct cassandra_result *result = (struct cassandra_result *)_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1490 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1491 if (result->error != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1492 return result->error; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1493 return "FIXME"; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1494 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1495 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1496 static struct sql_transaction_context * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1497 driver_cassandra_transaction_begin(struct sql_db *db) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1498 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1499 struct cassandra_transaction_context *ctx; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1500 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1501 ctx = i_new(struct cassandra_transaction_context, 1); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1502 ctx->ctx.db = db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1503 ctx->refcount = 1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1504 return &ctx->ctx; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1505 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1506 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1507 static void |
18840
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1508 driver_cassandra_transaction_unref(struct cassandra_transaction_context **_ctx) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1509 { |
18840
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1510 struct cassandra_transaction_context *ctx = *_ctx; |
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1511 |
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1512 *_ctx = NULL; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1513 i_assert(ctx->refcount > 0); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1514 if (--ctx->refcount > 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1515 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1516 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1517 i_free(ctx->query); |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1518 i_free(ctx->error); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1519 i_free(ctx); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1520 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1521 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1522 static void |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1523 transaction_set_failed(struct cassandra_transaction_context *ctx, |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1524 const char *error) |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1525 { |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1526 if (ctx->failed) { |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1527 i_assert(ctx->error != NULL); |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1528 } else { |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1529 i_assert(ctx->error == NULL); |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1530 ctx->failed = TRUE; |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1531 ctx->error = i_strdup(error); |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1532 } |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1533 } |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1534 |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1535 static void |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1536 transaction_commit_callback(struct sql_result *result, void *context) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1537 { |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1538 struct cassandra_transaction_context *ctx = context; |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1539 struct sql_commit_result commit_result; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1540 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21384
diff
changeset
|
1541 i_zero(&commit_result); |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1542 if (sql_result_next_row(result) < 0) { |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1543 commit_result.error = sql_result_get_error(result); |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1544 commit_result.error_type = sql_result_get_error_type(result); |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1545 } |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1546 ctx->callback(&commit_result, ctx->context); |
18840
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1547 driver_cassandra_transaction_unref(&ctx); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1548 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1549 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1550 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1551 driver_cassandra_transaction_commit(struct sql_transaction_context *_ctx, |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1552 sql_commit2_callback_t *callback, void *context) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1553 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1554 struct cassandra_transaction_context *ctx = |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1555 (struct cassandra_transaction_context *)_ctx; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1556 struct cassandra_db *db = (struct cassandra_db *)_ctx->db; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1557 enum cassandra_query_type query_type; |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1558 struct sql_commit_result result; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1559 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21384
diff
changeset
|
1560 i_zero(&result); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1561 ctx->callback = callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1562 ctx->context = context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1563 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1564 if (ctx->failed || (ctx->query == NULL && ctx->stmt == NULL)) { |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1565 if (ctx->failed) |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1566 result.error = ctx->error; |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1567 |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1568 callback(&result, context); |
18840
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1569 driver_cassandra_transaction_unref(&ctx); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1570 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1571 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1572 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1573 /* just a single query, send it */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1574 const char *query = ctx->query != NULL ? |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1575 ctx->query : sql_statement_get_query(&ctx->stmt->stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1576 if (strncasecmp(query, "DELETE ", 7) == 0) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1577 query_type = CASSANDRA_QUERY_TYPE_DELETE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1578 else |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1579 query_type = CASSANDRA_QUERY_TYPE_WRITE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1580 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1581 if (ctx->query != NULL) { |
22810
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1582 struct cassandra_result *cass_result; |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1583 |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1584 cass_result = driver_cassandra_query_init(db, query, query_type, |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1585 FALSE, transaction_commit_callback, ctx); |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1586 cass_result->statement = cass_statement_new(query, 0); |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1587 if (ctx->query_timestamp != 0) { |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1588 cass_result->timestamp = ctx->query_timestamp; |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1589 cass_statement_set_timestamp(cass_result->statement, |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1590 ctx->query_timestamp); |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1591 } |
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
1592 (void)driver_cassandra_send_query(cass_result); |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1593 } else { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1594 ctx->stmt->result = |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
1595 driver_cassandra_query_init(db, query, query_type, TRUE, |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1596 transaction_commit_callback, ctx); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1597 if (ctx->stmt->cass_stmt == NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1598 /* wait for prepare to finish */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1599 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1600 ctx->stmt->result->statement = ctx->stmt->cass_stmt; |
22811
d880c3334a2f
cassandra: Make sure timestamp is always logged (if set) with debug_queries=y
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22810
diff
changeset
|
1601 ctx->stmt->result->timestamp = ctx->stmt->timestamp; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1602 (void)driver_cassandra_send_query(ctx->stmt->result); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1603 pool_unref(&ctx->stmt->stmt.pool); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1604 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1605 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1606 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1607 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1608 static void |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1609 driver_cassandra_try_commit_s(struct cassandra_transaction_context *ctx) |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1610 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1611 struct sql_transaction_context *_ctx = &ctx->ctx; |
22527
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1612 struct cassandra_db *db = (struct cassandra_db *)_ctx->db; |
18834
42cdfb0153d9
cassandra: Added extra asserts and sanity checks to make sure query errors are caught.
Timo Sirainen <tss@iki.fi>
parents:
18833
diff
changeset
|
1613 struct sql_result *result = NULL; |
22527
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1614 enum cassandra_query_type query_type; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1615 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1616 /* just a single query, send it */ |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1617 if (strncasecmp(ctx->query, "DELETE ", 7) == 0) |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1618 query_type = CASSANDRA_QUERY_TYPE_DELETE; |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1619 else |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1620 query_type = CASSANDRA_QUERY_TYPE_WRITE; |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1621 driver_cassandra_sync_init(db); |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1622 result = driver_cassandra_sync_query(db, ctx->query, query_type); |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1623 driver_cassandra_sync_deinit(db); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1624 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1625 if (sql_result_next_row(result) < 0) |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1626 transaction_set_failed(ctx, sql_result_get_error(result)); |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1627 sql_result_unref(result); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1628 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1629 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1630 static int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1631 driver_cassandra_transaction_commit_s(struct sql_transaction_context *_ctx, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1632 const char **error_r) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1633 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1634 struct cassandra_transaction_context *ctx = |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1635 (struct cassandra_transaction_context *)_ctx; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1636 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1637 if (ctx->stmt != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1638 /* nothing should be using this - don't bother implementing */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1639 i_panic("cassandra: sql_transaction_commit_s() not supported for prepared statements"); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1640 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1641 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1642 if (ctx->query != NULL && !ctx->failed) |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1643 driver_cassandra_try_commit_s(ctx); |
18848
47fa4a6c6b9a
cassandra: Commit failures returned an already freed error string.
Timo Sirainen <tss@iki.fi>
parents:
18841
diff
changeset
|
1644 *error_r = t_strdup(ctx->error); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1645 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1646 i_assert(ctx->refcount == 1); |
18839
247c6ae2eae4
cassandra: Don't access freed memory when doing an assert-check.
Timo Sirainen <tss@iki.fi>
parents:
18835
diff
changeset
|
1647 i_assert((*error_r != NULL) == ctx->failed); |
18840
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1648 driver_cassandra_transaction_unref(&ctx); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1649 return *error_r == NULL ? 0 : -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1650 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1651 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1652 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1653 driver_cassandra_transaction_rollback(struct sql_transaction_context *_ctx) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1654 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1655 struct cassandra_transaction_context *ctx = |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1656 (struct cassandra_transaction_context *)_ctx; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1657 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1658 i_assert(ctx->refcount == 1); |
18840
34943b67e01f
cassandra: Minor code cleanup to make sure we don't try to access freed transaction memory.
Timo Sirainen <tss@iki.fi>
parents:
18839
diff
changeset
|
1659 driver_cassandra_transaction_unref(&ctx); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1660 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1661 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1662 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1663 driver_cassandra_update(struct sql_transaction_context *_ctx, const char *query, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1664 unsigned int *affected_rows) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1665 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1666 struct cassandra_transaction_context *ctx = |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1667 (struct cassandra_transaction_context *)_ctx; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1668 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1669 i_assert(affected_rows == NULL); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1670 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1671 if (ctx->query != NULL || ctx->stmt != NULL) { |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1672 transaction_set_failed(ctx, "Multiple changes in transaction not supported"); |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1673 return; |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1674 } |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1675 ctx->query = i_strdup(query); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1676 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1677 |
19072
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1678 static const char * |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1679 driver_cassandra_escape_blob(struct sql_db *_db ATTR_UNUSED, |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1680 const unsigned char *data, size_t size) |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1681 { |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1682 string_t *str = t_str_new(128); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1683 |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1684 str_append(str, "0x"); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1685 binary_to_hex_append(str, data, size); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1686 return str_c(str); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1687 } |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1688 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1689 static CassError |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1690 driver_cassandra_bind_int(struct cassandra_sql_statement *stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1691 unsigned int column_idx, int64_t value) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1692 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1693 const CassDataType *data_type; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1694 CassValueType value_type; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1695 |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1696 i_assert(stmt->prep != NULL); |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1697 |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1698 /* statements require exactly correct value type */ |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1699 data_type = cass_prepared_parameter_data_type(stmt->prep->prepared, column_idx); |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1700 value_type = cass_data_type_type(data_type); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1701 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1702 switch (value_type) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1703 case CASS_VALUE_TYPE_INT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1704 if (value < -2147483648 || value > 2147483647) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1705 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1706 return cass_statement_bind_int32(stmt->cass_stmt, column_idx, value); |
22617
655f60aa8cf2
cassandra: Support "timestamp" type fields properly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22616
diff
changeset
|
1707 case CASS_VALUE_TYPE_TIMESTAMP: |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1708 case CASS_VALUE_TYPE_BIGINT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1709 return cass_statement_bind_int64(stmt->cass_stmt, column_idx, value); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1710 case CASS_VALUE_TYPE_SMALL_INT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1711 if (value < -32768 || value > 32767) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1712 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1713 return cass_statement_bind_int16(stmt->cass_stmt, column_idx, value); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1714 case CASS_VALUE_TYPE_TINY_INT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1715 if (value < -128 || value > 127) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1716 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1717 return cass_statement_bind_int8(stmt->cass_stmt, column_idx, value); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1718 default: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1719 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1720 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1721 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1722 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1723 static void prepare_finish_arg(struct cassandra_sql_statement *stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1724 const struct cassandra_sql_arg *arg) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1725 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1726 CassError rc; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1727 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1728 if (arg->value_str != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1729 rc = cass_statement_bind_string(stmt->cass_stmt, arg->column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1730 arg->value_str); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1731 } else if (arg->value_binary != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1732 rc = cass_statement_bind_bytes(stmt->cass_stmt, arg->column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1733 arg->value_binary, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1734 arg->value_binary_size); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1735 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1736 rc = driver_cassandra_bind_int(stmt, arg->column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1737 arg->value_int64); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1738 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1739 if (rc != CASS_OK) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1740 i_error("cassandra: Statement '%s': Failed to bind column %u: %s", |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1741 stmt->stmt.query_template, arg->column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1742 cass_error_desc(rc)); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1743 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1744 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1745 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1746 static void prepare_finish_statement(struct cassandra_sql_statement *stmt) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1747 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1748 const struct cassandra_sql_arg *arg; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1749 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1750 if (stmt->prep->prepared == NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1751 i_assert(stmt->prep->error != NULL); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1752 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1753 if (stmt->result != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1754 stmt->result->error = i_strdup(stmt->prep->error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1755 result_finish(stmt->result); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1756 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1757 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1758 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1759 stmt->cass_stmt = cass_prepared_bind(stmt->prep->prepared); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1760 |
22727
37d5a5c7a7b7
cassandra: Rename cassandra_sql_statement.pending_timestamp to just timestamp
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22713
diff
changeset
|
1761 if (stmt->timestamp != 0) |
37d5a5c7a7b7
cassandra: Rename cassandra_sql_statement.pending_timestamp to just timestamp
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22713
diff
changeset
|
1762 cass_statement_set_timestamp(stmt->cass_stmt, stmt->timestamp); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1763 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1764 if (array_is_created(&stmt->pending_args)) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1765 array_foreach(&stmt->pending_args, arg) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1766 prepare_finish_arg(stmt, arg); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1767 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1768 if (stmt->result != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1769 stmt->result->statement = stmt->cass_stmt; |
22728
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
1770 stmt->result->timestamp = stmt->timestamp; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1771 (void)driver_cassandra_send_query(stmt->result); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1772 pool_unref(&stmt->stmt.pool); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1773 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1774 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1775 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1776 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1777 prepare_finish_pending_statements(struct cassandra_sql_prepared_statement *prep_stmt) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1778 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1779 struct cassandra_sql_statement *const *stmtp; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1780 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1781 array_foreach(&prep_stmt->pending_statements, stmtp) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1782 prepare_finish_statement(*stmtp); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1783 array_clear(&prep_stmt->pending_statements); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1784 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1785 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1786 static void prepare_callback(CassFuture *future, void *context) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1787 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1788 struct cassandra_sql_prepared_statement *prep_stmt = context; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1789 CassError error = cass_future_error_code(future); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1790 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1791 if (error != CASS_OK) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1792 const char *errmsg; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1793 size_t errsize; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1794 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1795 cass_future_error_message(future, &errmsg, &errsize); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1796 i_free(prep_stmt->error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1797 prep_stmt->error = i_strndup(errmsg, errsize); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1798 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1799 prep_stmt->prepared = cass_future_get_prepared(future); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1800 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1801 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1802 prepare_finish_pending_statements(prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1803 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1804 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1805 static void prepare_start(struct cassandra_sql_prepared_statement *prep_stmt) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1806 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1807 struct cassandra_db *db = (struct cassandra_db *)prep_stmt->prep_stmt.db; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1808 CassFuture *future; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1809 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1810 if (!SQL_DB_IS_READY(&db->api)) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1811 if (!prep_stmt->pending) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1812 prep_stmt->pending = TRUE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1813 array_append(&db->pending_prepares, &prep_stmt, 1); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1814 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1815 if (sql_connect(&db->api) < 0) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1816 i_unreached(); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1817 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1818 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1819 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1820 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1821 /* clear the current error in case we're retrying */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1822 i_free_and_null(prep_stmt->error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1823 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1824 future = cass_session_prepare(db->session, prep_stmt->query_template); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1825 driver_cassandra_set_callback(future, db, prepare_callback, prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1826 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1827 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1828 static void driver_cassandra_prepare_pending(struct cassandra_db *db) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1829 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1830 struct cassandra_sql_prepared_statement *const *prep_stmtp; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1831 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1832 i_assert(SQL_DB_IS_READY(&db->api)); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1833 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1834 array_foreach(&db->pending_prepares, prep_stmtp) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1835 (*prep_stmtp)->pending = FALSE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1836 prepare_start(*prep_stmtp); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1837 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1838 array_clear(&db->pending_prepares); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1839 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1840 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1841 static struct sql_prepared_statement * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1842 driver_cassandra_prepared_statement_init(struct sql_db *db, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1843 const char *query_template) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1844 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1845 struct cassandra_sql_prepared_statement *prep_stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1846 i_new(struct cassandra_sql_prepared_statement, 1); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1847 prep_stmt->prep_stmt.db = db; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1848 prep_stmt->query_template = i_strdup(query_template); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1849 i_array_init(&prep_stmt->pending_statements, 4); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1850 prepare_start(prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1851 return &prep_stmt->prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1852 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1853 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1854 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1855 driver_cassandra_prepared_statement_deinit(struct sql_prepared_statement *_prep_stmt) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1856 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1857 struct cassandra_sql_prepared_statement *prep_stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1858 (struct cassandra_sql_prepared_statement *)_prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1859 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1860 i_assert(array_count(&prep_stmt->pending_statements) == 0); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1861 if (prep_stmt->prepared != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1862 cass_prepared_free(prep_stmt->prepared); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1863 array_free(&prep_stmt->pending_statements); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1864 i_free(prep_stmt->query_template); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1865 i_free(prep_stmt->error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1866 i_free(prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1867 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1868 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1869 static struct sql_statement * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1870 driver_cassandra_statement_init(struct sql_db *db ATTR_UNUSED, |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1871 const char *query_template ATTR_UNUSED) |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1872 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1873 pool_t pool = pool_alloconly_create("cassandra sql statement", 1024); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1874 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1875 p_new(pool, struct cassandra_sql_statement, 1); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1876 stmt->stmt.pool = pool; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1877 return &stmt->stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1878 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1879 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1880 static struct sql_statement * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1881 driver_cassandra_statement_init_prepared(struct sql_prepared_statement *_prep_stmt) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1882 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1883 struct cassandra_sql_prepared_statement *prep_stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1884 (struct cassandra_sql_prepared_statement *)_prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1885 pool_t pool = pool_alloconly_create("cassandra prepared sql statement", 1024); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1886 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1887 p_new(pool, struct cassandra_sql_statement, 1); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1888 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1889 stmt->stmt.pool = pool; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1890 stmt->stmt.query_template = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1891 p_strdup(stmt->stmt.pool, prep_stmt->query_template); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1892 stmt->prep = prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1893 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1894 if (prep_stmt->prepared != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1895 /* statement is already prepared. we can use it immediately. */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1896 stmt->cass_stmt = cass_prepared_bind(prep_stmt->prepared); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1897 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1898 if (prep_stmt->error != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1899 prepare_start(prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1900 /* need to wait until prepare is finished */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1901 array_append(&prep_stmt->pending_statements, &stmt, 1); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1902 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1903 return &stmt->stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1904 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1905 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1906 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1907 driver_cassandra_statement_abort(struct sql_statement *_stmt) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1908 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1909 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1910 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1911 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1912 if (stmt->cass_stmt != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1913 cass_statement_free(stmt->cass_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1914 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1915 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1916 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1917 driver_cassandra_statement_set_timestamp(struct sql_statement *_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1918 const struct timespec *ts) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1919 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1920 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1921 (struct cassandra_sql_statement *)_stmt; |
22533
062f94c547ce
cassandra: Timestamp should be in microseconds, not milliseconds
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22532
diff
changeset
|
1922 cass_int64_t ts_usecs = |
062f94c547ce
cassandra: Timestamp should be in microseconds, not milliseconds
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22532
diff
changeset
|
1923 (cass_int64_t)ts->tv_sec * 1000000ULL + |
062f94c547ce
cassandra: Timestamp should be in microseconds, not milliseconds
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22532
diff
changeset
|
1924 ts->tv_nsec / 1000; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1925 |
22728
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
1926 i_assert(stmt->result == NULL); |
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
1927 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1928 if (stmt->cass_stmt != NULL) |
22533
062f94c547ce
cassandra: Timestamp should be in microseconds, not milliseconds
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22532
diff
changeset
|
1929 cass_statement_set_timestamp(stmt->cass_stmt, ts_usecs); |
22728
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
1930 stmt->timestamp = ts_usecs; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1931 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1932 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1933 static struct cassandra_sql_arg * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1934 driver_cassandra_add_pending_arg(struct cassandra_sql_statement *stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1935 unsigned int column_idx) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1936 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1937 struct cassandra_sql_arg *arg; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1938 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1939 if (!array_is_created(&stmt->pending_args)) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1940 p_array_init(&stmt->pending_args, stmt->stmt.pool, 8); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1941 arg = array_append_space(&stmt->pending_args); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1942 arg->column_idx = column_idx; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1943 return arg; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1944 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1945 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1946 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1947 driver_cassandra_statement_bind_str(struct sql_statement *_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1948 unsigned int column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1949 const char *value) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1950 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1951 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1952 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1953 if (stmt->cass_stmt != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1954 cass_statement_bind_string(stmt->cass_stmt, column_idx, value); |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1955 else if (stmt->prep != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1956 struct cassandra_sql_arg *arg = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1957 driver_cassandra_add_pending_arg(stmt, column_idx); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1958 arg->value_str = p_strdup(_stmt->pool, value); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1959 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1960 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1961 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1962 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1963 driver_cassandra_statement_bind_binary(struct sql_statement *_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1964 unsigned int column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1965 const void *value, size_t value_size) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1966 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1967 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1968 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1969 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1970 if (stmt->cass_stmt != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1971 cass_statement_bind_bytes(stmt->cass_stmt, column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1972 value, value_size); |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1973 } else if (stmt->prep != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1974 struct cassandra_sql_arg *arg = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1975 driver_cassandra_add_pending_arg(stmt, column_idx); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1976 arg->value_binary = p_memdup(_stmt->pool, value, value_size); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1977 arg->value_binary_size = value_size; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1978 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1979 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1980 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1981 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1982 driver_cassandra_statement_bind_int64(struct sql_statement *_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1983 unsigned int column_idx, int64_t value) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1984 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1985 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1986 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1987 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1988 if (stmt->cass_stmt != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1989 driver_cassandra_bind_int(stmt, column_idx, value); |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1990 else if (stmt->prep != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1991 struct cassandra_sql_arg *arg = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1992 driver_cassandra_add_pending_arg(stmt, column_idx); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1993 arg->value_int64 = value; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1994 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1995 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1996 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1997 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1998 driver_cassandra_statement_query(struct sql_statement *_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1999 sql_query_callback_t *callback, void *context) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2000 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2001 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2002 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2003 struct cassandra_db *db = (struct cassandra_db *)_stmt->db; |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2004 const char *query = sql_statement_get_query(_stmt); |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
2005 bool is_prepared = stmt->cass_stmt != NULL || stmt->prep != NULL; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2006 |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2007 stmt->result = driver_cassandra_query_init(db, query, |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2008 CASSANDRA_QUERY_TYPE_READ, |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
2009 is_prepared, |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2010 callback, context); |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2011 if (stmt->cass_stmt != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2012 stmt->result->statement = stmt->cass_stmt; |
22811
d880c3334a2f
cassandra: Make sure timestamp is always logged (if set) with debug_queries=y
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22810
diff
changeset
|
2013 stmt->result->timestamp = stmt->timestamp; |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2014 } else if (stmt->prep != NULL) { |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2015 /* wait for prepare to finish */ |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2016 return; |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2017 } else { |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2018 stmt->result->statement = cass_statement_new(query, 0); |
22728
3970c1d61616
cassandra: Include the used timestamp in logged queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22727
diff
changeset
|
2019 stmt->result->timestamp = stmt->timestamp; |
22727
37d5a5c7a7b7
cassandra: Rename cassandra_sql_statement.pending_timestamp to just timestamp
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22713
diff
changeset
|
2020 if (stmt->timestamp != 0) { |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2021 cass_statement_set_timestamp(stmt->result->statement, |
22727
37d5a5c7a7b7
cassandra: Rename cassandra_sql_statement.pending_timestamp to just timestamp
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22713
diff
changeset
|
2022 stmt->timestamp); |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2023 } |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2024 } |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2025 (void)driver_cassandra_send_query(stmt->result); |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2026 pool_unref(&_stmt->pool); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2027 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2028 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2029 static struct sql_result * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2030 driver_cassandra_statement_query_s(struct sql_statement *_stmt ATTR_UNUSED) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2031 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2032 i_panic("cassandra: sql_statement_query_s() not supported"); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2033 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2034 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2035 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2036 driver_cassandra_update_stmt(struct sql_transaction_context *_ctx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2037 struct sql_statement *_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2038 unsigned int *affected_rows) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2039 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2040 struct cassandra_transaction_context *ctx = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2041 (struct cassandra_transaction_context *)_ctx; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2042 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2043 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2044 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2045 i_assert(affected_rows == NULL); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2046 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2047 if (ctx->query != NULL || ctx->stmt != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2048 transaction_set_failed(ctx, "Multiple changes in transaction not supported"); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2049 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2050 } |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2051 if (stmt->prep != NULL) |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2052 ctx->stmt = stmt; |
22744
0b4ac3fc56a2
cassandra: Fix crash when using prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22743
diff
changeset
|
2053 else { |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2054 ctx->query = i_strdup(sql_statement_get_query(_stmt)); |
22810
41c67443c1c5
cassandra: Fix setting timestamp for transaction queries with v3 protocol
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22744
diff
changeset
|
2055 ctx->query_timestamp = stmt->timestamp; |
22744
0b4ac3fc56a2
cassandra: Fix crash when using prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22743
diff
changeset
|
2056 pool_unref(&_stmt->pool); |
0b4ac3fc56a2
cassandra: Fix crash when using prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22743
diff
changeset
|
2057 } |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2058 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2059 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2060 const struct sql_db driver_cassandra_db = { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2061 .name = "cassandra", |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2062 .flags = SQL_DB_FLAG_PREP_STATEMENTS, |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2063 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2064 .v = { |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2065 .init = driver_cassandra_init_v, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2066 .deinit = driver_cassandra_deinit_v, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2067 .connect = driver_cassandra_connect, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2068 .disconnect = driver_cassandra_disconnect, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2069 .escape_string = driver_cassandra_escape_string, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2070 .exec = driver_cassandra_exec, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2071 .query = driver_cassandra_query, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2072 .query_s = driver_cassandra_query_s, |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2073 |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2074 .transaction_begin = driver_cassandra_transaction_begin, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2075 .transaction_commit2 = driver_cassandra_transaction_commit, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2076 .transaction_commit_s = driver_cassandra_transaction_commit_s, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2077 .transaction_rollback = driver_cassandra_transaction_rollback, |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2078 |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2079 .update = driver_cassandra_update, |
19072
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
2080 |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2081 .escape_blob = driver_cassandra_escape_blob, |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2082 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2083 .prepared_statement_init = driver_cassandra_prepared_statement_init, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2084 .prepared_statement_deinit = driver_cassandra_prepared_statement_deinit, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2085 .statement_init = driver_cassandra_statement_init, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2086 .statement_init_prepared = driver_cassandra_statement_init_prepared, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2087 .statement_abort = driver_cassandra_statement_abort, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2088 .statement_set_timestamp = driver_cassandra_statement_set_timestamp, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2089 .statement_bind_str = driver_cassandra_statement_bind_str, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2090 .statement_bind_binary = driver_cassandra_statement_bind_binary, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2091 .statement_bind_int64 = driver_cassandra_statement_bind_int64, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2092 .statement_query = driver_cassandra_statement_query, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2093 .statement_query_s = driver_cassandra_statement_query_s, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2094 .update_stmt = driver_cassandra_update_stmt, |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2095 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2096 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2097 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2098 const struct sql_result driver_cassandra_result = { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2099 .v = { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2100 driver_cassandra_result_free, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2101 driver_cassandra_result_next_row, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2102 driver_cassandra_result_get_fields_count, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2103 driver_cassandra_result_get_field_name, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2104 driver_cassandra_result_find_field, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2105 driver_cassandra_result_get_field_value, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2106 driver_cassandra_result_get_field_value_binary, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2107 driver_cassandra_result_find_field_value, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2108 driver_cassandra_result_get_values, |
22354
b9a2a6135419
lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21972
diff
changeset
|
2109 driver_cassandra_result_get_error, |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
2110 driver_cassandra_result_more, |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2111 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2112 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2113 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2114 const char *driver_cassandra_version = DOVECOT_ABI_VERSION; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2115 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2116 void driver_cassandra_init(void); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2117 void driver_cassandra_deinit(void); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2118 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2119 void driver_cassandra_init(void) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2120 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2121 sql_driver_register(&driver_cassandra_db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2122 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2123 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2124 void driver_cassandra_deinit(void) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2125 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2126 sql_driver_unregister(&driver_cassandra_db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2127 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2128 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2129 #endif |