oedipus 0.0.14 → 0.0.15
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/README.md +11 -0
- data/lib/oedipus/connection.rb +8 -0
- data/lib/oedipus/connection/pool.rb +24 -0
- data/lib/oedipus/version.rb +1 -1
- data/spec/integration/connection_spec.rb +8 -0
- metadata +7 -7
data/README.md
CHANGED
@@ -381,6 +381,17 @@ results = sphinx[:articles].multi_search(
|
|
381
381
|
# }
|
382
382
|
```
|
383
383
|
|
384
|
+
## Disconnecting from Sphinx
|
385
|
+
|
386
|
+
Oedipus will automatically close connections that are idle, so you don't,
|
387
|
+
generally speaking, need to close connections manually. However, before
|
388
|
+
forking children, for example, it is important to dispose of any open
|
389
|
+
resources to avoid sharing resources across processes. To do this:
|
390
|
+
|
391
|
+
``` ruby
|
392
|
+
Oedipus.connections.each { |key, conn| conn.close }
|
393
|
+
```
|
394
|
+
|
384
395
|
## Running the specs
|
385
396
|
|
386
397
|
There are both unit tests and integration tests in the specs/ directory. By default they
|
data/lib/oedipus/connection.rb
CHANGED
@@ -102,6 +102,14 @@ module Oedipus
|
|
102
102
|
@pool.acquire { |conn| conn.execute(sql, *bind_values) }
|
103
103
|
end
|
104
104
|
|
105
|
+
# Disconnect from the remote host.
|
106
|
+
#
|
107
|
+
# There is no need to explicitly re-connect after invoking this;
|
108
|
+
# connections are re-established as needed.
|
109
|
+
def close
|
110
|
+
@pool.dispose
|
111
|
+
end
|
112
|
+
|
105
113
|
private
|
106
114
|
|
107
115
|
def assert_valid_pool
|
@@ -70,6 +70,30 @@ module Oedipus
|
|
70
70
|
release(instance)
|
71
71
|
end
|
72
72
|
|
73
|
+
# Dispose all connections in the pool.
|
74
|
+
#
|
75
|
+
# Waits until all connections have finished processing current queries
|
76
|
+
# and then releases them.
|
77
|
+
def dispose
|
78
|
+
begin
|
79
|
+
@lock.synchronize do
|
80
|
+
while instance = @available.pop
|
81
|
+
instance.close
|
82
|
+
end
|
83
|
+
|
84
|
+
@condition.wait(@lock) if @used.size > 0
|
85
|
+
end
|
86
|
+
end until empty?
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns true if the pool is currently empty.
|
90
|
+
#
|
91
|
+
# @return [Boolean]
|
92
|
+
# true if no connections are pooled, false otherwise
|
93
|
+
def empty?
|
94
|
+
@lock.synchronize { @used.size == 0 && @available.size == 0 }
|
95
|
+
end
|
96
|
+
|
73
97
|
private
|
74
98
|
|
75
99
|
def release(instance)
|
data/lib/oedipus/version.rb
CHANGED
@@ -152,4 +152,12 @@ describe Oedipus::Connection do
|
|
152
152
|
conn.execute("REPLACE INTO posts_rt (id, title, state, body) VALUES (?, 'question?', 'other?', ?)", 1, 'a' * 2_000_000)
|
153
153
|
end
|
154
154
|
end
|
155
|
+
|
156
|
+
describe "#close" do
|
157
|
+
before(:each) { conn.close }
|
158
|
+
|
159
|
+
it "disposes the internal pool" do
|
160
|
+
conn.instance_variable_get(:@pool).should be_empty
|
161
|
+
end
|
162
|
+
end
|
155
163
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oedipus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-05-14 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &20925980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *20925980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake-compiler
|
27
|
-
requirement: &
|
27
|
+
requirement: &20925400 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *20925400
|
36
36
|
description: ! "== Sphinx 2 Comes to Ruby\n\nOedipus brings full support for Sphinx
|
37
37
|
2 to Ruby:\n\n - real-time indexes (insert, replace, update, delete)\n - faceted
|
38
38
|
search (variations on a base query)\n - multi-queries (multiple queries executed
|
@@ -113,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
113
|
version: '0'
|
114
114
|
segments:
|
115
115
|
- 0
|
116
|
-
hash:
|
116
|
+
hash: 1288054359540287220
|
117
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
122
|
version: '0'
|
123
123
|
segments:
|
124
124
|
- 0
|
125
|
-
hash:
|
125
|
+
hash: 1288054359540287220
|
126
126
|
requirements: []
|
127
127
|
rubyforge_project: oedipus
|
128
128
|
rubygems_version: 1.8.11
|