taps 0.2.11 → 0.2.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 11
2
+ :patch: 12
3
3
  :major: 0
4
4
  :minor: 2
@@ -118,8 +118,8 @@ class ClientSession
118
118
  db.tables.each do |table_name|
119
119
  table = db[table_name]
120
120
  count = table.count
121
- columns = table.columns
122
- order = columns.include?(:id) ? :id : columns.first
121
+ primary_key = db.primary_key(table_name.to_sym)
122
+ order = primary_key ? [primary_key.to_sym] : table.columns
123
123
  chunksize = self.default_chunksize
124
124
 
125
125
  progress = ProgressBar.new(table_name.to_s, count)
@@ -128,7 +128,7 @@ class ClientSession
128
128
  loop do
129
129
  row_size = 0
130
130
  chunksize = Taps::Utils.calculate_chunksize(chunksize) do |c|
131
- rows = Taps::Utils.format_data(table.order(order).limit(c, offset).all)
131
+ rows = Taps::Utils.format_data(table.order(*order).limit(c, offset).all)
132
132
  break if rows == { }
133
133
 
134
134
  row_size = rows[:data].size
@@ -1,3 +1,5 @@
1
+ require 'thread'
2
+
1
3
  Sequel::Model.db = Sequel.connect(Taps::Config.taps_database_url)
2
4
 
3
5
  class DbSession < Sequel::Model
@@ -9,17 +11,51 @@ class DbSession < Sequel::Model
9
11
  timestamp :last_access
10
12
  end
11
13
 
14
+ @@connections = {}
15
+ @@mutex = Mutex.new
16
+
12
17
  def connection
13
- @@connections ||= {}
14
- @@connections[key] ||= Sequel.connect(database_url)
18
+ @@mutex.synchronize {
19
+ conn =
20
+ if @@connections.key?(key)
21
+ @@connections[key].first
22
+ else
23
+ Sequel.connect(database_url)
24
+ end
25
+ @@connections[key] = [conn, Time.now]
26
+ return conn
27
+ }
15
28
  end
16
29
 
17
30
  def disconnect
18
- if defined? @@connections and @@connections[key]
19
- @@connections[key].disconnect
20
- @@connections.delete key
21
- end
31
+ @@mutex.synchronize {
32
+ if @@connections.key?(key)
33
+ conn, time = @@connections.delete(key)
34
+ conn.disconnect
35
+ end
36
+ }
22
37
  end
38
+
39
+ # Removes connections that have not been accessed within the
40
+ # past thirty seconds.
41
+ def self.cleanup
42
+ @@mutex.synchronize {
43
+ now = Time.now
44
+ @@connections.each do |key, (conn, time)|
45
+ if now - time > 30
46
+ @@connections.delete(key)
47
+ conn.disconnect
48
+ end
49
+ end
50
+ }
51
+ end
52
+
53
+ Thread.new {
54
+ while true
55
+ sleep 30
56
+ cleanup
57
+ end
58
+ }.run
23
59
  end
24
60
 
25
61
  DbSession.create_table! unless DbSession.table_exists?
@@ -117,9 +117,9 @@ class Server < Sinatra::Default
117
117
 
118
118
  db = session.connection
119
119
  table = db[params[:table].to_sym]
120
- columns = table.columns
121
- order = columns.include?(:id) ? :id : columns.first
122
- raw_data = Marshal.dump(Taps::Utils.format_data(table.order(order).limit(chunk, offset).all))
120
+ primary_key = db.primary_key(params[:table].to_sym)
121
+ order = primary_key ? [primary_key.to_sym] : table.columns
122
+ raw_data = Marshal.dump(Taps::Utils.format_data(table.order(*order).limit(chunk, offset).all))
123
123
  gzip_data = Taps::Utils.gzip(raw_data)
124
124
  response['Taps-Checksum'] = Taps::Utils.checksum(gzip_data).to_s
125
125
  response['Content-Type'] = "application/octet-stream"
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.11
4
+ version: 0.2.12
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-23 00:00:00 -07:00
13
+ date: 2009-03-31 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -88,17 +88,17 @@ files:
88
88
  - spec/server_spec.rb
89
89
  - spec/client_session_spec.rb
90
90
  - spec/utils_spec.rb
91
- - lib/taps/db_session.rb
92
91
  - lib/taps/progress_bar.rb
93
92
  - lib/taps/client_session.rb
93
+ - lib/taps/server.rb
94
+ - lib/taps/utils.rb
94
95
  - lib/taps/adapter_hacks.rb
95
96
  - lib/taps/adapter_hacks/invalid_text_limit.rb
96
97
  - lib/taps/adapter_hacks/non_rails_schema_dump.rb
97
98
  - lib/taps/schema.rb
98
99
  - lib/taps/config.rb
99
100
  - lib/taps/cli.rb
100
- - lib/taps/server.rb
101
- - lib/taps/utils.rb
101
+ - lib/taps/db_session.rb
102
102
  - README.rdoc
103
103
  - LICENSE
104
104
  - VERSION.yml