thinking-sphinx 4.2.0 → 4.3.0

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
  SHA256:
3
- metadata.gz: 02fc0ce9894c728fcc2b8bdb3bcb867a6ef9a40653269cbc213d2a7d25ee94d3
4
- data.tar.gz: 230c83de8b1a5cdbdbb2667b5823ffb6707ad8dfdda15c4c1f8b396642ed1c15
3
+ metadata.gz: 30fe9d6940dc5f385310346374829bc1ff941332583060ad549ea8675a6a34ce
4
+ data.tar.gz: 4b5a25fe1120cba82bf9bd6b9f80be7e1d5175dce887d8acaffc3ba1da78e458
5
5
  SHA512:
6
- metadata.gz: f679238131cebcfa2eda04479696065205505e211d583c70c70efe18059d8ddfee29bf6e129070cb82e7b52928dc6f60d88662e6f1e0298e0e5eb6613ff7682e
7
- data.tar.gz: 2f09c08fc40e1a0052e06b790c5bbcc48a8ff3e3d700debcf2089e1504b4d04652fa4d23bd27f2354d8bd29bf2cca3aae9dd86b96aeed12e49036b7542ba8d4b
6
+ metadata.gz: f8f25c99b61c6bf80f9a81eb71ab1c1a6af005009099cd18c7ef1a13e694f4e65b7ddc3d654167033ecf0fac072c91d88864d6ab5cf44c5f00fea69447195ce2
7
+ data.tar.gz: b78abfa34ebcfb24ed65e99b07dfb04dc545cc2be74c994a9b786a507b8b69bfa46afce05c74830dfde5bebc6b823e0d44b3073637967090b35ffe85c9629b41
@@ -1,15 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.3.8
4
- - 2.4.5
5
- - 2.5.3
6
- - 2.6.1
7
- addons:
8
- apt:
9
- packages:
10
- - cmake
11
- - bison
12
- - flex
4
+ - 2.4.6
5
+ - 2.5.5
6
+ - 2.6.2
13
7
  before_install:
14
8
  - pip install --upgrade --user awscli
15
9
  - gem update --system
@@ -23,7 +17,6 @@ before_script:
23
17
  script: bundle exec appraisal rspec
24
18
  env:
25
19
  global:
26
- - SPHINX_BIN=ext/sphinx/bin/
27
20
  - secure: cUPinkilBafqDSPsTkl/PXYc2aXNKUQKXGK8poBBMqKN9/wjfJx1DWgtowDKalekdZELxDhc85Ye3bL1xlW4nLjOu+U6Tkt8eNw2Nhs1flodHzA/RyENdBLr/tBHt43EjkrDehZx5sBHmWQY4miHs8AJz0oKO9Ae2inTOHx9Iuc=
28
21
  matrix:
29
22
  - DATABASE=mysql2 SPHINX_VERSION=2.1.9 SPHINX_ENGINE=sphinx
@@ -37,11 +30,12 @@ env:
37
30
  - DATABASE=postgresql SPHINX_VERSION=2.6.4 SPHINX_ENGINE=manticore
38
31
  - DATABASE=mysql2 SPHINX_VERSION=2.7.5 SPHINX_ENGINE=manticore
39
32
  - DATABASE=postgresql SPHINX_VERSION=2.7.5 SPHINX_ENGINE=manticore
40
- - DATABASE=mysql2 SPHINX_VERSION=2.8.1 SPHINX_ENGINE=manticore
41
- - DATABASE=postgresql SPHINX_VERSION=2.8.1 SPHINX_ENGINE=manticore
33
+ - DATABASE=mysql2 SPHINX_VERSION=2.8.2 SPHINX_ENGINE=manticore
34
+ - DATABASE=postgresql SPHINX_VERSION=2.8.2 SPHINX_ENGINE=manticore
42
35
  # - DATABASE=postgresql SPHINX_VERSION=3.1.1 SPHINX_ENGINE=sphinx
43
36
  sudo: false
44
37
  addons:
45
38
  postgresql: '9.4'
46
39
  services:
40
+ - mysql
47
41
  - postgresql
@@ -2,8 +2,24 @@
2
2
 
3
3
  All notable changes to this project (at least, from v3.0.0 onwards) are documented in this file.
4
4
 
