cassandra-driver 3.2.0-java → 3.2.1-java
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|