github.com/swiftstack/proxyfs@v0.0.0-20201223034610-5434d919416e/cookbooks/swift/recipes/rings.rb (about) 1 # Copyright (c) 2015 SwiftStack, Inc. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12 # implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 16 17 # rings 18 19 ["container", "account"].each_with_index do |service, p| 20 execute "#{service}.builder-create" do 21 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder create " \ 22 "#{node['part_power']} #{node['replicas']} 1" 23 creates "/etc/swift/#{service}.builder" 24 cwd "/etc/swift" 25 end 26 (1..node['disks']).each do |i| 27 n_idx = ((i - 1) % node['nodes']) + 1 28 z = ((i - 1) % node['zones']) + 1 29 r = ((z - 1) % node['regions']) + 1 30 dev = "sdb#{i}" 31 ip = "127.0.0.1" 32 port = "60#{n_idx}#{p + 1}" 33 execute "#{service}.builder-add-#{dev}" do 34 dsl = "r#{r}z#{z}-#{ip}:#{port}/#{dev}" 35 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder add " \ 36 "#{dsl} 1 && rm -f /etc/swift/#{service}.ring.gz || true" 37 not_if "swift-ring-builder /etc/swift/#{service}.builder search #{dsl}" 38 cwd "/etc/swift" 39 end 40 end 41 execute "#{service}.builder-rebalance" do 42 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder write_ring" 43 not_if "sudo -u #{node['swift_user']} swift-ring-builder /etc/swift/#{service}.builder rebalance" 44 creates "/etc/swift/#{service}.ring.gz" 45 cwd "/etc/swift" 46 end 47 end 48 49 node['storage_policies'].each_with_index do |name, p| 50 service = "object" 51 if p >= 1 then 52 service += "-#{p}" 53 end 54 if name == node['ec_policy'] then 55 replicas = node['ec_replicas'] 56 num_disks = node['ec_disks'] 57 else 58 replicas = node['replicas'] 59 num_disks = node['disks'] 60 end 61 execute "#{service}.builder-create" do 62 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder create " \ 63 "#{node['part_power']} #{replicas} 1" 64 creates "/etc/swift/#{service}.builder" 65 cwd "/etc/swift" 66 end 67 (1..num_disks).each do |i| 68 n_idx = ((i - 1) % node['nodes']) + 1 69 z = ((i - 1) % node['zones']) + 1 70 r = ((z - 1) % node['regions']) + 1 71 dev = "sdb#{i}" 72 ip = "127.0.0.1" 73 port = "60#{n_idx}0" 74 if node['servers_per_port'] > 0 then 75 ip = "127.0.0.#{n_idx}" 76 77 # Range ports per disk per node from 60j6 - 60j9 78 # NOTE: this only supports DISKS <= 4 * NODES 79 p = 5 + (i / Float(node['nodes'])).ceil.to_int 80 port = "60#{n_idx}#{p}" 81 end 82 execute "#{service}.builder-add-#{dev}" do 83 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder add " \ 84 "r#{r}z#{z}-#{ip}:#{port}/#{dev} 1 && " \ 85 "rm -f /etc/swift/#{service}.ring.gz || true" 86 not_if "swift-ring-builder /etc/swift/#{service}.builder search /#{dev}" 87 cwd "/etc/swift" 88 end 89 end 90 execute "#{service}.builder-rebalance" do 91 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder write_ring" 92 not_if "sudo -u #{node['swift_user']} swift-ring-builder /etc/swift/#{service}.builder rebalance" 93 creates "/etc/swift/#{service}.ring.gz" 94 cwd "/etc/swift" 95 end 96 end