solr_wrapper 1.2.0 → 2.0.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
  SHA1:
3
- metadata.gz: 69b59fa99bc915577bf48a1ccf9a82fbe1a03abf
4
- data.tar.gz: cd5fe1e6bf5d3e16d784606a52f56dd6e57c56fc
3
+ metadata.gz: 3991dd503c5902e6012328a4663edff78f669fbf
4
+ data.tar.gz: 7d17c2fcc21fa1e370a4903c393de8b3ae207f76
5
5
  SHA512:
6
- metadata.gz: 70f274a2cc52e3221338eae2833185f21a0ab295b813b917feaae5e190e684a28ca38846efdef148b1747dba58557be677105a499d1443c3fb8a7bfd3233c79c
7
- data.tar.gz: '08b924bbe6bd57633f53865bd893e9e6a486d9821baccb0d1234011f8648ccc223326f065b5acb64ed8809babbe3daf563d992b2318c7ed3915bf86e10f4b3f3'
6
+ metadata.gz: 650abf178f6f41be0f6a96c01699edbdee09a82d6bcca41223ce0c185524bc0d59ec549c669232abab75e85ce187bdb03acf759f94033b0fb2cdd2071b0e1a99
7
+ data.tar.gz: 29f4b23edfee5ee869b1626c0f88775468106dff2ae5a2059ef1d805cc3d7f03e76d9c285f9e0822583026190160db0d1ae8a361745b8b45a599e70d01f35e1a
@@ -1,9 +1,10 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
  rvm:
4
- - 2.4.1
5
- - 2.3.4
6
- - jruby-9.1.8.0
4
+ - 2.5.0
5
+ - 2.4.2
6
+ - 2.3.6
7
+ - jruby-9.1.16.0
7
8
 
8
9
  jdk:
9
10
  - oraclejdk8
data/README.md CHANGED
@@ -32,16 +32,17 @@ SolrWrapper.wrap port: 8983,
32
32
  |---------------|-----------------------------------------|
33
33
  | instance_dir | Directory to store the solr index files |
34
34
  | url | URL of the Zip file to download |