5
+ ## 4.3.0 - 2019-05-18
6
+
7
+ [Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v4.3.0)
8
+
9
+ ### Added
10
+
11
+ * Allow overriding of Sphinx's running state, which is useful when Sphinx commands are interacting with a remote Sphinx daemon. As per discussions in [#1131](https://github.com/pat/thinking-sphinx/pull/1124).
12
+ * Allow skipping of directory creation, as per discussions in [#1131](https://github.com/pat/thinking-sphinx/pull/1131).
13
+
14
+ ### Fixed
15
+
16
+ * Use ActiveSupport's lock monitor where possible (Rails 5.1.5 onwards) to avoid database deadlocks. Essential investigation by [Jonathan del Strother](https://github.com/jdelstrother) ([#1132](https://github.com/pat/thinking-sphinx/pull/1132)).
17
+ * Allow facet searching on distributed indices ([#1135](https://github.com/pat/thinking-sphinx/pull/1132)).
18
+
5
19
  ## 4.2.0 - 2019-03-09
6
20
 
21
+ [Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v4.2.0)
22
+
7
23
  ### Added
8
24
 
9
25
  * Allow changing the default encoding for MySQL database connections from utf8 to something else via the `mysql_encoding` setting in `config/thinking_sphinx.yml`. In the next significant release, the default will change to utf8mb4 (which is supported in MySQL 5.5.3 and newer).
@@ -1,6 +1,6 @@
1
1
  h1. Thinking Sphinx
2
2
 
3
- Thinking Sphinx is a library for connecting ActiveRecord to the Sphinx full-text search tool, and integrates closely with Rails (but also works with other Ruby web frameworks). The current release is v4.2.0.
3
+ Thinking Sphinx is a library for connecting ActiveRecord to the Sphinx full-text search tool, and integrates closely with Rails (but also works with other Ruby web frameworks). The current release is v4.3.0.
4
4
 
5
5
  h2. Upgrading
6
6
 
@@ -14,7 +14,7 @@ It's a gem, so install it like you would any other gem. You will also need to sp
14
14
 
15
15
  <pre><code>gem 'mysql2', '~> 0.3', :platform => :ruby
16
16
  gem 'jdbc-mysql', '~> 5.1.35', :platform => :jruby
17
- gem 'thinking-sphinx', '~> 4.2'</code></pre>
17
+ gem 'thinking-sphinx', '~> 4.3'</code></pre>
18
18
 
19
19
  The MySQL gems mentioned are required for connecting to Sphinx, so please include it even when you're using PostgreSQL for your database. If you're using JRuby with a version of Sphinx prior to 2.2.11, there is "currently an issue with Sphinx and jdbc-mysql 5.1.36 or newer":http://sphinxsearch.com/forum/view.html?id=13939, so you'll need to stick to nothing more recent than 5.1.35, or upgrade Sphinx.
20
20
 
@@ -2,65 +2,57 @@
2
2
 
3
3
  version=$1
4
4
  engine=$2
5
- name="$engine-$version"
6
- bucket="thinking-sphinx"
7
- directory="ext/sphinx"
8
- prefix="`pwd`/$directory"
9
- file="ext/$name.tar.gz"
10
5
 
11
- if [ "$engine" == "sphinx" ]; then
12
- url="http://sphinxsearch.com/files/$name-release.tar.gz"
13
- else
14
- url="https://github.com/manticoresoftware/manticore.git"
15
- fi
16
-
17
- download_and_compile_source () {
18
- if [ "$engine" == "sphinx" ]; then
19
- download_and_compile_sphinx
6
+ load_sphinx () {
7
+ case $version in
8
+ 2.1.9)
9
+ url="http://sphinxsearch.com/files/sphinxsearch_2.1.9-release-0ubuntu11~trusty_amd64.deb"
10
+ format="deb";;
11
+ 2.2.11)
12
+ url="http://sphinxsearch.com/files/sphinxsearch_2.2.11-release-1~trusty_amd64.deb"
13
+ format="deb";;
14
+ 3.0.3)
15
+ url="http://sphinxsearch.com/files/sphinx-3.0.3-facc3fb-linux-amd64.tar.gz"
16
+ format="gz";;
17
+ 3.1.1)
18
+ url="http://sphinxsearch.com/files/sphinx-3.1.1-612d99f-linux-amd64.tar.gz"
19
+ format="gz";;
20
+ *)
21
+ echo "No Sphinx version $version available"
22
+ exit 1;;
23
+ esac
24
+
25
+ if [ "$format" == "deb" ]; then
26
+ curl --location $url -o sphinx.deb
27
+ sudo apt-get install ./sphinx.deb
20
28
  else
