cassandra-driver 3.2.0-java → 3.2.1-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +12 -9
- data/lib/cassandra.rb +1 -1
- data/lib/cassandra/address_resolution.rb +1 -1
- data/lib/cassandra/address_resolution/policies/ec2_multi_region.rb +1 -1
- data/lib/cassandra/address_resolution/policies/none.rb +1 -1
- data/lib/cassandra/aggregate.rb +1 -1
- data/lib/cassandra/argument.rb +1 -1
- data/lib/cassandra/attr_boolean.rb +1 -1
- data/lib/cassandra/auth.rb +1 -1
- data/lib/cassandra/auth/providers.rb +1 -1
- data/lib/cassandra/auth/providers/password.rb +1 -1
- data/lib/cassandra/cassandra_logger.rb +1 -1
- data/lib/cassandra/cluster.rb +1 -1
- data/lib/cassandra/cluster/client.rb +1 -1
- data/lib/cassandra/cluster/connection_pool.rb +1 -1
- data/lib/cassandra/cluster/connector.rb +1 -1
- data/lib/cassandra/cluster/control_connection.rb +1 -1
- data/lib/cassandra/cluster/failed_connection.rb +1 -1
- data/lib/cassandra/cluster/metadata.rb +1 -1
- data/lib/cassandra/cluster/options.rb +1 -1
- data/lib/cassandra/cluster/registry.rb +5 -5
- data/lib/cassandra/cluster/schema.rb +1 -1
- data/lib/cassandra/cluster/schema/cql_type_parser.rb +1 -1
- data/lib/cassandra/cluster/schema/fetchers.rb +2 -2
- data/lib/cassandra/cluster/schema/fqcn_type_parser.rb +1 -1
- data/lib/cassandra/cluster/schema/partitioners.rb +1 -1
- data/lib/cassandra/cluster/schema/partitioners/murmur3.rb +1 -1
- data/lib/cassandra/cluster/schema/partitioners/ordered.rb +1 -1
- data/lib/cassandra/cluster/schema/partitioners/random.rb +1 -1
- data/lib/cassandra/cluster/schema/replication_strategies.rb +1 -1
- data/lib/cassandra/cluster/schema/replication_strategies/network_topology.rb +1 -1
- data/lib/cassandra/cluster/schema/replication_strategies/none.rb +1 -1
- data/lib/cassandra/cluster/schema/replication_strategies/simple.rb +1 -1
- data/lib/cassandra/column.rb +1 -1
- data/lib/cassandra/column_container.rb +2 -2
- data/lib/cassandra/compression.rb +1 -1
- data/lib/cassandra/compression/compressors/lz4.rb +1 -1
- data/lib/cassandra/compression/compressors/snappy.rb +1 -1
- data/lib/cassandra/custom_data.rb +1 -1
- data/lib/cassandra/driver.rb +1 -1
- data/lib/cassandra/errors.rb +1 -1
- data/lib/cassandra/execution/info.rb +1 -1
- data/lib/cassandra/execution/options.rb +1 -1
- data/lib/cassandra/execution/profile.rb +5 -2
- data/lib/cassandra/execution/profile_manager.rb +1 -1
- data/lib/cassandra/execution/trace.rb +1 -1
- data/lib/cassandra/executors.rb +1 -1
- data/lib/cassandra/function.rb +1 -1
- data/lib/cassandra/function_collection.rb +1 -1
- data/lib/cassandra/future.rb +1 -1
- data/lib/cassandra/host.rb +1 -1
- data/lib/cassandra/index.rb +1 -1
- data/lib/cassandra/keyspace.rb +1 -1
- data/lib/cassandra/listener.rb +1 -1
- data/lib/cassandra/load_balancing.rb +1 -1
- data/lib/cassandra/load_balancing/policies.rb +1 -1
- data/lib/cassandra/load_balancing/policies/dc_aware_round_robin.rb +1 -1
- data/lib/cassandra/load_balancing/policies/round_robin.rb +1 -1
- data/lib/cassandra/load_balancing/policies/token_aware.rb +1 -1
- data/lib/cassandra/load_balancing/policies/white_list.rb +1 -1
- data/lib/cassandra/materialized_view.rb +1 -1
- data/lib/cassandra/null_logger.rb +1 -1
- data/lib/cassandra/protocol.rb +1 -1
- data/lib/cassandra/protocol/coder.rb +1 -1
- data/lib/cassandra/protocol/cql_byte_buffer.rb +1 -1
- data/lib/cassandra/protocol/cql_protocol_handler.rb +57 -8
- data/lib/cassandra/protocol/request.rb +1 -1
- data/lib/cassandra/protocol/requests/auth_response_request.rb +1 -1
- data/lib/cassandra/protocol/requests/batch_request.rb +1 -1
- data/lib/cassandra/protocol/requests/credentials_request.rb +1 -1
- data/lib/cassandra/protocol/requests/execute_request.rb +1 -1
- data/lib/cassandra/protocol/requests/options_request.rb +1 -1
- data/lib/cassandra/protocol/requests/prepare_request.rb +1 -1
- data/lib/cassandra/protocol/requests/query_request.rb +1 -1
- data/lib/cassandra/protocol/requests/register_request.rb +1 -1
- data/lib/cassandra/protocol/requests/startup_request.rb +1 -1
- data/lib/cassandra/protocol/requests/void_query_request.rb +1 -1
- data/lib/cassandra/protocol/response.rb +1 -1
- data/lib/cassandra/protocol/responses/already_exists_error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/auth_challenge_response.rb +1 -1
- data/lib/cassandra/protocol/responses/auth_success_response.rb +1 -1
- data/lib/cassandra/protocol/responses/authenticate_response.rb +1 -1
- data/lib/cassandra/protocol/responses/error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/event_response.rb +1 -1
- data/lib/cassandra/protocol/responses/function_failure_error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/prepared_result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/raw_rows_result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/read_failure_error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/read_timeout_error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/ready_response.rb +1 -1
- data/lib/cassandra/protocol/responses/result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/rows_result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/schema_change_event_response.rb +1 -1
- data/lib/cassandra/protocol/responses/schema_change_result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/set_keyspace_result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/status_change_event_response.rb +1 -1
- data/lib/cassandra/protocol/responses/supported_response.rb +1 -1
- data/lib/cassandra/protocol/responses/topology_change_event_response.rb +1 -1
- data/lib/cassandra/protocol/responses/unavailable_error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/unprepared_error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/void_result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/write_failure_error_response.rb +1 -1
- data/lib/cassandra/protocol/responses/write_timeout_error_response.rb +1 -1
- data/lib/cassandra/protocol/v1.rb +1 -1
- data/lib/cassandra/protocol/v3.rb +1 -1
- data/lib/cassandra/protocol/v4.rb +1 -1
- data/lib/cassandra/reconnection.rb +1 -1
- data/lib/cassandra/reconnection/policies.rb +1 -1
- data/lib/cassandra/reconnection/policies/constant.rb +1 -1
- data/lib/cassandra/reconnection/policies/exponential.rb +1 -1
- data/lib/cassandra/result.rb +1 -1
- data/lib/cassandra/retry.rb +1 -1
- data/lib/cassandra/retry/policies.rb +1 -1
- data/lib/cassandra/retry/policies/default.rb +1 -1
- data/lib/cassandra/retry/policies/downgrading_consistency.rb +1 -1
- data/lib/cassandra/retry/policies/fallthrough.rb +1 -1
- data/lib/cassandra/session.rb +8 -4
- data/lib/cassandra/statement.rb +1 -1
- data/lib/cassandra/statements.rb +1 -1
- data/lib/cassandra/statements/batch.rb +1 -1
- data/lib/cassandra/statements/bound.rb +1 -1
- data/lib/cassandra/statements/prepared.rb +1 -1
- data/lib/cassandra/statements/simple.rb +1 -1
- data/lib/cassandra/statements/void.rb +1 -1
- data/lib/cassandra/table.rb +1 -1
- data/lib/cassandra/time.rb +1 -1
- data/lib/cassandra/time_uuid.rb +1 -1
- data/lib/cassandra/timestamp_generator.rb +1 -1
- data/lib/cassandra/timestamp_generator/simple.rb +1 -1
- data/lib/cassandra/timestamp_generator/ticking_on_duplicate.rb +1 -1
- data/lib/cassandra/trigger.rb +1 -1
- data/lib/cassandra/tuple.rb +1 -1
- data/lib/cassandra/types.rb +1 -1
- data/lib/cassandra/udt.rb +1 -1
- data/lib/cassandra/util.rb +1 -1
- data/lib/cassandra/uuid.rb +1 -1
- data/lib/cassandra/uuid/generator.rb +1 -1
- data/lib/cassandra/version.rb +2 -2
- data/lib/cassandra_murmur3.jar +0 -0
- data/lib/datastax/cassandra.rb +1 -1
- metadata +3 -4
data/lib/cassandra/driver.rb
CHANGED
data/lib/cassandra/errors.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
3
|
#--
|
|
4
|
-
# Copyright
|
|
4
|
+
# Copyright DataStax, Inc.
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
@@ -114,7 +114,10 @@ module Cassandra
|
|
|
114
114
|
timeout = options[:timeout]
|
|
115
115
|
|
|
116
116
|
unless timeout.nil?
|
|
117
|
-
Util.assert_instance_of(::Numeric,
|
|
117
|
+
Util.assert_instance_of(::Numeric,
|
|
118
|
+
timeout,
|
|
119
|
+
":timeout must be a number of seconds,
|
|
120
|
+
#{timeout.inspect} given")
|
|
118
121
|
Util.assert(timeout > 0, ":timeout must be greater than 0, #{timeout} given")
|
|
119
122
|
end
|
|
120
123
|
end
|
data/lib/cassandra/executors.rb
CHANGED
data/lib/cassandra/function.rb
CHANGED
data/lib/cassandra/future.rb
CHANGED
data/lib/cassandra/host.rb
CHANGED
data/lib/cassandra/index.rb
CHANGED
data/lib/cassandra/keyspace.rb
CHANGED
data/lib/cassandra/listener.rb
CHANGED
data/lib/cassandra/protocol.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
3
|
#--
|
|
4
|
-
# Copyright
|
|
4
|
+
# Copyright DataStax, Inc.
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
@@ -170,7 +170,7 @@ module Cassandra
|
|
|
170
170
|
def send_request(request, timeout = nil, with_heartbeat = true)
|
|
171
171
|
return Ione::Future.failed(Errors::IOError.new('Connection closed')) if closed?
|
|
172
172
|
schedule_heartbeat if with_heartbeat
|
|
173
|
-
promise = RequestPromise.new(request, timeout)
|
|
173
|
+
promise = RequestPromise.new(request, timeout, @scheduler)
|
|
174
174
|
id = nil
|
|
175
175
|
@lock.lock
|
|
176
176
|
begin
|
|
@@ -256,11 +256,14 @@ module Cassandra
|
|
|
256
256
|
|
|
257
257
|
attr_reader :request, :timeout
|
|
258
258
|
attr_boolean :timed_out
|
|
259
|
+
attr_accessor :timer
|
|
259
260
|
|
|
260
|
-
def initialize(request, timeout)
|
|
261
|
+
def initialize(request, timeout, scheduler)
|
|
261
262
|
@request = request
|
|
262
263
|
@timeout = timeout
|
|
263
264
|
@timed_out = false
|
|
265
|
+
@scheduler = scheduler
|
|
266
|
+
@lock = Mutex.new
|
|
264
267
|
super()
|
|
265
268
|
end
|
|
266
269
|
|
|
@@ -272,6 +275,56 @@ module Cassandra
|
|
|
272
275
|
# rubocop:enable Style/SignalException
|
|
273
276
|
end
|
|
274
277
|
end
|
|
278
|
+
|
|
279
|
+
def maybe_start_timer
|
|
280
|
+
# This is more complicated than one would expect. First, we want to start a timer
|
|
281
|
+
# if a timeout is set. But there is a race condition where send_request creates
|
|
282
|
+
# a fresh promise and adds it to @promises, but another thread handles a socket
|
|
283
|
+
# closure event and fails all known promises. When a promise fails, we want to cancel
|
|
284
|
+
# the timer, if set. So, we synchronize access to @timer to be sure we don't set up
|
|
285
|
+
# and cancel the timer at the same time. However, if promise.fail runs first, there
|
|
286
|
+
# will be no timer to cancel, and then when maybe_start_timer gets called in the other
|
|
287
|
+
# thread, it'll create a timer on a promise that no one is going to action on going forward.
|
|
288
|
+
# So, that leads to leaking the timer until it times out. To avoid this, we want to
|
|
289
|
+
# check that the future of the promise isn't completed before starting the timer.
|
|
290
|
+
|
|
291
|
+
return if @timeout.nil?
|
|
292
|
+
return if @future.completed?
|
|
293
|
+
|
|
294
|
+
if @timer.nil?
|
|
295
|
+
@lock.synchronize do
|
|
296
|
+
if @timer.nil?
|
|
297
|
+
return if @future.completed?
|
|
298
|
+
@timer = @scheduler.schedule_timer(@timeout)
|
|
299
|
+
@timer.on_value { time_out! }
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def fulfill(response)
|
|
306
|
+
super
|
|
307
|
+
maybe_cancel_timer
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def fail(cause)
|
|
311
|
+
super
|
|
312
|
+
maybe_cancel_timer
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
def maybe_cancel_timer
|
|
316
|
+
return if @timeout.nil?
|
|
317
|
+
timer = nil
|
|
318
|
+
if @timer
|
|
319
|
+
@lock.synchronize do
|
|
320
|
+
if @timer
|
|
321
|
+
timer = @timer
|
|
322
|
+
@timer = nil
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
@scheduler.cancel_timer(timer) if timer
|
|
327
|
+
end
|
|
275
328
|
end
|
|
276
329
|
|
|
277
330
|
def receive_data(data)
|
|
@@ -312,11 +365,7 @@ module Cassandra
|
|
|
312
365
|
@connection.write do |buffer|
|
|
313
366
|
@frame_encoder.encode(buffer, request_promise.request, id)
|
|
314
367
|
end
|
|
315
|
-
|
|
316
|
-
@scheduler.schedule_timer(request_promise.timeout).on_value do
|
|
317
|
-
request_promise.time_out!
|
|
318
|
-
end
|
|
319
|
-
end
|
|
368
|
+
request_promise.maybe_start_timer
|
|
320
369
|
end
|
|
321
370
|
|
|
322
371
|
def socket_closed(cause)
|