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