filbunke 1.4.1 → 1.5.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.
data/Rakefile CHANGED
@@ -14,6 +14,7 @@ begin
14
14
  gem.files.exclude 'pkg'
15
15
  gem.executables = ['filbunked']
16
16
  gem.add_dependency 'json', '>= 1.1.7'
17
+ gem.add_dependency 'typhoeus', '>= 0.2.0'
17
18
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
19
  end
19
20
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.1
1
+ 1.5.0
data/filbunke.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{filbunke}
8
- s.version = "1.4.1"
8
+ s.version = "1.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Wouter de Bie"]
12
- s.date = %q{2010-12-02}
12
+ s.date = %q{2010-12-03}
13
13
  s.default_executable = %q{filbunked}
14
14
  s.description = %q{Filbunke client and library}
15
15
  s.email = %q{wouter@deltaprojects.se}
@@ -48,13 +48,16 @@ Gem::Specification.new do |s|
48
48
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
49
49
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
50
50
  s.add_runtime_dependency(%q<json>, [">= 1.1.7"])
51
+ s.add_runtime_dependency(%q<typhoeus>, [">= 0.2.0"])
51
52
  else
52
53
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
53
54
  s.add_dependency(%q<json>, [">= 1.1.7"])
55
+ s.add_dependency(%q<typhoeus>, [">= 0.2.0"])
54
56
  end
55
57
  else
56
58
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
57
59
  s.add_dependency(%q<json>, [">= 1.1.7"])
60
+ s.add_dependency(%q<typhoeus>, [">= 0.2.0"])
58
61
  end
59
62
  end
60
63
 
@@ -26,7 +26,10 @@ module Filbunke
26
26
  new_checkpoint = updates["checkpoint"]
27
27
 
28
28
  @logger.log "Updating repository: #{repository.name}: #{updated_files.size} files. Checkpoint: #{last_checkpoint} ==> #{new_checkpoint}" if updated_files.size > 0
29
-
29
+
30
+ @hydra = Typhoeus::Hydra.new
31
+ @async_requests = []
32
+
30
33
  updated_files.each do |raw_file|
31
34
  file = File.new(raw_file)
32
35
 
@@ -39,9 +42,7 @@ module Filbunke
39
42
  if file_needs_update?(file, local_file_path)
40
43
 
41
44
  if update_file!(file, local_file_path) then
42
- @callbacks.each do |callback|
43
- callback.on_update(file)
44
- end
45
+
45
46
  yield file
46
47
  else
47
48
  @logger.log "Unable to get file #{file.url} ==> #{file.path}!"
@@ -53,6 +54,10 @@ module Filbunke
53
54
  end
54
55
  end
55
56
  end
57
+
58
+ @hydra.run
59
+ failure = failure || @async_requests.any?{|request| request.handled_response == false }
60
+
56
61
  failure ? last_checkpoint : (new_checkpoint || last_checkpoint)
57
62
  end
58
63
 
@@ -120,11 +125,19 @@ module Filbunke
120
125
  update_http_file!(file, local_file_path)
121
126
  elsif file.url =~ /^hdfs:\/\//
122
127
  update_hdfs_file!(file, local_file_path)
128
+ run_callbacks(file)
129
+
123
130
  else
124
131
  raise "Unsupported protocol for file: #{file.inspect}"
125
132
  end
126
133
  end
127
134
 
135
+ def run_callbacks(file)
136
+ @callbacks.each do |callback|
137
+ callback.on_update(file)
138
+ end
139
+ end
140
+
128
141
  def file_needs_update?(file, local_file_path)
129
142
  return true if file.hash.nil? || file.hash == ""
130
143
 
@@ -161,26 +174,37 @@ module Filbunke
161
174
  end
162
175
 
163
176
  def update_http_file!(file, local_file_path)
164
- begin
165
- uri = URI.parse(file.url)
166
- file_http=Net::HTTP.new(uri.host, uri.port)
167
- file_http.start do |http|
168
- request = Net::HTTP::Get.new(uri.path)
169
- request.basic_auth @repository.user, @repository.pass if @repository.user
170
- response = http.request(request)
171
- if response.code.to_i == 200
172
- write_file!(local_file_path, response.body)
173
- elsif response.code.to_i == 404
174
- delete_file!(local_file_path)
175
- else
176
- @logger.log "Failed to update file #{uri}, error code = #{response.code}"
177
+ begin
178
+ async_request = if @repository.user
179
+ Typhoeus::Request.new(file.url)
180
+ else
181
+ Typhoeus::Request.new(file.url, :user => @repository.user, :password => @repository.pass)
182
+ end
183
+ async_request.on_complete do |response|
184
+ success = true
185
+ begin
186
+ if response.code.to_i == 200
187
+ write_file!(local_file_path, response.body)
188
+ elsif response.code.to_i == 404
189
+ delete_file!(local_file_path)
190
+ else
191
+ @logger.log "Failed to update file #{file.url}, error code = #{response.code}"
192
+ success = false
193
+ end
194
+ run_callbacks(file) if success
195
+ rescue StandardError => e
196
+ @logger.log "Failed to update file #{file.url}: #{e.message}"
197
+ success = false
177
198
  end
178
- return true
199
+ success
179
200
  end
201
+ @hydra.queue async_request
202
+ @async_requests << async_request
180
203
  rescue StandardError => e
181
- @logger.log "Failed to update file #{uri}: #{e.message}"
204
+ @logger.log "Failed to update file #{file.url}: #{e.message}"
182
205
  return false
183
206
  end
207
+ return true
184
208
  end
185
209
 
186
210
  def update_hdfs_file!(file, local_file_path)
data/lib/filbunke.rb CHANGED
@@ -3,6 +3,7 @@ require 'json'
3
3
  require 'net/http'
4
4
  require 'fileutils'
5
5
  require 'digest/md5'
6
+ require 'typhoeus'
6
7
 
7
8
  require 'filbunke/client.rb'
8
9
  require 'filbunke/file.rb'
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 4
8
- - 1
9
- version: 1.4.1
7
+ - 5
8
+ - 0
9
+ version: 1.5.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Wouter de Bie
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-02 00:00:00 +01:00
17
+ date: 2010-12-03 00:00:00 +01:00
18
18
  default_executable: filbunked
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -43,6 +43,20 @@ dependencies:
43
43
  version: 1.1.7
44
44
  type: :runtime
45
45
  version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: typhoeus
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ - 2
56
+ - 0
57
+ version: 0.2.0
58
+ type: :runtime
59
+ version_requirements: *id003
46
60
  description: Filbunke client and library
47
61
  email: wouter@deltaprojects.se
48
62
  executables: