em-sequel-async 0.1.1 → 0.1.2

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 CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "em-sequel-async"
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Scott Tadman"]
12
- s.date = "2012-11-15"
12
+ s.date = "2012-11-22"
13
13
  s.description = "Implements a number of asynchronous helper methods for Sequel"
14
14
  s.email = "scott@twg.ca"
15
15
  s.extra_rdoc_files = [
@@ -94,6 +94,11 @@ class EmSequelAsync::Mysql
94
94
  end
95
95
  end
96
96
 
97
+ def remove(connection)
98
+ @connections.delete(connection)
99
+ @connections_active.delete(connection)
100
+ end
101
+
97
102
  def delegate_query(connection, query, callback)
98
103
  @connections[connection] = [ query, callback ]
99
104
 
@@ -108,12 +113,38 @@ class EmSequelAsync::Mysql
108
113
  self.add(connection)
109
114
  end
110
115
  deferrable.errback do |err|
111
- log(:error, "(%.6fs) [ERR] %s (%s: %s)" % [ Time.now - start, query, err.class, err ])
112
- log(:error, err.backtrace)
116
+ handled = false
113
117
 
114
- callback and callback.call(false, (Time.now - start).to_f, connection, err)
118
+ case (err)
119
+ when Mysql2::Error
120
+ case (err.message)
121
+ when /^Deadlock/i
122
+ self.delegate_query(connection, query, callback)
115
123
 
116
- self.add(connection)
124
+ handled = true
125
+ when /Duplicate entry/i
126
+ callback and callback.call(nil, (Time.now - start).to_f, connection, err)
127
+
128
+ self.add(connection)
129
+
130
+ handled = true
131
+ when /MySQL server has gone away|Lost connection/i
132
+ @query_queue << [ query, callback ]
133
+
134
+ self.remove(connection)
135
+
136
+ handled = true
137
+ end
138
+ end
139
+
140
+ unless (handled)
141
+ log(:error, "(%.6fs) [ERR] %s (%s: %s)" % [ Time.now - start, query, err.class, err ])
142
+ log(:error, err.backtrace)
143
+
144
+ callback and callback.call(false, (Time.now - start).to_f, connection, err)
145
+
146
+ self.add(connection)
147
+ end
117
148
  end
118
149
  end
119
150
 
@@ -127,6 +158,14 @@ class EmSequelAsync::Mysql
127
158
  @connections_active[connection] = true
128
159
 
129
160
  connection
161
+
162
+ rescue Mysql2::Error => err
163
+ case (err.message)
164
+ when /Too many connections/i
165
+ return
166
+ else
167
+ raise err
168
+ end
130
169
  end
131
170
 
132
171
  def query(query, callback = nil, &block)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-sequel-async
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-15 00:00:00.000000000 Z
12
+ date: 2012-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel