filecluster 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO +1 -0
- data/lib/fc/base.rb +2 -0
- data/lib/fc/storage.rb +18 -6
- data/lib/fc/version.rb +1 -1
- data/lib/manage/show.rb +5 -0
- data/test/daemon_test.rb +11 -5
- data/test/functional_test.rb +25 -3
- metadata +4 -4
data/TODO
CHANGED
data/lib/fc/base.rb
CHANGED
@@ -54,6 +54,8 @@ module FC
|
|
54
54
|
self.class.table_fields.each do |key|
|
55
55
|
db_val = @database_fields[key]
|
56
56
|
val = self.send(key)
|
57
|
+
val = 1 if val == true
|
58
|
+
val = 0 if val == false
|
57
59
|
if val.to_s != db_val.to_s || val.nil? && !db_val.nil? || !val.nil? && db_val.nil?
|
58
60
|
fields << "#{key}=#{val ? (val.class == String ? "'#{FC::DB.connect.escape(val)}'" : val.to_i) : 'NULL'}"
|
59
61
|
end
|
data/lib/fc/storage.rb
CHANGED
@@ -40,11 +40,15 @@ module FC
|
|
40
40
|
def copy_path(local_path, file_name)
|
41
41
|
dst_path = "#{self.path}#{file_name}"
|
42
42
|
|
43
|
-
cmd = self.class.curr_host == host ?
|
43
|
+
cmd = self.class.curr_host == host ?
|
44
|
+
"mkdir -p #{File.dirname(dst_path)}" :
|
45
|
+
"ssh -oBatchMode=yes -oStrictHostKeyChecking=no #{self.host} 'mkdir -p #{File.dirname(dst_path)}'"
|
44
46
|
r = `#{cmd} 2>&1`
|
45
47
|
raise r if $?.exitstatus != 0
|
46
48
|
|
47
|
-
cmd = self.class.curr_host == host ?
|
49
|
+
cmd = self.class.curr_host == host ?
|
50
|
+
"cp -r #{local_path} #{dst_path}" :
|
51
|
+
"scp -rB #{local_path} #{self.host}:#{dst_path}"
|
48
52
|
r = `#{cmd} 2>&1`
|
49
53
|
raise r if $?.exitstatus != 0
|
50
54
|
end
|
@@ -56,7 +60,9 @@ module FC
|
|
56
60
|
r = `mkdir -p #{File.dirname(local_path)} 2>&1`
|
57
61
|
raise r if $?.exitstatus != 0
|
58
62
|
|
59
|
-
cmd = self.class.curr_host == host ?
|
63
|
+
cmd = self.class.curr_host == host ?
|
64
|
+
"cp -r #{src_path} #{local_path}" :
|
65
|
+
"scp -rB #{self.host}:#{src_path} #{local_path}"
|
60
66
|
r = `#{cmd} 2>&1`
|
61
67
|
raise r if $?.exitstatus != 0
|
62
68
|
end
|
@@ -64,11 +70,15 @@ module FC
|
|
64
70
|
# delete object from storage
|
65
71
|
def delete_file(file_name)
|
66
72
|
dst_path = "#{self.path}#{file_name}"
|
67
|
-
cmd = self.class.curr_host == host ?
|
73
|
+
cmd = self.class.curr_host == host ?
|
74
|
+
"rm -rf #{dst_path}" :
|
75
|
+
"ssh -oBatchMode=yes -oStrictHostKeyChecking=no #{self.host} 'rm -rf #{dst_path}'"
|
68
76
|
r = `#{cmd} 2>&1`
|
69
77
|
raise r if $?.exitstatus != 0
|
70
78
|
|
71
|
-
cmd = self.class.curr_host == host ?
|
79
|
+
cmd = self.class.curr_host == host ?
|
80
|
+
"ls -la #{dst_path}" :
|
81
|
+
"ssh -oBatchMode=yes -oStrictHostKeyChecking=no #{self.host} 'ls -la #{dst_path}'"
|
72
82
|
r = `#{cmd} 2>/dev/null`
|
73
83
|
raise "Path #{dst_path} not deleted" unless r.empty?
|
74
84
|
end
|
@@ -77,7 +87,9 @@ module FC
|
|
77
87
|
def file_size(file_name)
|
78
88
|
dst_path = "#{self.path}#{file_name}"
|
79
89
|
|
80
|
-
cmd = self.class.curr_host == host ?
|
90
|
+
cmd = self.class.curr_host == host ?
|
91
|
+
"du -sb #{dst_path}" :
|
92
|
+
"ssh -oBatchMode=yes -oStrictHostKeyChecking=no #{self.host} 'du -sb #{dst_path}'"
|
81
93
|
r = `#{cmd} 2>&1`
|
82
94
|
raise r if $?.exitstatus != 0
|
83
95
|
r.to_i
|
data/lib/fc/version.rb
CHANGED
data/lib/manage/show.rb
CHANGED
@@ -50,6 +50,11 @@ def show_items_info
|
|
50
50
|
counts.each do |r|
|
51
51
|
puts " #{r['status']}: #{r['cnt']}"
|
52
52
|
end
|
53
|
+
puts "Items storages by status:"
|
54
|
+
counts = FC::DB.connect.query("SELECT status, count(*) as cnt FROM #{FC::ItemStorage.table_name} WHERE 1 GROUP BY status")
|
55
|
+
counts.each do |r|
|
56
|
+
puts " #{r['status']}: #{r['cnt']}"
|
57
|
+
end
|
53
58
|
count = FC::DB.connect.query("SELECT count(*) as cnt FROM #{FC::Item.table_name} as i, #{FC::Policy.table_name} as p WHERE i.policy_id = p.id AND i.copies > 0 AND i.copies < p.copies AND i.status = 'ready'").first['cnt']
|
54
59
|
puts "Items to copy: #{count}"
|
55
60
|
count = FC::DB.connect.query("SELECT count(*) as cnt FROM #{FC::Item.table_name} as i, #{FC::Policy.table_name} as p WHERE i.policy_id = p.id AND i.copies > p.copies AND i.status = 'ready'").first['cnt']
|
data/test/daemon_test.rb
CHANGED
@@ -32,9 +32,13 @@ class DaemonTest < Test::Unit::TestCase
|
|
32
32
|
`rm -rf /tmp/host*-sd*`
|
33
33
|
`mkdir -p /tmp/host1-sda/ /tmp/host1-sdb/ /tmp/host1-sdc/`
|
34
34
|
|
35
|
-
# test
|
35
|
+
# test files to copy
|
36
36
|
@@test_file_path = '/tmp/fc_test_file'
|
37
37
|
`dd if=/dev/urandom of=#{@@test_file_path} bs=1M count=1 2>&1`
|
38
|
+
@@test_dir_path = '/tmp/fc_test_dir'
|
39
|
+
`mkdir -p #{@@test_dir_path}/aaa #{@@test_dir_path}/bbb`
|
40
|
+
`cp #{@@test_file_path} #{@@test_dir_path}/aaa/test1`
|
41
|
+
`cp #{@@test_file_path} #{@@test_dir_path}/bbb/test2`
|
38
42
|
|
39
43
|
@@storages = []
|
40
44
|
@@storages << FC::Storage.new(:name => 'host1-sda', :host => 'host1', :path => '/tmp/host1-sda/', :copy_id => 1, :size_limit => 1000000000)
|
@@ -59,7 +63,9 @@ class DaemonTest < Test::Unit::TestCase
|
|
59
63
|
FC::DB.connect.query("DELETE FROM items")
|
60
64
|
FC::DB.connect.query("DELETE FROM policies")
|
61
65
|
FC::DB.connect.query("DELETE FROM storages")
|
62
|
-
`rm -rf /tmp/
|
66
|
+
`rm -rf /tmp/host*-sd*`
|
67
|
+
`rm -rf #{@@test_file_path}`
|
68
|
+
`rm -rf #{@@test_dir_path}`
|
63
69
|
end
|
64
70
|
end
|
65
71
|
|
@@ -72,7 +78,7 @@ class DaemonTest < Test::Unit::TestCase
|
|
72
78
|
FC::Storage.stubs(:curr_host).returns('host1')
|
73
79
|
assert_nothing_raised { @item1 = FC::Item.create_from_local(@@test_file_path, 'bla/bla/test1', @@policy, {:tag => 'test1'}) }
|
74
80
|
assert_nothing_raised { @item2 = FC::Item.create_from_local(@@test_file_path, 'bla/bla/test2', @@policy, {:tag => 'test2'}) }
|
75
|
-
assert_nothing_raised { @item3 = FC::Item.create_from_local(@@
|
81
|
+
assert_nothing_raised { @item3 = FC::Item.create_from_local(@@test_dir_path, 'bla/bla/test3', @@policy, {:tag => 'test3'}) }
|
76
82
|
|
77
83
|
@@policy.copies = 3
|
78
84
|
@@policy.save
|
@@ -81,7 +87,7 @@ class DaemonTest < Test::Unit::TestCase
|
|
81
87
|
# wait for copy
|
82
88
|
[1, 2, 3].each do |i|
|
83
89
|
['b', 'c'].each do |j|
|
84
|
-
assert_equal `du -
|
90
|
+
assert_equal `du -sb /tmp/host1-sda/bla/bla/test$i 2>&1`.to_i, `du -sb /tmp/host$i-sd$j/bla/bla/test$i 2>&1`.to_i
|
85
91
|
end
|
86
92
|
end
|
87
93
|
|
@@ -91,7 +97,7 @@ class DaemonTest < Test::Unit::TestCase
|
|
91
97
|
item_storage.status = 'delete'
|
92
98
|
item_storage.save
|
93
99
|
sleep 2
|
94
|
-
assert_equal 0, `du -
|
100
|
+
assert_equal 0, `du -sb /tmp/host1-sdc/bla/bla/test1 2>&1`.to_i
|
95
101
|
|
96
102
|
assert_equal @@errors_count, FC::Error.where.count, "new errors in errors table"
|
97
103
|
end
|
data/test/functional_test.rb
CHANGED
@@ -6,10 +6,16 @@ class FunctionalTest < Test::Unit::TestCase
|
|
6
6
|
# tmp fake storages dirs
|
7
7
|
`rm -rf /tmp/host*-sd*`
|
8
8
|
`mkdir -p /tmp/host1-sda/ /tmp/host2-sda/`
|
9
|
+
`rm -rf /tmp/fc_test_dir`
|
10
|
+
`mkdir -p /tmp/fc_test_dir`
|
9
11
|
|
10
12
|
# test file to copy
|
11
13
|
@@test_file_path = '/tmp/fc_test_file'
|
12
14
|
`dd if=/dev/urandom of=#{@@test_file_path} bs=100K count=1 2>&1`
|
15
|
+
@@test_dir_path = '/tmp/fc_test_dir'
|
16
|
+
`mkdir -p #{@@test_dir_path}/aaa #{@@test_dir_path}/bbb`
|
17
|
+
`cp #{@@test_file_path} #{@@test_dir_path}/aaa/test1`
|
18
|
+
`cp #{@@test_file_path} #{@@test_dir_path}/bbb/test2`
|
13
19
|
|
14
20
|
@@storages = []
|
15
21
|
@@storages << FC::Storage.new(:name => 'host1-sda', :host => 'host1', :path => '/tmp/host1-sda/', :size_limit => 1000000, :check_time => Time.new.to_i)
|
@@ -31,7 +37,9 @@ class FunctionalTest < Test::Unit::TestCase
|
|
31
37
|
FC::DB.connect.query("DELETE FROM items")
|
32
38
|
FC::DB.connect.query("DELETE FROM policies")
|
33
39
|
FC::DB.connect.query("DELETE FROM storages")
|
34
|
-
`rm -rf /tmp/
|
40
|
+
`rm -rf /tmp/host*-sd*`
|
41
|
+
`rm -rf #{@@test_file_path}`
|
42
|
+
`rm -rf #{@@test_dir_path}`
|
35
43
|
end
|
36
44
|
end
|
37
45
|
|
@@ -43,8 +51,22 @@ class FunctionalTest < Test::Unit::TestCase
|
|
43
51
|
should "item create_from_local successful" do
|
44
52
|
assert_nothing_raised { @item = FC::Item.create_from_local(@@test_file_path, '/bla/bla/test1', @@policies[0], {:tag => 'test'}) }
|
45
53
|
assert_kind_of FC::Item, @item
|
46
|
-
assert_equal `du -
|
47
|
-
assert_equal `du -
|
54
|
+
assert_equal `du -sb /tmp/host1-sda/bla/bla/test1 2>&1`.to_i, `du -sb #{@@test_file_path} 2>&1`.to_i
|
55
|
+
assert_equal `du -sb /tmp/host1-sda/bla/bla/test1 2>&1`.to_i, @item.size
|
56
|
+
assert_equal 'ready', @item.status
|
57
|
+
item_storages = @item.get_item_storages
|
58
|
+
assert_equal 1, item_storages.count
|
59
|
+
item_storage = item_storages.first
|
60
|
+
assert_equal 'ready', item_storage.status
|
61
|
+
assert_equal 'host1-sda', item_storage.storage_name
|
62
|
+
end
|
63
|
+
|
64
|
+
should "item create_from_local dir successful" do
|
65
|
+
assert_nothing_raised { @item = FC::Item.create_from_local(@@test_dir_path, '/bla/bla/test_dir', @@policies[0], {:tag => 'test_dir'}) }
|
66
|
+
assert_kind_of FC::Item, @item
|
67
|
+
assert_equal true, @item.dir?
|
68
|
+
assert_equal `du -sb /tmp/host1-sda/bla/bla/test_dir 2>&1`.to_i, `du -sb #{@@test_dir_path} 2>&1`.to_i
|
69
|
+
assert_equal `du -sb /tmp/host1-sda/bla/bla/test_dir 2>&1`.to_i, @item.size
|
48
70
|
assert_equal 'ready', @item.status
|
49
71
|
item_storages = @item.get_item_storages
|
50
72
|
assert_equal 1, item_storages.count
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filecluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rb-readline
|
@@ -186,7 +186,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
186
|
version: '0'
|
187
187
|
segments:
|
188
188
|
- 0
|
189
|
-
hash:
|
189
|
+
hash: 2481106043269937193
|
190
190
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
191
|
none: false
|
192
192
|
requirements:
|
@@ -195,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
195
|
version: '0'
|
196
196
|
segments:
|
197
197
|
- 0
|
198
|
-
hash:
|
198
|
+
hash: 2481106043269937193
|
199
199
|
requirements: []
|
200
200
|
rubyforge_project:
|
201
201
|
rubygems_version: 1.8.24
|