filecluster 0.5.13 → 0.5.14
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 +4 -4
- data/Rakefile +1 -0
- data/lib/fc/item.rb +13 -8
- data/lib/fc/version.rb +1 -1
- data/test/db_test.rb +4 -2
- data/test/functional_test.rb +63 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df71ee0cd0c4068b96655ad85da5a84de2aa2044
|
4
|
+
data.tar.gz: f7787796c064db4b2e7f373d94422cb0af708eca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 053ef243b2f1c07f955207af615764909245cdcf5d7b35d76c34f267e3f80a9572f1465208cd2d2bfd34e2095103988609cbba66fb3f8c9d1ad29b27443b5f96
|
7
|
+
data.tar.gz: 52e8e8ee2cf22ede6b1f31448d3b7233ea3a883938c8a4ec4d27922b08dc124a76b2f74668e146c4cc6d51e45060dd0b563071375e5afc6fc32b0077374855da
|
data/Rakefile
CHANGED
data/lib/fc/item.rb
CHANGED
@@ -108,8 +108,7 @@ module FC
|
|
108
108
|
end
|
109
109
|
md5_on_storage = storage.md5_sum(name) if md5
|
110
110
|
rescue Exception => e
|
111
|
-
item_storage
|
112
|
-
item_storage.save
|
111
|
+
item_storage_status_set(item_storage, 'error')
|
113
112
|
FC::Error.raise "Copy error: #{e.message}", :item_id => id, :item_storage_id => item_storage.id
|
114
113
|
else
|
115
114
|
begin
|
@@ -118,13 +117,10 @@ module FC
|
|
118
117
|
FC::Error.raise "After copy error: #{e.message}", :item_id => id, :item_storage_id => item_storage.id
|
119
118
|
else
|
120
119
|
if md5 && md5_on_storage != md5
|
121
|
-
item_storage
|
122
|
-
item_storage.save
|
120
|
+
item_storage_status_set(item_storage, 'error')
|
123
121
|
FC::Error.raise "Check md5 after copy error", :item_id => id, :item_storage_id => item_storage.id
|
124
122
|
else
|
125
|
-
item_storage
|
126
|
-
item_storage.save
|
127
|
-
reload
|
123
|
+
item_storage_status_set(item_storage, 'ready')
|
128
124
|
if remove_local && !src.instance_of?(FC::Storage) && File.exists?(src)
|
129
125
|
if File.directory?(src)
|
130
126
|
FileUtils.rm_r(src)
|
@@ -136,7 +132,16 @@ module FC
|
|
136
132
|
end
|
137
133
|
end
|
138
134
|
end
|
139
|
-
|
135
|
+
|
136
|
+
def item_storage_status_set(item_storage, status)
|
137
|
+
reload
|
138
|
+
marked_for_delete = self.status == 'deferred_delete'
|
139
|
+
item_storage.status = status
|
140
|
+
item_storage.save
|
141
|
+
reload
|
142
|
+
mark_deleted if marked_for_delete
|
143
|
+
end
|
144
|
+
|
140
145
|
# mark item and his items_storages for deferred delete
|
141
146
|
# real delete after policy.delete_deferred_time
|
142
147
|
def mark_deleted
|
data/lib/fc/version.rb
CHANGED
data/test/db_test.rb
CHANGED
@@ -145,8 +145,10 @@ class DbTest < Test::Unit::TestCase
|
|
145
145
|
assert_equal 'rec1-sda,rec2-sdd', @policies[1].create_storages, "Policy (id=#{@policies[0].id}) incorrect create_storages"
|
146
146
|
assert_equal 'rec1-sda', @policies[2].create_storages, "Policy (id=#{@policies[0].id}) incorrect create_storages"
|
147
147
|
|
148
|
-
|
149
|
-
|
148
|
+
FC::Policy.new(:create_storages => 'rec2-sda,rec2-sdd', :name => 'policy 1').save
|
149
|
+
assert_equal 'rec1-sda,rec1-sdd', FC::Policy.where('name = ?', 'policy 1').first.create_storages, "Create policy with uniq name"
|
150
|
+
FC::Policy.new(:create_storages => 'bla,test', :name => 'new policy').save
|
151
|
+
assert_nil FC::Policy.where('name = ?', 'new policy').first, "Create policy with incorrect create_storages"
|
150
152
|
|
151
153
|
assert_raise(Mysql2::Error, 'Change storage name with linked polices') { @storages[0].name = 'blabla'; @storages[0].save }
|
152
154
|
assert_raise(Mysql2::Error, 'Delete storage name with linked polices') { @storages[0].delete }
|
data/test/functional_test.rb
CHANGED
@@ -45,7 +45,14 @@ class FunctionalTest < Test::Unit::TestCase
|
|
45
45
|
FC::Storage.any_instance.stubs(:host).returns('localhost')
|
46
46
|
FC::Storage.stubs(:curr_host).returns('localhost')
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
|
+
def stub_method(obj, method, method_impl)
|
50
|
+
obj.singleton_class.send(:alias_method, "#{method}_mock_backup", method)
|
51
|
+
obj.define_singleton_method(method, method_impl)
|
52
|
+
yield if block_given?
|
53
|
+
obj.singleton_class.send(:alias_method, method, "#{method}_mock_backup")
|
54
|
+
end
|
55
|
+
|
49
56
|
should "item create_from_local successful" do
|
50
57
|
assert_nothing_raised { @item = FC::Item.create_from_local(@@test_file_path, '/bla/bla/test1', @@policies[0], {:tag => 'test'}) }
|
51
58
|
assert_kind_of FC::Item, @item
|
@@ -130,7 +137,61 @@ class FunctionalTest < Test::Unit::TestCase
|
|
130
137
|
# no md5 check on copy - success
|
131
138
|
assert_nothing_raised { @item.copy_item_storage(@@storages[0], @@storages[1], item_storage) }
|
132
139
|
end
|
133
|
-
|
140
|
+
|
141
|
+
should 'item keep deferred_delete after copy' do
|
142
|
+
@item = FC::Item.create_from_local(@@test_file_path, 'test9', @@policies[0], {:tag => 'test', :no_md5 => true})
|
143
|
+
item_storage = @item.make_item_storage(@@storages[1], 'copy')
|
144
|
+
@item.mark_deleted
|
145
|
+
# rewrite item file
|
146
|
+
`dd if=/dev/urandom of=#{@@storages[0].path}#{@item.name} bs=100K count=1 2>&1`
|
147
|
+
@item.copy_item_storage(@@storages[0], @@storages[1], item_storage)
|
148
|
+
@item.reload
|
149
|
+
assert_equal 2, @item.get_item_storages.size
|
150
|
+
@item.get_item_storages.each do |is|
|
151
|
+
assert_equal 'ready', is.status
|
152
|
+
end
|
153
|
+
assert_equal 'deferred_delete', @item.status
|
154
|
+
end
|
155
|
+
|
156
|
+
should 'item keep deferred_delete status if changed during copy' do
|
157
|
+
@item = FC::Item.create_from_local(@@test_file_path, 'test10', @@policies[0], {:tag => 'test', :no_md5 => true})
|
158
|
+
item_storage = @item.make_item_storage(@@storages[1], 'copy')
|
159
|
+
# rewrite item file
|
160
|
+
`dd if=/dev/urandom of=#{@@storages[0].path}#{@item.name} bs=100K count=1 2>&1`
|
161
|
+
# no md5 check on copy - success
|
162
|
+
item = @item
|
163
|
+
stubbed_method_impl = proc { |*args|
|
164
|
+
copy_to_local_mock_backup(*args)
|
165
|
+
item.mark_deleted
|
166
|
+
}
|
167
|
+
stub_method(@@storages[0], :copy_to_local, stubbed_method_impl) do
|
168
|
+
@item.copy_item_storage(@@storages[0], @@storages[1], item_storage)
|
169
|
+
end
|
170
|
+
@item.reload
|
171
|
+
assert_equal 'ready', item_storage.status
|
172
|
+
assert_equal 'deferred_delete', @item.status
|
173
|
+
end
|
174
|
+
|
175
|
+
should 'item keep deferred_delete status if changed during copy and error was raised' do
|
176
|
+
@item = FC::Item.create_from_local(@@test_file_path, 'test11', @@policies[0], {:tag => 'test'})
|
177
|
+
item_storage = @item.make_item_storage(@@storages[1], 'copy')
|
178
|
+
# rewrite item file
|
179
|
+
`dd if=/dev/urandom of=#{@@storages[0].path}#{@item.name} bs=100K count=1 2>&1`
|
180
|
+
|
181
|
+
# simulate mark_delete during copy process and raise exception
|
182
|
+
item = @item
|
183
|
+
stubbed_method_impl = proc { |*_|
|
184
|
+
item.mark_deleted
|
185
|
+
raise 'oops'
|
186
|
+
}
|
187
|
+
stub_method(@@storages[0], :copy_to_local, stubbed_method_impl) do
|
188
|
+
assert_raise(RuntimeError) { @item.copy_item_storage(@@storages[0], @@storages[1], item_storage) }
|
189
|
+
end
|
190
|
+
@item.reload
|
191
|
+
assert_equal 'error', item_storage.status
|
192
|
+
assert_equal 'deferred_delete', @item.status
|
193
|
+
end
|
194
|
+
|
134
195
|
should "item create_from_local inplace" do
|
135
196
|
tmp_file_path = "/tmp/host2-sda/inplace test"
|
136
197
|
`cp #{@@test_file_path.shellescape} #{tmp_file_path.shellescape}`
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filecluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mysql2
|