filbunke 1.8.3 → 1.8.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -7,9 +7,9 @@ begin
7
7
  gem.name = "filbunke"
8
8
  gem.summary = %Q{Filbunke client}
9
9
  gem.description = %Q{Filbunke client and library}
10
- gem.email = "wouter@deltaprojects.se"
10
+ gem.email = "info@deltaprojects.com"
11
11
  gem.homepage = "http://github.com/deltaprojects/filbunke"
12
- gem.authors = ["Wouter de Bie", "Björn Sperber"]
12
+ gem.authors = ["Björn Sperber", "Karl Ravn"]
13
13
  gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
14
  gem.files.exclude 'pkg'
15
15
  gem.executables = ['filbunked']
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.3
1
+ 1.8.4
data/filbunke.gemspec CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{filbunke}
8
- s.version = "1.8.3"
8
+ s.version = "1.8.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Wouter de Bie", "Bj\303\266rn Sperber"]
12
- s.date = %q{2012-09-18}
11
+ s.authors = ["Bj\303\266rn Sperber", "Karl Ravn"]
12
+ s.date = %q{2012-10-01}
13
13
  s.default_executable = %q{filbunked}
14
14
  s.description = %q{Filbunke client and library}
15
- s.email = %q{wouter@deltaprojects.se}
15
+ s.email = %q{info@deltaprojects.com}
16
16
  s.executables = ["filbunked"]
17
17
  s.files = [
18
18
  "LICENSE",
@@ -38,14 +38,13 @@ Gem::Specification.new do |s|
38
38
  ]
