github.com/swiftstack/ProxyFS@v0.0.0-20210203235616-4017c267d62f/cookbooks/swift/recipes/rings.rb (about) 1 # Copyright (c) 2015-2021, NVIDIA CORPORATION. 2 # SPDX-License-Identifier: Apache-2.0 3 4 5 # rings 6 7 ["container", "account"].each_with_index do |service, p| 8 execute "#{service}.builder-create" do 9 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder create " \ 10 "#{node['part_power']} #{node['replicas']} 1" 11 creates "/etc/swift/#{service}.builder" 12 cwd "/etc/swift" 13 end 14 (1..node['disks']).each do |i| 15 n_idx = ((i - 1) % node['nodes']) + 1 16 z = ((i - 1) % node['zones']) + 1 17 r = ((z - 1) % node['regions']) + 1 18 dev = "sdb#{i}" 19 ip = "127.0.0.1" 20 port = "60#{n_idx}#{p + 1}" 21 execute "#{service}.builder-add-#{dev}" do 22 dsl = "r#{r}z#{z}-#{ip}:#{port}/#{dev}" 23 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder add " \ 24 "#{dsl} 1 && rm -f /etc/swift/#{service}.ring.gz || true" 25 not_if "swift-ring-builder /etc/swift/#{service}.builder search #{dsl}" 26 cwd "/etc/swift" 27 end 28 end 29 execute "#{service}.builder-rebalance" do 30 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder write_ring" 31 not_if "sudo -u #{node['swift_user']} swift-ring-builder /etc/swift/#{service}.builder rebalance" 32 creates "/etc/swift/#{service}.ring.gz" 33 cwd "/etc/swift" 34 end 35 end 36 37 node['storage_policies'].each_with_index do |name, p| 38 service = "object" 39 if p >= 1 then 40 service += "-#{p}" 41 end 42 if name == node['ec_policy'] then 43 replicas = node['ec_replicas'] 44 num_disks = node['ec_disks'] 45 else 46 replicas = node['replicas'] 47 num_disks = node['disks'] 48 end 49 execute "#{service}.builder-create" do 50 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder create " \ 51 "#{node['part_power']} #{replicas} 1" 52 creates "/etc/swift/#{service}.builder" 53 cwd "/etc/swift" 54 end 55 (1..num_disks).each do |i| 56 n_idx = ((i - 1) % node['nodes']) + 1 57 z = ((i - 1) % node['zones']) + 1 58 r = ((z - 1) % node['regions']) + 1 59 dev = "sdb#{i}" 60 ip = "127.0.0.1" 61 port = "60#{n_idx}0" 62 if node['servers_per_port'] > 0 then 63 ip = "127.0.0.#{n_idx}" 64 65 # Range ports per disk per node from 60j6 - 60j9 66 # NOTE: this only supports DISKS <= 4 * NODES 67 p = 5 + (i / Float(node['nodes'])).ceil.to_int 68 port = "60#{n_idx}#{p}" 69 end 70 execute "#{service}.builder-add-#{dev}" do 71 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder add " \ 72 "r#{r}z#{z}-#{ip}:#{port}/#{dev} 1 && " \ 73 "rm -f /etc/swift/#{service}.ring.gz || true" 74 not_if "swift-ring-builder /etc/swift/#{service}.builder search /#{dev}" 75 cwd "/etc/swift" 76 end 77 end 78 execute "#{service}.builder-rebalance" do 79 command "sudo -u #{node['swift_user']} swift-ring-builder #{service}.builder write_ring" 80 not_if "sudo -u #{node['swift_user']} swift-ring-builder /etc/swift/#{service}.builder rebalance" 81 creates "/etc/swift/#{service}.ring.gz" 82 cwd "/etc/swift" 83 end 84 end