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