39
39
  s.homepage = %q{http://github.com/deltaprojects/filbunke}
40
40
  s.require_paths = ["lib"]
41
- s.rubygems_version = %q{1.3.6}
41
+ s.rubygems_version = %q{1.6.2}
42
42
  s.summary = %q{Filbunke client}
43
43
 
44
44
  if s.respond_to? :specification_version then
45
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
45
  s.specification_version = 3
47
46
 
48
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
48
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
50
49
  s.add_runtime_dependency(%q<json>, [">= 1.1.7"])
51
50
  s.add_runtime_dependency(%q<typhoeus>, ["= 0.3.3"])
@@ -9,5 +9,11 @@ module Filbunke
9
9
  def on_update(file, local_file_path)
10
10
  end
11
11
 
12
+ def on_no_change(file, local_file_path)
13
+ end
14
+
15
+ def on_delete(file, local_file_path)
16
+ end
17
+
12
18
  end
13
19
  end
@@ -1,7 +1,7 @@
1
1
  module Filbunke
2
2
  class Client
3
3
 
4
- attr_reader :repository, :run_every
4
+ attr_reader :repository
5
5
 
6
6
  UPDATES_ACTION = 'updates'
7
7
  FILES_ACTION = 'files'
@@ -12,10 +12,9 @@ module Filbunke
12
12
  HASH_KEY = 'hash'
13
13
 
14
14
 
15
- def initialize(repository, logger, run_every, callbacks = [], failed_request_log_file_name = nil)
15
+ def initialize(repository, logger, callbacks = [], failed_request_log_file_name = nil)
16
16
  @repository = repository
17
17
  @logger = logger
18
- @run_every = run_every
19
18
  @callbacks = callbacks
20
19
  @failed_request_log_file_name = failed_request_log_file_name
21
20
  end
@@ -38,7 +37,7 @@ module Filbunke
38
37
  local_file_path = ::File.join(repository.local_path, file.path)
39
38
  if file.state == "DELETED" then
40
39
  delete_file!(local_file_path)
41
-
40
+ run_callbacks_delete(file, local_file_path)
42
41
  else
43
42
 
44
43
  if file_needs_update?(file, local_file_path)
@@ -53,6 +52,7 @@ module Filbunke
53
52
 
54
53
  else
55
54
  @logger.log "File exists with correct hash: #{local_file_path}"
55
+ run_callbacks_no_change(file, local_file_path)
56
56
  end
57
57
  end
58
58
  end
@@ -144,7 +144,6 @@ module Filbunke
144
144
  elsif file.url =~ /^hdfs:\/\//
145
145
  success = update_hdfs_file!(file, local_file_path)
146
146
  run_callbacks(file, local_file_path) if success
147
-
148
147
  else
149
148
  raise "Unsupported protocol for file: #{file.inspect}"
150
149
  end
@@ -156,6 +155,18 @@ module Filbunke
156
155
  end
157
156
  end
158
157
 
158
+ def run_callbacks_no_change(file, local_file_path)
159
+ @callbacks.each do |callback|
160
+ callback.on_no_change(file, local_file_path)
161
+ end
162
+ end
163
+
164
+ def run_callbacks_delete(file, local_file_path)
165
+ @callbacks.each do |callback|
166
+ callback.on_delete(file, local_file_path)
167
+ end
168
+ end
169
+
159
170
  def file_needs_update?(file, local_file_path)
160
171
  return true if file.hash.nil? || file.hash == ""
161
172
 
@@ -203,8 +214,6 @@ module Filbunke
203
214
  begin
204
215
  if response.code.to_i == 200
205
216
  write_file!(local_file_path, response.body)
206
- elsif response.code.to_i == 404
207
- delete_file!(local_file_path)
208
217
  else
209
218
  @logger.log "Failed to update file #{file.url}, error code = #{response.code}"
210
219
  success = false
@@ -254,16 +263,19 @@ module Filbunke
254
263
  end
255
264
 
256
265
  def write_file!(file_path, contents)
257
- if ::File.exists?(file_path)
258
- @logger.log("Updating: #{file_path}")
259
- else
260
- @logger.log("Writing: #{file_path}")
261
- end
262
266
  ::FileUtils.mkdir_p(::File.dirname(file_path))
263
- ::File.open(file_path, 'w') do |file|
264
- file.write(contents);
265
- file.close
266
- end
267
+ @logger.log("Updating: #{file_path}")
268
+ begin
269
+ ::File.open("#{file_path}.tmp", 'w') do |file|
270
+ file.write(contents);
271
+ file.close
272
+ end
273
+ ::FileUtils.mv "#{file_path}.tmp", file_path
274
+ return true
275
+ rescue StandardError => e
276
+ @logger.log "Failed to move file #{file.url}: #{e.message}"
277
+ return false
278
+ end
267
279
  end
268
280
 
269
281
  def delete_file!(file_path)
@@ -11,42 +11,6 @@ module Filbunke
11
11
  def setup_clients!(local = false)
12
12
  @logger = Logger.new(@config["log_file"], local)
13
13
  @logger.log("Initializing filbunked")
14
-
15
- if(@config["version"] && @config["version"].to_i == 2)
16
- version_2_configure
17
- else
18
- version_1_configure
19
- end
20
- end
21
-
22
- def version_2_configure
23
- @config["repositories"].each do |repository_name, local_repository_config|
24
- @logger.log("Initializing repository (version 2): #{repository_name}")
25
- repository_file = File.read("#{@config["repository_files_path"]}#{repository_name}.yml")
26
- static_repository_config = YAML.load(repository_file)
27
- @clients << begin
28
- repository = Repository.new(static_repository_config["filbunke_server_repository"],
29
- static_repository_config["filbunke_server_host"],
30
- static_repository_config["filbunke_server_port"],
31
- local_repository_config["local_path"],
32
- @config["file_umask"].to_i,
33
- @config["directory_umask"].to_i,
34
- static_repository_config["file_url_username"],
35
- static_repository_config["file_url_password"],
36
- @config["hadoop_binary"])
37
- callbacks = []
38
- local_repository_config["callbacks"].each do |callback_name, callback_config|
39
- require ::File.join(@config["callback_path"], callback_name.to_s)
40
- callback_class = Module.const_get(callback_name.split("_").map(&:capitalize).join)
41
- callbacks << callback_class.new(@logger, callback_config)
42
- end if local_repository_config["callbacks"]
43
- run_every = local_repository_config["run_every"] ? local_repository_config["run_every"].to_i : @config["run_every"].to_i
44
- Client.new(repository, @logger, run_every, callbacks)
45
- end
46
- end
47
- end
48
-
49
- def version_1_configure
50
14
  @config["repositories"].each do |repository_name, repository_config|
51
15
  @logger.log("Initializing repository: #{repository_name}")
52
16
  @clients << begin
@@ -65,32 +29,26 @@ module Filbunke
65
29
  callback_class = Module.const_get(callback_name.split("_").map(&:capitalize).join)
66
30
  callbacks << callback_class.new(@logger, callback_config)
67
31
  end
68
- Client.new(repository, @logger, @config["run_every"].to_i, callbacks)
32
+ Client.new(repository, @logger, callbacks)
69
33
  end
70
34
  end
71
35
  end
72
36
 
73
-
74
-
75
37
  def run!
76
38
  version = ::File.read(::File.expand_path(::File.join(::File.dirname(__FILE__), "../../VERSION"))).chomp
77
39
  @logger.log("Starting filbunked version #{version}")
78
- counter = 0
79
40
  while true
80
- counter++
81
41
  begin
82
42
  @clients.each do |client|
83
- if(counter % client.run_every == 0)
84
- new_checkpoint = client.update_files!(checkpoint_for_repository(client.repository))
85
- update_checkpoint_for_repository(client.repository, new_checkpoint)
86
- end
43
+ new_checkpoint = client.update_files!(checkpoint_for_repository(client.repository))
44
+ update_checkpoint_for_repository(client.repository, new_checkpoint)
87
45
  end
88
46
  rescue StandardError => e
89
47
  @logger.log("Died.. #{e.message}")
90
48
  @logger.log(e.backtrace.join("\n"))
91
49
  exit 1
92
50
  end
93
- sleep 1
51
+ sleep @config["run_every"]
94
52
  end
95
53
  end
96
54
 
metadata CHANGED
@@ -1,30 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filbunke
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 63
5
+ prerelease:
5
6
  segments:
6
7
  - 1
7
8
  - 8
8
- - 3
9
- version: 1.8.3
9
+ - 4
10
+ version: 1.8.4
10
11
  platform: ruby
11
12
  authors:
12
- - Wouter de Bie
13
13
  - "Bj\xC3\xB6rn Sperber"
14
+ - Karl Ravn
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2012-09-18 00:00:00 +02:00
19
+ date: 2012-10-01 00:00:00 +02:00
19
20
  default_executable: filbunked
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
23
  name: thoughtbot-shoulda
23
24
  prerelease: false
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
25
27
  requirements:
26
28
  - - ">="
27
29
  - !ruby/object:Gem::Version
30
+ hash: 3
28
31
  segments:
29
32
  - 0
30
33
  version: "0"
@@ -34,9 +37,11 @@ dependencies:
34
37
  name: json
35
38
  prerelease: false
36
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
37
41
  requirements:
38
42
  - - ">="
39
43
  - !ruby/object:Gem::Version
44
+ hash: 29
40
45
  segments:
41
46
  - 1
42
47
  - 1
@@ -48,9 +53,11 @@ dependencies:
48
53
  name: typhoeus
49
54
  prerelease: false
50
55
  requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
51
57
  requirements:
52
58
  - - "="
53
59
  - !ruby/object:Gem::Version
60
+ hash: 21
54
61
  segments:
55
62
  - 0
56
63
  - 3
@@ -62,9 +69,11 @@ dependencies:
62
69
  name: open4
63
70
  prerelease: false
64
71
  requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
65
73
  requirements:
66
74
  - - ">="
67
75
  - !ruby/object:Gem::Version
76
+ hash: 21
68
77
  segments:
69
78
  - 1
70
79
  - 0
@@ -73,7 +82,7 @@ dependencies:
73
82
  type: :runtime
74
83
  version_requirements: *id004
75
84
  description: Filbunke client and library
76
- email: wouter@deltaprojects.se
85
+ email: info@deltaprojects.com
77
86
  executables:
78
87
  - filbunked
79
88
  extensions: []
@@ -111,23 +120,27 @@ rdoc_options: []
111
120
  require_paths:
112
121
  - lib
113
122
  required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
114
124
  requirements:
115
125
  - - ">="
116
126
  - !ruby/object:Gem::Version
127
+ hash: 3
117
128
  segments:
118
129
  - 0
119
130
  version: "0"
120
131
  required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
121
133
  requirements:
122
134
  - - ">="
123
135
  - !ruby/object:Gem::Version
136
+ hash: 3
124
137
  segments:
125
138
  - 0
126
139
  version: "0"
127
140
  requirements: []
128
141
 
129
142
  rubyforge_project:
130
- rubygems_version: 1.3.6
143
+ rubygems_version: 1.6.2
131
144
  signing_key:
132
145
  specification_version: 3
133
146
  summary: Filbunke client