cql-rb 2.0.3 → 2.0.4

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 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