35
+ | mirror_url | Mirror to download the solr artifacts from (e.g. http://lib-solr-mirror.princeton.edu/dist/)|
35
36
  | version | Solr version to download and install |
36
37
  | port | port to run Solr on |
37
38
  | version_file | Local path to store the currently installed version |
38
39
  | download_dir | Local path for storing the downloaded Solr zip file |
39
40
  | solr_zip_path | Local path to the Solr zip file |
40
- | md5sum | Path/URL to MD5 checksum |
41
+ | checksum | Path/URL to checksum |
41
42
  | solr_xml | Path to Solr configuration |
42
43
  | verbose | (Boolean) |
43
44
  | managed | (Boolean) |
44
- | ignore_md5sum | (Boolean) |
45
+ | ignore_checksum | (Boolean) |
45
46
  | solr_options | (Hash) |
46
47
  | env | (Hash) |
47
48
  | persist | (Boolean) Preserves the data in you collection between startups |
@@ -64,7 +64,7 @@ args = OptionParser.new do |opts|
64
64
  end
65
65
 
66
66
  opts.on("--no-checksum", "Skip running checksum validation on the downloaded file") do |d|
67
- options[:ignore_md5sum] = true
67
+ options[:ignore_checksum] = true
68
68
  end
69
69
 
70
70
  opts.separator ""
@@ -1,7 +1,7 @@
1
1
  require 'solr_wrapper/version'
2
2
  require 'solr_wrapper/configuration'
3
3
  require 'solr_wrapper/settings'
4
- require 'solr_wrapper/md5'
4
+ require 'solr_wrapper/checksum_validator'
5
5
  require 'solr_wrapper/downloader'
6
6
  require 'solr_wrapper/instance'
7
7
  require 'solr_wrapper/client'
@@ -0,0 +1,57 @@
1
+ module SolrWrapper
2
+ class ChecksumValidator
3
+ attr_reader :config
4
+
5
+ ALGORITHM = 'sha1'
6
+
7
+ def initialize(config)
8
+ @config = config
9
+ end
10
+
11
+ def clean!
12
+ path = checksum_path(ALGORITHM)
13
+ FileUtils.remove_entry(path) if File.exist? path
14
+ end
15
+
16
+ def validate?(file)
17
+ return true if config.validate == false
18
+ Digest.const_get(ALGORITHM.upcase).file(file).hexdigest == expected_sum(ALGORITHM)
19
+ end
20
+
21
+ def validate!(file)
22
+ unless validate? file
23
+ raise "Checksum mismatch" unless config.ignore_checksum
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def checksumurl(suffix)
30
+ if config.default_download_url == config.static_config.archive_download_url
31
+ "#{config.default_download_url}.#{suffix}"
32
+ else
33
+ "http://www.us.apache.org/dist/lucene/solr/#{config.static_config.version}/solr-#{config.static_config.version}.zip.#{suffix}"
34
+ end
35
+ end
36
+
37
+ def checksum_path(suffix)
38
+ File.join(config.download_dir, File.basename(checksumurl(suffix)))
39
+ end
40
+
41
+ def expected_sum(alg)
42
+ config.checksum || read_file(alg)
43
+ end
44
+
45
+ def read_file(alg)
46
+ open(checksumfile(alg)).read.split(" ").first
47
+ end
48
+
49
+ def checksumfile(alg)
50
+ path = checksum_path(alg)
51
+ unless File.exist? path
52
+ Downloader.fetch_with_progressbar checksumurl(alg), path
53
+ end
54
+ path
55
+ end
56
+ end
57
+ end
@@ -23,12 +23,12 @@ module SolrWrapper
23
23
  options[:validate]
24
24
  end
25
25
 
26
- def ignore_md5sum
27
- options[:ignore_md5sum]
26
+ def ignore_checksum
27
+ options[:ignore_checksum]
28
28
  end
29
29
 
30
- def md5sum
31
- options[:md5sum]
30
+ def checksum
31
+ options[:checksum]
32
32
  end
33
33
 
34
34
  def url
@@ -89,10 +89,37 @@ module SolrWrapper
89
89
  end
90
90
  end
91
91
 
92
- def mirror_url
92
+ def closest_mirror_url
93
93
  "http://www.apache.org/dyn/closer.lua/lucene/solr/#{version}/solr-#{version}.zip?asjson=true"
94
94
  end
95
95
 
96
+ def mirror_url
97
+ @mirror_url ||= if options[:mirror_url]
98
+ options[:mirror_url] + "lucene/solr/#{version}/solr-#{version}.zip"
99
+ else
100
+ begin
101
+ json = open(closest_mirror_url).read
102
+ doc = JSON.parse(json)
103
+ url = doc['preferred'] + doc['path_info']
104
+
105
+ response = Faraday.head(url)
106
+
107
+ if response.success?
108
+ url
109
+ else
110
+ archive_download_url
111
+ end
112
+
113
+ rescue Errno::ECONNRESET, SocketError, Faraday::Error
114
+ archive_download_url
115
+ end
116
+ end
117
+ end
118
+
119
+ def archive_download_url
120
+ "https://archive.apache.org/dist/lucene/solr/#{version}/solr-#{version}.zip"
121
+ end
122
+
96
123
  def cloud
97
124
  options[:cloud]
98
125
  end
@@ -13,7 +13,7 @@ require 'retriable'
13
13
 
14
14
  module SolrWrapper
15
15
  class Instance
16
- attr_reader :config, :md5
16
+ attr_reader :config
17
17
 
18
18
  ##
19
19
  # @param [Hash] options
@@ -23,20 +23,19 @@ module SolrWrapper
23
23
  # @option options [String] :port port to run Solr on
24
24
  # @option options [Boolean] :cloud Run solr in cloud mode
25
25
  # @option options [String] :version_file Local path to store the currently installed version
26
- # @option options [String] :download_dir Local directory to store the downloaded Solr zip and its md5 file in (overridden by :solr_zip_path)
26
+ # @option options [String] :download_dir Local directory to store the downloaded Solr zip and its checksum file in (overridden by :solr_zip_path)
27
27
  # @option options [String] :solr_zip_path Local path for storing the downloaded Solr zip file
28
- # @option options [Boolean] :validate Should solr_wrapper download a new md5 and (re-)validate the zip file? (default: trueF)
29
- # @option options [String] :md5sum Path/URL to MD5 checksum
28
+ # @option options [Boolean] :validate Should solr_wrapper download a new checksum and (re-)validate the zip file? (default: trueF)
29
+ # @option options [String] :checksum Path/URL to checksum
30
30
  # @option options [String] :solr_xml Path to Solr configuration
31
31
  # @option options [String] :extra_lib_dir Path to directory containing extra libraries to copy into instance_dir/lib
32
32
  # @option options [Boolean] :verbose return verbose info when running solr commands
33
- # @option options [Boolean] :ignore_md5sum
33
+ # @option options [Boolean] :ignore_checksum
34
34
  # @option options [Hash] :solr_options
35
35
  # @option options [Hash] :env
36
36
  # @option options [String] :config
37
37
  def initialize(options = {})
38
38
  @config = Settings.new(Configuration.new(options))
39
- @md5 = MD5.new(@config)
40
39
  end
41
40
 
42
41
  def host
@@ -228,7 +227,7 @@ module SolrWrapper
228
227
  remove_instance_dir!
229
228
  FileUtils.remove_entry(config.download_dir, true) if File.exist?(config.download_dir)
230
229
  FileUtils.remove_entry(config.tmp_save_dir, true) if File.exist? config.tmp_save_dir
231
- md5.clean!
230
+ checksum_validator.clean!
232
231
  FileUtils.remove_entry(config.version_file) if File.exist? config.version_file
233
232
  end
234
233
 
@@ -294,9 +293,9 @@ module SolrWrapper
294
293
  end
295
294
 
296
295
  def download
297
- unless File.exist?(config.solr_zip_path) && md5.validate?(config.solr_zip_path)
296
+ unless File.exist?(config.solr_zip_path) && checksum_validator.validate?(config.solr_zip_path)
298
297
  Downloader.fetch_with_progressbar config.download_url, config.solr_zip_path
299
- md5.validate! config.solr_zip_path
298
+ checksum_validator.validate! config.solr_zip_path
300
299
  end
301
300
  config.solr_zip_path
302
301
  end
@@ -327,6 +326,10 @@ module SolrWrapper
327
326
 
328
327
  private
329
328
 
329
+ def checksum_validator
330
+ @checksum_validator ||= ChecksumValidator.new(config)
331
+ end
332
+
330
333
  def after_start
331
334
  create_configsets if config.cloud
332
335
  end
@@ -43,7 +43,6 @@ module SolrWrapper
43
43
  @zookeeper_port ||= "#{port.to_i + 1000}"
44
44
  end
45
45
 
46
-
47
46
  ##
48
47
  # Get a (likely) URL to the solr instance
49
48
  def url
@@ -73,18 +72,6 @@ module SolrWrapper
73
72
  static_config.version_file || File.join(instance_dir, "VERSION")
74
73
  end
75
74
 
76
- def md5url
77
- if default_download_url == archive_download_url
78
- "#{archive_download_url}.md5"
79
- else
80
- "http://www.us.apache.org/dist/lucene/solr/#{static_config.version}/solr-#{static_config.version}.zip.md5"
81
- end
82
- end
83
-
84
- def md5sum_path
85
- File.join(download_dir, File.basename(md5url))
86
- end
87
-
88
75
  def solr_binary
89
76
  File.join(instance_dir, "bin", "solr")
90
77
  end
@@ -93,6 +80,10 @@ module SolrWrapper
93
80
  @tmp_save_dir ||= Dir.mktmpdir
94
81
  end
95
82
 
83
+ def default_download_url
84
+ static_config.mirror_url
85
+ end
86
+
96
87
  private
97
88
 
98
89
  def tmpdir
@@ -113,28 +104,6 @@ module SolrWrapper
113
104
  @download_dir
114
105
  end
115
106
 
116
- def default_download_url
117
- @default_url ||= begin
118
- json = open(static_config.mirror_url).read
119
- doc = JSON.parse(json)
120
- url = doc['preferred'] + doc['path_info']
121
-
122
- response = Faraday.head(url)
123
-
124
- if response.success?
125
- url
126
- else
127
- archive_download_url
128
- end
129
- end
130
- rescue Errno::ECONNRESET, SocketError, Faraday::Error
131
- archive_download_url
132
- end
133
-
134
- def archive_download_url
135
- "https://archive.apache.org/dist/lucene/solr/#{static_config.version}/solr-#{static_config.version}.zip"
136
- end
137
-
138
107
  def random_open_port
139
108
  socket = Socket.new(:INET, :STREAM, 0)
140
109
  begin
@@ -1,3 +1,3 @@
1
1
  module SolrWrapper
2
- VERSION = '1.2.0'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -83,4 +83,14 @@ describe SolrWrapper::Configuration do
83
83
  end
84
84
  end
85
85
  end
86
+
87
+ describe '#mirror_url' do
88
+ context 'with a preferred mirror' do
89
+ let(:options) { { mirror_url: 'http://lib-solr-mirror.princeton.edu/dist/', version: '7.2.1' } }
90
+
91
+ it 'is the URL to the artifact on the preferred mirror' do
92
+ expect(config.mirror_url).to eq 'http://lib-solr-mirror.princeton.edu/dist/lucene/solr/7.2.1/solr-7.2.1.zip'
93
+ end
94
+ end
95
+ end
86
96
  end
@@ -159,8 +159,8 @@ describe SolrWrapper::Instance do
159
159
  it { is_expected.to eq 'solr-version-number' }
160
160
  end
161
161
 
162
- describe "#md5" do
163
- subject { solr_instance.md5 }
164
- it { is_expected.to be_instance_of SolrWrapper::MD5 }
162
+ describe "#checksum_validator" do
163
+ subject { solr_instance.send(:checksum_validator) }
164
+ it { is_expected.to be_instance_of SolrWrapper::ChecksumValidator }
165
165
  end
166
166
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solr_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-14 00:00:00.000000000 Z
11
+ date: 2018-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -171,11 +171,11 @@ files:
171
171
  - coveralls.yml
172
172
  - exe/solr_wrapper
173
173
  - lib/solr_wrapper.rb
174
+ - lib/solr_wrapper/checksum_validator.rb
174
175
  - lib/solr_wrapper/client.rb
175
176
  - lib/solr_wrapper/configuration.rb
176
177
  - lib/solr_wrapper/downloader.rb
177
178
  - lib/solr_wrapper/instance.rb
178
- - lib/solr_wrapper/md5.rb
179
179
  - lib/solr_wrapper/popen4_runner.rb
180
180
  - lib/solr_wrapper/popen_runner.rb
181
181
  - lib/solr_wrapper/rake_task.rb
@@ -1,43 +0,0 @@
1
- module SolrWrapper
2
- class MD5
3
- attr_reader :config
4
- def initialize(config)
5
- @config = config
6
- end
7
-
8
- def clean!
9
- FileUtils.remove_entry(config.md5sum_path) if File.exist? config.md5sum_path
10
- end
11
-
12
- def validate?(file)
13
- return true if config.validate == false
14
-
15
- Digest::MD5.file(file).hexdigest == expected_sum
16
- end
17
-
18
- def validate!(file)
19
- unless validate? file
20
- raise "MD5 mismatch" unless config.ignore_md5sum
21
- end
22
- end
23
-
24
- private
25
-
26
- def expected_sum
27
- @md5sum ||= config.md5sum
28
- @md5sum ||= read_file
29
- end
30
-
31
- def read_file
32
- open(md5file).read.split(" ").first
33
- end
34
-
35
- def md5file
36
- unless File.exist? config.md5sum_path
37
- Downloader.fetch_with_progressbar config.md5url, config.md5sum_path
38
- end
39
-
40
- config.md5sum_path
41
- end
42
- end
43
- end