taps 0.2.8 → 0.2.9
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.
- data/VERSION.yml +1 -1
- data/lib/taps/client_session.rb +18 -14
- data/lib/taps/config.rb +4 -0
- data/lib/taps/server.rb +3 -2
- data/spec/client_session_spec.rb +3 -3
- data/spec/server_spec.rb +1 -1
- metadata +6 -6
data/VERSION.yml
CHANGED
data/lib/taps/client_session.rb
CHANGED
@@ -41,7 +41,7 @@ class ClientSession
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def open_session
|
44
|
-
uri = server['sessions'].post('',
|
44
|
+
uri = server['sessions'].post('', http_headers)
|
45
45
|
server[uri]
|
46
46
|
end
|
47
47
|
|
@@ -50,7 +50,7 @@ class ClientSession
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def close_session
|
53
|
-
@session_resource.delete(
|
53
|
+
@session_resource.delete(http_headers) if @session_resource
|
54
54
|
end
|
55
55
|
|
56
56
|
def safe_url(url)
|
@@ -65,6 +65,10 @@ class ClientSession
|
|
65
65
|
safe_url(database_url)
|
66
66
|
end
|
67
67
|
|
68
|
+
def http_headers(extra = {})
|
69
|
+
{ :taps_version => Taps.compatible_version }.merge(extra)
|
70
|
+
end
|
71
|
+
|
68
72
|
def cmd_send
|
69
73
|
verify_server
|
70
74
|
cmd_send_schema
|
@@ -77,20 +81,20 @@ class ClientSession
|
|
77
81
|
puts "Sending indexes"
|
78
82
|
|
79
83
|
index_data = `#{File.dirname(__FILE__)}/../../bin/schema indexes #{database_url}`
|
80
|
-
session_resource['indexes'].post(index_data,
|
84
|
+
session_resource['indexes'].post(index_data, http_headers)
|
81
85
|
end
|
82
86
|
|
83
87
|
def cmd_send_schema
|
84
88
|
puts "Sending schema"
|
85
89
|
|
86
90
|
schema_data = `#{File.dirname(__FILE__)}/../../bin/schema dump #{database_url}`
|
87
|
-
session_resource['schema'].post(schema_data,
|
91
|
+
session_resource['schema'].post(schema_data, http_headers)
|
88
92
|
end
|
89
93
|
|
90
94
|
def cmd_send_reset_sequences
|
91
95
|
puts "Resetting sequences"
|
92
96
|
|
93
|
-
session_resource["reset_sequences"].post('',
|
97
|
+
session_resource["reset_sequences"].post('', http_headers)
|
94
98
|
end
|
95
99
|
|
96
100
|
def cmd_send_data
|
@@ -119,10 +123,9 @@ class ClientSession
|
|
119
123
|
|
120
124
|
chunksize = Taps::Utils.calculate_chunksize(chunksize) do
|
121
125
|
begin
|
122
|
-
session_resource["tables/#{table_name}"].post(gzip_data,
|
123
|
-
:taps_version => Taps.version,
|
126
|
+
session_resource["tables/#{table_name}"].post(gzip_data, http_headers({
|
124
127
|
:content_type => 'application/octet-stream',
|
125
|
-
:taps_checksum => Taps::Utils.checksum(gzip_data).to_s)
|
128
|
+
:taps_checksum => Taps::Utils.checksum(gzip_data).to_s}))
|
126
129
|
rescue RestClient::RequestFailed => e
|
127
130
|
# retry the same data, it got corrupted somehow.
|
128
131
|
if e.http_code == 412
|
@@ -146,6 +149,7 @@ class ClientSession
|
|
146
149
|
tables_with_counts = tables.inject({}) do |accum, table|
|
147
150
|
accum[table] = db[table].count
|
148
151
|
record_count += accum[table]
|
152
|
+
accum
|
149
153
|
end
|
150
154
|
|
151
155
|
[ tables_with_counts, record_count ]
|
@@ -196,7 +200,7 @@ class ClientSession
|
|
196
200
|
def fetch_table_rows(table_name, chunksize, offset)
|
197
201
|
response = nil
|
198
202
|
chunksize = Taps::Utils.calculate_chunksize(chunksize) do
|
199
|
-
response = session_resource["tables/#{table_name}/#{chunksize}?offset=#{offset}"].get(
|
203
|
+
response = session_resource["tables/#{table_name}/#{chunksize}?offset=#{offset}"].get(http_headers)
|
200
204
|
end
|
201
205
|
raise CorruptedData unless Taps::Utils.valid_data?(response.to_s, response.headers[:taps_checksum])
|
202
206
|
|
@@ -214,7 +218,7 @@ class ClientSession
|
|
214
218
|
retries = 0
|
215
219
|
max_retries = 1
|
216
220
|
begin
|
217
|
-
tables_with_counts = Marshal.load(session_resource['tables'].get(
|
221
|
+
tables_with_counts = Marshal.load(session_resource['tables'].get(http_headers))
|
218
222
|
record_count = tables_with_counts.values.inject(0) { |a,c| a += c }
|
219
223
|
rescue RestClient::Exception
|
220
224
|
retries += 1
|
@@ -229,7 +233,7 @@ class ClientSession
|
|
229
233
|
def cmd_receive_schema
|
230
234
|
puts "Receiving schema"
|
231
235
|
|
232
|
-
schema_data = session_resource['schema'].get(
|
236
|
+
schema_data = session_resource['schema'].get(http_headers)
|
233
237
|
output = Taps::Utils.load_schema(database_url, schema_data)
|
234
238
|
puts output if output
|
235
239
|
end
|
@@ -237,7 +241,7 @@ class ClientSession
|
|
237
241
|
def cmd_receive_indexes
|
238
242
|
puts "Receiving indexes"
|
239
243
|
|
240
|
-
index_data = session_resource['indexes'].get(
|
244
|
+
index_data = session_resource['indexes'].get(http_headers)
|
241
245
|
|
242
246
|
output = Taps::Utils.load_indexes(database_url, index_data)
|
243
247
|
puts output if output
|
@@ -256,10 +260,10 @@ class ClientSession
|
|
256
260
|
|
257
261
|
def verify_server
|
258
262
|
begin
|
259
|
-
server['/'].get(
|
263
|
+
server['/'].get(http_headers)
|
260
264
|
rescue RestClient::RequestFailed => e
|
261
265
|
if e.http_code == 417
|
262
|
-
puts "#{
|
266
|
+
puts "#{safe_remote_url} is running a different minor version of taps."
|
263
267
|
puts "#{e.response.body}"
|
264
268
|
exit(1)
|
265
269
|
else
|
data/lib/taps/config.rb
CHANGED
@@ -10,6 +10,10 @@ module Taps
|
|
10
10
|
"#{version_yml[:major]}.#{version_yml[:minor]}.#{version_yml[:patch]}"
|
11
11
|
end
|
12
12
|
|
13
|
+
def self.compatible_version
|
14
|
+
"#{version_yml[:major]}.#{version_yml[:minor]}"
|
15
|
+
end
|
16
|
+
|
13
17
|
class Config
|
14
18
|
class << self
|
15
19
|
attr_accessor :taps_database_url
|
data/lib/taps/server.rb
CHANGED
@@ -14,8 +14,9 @@ class Server < Sinatra::Default
|
|
14
14
|
end
|
15
15
|
|
16
16
|
before do
|
17
|
-
|
18
|
-
|
17
|
+
major, minor, patch = request.env['HTTP_TAPS_VERSION'].split('.') rescue []
|
18
|
+
unless "#{major}.#{minor}" == Taps.compatible_version
|
19
|
+
halt 417, "Taps v#{Taps.compatible_version}.x is required for this server"
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
data/spec/client_session_spec.rb
CHANGED
@@ -37,7 +37,7 @@ describe Taps::ClientSession do
|
|
37
37
|
@client.stubs(:server).returns(mock('server'))
|
38
38
|
@request = mock('request')
|
39
39
|
@client.server.expects(:[]).with('/').returns(@request)
|
40
|
-
@request.expects(:get).with({:taps_version => Taps.
|
40
|
+
@request.expects(:get).with({:taps_version => Taps.compatible_version})
|
41
41
|
|
42
42
|
lambda { @client.verify_server }.should.not.raise
|
43
43
|
end
|
@@ -62,7 +62,7 @@ describe Taps::ClientSession do
|
|
62
62
|
it "fetches remote tables info from taps server" do
|
63
63
|
@marshal_data = Marshal.dump({ :mytable => 2 })
|
64
64
|
@client.session_resource.stubs(:[]).with('tables').returns(mock('tables'))
|
65
|
-
@client.session_resource['tables'].stubs(:get).with(:taps_version => Taps.
|
65
|
+
@client.session_resource['tables'].stubs(:get).with(:taps_version => Taps.compatible_version).returns(@marshal_data)
|
66
66
|
@client.fetch_remote_tables_info.should == [ { :mytable => 2 }, 2 ]
|
67
67
|
end
|
68
68
|
|
@@ -73,7 +73,7 @@ describe Taps::ClientSession do
|
|
73
73
|
|
74
74
|
@response = mock('response')
|
75
75
|
@client.session_resource.stubs(:[]).with('tables/mytable/1000?offset=0').returns(mock('table resource'))
|
76
|
-
@client.session_resource['tables/mytable/1000?offset=0'].expects(:get).with(:taps_version => Taps.
|
76
|
+
@client.session_resource['tables/mytable/1000?offset=0'].expects(:get).with(:taps_version => Taps.compatible_version).returns(@response)
|
77
77
|
@response.stubs(:to_s).returns(@gzip_data)
|
78
78
|
@response.stubs(:headers).returns({ :taps_checksum => Taps::Utils.checksum(@gzip_data) })
|
79
79
|
@client.fetch_table_rows('mytable', 1000, 0).should == [ 1000, { :header => [:x, :y], :data => [[1, 2], [3, 4]] } ]
|
data/spec/server_spec.rb
CHANGED
@@ -21,7 +21,7 @@ describe Taps::Server do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "verifies the client taps version" do
|
24
|
-
get('/', { }, { 'HTTP_AUTHORIZATION' => @auth_header, 'HTTP_TAPS_VERSION' => Taps.
|
24
|
+
get('/', { }, { 'HTTP_AUTHORIZATION' => @auth_header, 'HTTP_TAPS_VERSION' => Taps.compatible_version })
|
25
25
|
status.should == 200
|
26
26
|
end
|
27
27
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricardo Chimal, Jr.
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-03-
|
13
|
+
date: 2009-03-18 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -84,21 +84,21 @@ extra_rdoc_files: []
|
|
84
84
|
|
85
85
|
files:
|
86
86
|
- spec/base.rb
|
87
|
+
- spec/schema_spec.rb
|
87
88
|
- spec/utils_spec.rb
|
88
|
-
- spec/server_spec.rb
|
89
89
|
- spec/client_session_spec.rb
|
90
|
-
- spec/
|
90
|
+
- spec/server_spec.rb
|
91
91
|
- lib/taps/db_session.rb
|
92
92
|
- lib/taps/progress_bar.rb
|
93
|
-
- lib/taps/server.rb
|
94
93
|
- lib/taps/cli.rb
|
95
94
|
- lib/taps/adapter_hacks.rb
|
96
95
|
- lib/taps/adapter_hacks/invalid_text_limit.rb
|
97
96
|
- lib/taps/adapter_hacks/non_rails_schema_dump.rb
|
98
97
|
- lib/taps/schema.rb
|
98
|
+
- lib/taps/config.rb
|
99
99
|
- lib/taps/client_session.rb
|
100
|
+
- lib/taps/server.rb
|
100
101
|
- lib/taps/utils.rb
|
101
|
-
- lib/taps/config.rb
|
102
102
|
- README.rdoc
|
103
103
|
- LICENSE
|
104
104
|
- VERSION.yml
|