solr_wrapper 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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