21
- download_and_compile_manticore
29
+ curl $url -o sphinx.tar.gz
30
+ tar -zxvf sphinx.tar.gz
31
+ sudo mv sphinx-$version/bin/* /usr/local/bin/.
22
32
  fi
23
33
  }
24
34
 
25
- download_and_compile_sphinx () {
26
- curl -O $url
27
- tar -zxf $name-release.tar.gz
28
- cd $name-release
29
- ./configure --with-mysql --with-pgsql --enable-id64 --prefix=$prefix
30
- make
31
- make install
32
- cd ..
33
- rm -rf $name-release.tar.gz $name-release
34
- }
35
-
36
- download_and_compile_manticore () {
37
- git clone $url $engine
38
- cd $engine
39
- git checkout $version
40
- mkdir build
41
- cd build
42
- cmake -D WITH_MYSQL=TRUE -D WITH_PGSQL=TRUE -D DISABLE_TESTING=TRUE -D CMAKE_INSTALL_PREFIX=$prefix ..
43
- make -j4
44
- make install
45
- cd ../..
46
- rm -rf $engine
35
+ load_manticore () {
36
+ url="https://github.com/manticoresoftware/manticore/releases/download/$version/manticore_$version.deb"
37
+
38
+ case $version in
39
+ 2.6.4)
40
+ url="https://github.com/manticoresoftware/manticoresearch/releases/download/2.6.4/manticore_2.6.4-180503-37308c3-release-stemmer.trusty_amd64-bin.deb";;
41
+ 2.7.5)
42
+ url="https://github.com/manticoresoftware/manticoresearch/releases/download/2.7.5/manticore_2.7.5-181204-0f016406-release-stemmer.trusty_amd64-bin.deb";;
43
+ 2.8.2)
44
+ url="https://github.com/manticoresoftware/manticoresearch/releases/download/2.8.2/manticore_2.8.2-190402-4e81114-release-stemmer.trusty_amd64-bin.deb";;
45
+ *)
46
+ echo "No Manticore version $version available"
47
+ exit 1;;
48
+ esac
49
+
50
+ curl --location $url -o manticore.deb
51
+ sudo apt-get install ./manticore.deb
47
52
  }
48
53
 
49
- load_cache () {
50
- mkdir ext
51
- curl -o $file http://$bucket.s3.amazonaws.com/bincaches/$name.tar.gz
52
- tar -zxf $file
53
- }
54
-
55
- push_cache () {
56
- tar -czf $file $directory
57
- aws s3 cp $file s3://$bucket/bincaches/$name.tar.gz --acl public-read
58
- }
59
-
60
- if curl -i --head --fail http://$bucket.s3.amazonaws.com/bincaches/$name.tar.gz
61
- then
62
- load_cache
54
+ if [ "$engine" == "sphinx" ]; then
55
+ load_sphinx
63
56
  else
64
- download_and_compile_source
65
- push_cache
57
+ load_manticore
66
58
  fi
@@ -46,4 +46,8 @@ There may be more information about the failure in #{configuration.searchd.log}.
46
46
 
47
47
  stream.puts message
48
48
  end
49
+
50
+ def skip_directories?
51
+ configuration.settings['skip_directory_creation']
52
+ end
49
53
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  class ThinkingSphinx::Commands::Prepare < ThinkingSphinx::Commands::Base
4
4
  def call
5
+ return if skip_directories?
6
+
5
7
  FileUtils.mkdir_p configuration.indices_location
6
8
  end
7
9
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  class ThinkingSphinx::Commands::Running < ThinkingSphinx::Commands::Base
4
4
  def call
5
+ return true if configuration.settings['skip_running_check']
6
+
5
7
  controller.running?
6
8
  end
7
9
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  class ThinkingSphinx::Commands::StartAttached < ThinkingSphinx::Commands::Base
4
4
  def call
5
- FileUtils.mkdir_p configuration.indices_location
5
+ FileUtils.mkdir_p configuration.indices_location unless skip_directories?
6
6
 
7
7
  unless pid = fork
8
8
  controller.start :verbose => options[:verbose], :nodetach => true
@@ -2,7 +2,7 @@
2
2
 
3
3
  class ThinkingSphinx::Commands::StartDetached < ThinkingSphinx::Commands::Base
4
4
  def call
5
- FileUtils.mkdir_p configuration.indices_location
5
+ FileUtils.mkdir_p configuration.indices_location unless skip_directories?
6
6
 
7
7
  result = controller.start :verbose => options[:verbose]
8
8
 
@@ -10,7 +10,8 @@ class ThinkingSphinx::Configuration < Riddle::Configuration
10
10
 
11
11
  delegate :environment, :to => :framework
12
12
 
13
- @@mutex = Mutex.new
13
+ @@mutex = defined?(ActiveSupport::Concurrency::LoadInterlockAwareMonitor) ?
14
+ ActiveSupport::Concurrency::LoadInterlockAwareMonitor.new : Mutex.new
14
15
 
15
16
  def initialize
16
17
  super
@@ -105,7 +106,9 @@ class ThinkingSphinx::Configuration < Riddle::Configuration
105
106
  end
106
107
 
107
108
  def render_to_file
108
- FileUtils.mkdir_p searchd.binlog_path unless searchd.binlog_path.blank?
109
+ unless settings['skip_directory_creation'] || searchd.binlog_path.blank?
110
+ FileUtils.mkdir_p searchd.binlog_path
111
+ end
109
112
 
110
113
  open(configuration_file, 'w') { |file| file.write render }
111
114
  end
@@ -21,7 +21,7 @@ class ThinkingSphinx::Configuration::DistributedIndices
21
21
 
22
22
  def distributed_index(reference, indices)
23
23
  index = ThinkingSphinx::Distributed::Index.new reference
24
- index.local_indices += indices.collect &:name
24
+ index.local_index_objects = indices
25
25
  index
26
26
  end
27
27
 
@@ -98,7 +98,10 @@ module ThinkingSphinx::Core::Index
98
98
  end
99
99
 
100
100
  def set_path
101
- FileUtils.mkdir_p path_prefix
101
+ unless config.settings['skip_directory_creation']
102
+ FileUtils.mkdir_p path_prefix
103
+ end
104
+
102
105
  @path = File.join path_prefix, name
103
106
  end
104
107
  end
@@ -3,11 +3,12 @@
3
3
  class ThinkingSphinx::Distributed::Index <
4
4
  Riddle::Configuration::DistributedIndex
5
5
 
6
- attr_reader :reference, :options
6
+ attr_reader :reference, :options, :local_index_objects
7
7
 
8
8
  def initialize(reference)
9
- @reference = reference
10
- @options = {}
9
+ @reference = reference
10
+ @options = {}
11
+ @local_index_objects = []
11
12
 
12
13
  super reference.to_s.gsub('/', '_')
13
14
  end
@@ -20,6 +21,15 @@ class ThinkingSphinx::Distributed::Index <
20
21
  true
21
22
  end
22
23
 
24
+ def facets
25
+ local_index_objects.collect(&:facets).flatten
26
+ end
27
+
28
+ def local_index_objects=(indices)
29
+ self.local_indices = indices.collect(&:name)
30
+ @local_index_objects = indices
31
+ end
32
+
23
33
  def model
24
34
  @model ||= reference.to_s.camelize.constantize
25
35
  end
@@ -124,4 +124,18 @@ describe 'Faceted searching', :live => true do
124
124
  calls += 1
125
125
  end
126
126
  end
127
+
128
+ it "can be called on distributed indices" do
129
+ blue = Colour.create! :name => 'blue'
130
+ green = Colour.create! :name => 'green'
131
+
132
+ Tee.create! :colour => blue
133
+ Tee.create! :colour => blue
134
+ Tee.create! :colour => green
135
+ index
136
+
137
+ expect(Tee.facets(:indices => ["tee"]).to_hash[:colour_id]).to eq({
138
+ blue.id => 2, green.id => 1
139
+ })
140
+ end
127
141
  end
@@ -7,7 +7,7 @@ RSpec.describe ThinkingSphinx::Commands::Prepare do
7
7
  configuration, {}, stream
8
8
  ) }
9
9
  let(:configuration) { double 'configuration',
10
- :indices_location => '/path/to/indices'
10
+ :indices_location => '/path/to/indices', :settings => {}
11
11
  }
12
12
  let(:stream) { double :puts => nil }
13
13
 
@@ -20,4 +20,12 @@ RSpec.describe ThinkingSphinx::Commands::Prepare do
20
20
 
21
21
  command.call
22
22
  end
23
+
24
+ it "skips directory creation if flag is set" do
25
+ configuration.settings['skip_directory_creation'] = true
26
+
27
+ expect(FileUtils).to_not receive(:mkdir_p)
28
+
29
+ command.call
30
+ end
23
31
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe ThinkingSphinx::Commands::Running do
6
+ let(:command) { ThinkingSphinx::Commands::Running.new(
7
+ configuration, {}, stream
8
+ ) }
9
+ let(:configuration) {
10
+ double 'configuration', :controller => controller, :settings => {}
11
+ }
12
+ let(:stream) { double :puts => nil }
13
+ let(:controller) { double 'controller', :running? => false }
14
+
15
+ it 'returns true when Sphinx is running' do
16
+ allow(controller).to receive(:running?).and_return(true)
17
+
18
+ expect(command.call).to eq(true)
19
+ end
20
+
21
+ it 'returns false when Sphinx is not running' do
22
+ expect(command.call).to eq(false)
23
+ end
24
+
25
+ it 'returns true if the flag is set' do
26
+ configuration.settings['skip_running_check'] = true
27
+
28
+ expect(command.call).to eq(true)
29
+ end
30
+ end
@@ -6,7 +6,9 @@ RSpec.describe ThinkingSphinx::Commands::StartDetached do
6
6
  let(:command) {
7
7
  ThinkingSphinx::Commands::StartDetached.new(configuration, {}, stream)
8
8
  }
9
- let(:configuration) { double 'configuration', :controller => controller }
9
+ let(:configuration) {
10
+ double 'configuration', :controller => controller, :settings => {}
11
+ }
10
12
  let(:controller) { double 'controller', :start => result, :pid => 101 }
11
13
  let(:result) { double 'result', :command => 'start', :status => 1,
12
14
  :output => '' }
@@ -29,6 +31,14 @@ RSpec.describe ThinkingSphinx::Commands::StartDetached do
29
31
  command.call
30
32
  end
31
33
 
34
+ it "skips directory creation if flag is set" do
35
+ configuration.settings['skip_directory_creation'] = true
36
+
37
+ expect(FileUtils).to_not receive(:mkdir_p)
38
+
39
+ command.call
40
+ end
41
+
32
42
  it "starts the daemon" do
33
43
  expect(controller).to receive(:start)
34
44
 
@@ -342,10 +342,13 @@ describe ThinkingSphinx::Configuration do
342
342
  end
343
343
 
344
344
  describe '#render_to_file' do
345
- let(:file) { double('file') }
346
- let(:output) { config.render }
345
+ let(:file) { double('file') }
346
+ let(:output) { config.render }
347
+ let(:skip_directories) { false }
347
348
 
348
349
  before :each do
350
+ write_configuration('skip_directory_creation' => skip_directories)
351
+
349
352
  allow(config.searchd).to receive_messages :render => 'searchd { }'
350
353
  end
351
354
 
@@ -376,6 +379,16 @@ describe ThinkingSphinx::Configuration do
376
379
 
377
380
  config.render_to_file
378
381
  end
382
+
383
+ context 'skipping directory creation' do
384
+ let(:skip_directories) { true }
385
+
386
+ it "skips creating a directory when flag is set" do
387
+ expect(FileUtils).not_to receive(:mkdir_p)
388
+
389
+ config.render_to_file
390
+ end
391
+ end
379
392
  end
380
393
 
381
394
  describe '#searchd' do
@@ -5,7 +5,7 @@ $:.push File.expand_path('../lib', __FILE__)
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'thinking-sphinx'
8
- s.version = '4.2.0'
8
+ s.version = '4.3.0'
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.authors = ["Pat Allan"]
11
11
  s.email = ["pat@freelancing-gods.com"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thinking-sphinx
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Allan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-09 00:00:00.000000000 Z
11
+ date: 2019-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -454,6 +454,7 @@ files:
454
454
  - spec/thinking_sphinx/commands/merge_and_update_spec.rb
455
455
  - spec/thinking_sphinx/commands/merge_spec.rb
456
456
  - spec/thinking_sphinx/commands/prepare_spec.rb
457
+ - spec/thinking_sphinx/commands/running_spec.rb
457
458
  - spec/thinking_sphinx/commands/start_detached_spec.rb
458
459
  - spec/thinking_sphinx/commands/stop_spec.rb
459
460
  - spec/thinking_sphinx/configuration/minimum_fields_spec.rb
@@ -520,7 +521,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
520
521
  - !ruby/object:Gem::Version
521
522
  version: '0'
522
523
  requirements: []
523
- rubygems_version: 3.0.3
524
+ rubyforge_project: thinking-sphinx
525
+ rubygems_version: 2.7.6.2
524
526
  signing_key:
525
527
  specification_version: 4
526
528
  summary: A smart wrapper over Sphinx for ActiveRecord
@@ -630,6 +632,7 @@ test_files:
630
632
  - spec/thinking_sphinx/commands/merge_and_update_spec.rb
631
633
  - spec/thinking_sphinx/commands/merge_spec.rb
632
634
  - spec/thinking_sphinx/commands/prepare_spec.rb
635
+ - spec/thinking_sphinx/commands/running_spec.rb
633
636
  - spec/thinking_sphinx/commands/start_detached_spec.rb
634
637
  - spec/thinking_sphinx/commands/stop_spec.rb
635
638
  - spec/thinking_sphinx/configuration/minimum_fields_spec.rb