Mercurial > dovecot > core-2.2
annotate src/lib-sql/driver-cassandra.c @ 22715:20415dd0b85a
dsync: Add per-mailbox sync lock that is always used.
Both importing and exporting gets the lock before they even sync the
mailbox. The lock is kept until the import/export finishes. This guarantees
that no matter how dsync is run, two dsyncs can't be working on the same
mailbox at the same time.
This lock is in addition to the optional per-user lock enabled by the -l
parameter. If the -l parameter is used, the same lock timeout is used for
the per-mailbox lock. Otherwise 30s timeout is used.
This should help to avoid email duplication when replication is enabled for
public namespaces, and maybe in some other rare situations as well.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 28 Dec 2017 14:10:23 +0200 |
parents | cb108f786fb4 |
children | 37d5a5c7a7b7 |
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; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 pool_t row_pool; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 ARRAY_TYPE(const_string) fields; |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
136 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
|
137 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 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
|
139 void *context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
141 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
|
142 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
|
143 unsigned int finished:1; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
144 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
|
145 }; |
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 struct cassandra_transaction_context { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 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
|
149 int refcount; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
151 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
|
152 void *context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
154 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
|
155 char *query; |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
156 char *error; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 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
|
159 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
|
160 unsigned int failed:1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
163 struct cassandra_sql_arg { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
164 unsigned int column_idx; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
165 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
166 char *value_str; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
167 unsigned char *value_binary; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
168 size_t value_binary_size; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
169 int64_t value_int64; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
170 }; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
171 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
172 struct cassandra_sql_statement { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
173 struct sql_statement stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
174 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
175 struct cassandra_sql_prepared_statement *prep; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
176 CassStatement *cass_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
177 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
178 ARRAY(struct cassandra_sql_arg) pending_args; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
179 cass_int64_t pending_timestamp; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
180 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
181 struct cassandra_result *result; |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
184 struct cassandra_sql_prepared_statement { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
185 struct sql_prepared_statement prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
186 char *query_template; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
187 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
188 /* NULL, until the prepare is asynchronously finished */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
189 const CassPrepared *prepared; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
190 /* statements waiting for prepare to finish */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
191 ARRAY(struct cassandra_sql_statement *) pending_statements; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
192 /* 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
|
193 execution attempt. */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
194 char *error; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
195 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
196 bool pending; |
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 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 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
|
200 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
|
201 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 static struct { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 CassConsistency consistency; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 const char *name; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 } cass_consistency_names[] = { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 { CASS_CONSISTENCY_ANY, "any" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
207 { CASS_CONSISTENCY_ONE, "one" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
208 { CASS_CONSISTENCY_TWO, "two" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
209 { CASS_CONSISTENCY_THREE, "three" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 { CASS_CONSISTENCY_QUORUM, "" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
211 { CASS_CONSISTENCY_ALL, "all" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
212 { 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
|
213 { 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
|
214 { CASS_CONSISTENCY_SERIAL, "serial" }, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
215 { 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
|
216 { 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
|
217 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
218 |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
219 static struct { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
220 CassLogLevel log_level; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
221 const char *name; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
222 } cass_log_level_names[] = { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
223 { CASS_LOG_CRITICAL, "critical" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
224 { CASS_LOG_ERROR, "error" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
225 { CASS_LOG_WARN, "warn" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
226 { CASS_LOG_INFO, "info" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
227 { CASS_LOG_DEBUG, "debug" }, |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
228 { CASS_LOG_TRACE, "trace" } |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
229 }; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
230 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
231 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
|
232 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
233 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
|
234 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
|
235 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
|
236 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
|
237 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
238 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
|
239 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
240 unsigned int i; |
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 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
|
243 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
|
244 *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
|
245 return 0; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
246 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
248 return -1; |
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 |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
251 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
|
252 { |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
253 unsigned int i; |
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 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
|
256 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
|
257 *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
|
258 return 0; |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
259 } |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
260 } |
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
261 return -1; |
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 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
264 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
|
265 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
266 /* 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
|
267 add/remove timeouts */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
268 if (db->ioloop != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
269 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
|
270 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
|
271 if (db->ioloop != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
272 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
|
273 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
274 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
275 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
|
276 { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
277 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
|
278 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
|
279 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
280 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
|
281 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
|
282 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
|
283 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
|
284 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
|
285 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
286 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
|
287 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
288 array_foreach(&db->pending_prepares, prep_stmtp) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
289 (*prep_stmtp)->pending = FALSE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
290 (*prep_stmtp)->error = i_strdup(error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
291 prepare_finish_pending_statements(*prep_stmtp); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
292 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
293 array_clear(&db->pending_prepares); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
294 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
295 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
|
296 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
|
297 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
|
298 (*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
|
299 result_finish(*resultp); |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
300 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
301 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
302 if (db->ioloop != NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
303 /* 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
|
304 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
|
305 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
306 } |
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 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
|
309 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
310 const char *message; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
311 size_t size; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
312 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
313 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
|
314 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
|
315 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
316 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
317 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
|
318 void *context) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
319 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
320 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
|
321 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
322 /* 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
|
323 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
|
324 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
|
325 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
|
326 i_error() here. */ |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
327 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
|
328 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
|
329 "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
|
330 strerror(errno)); |
e04d881da1fb
cassandra: Don't use i_error() from non-main thread
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21531
diff
changeset
|
331 (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
|
332 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
333 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
334 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
335 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
|
336 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
337 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
|
338 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
|
339 i_free(cb); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
340 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
341 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
342 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
|
343 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
344 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
|
345 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
346 /* 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
|
347 a hash table */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
348 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
|
349 cb = *cbp; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
350 if (cb->id == id) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
351 array_delete(&db->callbacks, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
352 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
|
353 cassandra_callback_run(cb); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
354 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
355 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
356 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
357 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
|
358 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
359 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
360 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
|
361 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
362 unsigned int ids[1024]; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
363 ssize_t ret; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
364 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
365 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
|
366 if (ret < 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
367 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
|
368 else 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: EOF"); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
370 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
|
371 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
|
372 else { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
373 /* success */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
374 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
|
375 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
376 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
|
377 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
|
378 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
379 } |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
380 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
|
381 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
382 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
383 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
384 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
|
385 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
|
386 void *context) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
387 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
388 struct cassandra_callback *cb; |
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 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
|
391 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
|
392 cb->future = future; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
393 cb->callback = callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
394 cb->context = context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
395 cb->db = db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
396 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
|
397 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
398 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
|
399 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
400 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
401 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
|
402 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
403 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
|
404 CassError rc; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
405 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
406 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
|
407 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
|
408 "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
|
409 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
|
410 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
411 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
412 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
|
413 if (db->ioloop != NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
414 /* 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
|
415 finish */ |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
416 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
|
417 } |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
418 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
|
419 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
|
420 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
421 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
422 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
|
423 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
424 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
|
425 CassFuture *future; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
426 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
427 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
|
428 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
429 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
|
430 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
|
431 return -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
432 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
433 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
|
434 driver_cassandra_input, db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
435 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
|
436 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
437 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
|
438 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
|
439 return 0; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
440 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
441 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
442 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
|
443 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
444 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
|
445 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
446 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
|
447 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
448 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
449 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
450 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
|
451 const char *string) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
452 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
453 string_t *escaped; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
454 unsigned int i; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
455 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
456 if (strchr(string, '\'') == NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
457 return string; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
458 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
|
459 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
|
460 if (string[i] == '\'') |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
461 str_append_c(escaped, '\''); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
462 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
|
463 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
464 return str_c(escaped); |
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 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
467 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
|
468 const char *connect_string) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
469 { |
20068
5cd9a6bc7d43
cassandra: Added num_threads, connect_timeout and request_timeout settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20046
diff
changeset
|
470 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
|
471 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
|
472 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
|
473 |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
474 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
|
475 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
|
476 db->write_consistency = CASS_CONSISTENCY_LOCAL_QUORUM; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
477 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
|
478 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
|
479 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
|
480 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
|
481 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
482 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
|
483 for (; *args != NULL; args++) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
484 value = strchr(*args, '='); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
485 if (value == NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
486 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
|
487 *args); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
488 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
489 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
|
490 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
491 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
|
492 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
|
493 str_append_c(hosts, ','); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
494 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
|
495 } 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
|
496 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
|
497 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
|
498 } 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
|
499 strcmp(key, "keyspace") == 0) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
500 i_free(db->keyspace); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
501 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
|
502 } 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
|
503 i_free(db->user); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
504 db->user = i_strdup(value); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
505 } 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
|
506 i_free(db->password); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
507 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
|
508 } 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
|
509 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
|
510 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
|
511 } 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
|
512 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
|
513 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
|
514 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
|
515 } 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
|
516 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
|
517 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
|
518 } 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
|
519 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
|
520 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
|
521 write_fallback_set = TRUE; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
522 } else if (strcmp(key, "delete_consistency") == 0) { |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
523 if (consistency_parse(value, &db->delete_consistency) < 0) |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
524 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
|
525 } 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
|
526 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
|
527 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
|
528 delete_fallback_set = TRUE; |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
529 } 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
|
530 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
|
531 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
|
532 } else if (strcmp(key, "debug_queries") == 0) { |
80e064878fab
cassandra: Added debug_queries connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20482
diff
changeset
|
533 db->debug_queries = TRUE; |
20834
426ae3e75ca5
cassandra: Added latency_aware_routing connect-parameter.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20529
diff
changeset
|
534 } 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
|
535 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
|
536 } 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
|
537 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
|
538 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
|
539 } 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
|
540 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
|
541 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
|
542 } 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
|
543 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
|
544 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
|
545 } 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
|
546 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
|
547 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
|
548 } 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
|
549 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
|
550 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
|
551 } 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
|
552 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
|
553 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
|
554 } 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
|
555 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
|
556 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
|
557 } else if (strcmp(key, "metrics") == 0) { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
558 i_free(db->metrics_path); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
559 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
|
560 } 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
|
561 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
|
562 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
|
563 #ifndef HAVE_CASSANDRA_SPECULATIVE_POLICY |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
564 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
|
565 #endif |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
566 } 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
|
567 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
|
568 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
|
569 #ifndef HAVE_CASSANDRA_SPECULATIVE_POLICY |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
570 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
|
571 #endif |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
572 } 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
|
573 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
|
574 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
|
575 } else { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
576 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
|
577 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
578 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
579 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
580 if (!read_fallback_set) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
581 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
|
582 if (!write_fallback_set) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
583 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
|
584 if (!delete_fallback_set) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
585 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
|
586 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
587 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
|
588 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
|
589 if (db->keyspace == NULL) |
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 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
|
591 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
|
592 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
593 |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
594 static void |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
595 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
|
596 { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
597 #define ADD_UINT64(_struct, _field) \ |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
598 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
|
599 #define ADD_DOUBLE(_struct, _field) \ |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
600 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
|
601 CassMetrics metrics; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
602 |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
603 cass_session_get_metrics(db->session, &metrics); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
604 str_append(dest, "{ \"requests\": {"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
605 ADD_UINT64(requests, min); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
606 ADD_UINT64(requests, max); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
607 ADD_UINT64(requests, mean); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
608 ADD_UINT64(requests, stddev); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
609 ADD_UINT64(requests, median); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
610 ADD_UINT64(requests, percentile_75th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
611 ADD_UINT64(requests, percentile_95th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
612 ADD_UINT64(requests, percentile_98th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
613 ADD_UINT64(requests, percentile_99th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
614 ADD_UINT64(requests, percentile_999th); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
615 ADD_DOUBLE(requests, mean_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
616 ADD_DOUBLE(requests, one_minute_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
617 ADD_DOUBLE(requests, five_minute_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
618 ADD_DOUBLE(requests, fifteen_minute_rate); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
619 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
|
620 |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
621 str_append(dest, "}, \"stats\": {"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
622 ADD_UINT64(stats, total_connections); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
623 ADD_UINT64(stats, available_connections); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
624 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
|
625 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
|
626 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
|
627 |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
628 str_append(dest, "}, \"errors\": {"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
629 ADD_UINT64(errors, connection_timeouts); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
630 ADD_UINT64(errors, pending_request_timeouts); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
631 ADD_UINT64(errors, request_timeouts); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
632 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
|
633 |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
634 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
|
635 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
|
636 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
|
637 (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
|
638 } |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
639 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
|
640 str_append(dest, "}}"); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
641 } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
642 |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
643 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
|
644 { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
645 struct var_expand_table tab[] = { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
646 { '\0', NULL, NULL } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
647 }; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
648 string_t *path = t_str_new(64); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
649 string_t *data; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
650 int fd; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
651 |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
652 var_expand(path, db->metrics_path, tab); |
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 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
|
655 if (fd == -1) { |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
656 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
|
657 return; |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
658 } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
659 data = t_str_new(1024); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
660 driver_cassandra_get_metrics_json(db, data); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
661 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
|
662 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
|
663 i_close_fd(&fd); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
664 } |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
665 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
666 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
|
667 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
668 struct cassandra_db *db; |
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 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
|
671 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
|
672 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
|
673 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
674 T_BEGIN { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
675 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
|
676 } T_END; |
18761
315adb25e6b4
cassandra: Added log_level parameter to connect_string.
Timo Sirainen <tss@iki.fi>
parents:
18652
diff
changeset
|
677 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
|
678 |
22531
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
679 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
|
680 /* 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
|
681 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
|
682 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
|
683 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
|
684 } |
65df17ce8844
cassandra: Disable prepared statements with protocol v3 and older
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22530
diff
changeset
|
685 |
19219
8183663ad7c0
cassandra: copy&paste mistake - use monotonic timestamp generator, not server side..
Timo Sirainen <tss@iki.fi>
parents:
19218
diff
changeset
|
686 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
|
687 db->cluster = cass_cluster_new(); |
19216
1e4d2306f1f3
cassandra: Use a local monotonic timestamp generator.
Timo Sirainen <tss@iki.fi>
parents:
19153
diff
changeset
|
688 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
|
689 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
|
690 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
|
691 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
|
692 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
|
693 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
|
694 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
|
695 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
|
696 if (db->protocol_version != 0) |
e92af8f36ed0
cassandra: Added "version" parameter to specify a protocol version.
Timo Sirainen <tss@iki.fi>
parents:
19216
diff
changeset
|
697 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
|
698 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
|
699 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
|
700 if (db->latency_aware_routing) |
20999
dbcc7ae05ad0
Compiler warning fixes with -Wstrict-bool
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20834
diff
changeset
|
701 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
|
702 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
|
703 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
|
704 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
|
705 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
|
706 #ifdef HAVE_CASSANDRA_SPECULATIVE_POLICY |
a326cf8a579a
driver-cassandra: Add support for speculative execution
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21529
diff
changeset
|
707 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
|
708 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
|
709 #endif |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
710 db->session = cass_session_new(); |
20202
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
711 if (db->metrics_path != NULL) |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
712 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
|
713 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
|
714 i_array_init(&db->callbacks, 16); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
715 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
|
716 return &db->api; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
717 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
718 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
719 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
|
720 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
721 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
|
722 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
723 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
|
724 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
725 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
|
726 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
|
727 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
|
728 array_free(&db->results); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
729 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
|
730 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
|
731 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
732 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
|
733 cass_cluster_free(db->cluster); |
19216
1e4d2306f1f3
cassandra: Use a local monotonic timestamp generator.
Timo Sirainen <tss@iki.fi>
parents:
19153
diff
changeset
|
734 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
|
735 if (db->to_metrics != NULL) |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
736 timeout_remove(&db->to_metrics); |
e4ac75a4f597
cassandra: Added metrics=path connect setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20068
diff
changeset
|
737 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
|
738 i_free(db->hosts); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
739 i_free(db->error); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
740 i_free(db->keyspace); |
20046
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
741 i_free(db->user); |
ca2225e7782c
cassandra: Added support for user and password settings.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19743
diff
changeset
|
742 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
|
743 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
|
744 i_free(db); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
745 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
746 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
747 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
|
748 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
|
749 { |
19083
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 *const *results; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
751 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
|
752 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
753 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
|
754 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
|
755 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
|
756 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
|
757 return; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
758 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
759 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
760 i_unreached(); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
761 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
762 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
763 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
|
764 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
|
765 { |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
766 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
|
767 struct timeval now; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
768 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
|
769 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
770 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
|
771 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
|
772 return; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
773 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
774 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
|
775 i_fatal("gettimeofday() failed: %m"); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
776 |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
777 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
|
778 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
|
779 result->is_prepared ? "prepared " : "", result->query); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
780 if (all_pages) { |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
781 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
|
782 row_count = result->total_row_count; |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
783 } else { |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
784 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
|
785 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
|
786 row_count = result->row_count; |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
787 } |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
788 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
|
789 timeval_diff_usecs(&now, &result->finish_time), |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
790 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
|
791 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
792 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
|
793 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
|
794 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
|
795 } else { |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
796 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
|
797 } |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
798 } |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
799 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
800 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
|
801 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
802 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
|
803 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
|
804 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
|
805 |
19056
97ff15e9a7fd
lib-sql: sql_result.free() should never be reached from the query callback.
Timo Sirainen <tss@iki.fi>
parents:
19048
diff
changeset
|
806 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
|
807 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
|
808 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
809 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
|
810 db->sync_result = NULL; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
811 |
20481
94736fed1324
cassandra: Warn if queries take too long (default 5 secs)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20306
diff
changeset
|
812 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
|
813 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
|
814 |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
815 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
|
816 /* 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
|
817 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
|
818 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
|
819 &result->page0_start_time); |
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
820 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
|
821 } |
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
|
822 |
18833
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
823 if (result->result != NULL) |
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
824 cass_result_free(result->result); |
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
825 if (result->iterator != NULL) |
0cf38b6b055d
cassandra: Don't crash on failed queries.
Timo Sirainen <tss@iki.fi>
parents:
18761
diff
changeset
|
826 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
|
827 if (result->statement != NULL) |
7ddc7d2a3036
cassandra: Don't crash if connection to Cassandra failed.
Timo Sirainen <tss@iki.fi>
parents:
19150
diff
changeset
|
828 cass_statement_free(result->statement); |
7ddc7d2a3036
cassandra: Don't crash if connection to Cassandra failed.
Timo Sirainen <tss@iki.fi>
parents:
19150
diff
changeset
|
829 if (result->row_pool != NULL) |
7ddc7d2a3036
cassandra: Don't crash if connection to Cassandra failed.
Timo Sirainen <tss@iki.fi>
parents:
19150
diff
changeset
|
830 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
|
831 i_free(result->query); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
832 i_free(result->error); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
833 i_free(result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
834 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
835 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
836 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
|
837 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
838 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
|
839 bool free_result = TRUE; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
840 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
841 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
|
842 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
|
843 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
|
844 |
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
|
845 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
|
846 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
847 result->api.callback = TRUE; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
848 T_BEGIN { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
849 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
|
850 } T_END; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
851 result->api.callback = FALSE; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
852 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
853 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
|
854 if (db->ioloop != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
855 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
|
856 |
19057
0770ab82703d
lib-sql: Debugging help - Added assert before clearing sql_result.callback.
Timo Sirainen <tss@iki.fi>
parents:
19056
diff
changeset
|
857 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
|
858 result->callback = NULL; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
859 if (free_result) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
860 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
|
861 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
862 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
863 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
|
864 { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
865 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
|
866 time_t last_warning = |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
867 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
|
868 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
869 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
|
870 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
|
871 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
|
872 cass_consistency_string(result->fallback_consistency), |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
873 cass_consistency_string(result->consistency)); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
874 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
|
875 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
876 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
|
877 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
|
878 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
879 result->consistency = result->fallback_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
880 driver_cassandra_result_send_query(result); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
881 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
882 |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
883 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
|
884 { |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
885 switch (error) { |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
886 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
|
887 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
|
888 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
889 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
|
890 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
|
891 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
892 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
|
893 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
|
894 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
895 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
|
896 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
|
897 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
898 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
|
899 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
|
900 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
901 default: |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
902 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
|
903 break; |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
904 } |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
905 } |
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
906 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
907 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
|
908 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
909 struct cassandra_result *result = context; |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
910 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
|
911 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
|
912 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
913 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
|
914 const char *errmsg; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
915 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
|
916 int msecs; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
917 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
918 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
|
919 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
|
920 |
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
|
921 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
|
922 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
|
923 /* 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
|
924 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
|
925 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
|
926 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
|
927 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
|
928 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
|
929 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
|
930 SQL_RESULT_ERROR_TYPE_UNKNOWN; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
931 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
|
932 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
|
933 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
|
934 |
20306
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
935 /* unavailable = cassandra server knows that there aren't |
21740
3ce8158b7fd5
cassandra: Treat CASS_ERROR_SERVER_UNAVAILABLE as "write success is uncertain"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21652
diff
changeset
|
936 enough nodes available. "All hosts in current policy |
3ce8158b7fd5
cassandra: Treat CASS_ERROR_SERVER_UNAVAILABLE as "write success is uncertain"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21652
diff
changeset
|
937 attempted and were either unavailable or failed" |
20306
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
938 |
21972
1ea4631afc59
cassandra: Use fallback consistency for CASS_ERROR_LIB_NO_HOSTS_AVAILABLE errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21844
diff
changeset
|
939 no hosts available = The client library couldn't connect to |
1ea4631afc59
cassandra: Use fallback consistency for CASS_ERROR_LIB_NO_HOSTS_AVAILABLE errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21844
diff
changeset
|
940 enough cassanra nodes. Error message is the same as for |
1ea4631afc59
cassandra: Use fallback consistency for CASS_ERROR_LIB_NO_HOSTS_AVAILABLE errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21844
diff
changeset
|
941 "unavailable". |
1ea4631afc59
cassandra: Use fallback consistency for CASS_ERROR_LIB_NO_HOSTS_AVAILABLE errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21844
diff
changeset
|
942 |
20306
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
943 write timeout = cassandra server couldn't reach all the |
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
944 needed nodes. this may be because it hasn't yet detected |
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
945 that the servers are down, or because the servers are just |
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
946 too busy. we'll try the fallback consistency to avoid |
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
947 unnecessary temporary errors. */ |
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
948 if ((error == CASS_ERROR_SERVER_UNAVAILABLE || |
21972
1ea4631afc59
cassandra: Use fallback consistency for CASS_ERROR_LIB_NO_HOSTS_AVAILABLE errors
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21844
diff
changeset
|
949 error == CASS_ERROR_LIB_NO_HOSTS_AVAILABLE || |
20306
2417b436d73c
cassandra: Try fallback_consistency also for write timeout failures.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20202
diff
changeset
|
950 error == CASS_ERROR_SERVER_WRITE_TIMEOUT) && |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
951 result->fallback_consistency != result->consistency) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
952 /* retry with fallback consistency */ |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
953 query_resend_with_fallback(result); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
954 return; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
955 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
956 result_finish(result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
957 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
958 } |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
959 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
|
960 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
961 if (result->fallback_consistency != result->consistency) { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
962 /* 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
|
963 any fallbacks, reset them. */ |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
964 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
|
965 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
966 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
967 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
|
968 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
|
969 result_finish(result); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
970 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
971 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
972 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
|
973 { |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
974 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
|
975 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
976 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
|
977 |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
978 #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
|
979 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
|
980 #endif |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
981 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
|
982 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
|
983 } |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
984 |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
985 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
|
986 { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
987 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
|
988 CassFuture *future; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
989 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
990 i_assert(result->statement != NULL); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
991 |
21529
cb58131424be
cassandra: Track query counts internally and include them in metrics
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
992 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
|
993 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
|
994 driver_cassandra_init_statement(result); |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
995 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
996 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
|
997 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
|
998 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
999 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1000 static bool |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1001 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
|
1002 { |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1003 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
|
1004 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
|
1005 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
|
1006 struct timeval tv; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1007 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1008 if (failure_count == 0) |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1009 return FALSE; |
21829
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1010 /* double the retries every time. */ |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1011 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
|
1012 msecs *= 2; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1013 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
|
1014 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
|
1015 break; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1016 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1017 } |
21829
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1018 /* 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
|
1019 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
|
1020 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
|
1021 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
|
1022 immediately when returning. |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1023 |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1024 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
|
1025 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
|
1026 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
|
1027 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
|
1028 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
|
1029 successfully. */ |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1030 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
|
1031 timeval_add_msecs(&tv, msecs); |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1032 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
|
1033 } |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1034 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1035 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
|
1036 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1037 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
|
1038 int ret; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1039 |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1040 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
|
1041 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
|
1042 if (ret < 0) |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1043 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
|
1044 return ret; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1045 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1046 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1047 |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1048 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
|
1049 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
|
1050 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
|
1051 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
|
1052 switch (result->query_type) { |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1053 case CASSANDRA_QUERY_TYPE_READ: |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1054 result->consistency = db->read_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1055 result->fallback_consistency = db->read_fallback_consistency; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1056 break; |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1057 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
|
1058 /* 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
|
1059 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
|
1060 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
|
1061 break; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1062 case CASSANDRA_QUERY_TYPE_WRITE: |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1063 result->consistency = db->write_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1064 result->fallback_consistency = db->write_fallback_consistency; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1065 break; |
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1066 case CASSANDRA_QUERY_TYPE_DELETE: |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1067 result->consistency = db->delete_consistency; |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1068 result->fallback_consistency = db->delete_fallback_consistency; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1069 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
|
1070 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
|
1071 i_unreached(); |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1072 } |
19304
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1073 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1074 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
|
1075 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
|
1076 else |
bec183747fef
cassandra: Fallback consistency fix - it wasn't used permanently
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21828
diff
changeset
|
1077 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
|
1078 |
8f7a0201ebe3
cassandra: Added read/write/delete_fallback_consistency settings.
Timo Sirainen <tss@iki.fi>
parents:
19297
diff
changeset
|
1079 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
|
1080 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
|
1081 return 1; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1082 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1083 |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1084 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
|
1085 { |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1086 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
|
1087 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
|
1088 |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1089 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
|
1090 for (i = 0; i < count; i++) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1091 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
|
1092 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
|
1093 break; |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1094 } |
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1095 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1096 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1097 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1098 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
|
1099 void *context ATTR_UNUSED) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1100 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1101 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1102 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1103 static struct cassandra_result * |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1104 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
|
1105 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
|
1106 bool is_prepared, |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1107 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
|
1108 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1109 struct cassandra_result *result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1110 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1111 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
|
1112 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
|
1113 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
|
1114 result->api.refcount = 1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1115 result->callback = callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1116 result->context = context; |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1117 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
|
1118 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
|
1119 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
|
1120 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
|
1121 return result; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1122 } |
19083
5d0bcb628c88
cassandra: Handle async queries internally - don't use sql pooling code.
Timo Sirainen <tss@iki.fi>
parents:
19072
diff
changeset
|
1123 |
22356
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1124 static void |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1125 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
|
1126 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
|
1127 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
|
1128 { |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1129 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
|
1130 struct cassandra_result *result; |
2fe6e07903f2
cassandra: Add wrapper functions in preparation for following commits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
1131 |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
1132 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
|
1133 callback, context); |
22529
7b17f52b75b6
cassandra: Cleanup - Create statement earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22528
diff
changeset
|
1134 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
|
1135 (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
|
1136 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1137 |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1138 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
|
1139 { |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1140 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
|
1141 } |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1142 |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1143 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
|
1144 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
|
1145 { |
19146
602efd349b5c
cassandra: Added delete_consistency parameter.
Timo Sirainen <tss@iki.fi>
parents:
19083
diff
changeset
|
1146 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
|
1147 } |
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1148 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1149 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
|
1150 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1151 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
|
1152 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1153 db->sync_result = result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1154 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1155 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1156 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
|
1157 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1158 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
|
1159 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1160 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
|
1161 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
|
1162 if (IS_CONNECTED(db)) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1163 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1164 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
|
1165 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1166 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
|
1167 /* 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
|
1168 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
|
1169 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1170 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1171 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
|
1172 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1173 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
|
1174 return; |
18648
d71fa3ae930f
lib-sql: Don't crash in Cassandra if connection to it failed.
Timo Sirainen <tss@iki.fi>
parents:
18640
diff
changeset
|
1175 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
|
1176 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
|
1177 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
|
1178 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
|
1179 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1180 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
|
1181 } |
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 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
|
1184 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
|
1185 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
|
1186 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1187 struct sql_result *result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1188 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1189 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
|
1190 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1191 switch (db->api.state) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1192 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
|
1193 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
|
1194 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1195 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
|
1196 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
|
1197 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
|
1198 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
|
1199 break; |
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 |
22527
db43860e2b12
cassandra: sql_transaction_commit_s() - Set query_type correctly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22526
diff
changeset
|
1202 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
|
1203 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
|
1204 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
|
1205 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
|
1206 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
|
1207 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1208 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1209 result = db->sync_result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1210 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
|
1211 /* 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
|
1212 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
|
1213 db->sync_result = NULL; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1214 } else if (result == NULL) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1215 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
|
1216 result->refcount++; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1217 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1218 return result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1219 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1220 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1221 static struct sql_result * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1222 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
|
1223 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1224 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
|
1225 struct sql_result *result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1226 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1227 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
|
1228 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
|
1229 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
|
1230 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
|
1231 return result; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1232 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1233 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1234 static int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1235 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
|
1236 const CassValue *value, const char **str_r, |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1237 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
|
1238 { |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1239 const unsigned char *output; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1240 void *output_dup; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1241 size_t output_size; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1242 CassError rc; |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1243 const char *type; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1244 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1245 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
|
1246 *str_r = NULL; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1247 return 0; |
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 |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1250 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
|
1251 case CASS_VALUE_TYPE_INT: { |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1252 cass_int32_t num; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1253 |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1254 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
|
1255 if (rc == CASS_OK) { |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1256 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
|
1257 output_size = strlen(str); |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1258 output = (const void *)str; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1259 } |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1260 type = "int32"; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1261 break; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1262 } |
22617
655f60aa8cf2
cassandra: Support "timestamp" type fields properly
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22616
diff
changeset
|
1263 case CASS_VALUE_TYPE_TIMESTAMP: |
21383
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1264 case CASS_VALUE_TYPE_BIGINT: { |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1265 cass_int64_t num; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1266 |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1267 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
|
1268 if (rc == CASS_OK) { |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1269 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
|
1270 output_size = strlen(str); |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1271 output = (const void *)str; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1272 } |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1273 type = "int64"; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1274 break; |
ca6f4f13e23e
cassandra: Add support for "bigint" value type.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21272
diff
changeset
|
1275 } |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1276 default: |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1277 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
|
1278 type = "bytes"; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1279 break; |
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1280 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1281 if (rc != CASS_OK) { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1282 i_free(result->error); |
19297
c854e1b3e419
cassandra: Added support for returning "int" type values.
Timo Sirainen <tss@iki.fi>
parents:
19219
diff
changeset
|
1283 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
|
1284 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
|
1285 return -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1286 } |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1287 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
|
1288 memcpy(output_dup, output, output_size); |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1289 *str_r = output_dup; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1290 *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
|
1291 return 0; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1292 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1293 |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1294 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
|
1295 { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1296 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
|
1297 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1298 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
|
1299 /* no paging */ |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1300 return 0; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1301 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1302 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
|
1303 return 0; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1304 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1305 /* 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
|
1306 error message. */ |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1307 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
|
1308 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
|
1309 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
|
1310 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1311 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1312 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
|
1313 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1314 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
|
1315 const CassRow *row; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1316 const CassValue *value; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1317 const char *str; |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1318 size_t size; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1319 unsigned int i; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1320 int ret = 1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1321 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1322 if (result->iterator == NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1323 return -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1324 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1325 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
|
1326 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
|
1327 result->row_count++; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1328 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
|
1329 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1330 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
|
1331 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
|
1332 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
|
1333 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1334 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
|
1335 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
|
1336 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
|
1337 ret = -1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1338 break; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1339 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1340 array_append(&result->fields, &str, 1); |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1341 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
|
1342 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1343 return ret; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1344 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1345 |
22357
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1346 static void |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1347 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
|
1348 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
|
1349 { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1350 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
|
1351 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
|
1352 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
|
1353 (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
|
1354 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1355 /* 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
|
1356 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
|
1357 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
|
1358 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
|
1359 callback, context); |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1360 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1361 /* 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
|
1362 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
|
1363 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
|
1364 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
|
1365 old_result->result); |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1366 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
|
1367 /* 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
|
1368 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
|
1369 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
|
1370 |
22532
10d5c2886b60
cassandra: Fix paged queries to work again
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22531
diff
changeset
|
1371 new_result->consistency = old_result->consistency; |
22358
4f3967e2f493
cassandra: Improve logging for multipage queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22357
diff
changeset
|
1372 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
|
1373 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
|
1374 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
|
1375 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1376 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
|
1377 *_result = NULL; |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1378 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1379 if (async) |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1380 (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
|
1381 else { |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1382 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
|
1383 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
|
1384 (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
|
1385 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
|
1386 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
|
1387 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
|
1388 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1389 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
|
1390 |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1391 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
|
1392 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1393 } |
732e248c2e26
cassandra: Add page_size setting to enable paged results for queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22356
diff
changeset
|
1394 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1395 static unsigned int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1396 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
|
1397 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1398 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
|
1399 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1400 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
|
1401 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1402 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1403 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1404 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
|
1405 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
|
1406 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1407 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1408 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1409 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1410 static int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1411 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
|
1412 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
|
1413 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1414 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1415 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1416 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1417 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1418 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
|
1419 unsigned int idx) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1420 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1421 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
|
1422 const char *const *strp; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1423 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1424 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
|
1425 return *strp; |
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 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1428 static const unsigned char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1429 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
|
1430 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
|
1431 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
|
1432 { |
19071
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1433 struct cassandra_result *result = (struct cassandra_result *)_result; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1434 const char *const *strp; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1435 const size_t *sizep; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1436 |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1437 strp = array_idx(&result->fields, idx); |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1438 sizep = array_idx(&result->field_sizes, idx); |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1439 *size_r = *sizep; |
5119a85795f7
cassandra: Implemented support for binary values.
Timo Sirainen <tss@iki.fi>
parents:
19058
diff
changeset
|
1440 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
|
1441 } |
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 static const char * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1444 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
|
1445 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
|
1446 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1447 i_unreached(); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1448 } |
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 static const char *const * |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1451 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
|
1452 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1453 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
|
1454 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1455 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
|
1456 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1457 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1458 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
|
1459 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1460 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
|
1461 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1462 if (result->error != NULL) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1463 return result->error; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1464 return "FIXME"; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1465 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1466 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1467 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
|
1468 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
|
1469 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1470 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
|
1471 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1472 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
|
1473 ctx->ctx.db = db; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1474 ctx->refcount = 1; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1475 return &ctx->ctx; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1476 } |
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 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
|
1479 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
|
1480 { |
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
|
1481 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
|
1482 |
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
|
1483 *_ctx = NULL; |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1484 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
|
1485 if (--ctx->refcount > 0) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1486 return; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1487 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1488 i_free(ctx->query); |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1489 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
|
1490 i_free(ctx); |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1491 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1492 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1493 static void |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1494 transaction_set_failed(struct cassandra_transaction_context *ctx, |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1495 const char *error) |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1496 { |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1497 if (ctx->failed) { |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1498 i_assert(ctx->error != NULL); |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1499 } else { |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1500 i_assert(ctx->error == NULL); |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1501 ctx->failed = TRUE; |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1502 ctx->error = i_strdup(error); |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1503 } |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1504 } |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1505 |
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1506 static void |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1507 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
|
1508 { |
19047
c33868915764
cassandra: Split consistency setting to read_consistency and write_consistency.
Timo Sirainen <tss@iki.fi>
parents:
18848
diff
changeset
|
1509 struct cassandra_transaction_context *ctx = context; |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1510 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
|
1511 |
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
|
1512 i_zero(&commit_result); |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1513 if (sql_result_next_row(result) < 0) { |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1514 commit_result.error = sql_result_get_error(result); |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1515 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
|
1516 } |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1517 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
|
1518 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
|
1519 } |
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 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1522 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
|
1523 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
|
1524 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1525 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
|
1526 (struct cassandra_transaction_context *)_ctx; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1527 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
|
1528 enum cassandra_query_type query_type; |
20529
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1529 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
|
1530 |
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
|
1531 i_zero(&result); |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1532 ctx->callback = callback; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1533 ctx->context = context; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1534 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1535 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
|
1536 if (ctx->failed) |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1537 result.error = ctx->error; |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1538 |
6450eb09e83c
cassandra: Support commit2 API
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
1539 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
|
1540 driver_cassandra_transaction_unref(&ctx); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1541 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1542 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1543 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1544 /* just a single query, send it */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1545 const char *query = ctx->query != NULL ? |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1546 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
|
1547 if (strncasecmp(query, "DELETE ", 7) == 0) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1548 query_type = CASSANDRA_QUERY_TYPE_DELETE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1549 else |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1550 query_type = CASSANDRA_QUERY_TYPE_WRITE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1551 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1552 if (ctx->query != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1553 driver_cassandra_query_full(_ctx->db, query, query_type, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1554 transaction_commit_callback, ctx); |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1555 } else { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1556 ctx->stmt->result = |
22616
629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22615
diff
changeset
|
1557 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
|
1558 transaction_commit_callback, ctx); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1559 if (ctx->stmt->cass_stmt == NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1560 /* wait for prepare to finish */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1561 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1562 ctx->stmt->result->statement = ctx->stmt->cass_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1563 (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
|
1564 pool_unref(&ctx->stmt->stmt.pool); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1565 } |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1566 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1567 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1568 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1569 static void |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1570 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
|
1571 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1572 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
|
1573 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
|
1574 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
|
1575 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
|
1576 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1577 /* 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
|
1578 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
|
1579 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
|
1580 else |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1581 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
|
1582 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
|
1583 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
|
1584 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
|
1585 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1586 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
|
1587 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
|
1588 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
|
1589 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1590 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1591 static int |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1592 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
|
1593 const char **error_r) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1594 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1595 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
|
1596 (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
|
1597 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1598 if (ctx->stmt != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1599 /* 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
|
1600 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
|
1601 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1602 |
22528
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1603 if (ctx->query != NULL && !ctx->failed) |
18841
34fad121ec7b
cassandra: Error handling cleanup.
Timo Sirainen <tss@iki.fi>
parents:
18840
diff
changeset
|
1604 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
|
1605 *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
|
1606 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1607 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
|
1608 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
|
1609 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
|
1610 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
|
1611 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1612 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1613 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1614 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
|
1615 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1616 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
|
1617 (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
|
1618 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1619 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
|
1620 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
|
1621 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1622 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1623 static void |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1624 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
|
1625 unsigned int *affected_rows) |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1626 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1627 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
|
1628 (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
|
1629 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1630 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
|
1631 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1632 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
|
1633 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
|
1634 return; |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1635 } |
348e82e819b0
cassandra: sql_transaction_commit*() cleanup - handle multiple query failures earlier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22527
diff
changeset
|
1636 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
|
1637 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1638 |
19072
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1639 static const char * |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1640 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
|
1641 const unsigned char *data, size_t size) |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1642 { |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1643 string_t *str = t_str_new(128); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1644 |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1645 str_append(str, "0x"); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1646 binary_to_hex_append(str, data, size); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1647 return str_c(str); |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1648 } |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
1649 |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1650 static CassError |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1651 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
|
1652 unsigned int column_idx, int64_t value) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1653 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1654 const CassDataType *data_type; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1655 CassValueType value_type; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1656 |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1657 i_assert(stmt->prep != NULL); |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1658 |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1659 /* 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
|
1660 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
|
1661 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
|
1662 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1663 switch (value_type) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1664 case CASS_VALUE_TYPE_INT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1665 if (value < -2147483648 || value > 2147483647) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1666 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1667 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
|
1668 case CASS_VALUE_TYPE_TIMESTAMP: |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1669 case CASS_VALUE_TYPE_BIGINT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1670 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
|
1671 case CASS_VALUE_TYPE_SMALL_INT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1672 if (value < -32768 || value > 32767) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1673 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1674 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
|
1675 case CASS_VALUE_TYPE_TINY_INT: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1676 if (value < -128 || value > 127) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1677 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1678 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
|
1679 default: |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1680 return CASS_ERROR_LIB_INVALID_VALUE_TYPE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1681 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1682 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1683 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1684 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
|
1685 const struct cassandra_sql_arg *arg) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1686 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1687 CassError rc; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1688 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1689 if (arg->value_str != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1690 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
|
1691 arg->value_str); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1692 } else if (arg->value_binary != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1693 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
|
1694 arg->value_binary, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1695 arg->value_binary_size); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1696 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1697 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
|
1698 arg->value_int64); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1699 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1700 if (rc != CASS_OK) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1701 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
|
1702 stmt->stmt.query_template, arg->column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1703 cass_error_desc(rc)); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1704 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1705 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1706 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1707 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
|
1708 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1709 const struct cassandra_sql_arg *arg; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1710 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1711 if (stmt->prep->prepared == NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1712 i_assert(stmt->prep->error != NULL); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1713 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1714 if (stmt->result != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1715 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
|
1716 result_finish(stmt->result); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1717 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1718 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1719 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1720 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
|
1721 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1722 if (stmt->pending_timestamp != 0) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1723 cass_statement_set_timestamp(stmt->cass_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1724 stmt->pending_timestamp); |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1727 if (array_is_created(&stmt->pending_args)) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1728 array_foreach(&stmt->pending_args, arg) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1729 prepare_finish_arg(stmt, arg); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1730 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1731 if (stmt->result != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1732 stmt->result->statement = stmt->cass_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1733 (void)driver_cassandra_send_query(stmt->result); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1734 pool_unref(&stmt->stmt.pool); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1735 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1736 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1737 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1738 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1739 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
|
1740 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1741 struct cassandra_sql_statement *const *stmtp; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1742 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1743 array_foreach(&prep_stmt->pending_statements, stmtp) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1744 prepare_finish_statement(*stmtp); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1745 array_clear(&prep_stmt->pending_statements); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1746 } |
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 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
|
1749 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1750 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
|
1751 CassError error = cass_future_error_code(future); |
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 (error != CASS_OK) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1754 const char *errmsg; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1755 size_t errsize; |
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 cass_future_error_message(future, &errmsg, &errsize); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1758 i_free(prep_stmt->error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1759 prep_stmt->error = i_strndup(errmsg, errsize); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1760 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1761 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
|
1762 } |
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 prepare_finish_pending_statements(prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1765 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1766 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1767 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
|
1768 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1769 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
|
1770 CassFuture *future; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1771 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1772 if (!SQL_DB_IS_READY(&db->api)) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1773 if (!prep_stmt->pending) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1774 prep_stmt->pending = TRUE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1775 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
|
1776 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1777 if (sql_connect(&db->api) < 0) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1778 i_unreached(); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1779 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1780 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1781 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1782 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1783 /* 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
|
1784 i_free_and_null(prep_stmt->error); |
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 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
|
1787 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
|
1788 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1789 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1790 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
|
1791 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1792 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
|
1793 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1794 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
|
1795 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1796 array_foreach(&db->pending_prepares, prep_stmtp) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1797 (*prep_stmtp)->pending = FALSE; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1798 prepare_start(*prep_stmtp); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1799 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1800 array_clear(&db->pending_prepares); |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1803 static struct sql_prepared_statement * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1804 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
|
1805 const char *query_template) |
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_sql_prepared_statement *prep_stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1808 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
|
1809 prep_stmt->prep_stmt.db = db; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1810 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
|
1811 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
|
1812 prepare_start(prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1813 return &prep_stmt->prep_stmt; |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1816 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1817 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
|
1818 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1819 struct cassandra_sql_prepared_statement *prep_stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1820 (struct cassandra_sql_prepared_statement *)_prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1821 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1822 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
|
1823 if (prep_stmt->prepared != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1824 cass_prepared_free(prep_stmt->prepared); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1825 array_free(&prep_stmt->pending_statements); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1826 i_free(prep_stmt->query_template); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1827 i_free(prep_stmt->error); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1828 i_free(prep_stmt); |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1831 static struct sql_statement * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1832 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
|
1833 const char *query_template ATTR_UNUSED) |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1834 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1835 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
|
1836 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1837 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
|
1838 stmt->stmt.pool = pool; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1839 return &stmt->stmt; |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1842 static struct sql_statement * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1843 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
|
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 (struct cassandra_sql_prepared_statement *)_prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1847 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
|
1848 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1849 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
|
1850 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1851 stmt->stmt.pool = pool; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1852 stmt->stmt.query_template = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1853 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
|
1854 stmt->prep = prep_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1855 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1856 if (prep_stmt->prepared != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1857 /* 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
|
1858 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
|
1859 } else { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1860 if (prep_stmt->error != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1861 prepare_start(prep_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1862 /* need to wait until prepare is finished */ |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1863 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
|
1864 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1865 return &stmt->stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1866 } |
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 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1869 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
|
1870 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1871 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1872 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1873 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1874 if (stmt->cass_stmt != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1875 cass_statement_free(stmt->cass_stmt); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1876 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1877 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1878 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1879 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
|
1880 const struct timespec *ts) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1881 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1882 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1883 (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
|
1884 cass_int64_t ts_usecs = |
062f94c547ce
cassandra: Timestamp should be in microseconds, not milliseconds
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22532
diff
changeset
|
1885 (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
|
1886 ts->tv_nsec / 1000; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1887 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1888 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
|
1889 cass_statement_set_timestamp(stmt->cass_stmt, ts_usecs); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1890 else |
22533
062f94c547ce
cassandra: Timestamp should be in microseconds, not milliseconds
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22532
diff
changeset
|
1891 stmt->pending_timestamp = ts_usecs; |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1892 } |
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 static struct cassandra_sql_arg * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1895 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
|
1896 unsigned int column_idx) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1897 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1898 struct cassandra_sql_arg *arg; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1899 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1900 if (!array_is_created(&stmt->pending_args)) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1901 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
|
1902 arg = array_append_space(&stmt->pending_args); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1903 arg->column_idx = column_idx; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1904 return arg; |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1907 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1908 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
|
1909 unsigned int column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1910 const char *value) |
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 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1913 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1914 if (stmt->cass_stmt != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1915 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
|
1916 else if (stmt->prep != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1917 struct cassandra_sql_arg *arg = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1918 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
|
1919 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
|
1920 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1921 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1922 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1923 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1924 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
|
1925 unsigned int column_idx, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1926 const void *value, size_t value_size) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1927 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1928 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1929 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1930 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1931 if (stmt->cass_stmt != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1932 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
|
1933 value, value_size); |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1934 } else if (stmt->prep != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1935 struct cassandra_sql_arg *arg = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1936 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
|
1937 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
|
1938 arg->value_binary_size = value_size; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1939 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1940 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1941 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1942 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1943 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
|
1944 unsigned int column_idx, int64_t value) |
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 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1947 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1948 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1949 if (stmt->cass_stmt != NULL) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1950 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
|
1951 else if (stmt->prep != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1952 struct cassandra_sql_arg *arg = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1953 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
|
1954 arg->value_int64 = value; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1955 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1956 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1957 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1958 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1959 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
|
1960 sql_query_callback_t *callback, void *context) |
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 struct cassandra_sql_statement *stmt = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1963 (struct cassandra_sql_statement *)_stmt; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1964 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
|
1965 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
|
1966 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
|
1967 |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1968 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
|
1969 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
|
1970 is_prepared, |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1971 callback, context); |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1972 if (stmt->cass_stmt != NULL) { |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1973 stmt->result->statement = stmt->cass_stmt; |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1974 } else if (stmt->prep != NULL) { |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1975 /* wait for prepare to finish */ |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1976 return; |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1977 } else { |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1978 stmt->result->statement = cass_statement_new(query, 0); |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1979 if (stmt->pending_timestamp != 0) { |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1980 cass_statement_set_timestamp(stmt->result->statement, |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1981 stmt->pending_timestamp); |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1982 } |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1983 } |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
1984 (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
|
1985 pool_unref(&_stmt->pool); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1986 } |
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 static struct sql_result * |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1989 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
|
1990 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1991 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
|
1992 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1993 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1994 static void |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1995 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
|
1996 struct sql_statement *_stmt, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1997 unsigned int *affected_rows) |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1998 { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
1999 struct cassandra_transaction_context *ctx = |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2000 (struct cassandra_transaction_context *)_ctx; |
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 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2004 i_assert(affected_rows == NULL); |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2005 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2006 if (ctx->query != NULL || ctx->stmt != NULL) { |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2007 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
|
2008 return; |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2009 } |
22615
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2010 if (stmt->prep != NULL) |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2011 ctx->stmt = stmt; |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2012 else |
ac7bd203229d
cassandra: Fix using bigint types with unprepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22533
diff
changeset
|
2013 ctx->query = i_strdup(sql_statement_get_query(_stmt)); |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2014 } |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2015 |
18640
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2016 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
|
2017 .name = "cassandra", |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2018 .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
|
2019 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2020 .v = { |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2021 .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
|
2022 .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
|
2023 .connect = driver_cassandra_connect, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2024 .disconnect = driver_cassandra_disconnect, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2025 .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
|
2026 .exec = driver_cassandra_exec, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2027 .query = driver_cassandra_query, |
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2028 .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
|
2029 |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2030 .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
|
2031 .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
|
2032 .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
|
2033 .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
|
2034 |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2035 .update = driver_cassandra_update, |
19072
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
19071
diff
changeset
|
2036 |
22513
59b0c5ee8adf
lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22432
diff
changeset
|
2037 .escape_blob = driver_cassandra_escape_blob, |
22530
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2038 |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2039 .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
|
2040 .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
|
2041 .statement_init = driver_cassandra_statement_init, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2042 .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
|
2043 .statement_abort = driver_cassandra_statement_abort, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2044 .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
|
2045 .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
|
2046 .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
|
2047 .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
|
2048 .statement_query = driver_cassandra_statement_query, |
5f7b8aa18c27
cassandra: Add support for prepared statements
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22529
diff
changeset
|
2049 .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
|
2050 .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
|
2051 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2052 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2053 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2054 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
|
2055 .v = { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2056 driver_cassandra_result_free, |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2057 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
|
2058 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
|
2059 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
|
2060 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
|
2061 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
|
2062 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
|
2063 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
|
2064 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
|
2065 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
|
2066 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
|
2067 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2068 }; |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2069 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2070 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
|
2071 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2072 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
|
2073 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
|
2074 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2075 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
|
2076 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2077 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
|
2078 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2079 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2080 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
|
2081 { |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2082 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
|
2083 } |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2084 |
3725c601dbaf
lib-sql: Added support for Cassandra CQL as lib-sql backend.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2085 #endif |