cql-rb 2.0.3 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e88f9a36365441fa61492560764b32e62d390c77
4
- data.tar.gz: 19a2ea3a083d33044364d7bed38fe7ba6edb8d28
3
+ metadata.gz: ad8c87f3d7ccc81d5b43765b4702882db21aab6f
4
+ data.tar.gz: c997140f2444a259a62c79a90118f7a1d634b3d1
5
5
  SHA512:
6
- metadata.gz: bae2fb550cae96e4c2451f33a9637094365e351649555b95a09a683454ead2a49cb4d7f3f48b1082848b2647083de3743e3aa6874dc56e34ddddcdd78d7b7c9e
7
- data.tar.gz: c81ce3639c98d94b6f294ff6e10316251f45b720f533af245f34b745d29f5b4905a34725fd8b378e2aea3ecfc763c011d3cdb38a9c727f52bc5a727f4104e131
6
+ metadata.gz: d409efa148092c538432f7d7ad0aa19dfd72370e1596415c5a69a8bb7a9918d0a5ca674f29a24115aa7cc62945c41ac8278f87540bd5e20becaabcf5039cfc44
7
+ data.tar.gz: ee05afbf07ba5453e50bdaffe3a3c761a4419285fb8132d2241b334e32c9f25ee4da2f527b100d6f58a0c3fcbd4f6b56de9de873d2a9bac54dc0486d5c1c4c6e
@@ -203,7 +203,6 @@ module Cql
203
203
  complete_request(id, @current_frame.body)
204
204
  end
205
205
  @current_frame = @frame_decoder.decode_frame(@read_buffer)
206
- flush_request_queue
207
206
  end
208
207
  end
209
208
 
@@ -233,6 +232,7 @@ module Cql
233
232
  if response.is_a?(Protocol::SetKeyspaceResultResponse)
234
233
  @keyspace = response.keyspace
235
234
  end
235
+ flush_request_queue
236
236
  unless promise.timed_out?
237
237
  promise.fulfill(response)
238
238
  end
@@ -256,7 +256,7 @@ module Cql
256
256
  if @request_queue_out.any? && (id = next_stream_id)
257
257
  promise = @request_queue_out.shift
258
258
  if promise.timed_out?
259
- id = nil
259
+ next
260
260
  else
261
261
  frame = promise.frame
262
262
  @promises[id] = promise
@@ -43,8 +43,13 @@ module Cql
43
43
  buffer = decompress(buffer, size)
44
44
  size = buffer.size
45
45
  end
46
- extra_length = buffer.length - size
47
- trace_id = tracing == 2 ? buffer.read_uuid : nil
46
+ if tracing == 2
47
+ trace_id = buffer.read_uuid
48
+ size -= 16
49
+ else
50
+ trace_id = nil
51
+ end
52
+ extra_length = buffer.length - size
48
53
  response = Response.decode(opcode, protocol_version, buffer, size, trace_id)
49
54
  if buffer.length > extra_length
50
55
  buffer.discard(buffer.length - extra_length)
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Cql
4
- VERSION = '2.0.3'.freeze
4
+ VERSION = '2.0.4'.freeze
5
5
  end
@@ -112,6 +112,16 @@ module Cql
112
112
  futures[128].should be_resolved
113
113
  end
114
114
 
115
+ it 'flushes the request queue before it resolves the future of the just completed request' do
116
+ connection.stub(:write)
117
+ futures = Array.new(130) { protocol_handler.send_request(request) }
118
+ f = futures[0].map do
119
+ connection.should have_received(:write).exactly(129).times
120
+ end
121
+ connection.data_listener.call([0x81, 0, 0, 2, 0].pack('C4N'))
122
+ f.value
123
+ end
124
+
115
125
  context 'when a compressor is specified' do
116
126
  let :protocol_handler do
117
127
  described_class.new(connection, scheduler, 1, compressor)
@@ -248,6 +258,27 @@ module Cql
248
258
  128.times { |i| connection.data_listener.call([0x81, 0, i, 2, 0].pack('C4N')) }
249
259
  write_count.should == 128
250
260
  end
261
+
262
+ it 'does not stop sending queued requests even when one has timed out' do
263
+ write_count = 0
264
+ connection.stub(:write) do |s, &h|
265
+ write_count += 1
266
+ if h
267
+ h.call(buffer)
268
+ else
269
+ buffer << s
270
+ end
271
+ end
272
+ 128.times do
273
+ protocol_handler.send_request(request)
274
+ end
275
+ scheduler.stub(:schedule_timer).with(5).and_return(timer_promise.future)
276
+ f1 = protocol_handler.send_request(request, 5)
277
+ f2 = protocol_handler.send_request(request)
278
+ timer_promise.fulfill
279
+ connection.data_listener.call([0x81, 0, 0, 2, 0].pack('C4N'))
280
+ write_count.should == 129
281
+ end
251
282
  end
252
283
  end
253
284
 
@@ -78,9 +78,14 @@ module Cql
78
78
 
79
79
  it 'extracts a trace ID' do
80
80
  buffer = CqlByteBuffer.new
81
- buffer << "\x81\x02\x00\x08\x00\x00\x00\x14\a\xE4\xBE\x10?\x03\x11\xE3\x951\xFBr\xEF\xF0_\xBB\x00\x00\x00\x01"
81
+ buffer << "\x81\x02\x00\x08\x00\x00\x00\x52"
82
+ buffer << "\a\xE4\xBE\x10?\x03\x11\xE3\x951\xFBr\xEF\xF0_\xBB"
83
+ buffer << "\x00\x00\x00\x02\x00\x00\x00\x04phil\x00\x00\x00\x0dphil@heck.com\xff\xff\xff\xff\x00\x00\x00\x03sue\x00\x00\x00\x0dsue@inter.net\xff\xff\xff\xff"
84
+ buffer << "extra"
85
+ buffer << "bytes"
82
86
  frame = decoder.decode_frame(buffer)
83
87
  frame.body.trace_id.should == Uuid.new('07e4be10-3f03-11e3-9531-fb72eff05fbb')
88
+ buffer.to_s.should == 'bytes'
84
89
  end
85
90
 
86
91
  it 'complains when the frame is a request frame' do
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cql-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theo Hultberg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-10 00:00:00.000000000 Z
11
+ date: 2014-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ione
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1'
27
27
  description: A pure Ruby CQL3 driver for Cassandra
@@ -31,7 +31,7 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
- - .yardopts
34
+ - ".yardopts"
35
35
  - README.md
36
36
  - lib/cql.rb
37
37
  - lib/cql/auth.rb
@@ -160,17 +160,17 @@ require_paths:
160
160
  - lib
161
161
  required_ruby_version: !ruby/object:Gem::Requirement
162
162
  requirements:
163
- - - '>='
163
+ - - ">="
164
164
  - !ruby/object:Gem::Version
165
165
  version: 1.9.3
166
166
  required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  requirements:
168
- - - '>='
168
+ - - ">="
169
169
  - !ruby/object:Gem::Version
170
170
  version: '0'
171
171
  requirements: []
172
172
  rubyforge_project:
173
- rubygems_version: 2.2.1
173
+ rubygems_version: 2.2.2
174
174
  signing_key:
175
175
  specification_version: 4
176
176
  summary: Cassandra CQL3 driver