petasos 0.4.3 → 0.5.1
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/bin/petasos +2 -2
- data/lib/petasos/distributor.rb +38 -25
- data/lib/petasos/node.rb +10 -2
- data/lib/petasos.rb +10 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ff98d0ee0f69c09a8436007524d6650b8ed5e82c4f2ced088b0a8da72ac31cd
|
4
|
+
data.tar.gz: 4e16bc991db6f87baa0f056e64834251749c290b3e6aba9db66586ff6850a2fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0cc807729014a25f679cfadddcc8ee6851b2312438790e193ebd4b38ce9182d1a4ee4a0d0da07685eee1b125671841f1b7758b1708699d6b2328bd8ea74bab8
|
7
|
+
data.tar.gz: 9b44f27902559d5b0d3df48ab822186d3de4f28627b86a0f1288000e4d1e61ad7985348ea6efaf03bb94d9ba654941b48ec72a2febe6d851d5825b83753c3f46
|
data/bin/petasos
CHANGED
data/lib/petasos/distributor.rb
CHANGED
@@ -50,7 +50,7 @@ class Petasos::Distributor
|
|
50
50
|
@manifests.each_pair do |node_name, manifest_list|
|
51
51
|
manifest_list.each do |manifest|
|
52
52
|
manifest["imports"].each_pair do |pool_name, import_hash|
|
53
|
-
@pools[pool_name]["import_paths"] << [node_name, import_hash["import_path"]]
|
53
|
+
@pools[pool_name]["import_paths"] << [node_name, manifest["name"], import_hash["import_path"]]
|
54
54
|
@pools[pool_name]["backfill_import_paths"] << [node_name, manifest["name"], import_hash["import_path"]] if import_hash["backfill"]
|
55
55
|
end
|
56
56
|
manifest["exports"].each_pair do |pool_name, export_hash|
|
@@ -62,6 +62,7 @@ class Petasos::Distributor
|
|
62
62
|
# {"wow-ah"=>
|
63
63
|
# {"import_paths"=>
|
64
64
|
# [["petasos-node-b",
|
65
|
+
# "linux-laptop-storage",
|
65
66
|
# "/home/justin/play/petasos/test/sandbox/node_b/location_a/data"]],
|
66
67
|
# "backfill_import_paths"=>
|
67
68
|
# [["petasos-node-b",
|
@@ -77,11 +78,17 @@ class Petasos::Distributor
|
|
77
78
|
export_filename = File.basename(exports_file_path, ".*")
|
78
79
|
label, location_name, pool_name, datetime = export_filename.split("_")
|
79
80
|
export_paths = YAML.load_file(exports_file_path)
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
@pools[pool_name]["import_paths"].each do |pool_storage|
|
82
|
+
to_node = find_node(pool_storage.first)
|
83
|
+
destination_seen_file_hash = get_seen_file_hash(pool_storage.first, pool_storage[1], pool_name)
|
84
|
+
export_paths.each do |export_path|
|
85
|
+
unless destination_seen_file_hash[File.basename(export_path)]
|
86
|
+
puts "exporting #{File.basename(export_path)} from #{from_node.name} to #{to_node.name}"
|
87
|
+
`scp #{from_node.host}:#{export_path}* #{to_node.host}:#{pool_storage.last}`
|
88
|
+
end
|
84
89
|
end
|
90
|
+
puts "Running `petasos locations` on #{to_node.name} after export from #{from_node.name}"
|
91
|
+
`ssh #{to_node.host} \"cd #{to_node.path} && petasos locations\"`
|
85
92
|
end
|
86
93
|
# mark it as completed
|
87
94
|
completed_export_file_path = File.join(Dir.pwd, "completed-#{File.basename(exports_file_path)}")
|
@@ -89,6 +96,8 @@ class Petasos::Distributor
|
|
89
96
|
# and then put it back where it came from
|
90
97
|
`scp #{completed_export_file_path} #{from_node.host}:#{from_node.path}`
|
91
98
|
`rm #{completed_export_file_path}`
|
99
|
+
puts "Running `petasos locations` on #{from_node.name} after completing its exports"
|
100
|
+
`ssh #{from_node.host} \"cd #{from_node.path} && petasos locations\"`
|
92
101
|
end
|
93
102
|
|
94
103
|
# {"wow-ah"=>
|
@@ -102,39 +111,43 @@ class Petasos::Distributor
|
|
102
111
|
# "canonical_exporters"=>[["petasos-node-a", "linux-laptop-source"]]}}
|
103
112
|
|
104
113
|
# Process the backfills.
|
105
|
-
# grab the seen files on the canonical exporters
|
106
114
|
@pools.each_pair do |pool_name, manifest_hash|
|
107
|
-
manifest_hash["canonical_exporters"].each do |canonical_exporter_details|
|
108
|
-
find_node(canonical_exporter_details.first).grab_seen_file_for_location(canonical_exporter_details.last, pool_name)
|
109
|
-
end
|
110
|
-
|
111
|
-
# grab the seen files on the backfill importers
|
112
|
-
manifest_hash["backfill_import_paths"].each do |backfill_importer_details|
|
113
|
-
find_node(backfill_importer_details.first).grab_seen_file_for_location(backfill_importer_details[1], pool_name)
|
114
|
-
end
|
115
|
-
|
116
115
|
# for each canonical exporter loop through the backfill lists, identify files that need moving and move them
|
117
116
|
manifest_hash["canonical_exporters"].each do |canonical_exporter_details|
|
118
|
-
exporter_seen_files =
|
119
|
-
exporter_file_list = YAML.load_file("seen_#{canonical_exporter_details.last}_#{pool_name}.yaml")
|
120
|
-
exporter_file_list.each { |f| exporter_seen_files[File.basename(f)] = f }
|
117
|
+
exporter_seen_files = get_seen_file_hash(canonical_exporter_details.first, canonical_exporter_details.last, pool_name)
|
121
118
|
manifest_hash["backfill_import_paths"].each do |backfill_importer_details|
|
122
|
-
backfill_importer_files =
|
123
|
-
|
124
|
-
|
119
|
+
backfill_importer_files = get_seen_file_hash(backfill_importer_details.first, backfill_importer_details[1], pool_name)
|
120
|
+
|
121
|
+
from_node = find_node(canonical_exporter_details.first)
|
122
|
+
to_node = find_node(backfill_importer_details.first)
|
125
123
|
|
126
124
|
exporter_seen_files.each_pair do |file_name, file_path|
|
127
125
|
unless backfill_importer_files[file_name]
|
128
|
-
|
129
|
-
to_node = find_node(backfill_importer_details.first)
|
126
|
+
puts "Backfilling #{file_name} to #{to_node.name} from #{from_node.name}"
|
130
127
|
`scp #{from_node.host}:#{file_path} #{to_node.host}:#{backfill_importer_details.last}`
|
131
128
|
end
|
132
129
|
end
|
130
|
+
|
131
|
+
puts "Running `petasos locations` on #{to_node.name} after backfill from #{from_node.name}"
|
132
|
+
`ssh #{to_node.host} \"cd #{to_node.path} && petasos locations\"`
|
133
133
|
end
|
134
134
|
end
|
135
|
-
# clear the seen files locally.
|
136
|
-
`rm seen_*`
|
137
135
|
end
|
136
|
+
# clear the seen files locally.
|
137
|
+
`rm seen_*`
|
138
|
+
end
|
139
|
+
|
140
|
+
def get_seen_file_hash(node_name, location_name, pool_name)
|
141
|
+
find_node(node_name).grab_seen_file_for_location(location_name, pool_name)
|
142
|
+
seen_file_hash = {}
|
143
|
+
# some locations/pools do not generate a seen file.
|
144
|
+
if File.file?("seen_#{location_name}_#{pool_name}.yaml")
|
145
|
+
seen_file_list = YAML.load_file("seen_#{location_name}_#{pool_name}.yaml")
|
146
|
+
else
|
147
|
+
seen_file_list = []
|
148
|
+
end
|
149
|
+
seen_file_list.each { |f| seen_file_hash[File.basename(f)] = f }
|
150
|
+
seen_file_hash
|
138
151
|
end
|
139
152
|
|
140
153
|
def find_node(node_name)
|
data/lib/petasos/node.rb
CHANGED
@@ -10,16 +10,24 @@ class Petasos::Node
|
|
10
10
|
@config = config
|
11
11
|
@manifests = []
|
12
12
|
`mkdir -p #{config["name"]}`
|
13
|
+
|
14
|
+
puts "Running `petasos locations` on #{name} before distribution begins"
|
15
|
+
`ssh #{host} \"cd #{path} && petasos locations\"`
|
16
|
+
|
13
17
|
grab_manifest_and_exports
|
14
18
|
parse_manifests
|
15
19
|
end
|
16
20
|
|
21
|
+
def name
|
22
|
+
config["name"]
|
23
|
+
end
|
24
|
+
|
17
25
|
def host
|
18
|
-
|
26
|
+
config["host"]
|
19
27
|
end
|
20
28
|
|
21
29
|
def path
|
22
|
-
|
30
|
+
config["path"]
|
23
31
|
end
|
24
32
|
|
25
33
|
def grab_manifest_and_exports
|
data/lib/petasos.rb
CHANGED
@@ -6,9 +6,16 @@ require "yaml"
|
|
6
6
|
class Petasos
|
7
7
|
class Error < StandardError; end
|
8
8
|
|
9
|
-
def run
|
10
|
-
|
11
|
-
|
9
|
+
def run(mode = "")
|
10
|
+
unless File.file?("petasos_is_running")
|
11
|
+
`touch petasos_is_running`
|
12
|
+
process_locations
|
13
|
+
unless mode == "locations"
|
14
|
+
process_distribution if File.file?(File.join(Dir.pwd, "petasos_distribution-config.yaml"))
|
15
|
+
process_locations
|
16
|
+
end
|
17
|
+
`rm petasos_is_running`
|
18
|
+
end
|
12
19
|
end
|
13
20
|
|
14
21
|
def process_locations
|