filecluster 0.1.1 → 0.1.2
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/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
|