Sha256: f8c457ee9fda9d60f0d054241a2635e8d2804ff10f4658f2a3d524cd446f3bcd

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

module CephStorage
  # Create a cluster object
  # Returns only a single cluster object for given settings
  class Cluster < ClusterFactory
    extend CephStorage::ClusterWrapper
    include Multiton
    # Configure default values for this object
    attr_reader :cluster_fd, :cluster, :config_dir, :user, :flags

    wrap_me :pool_id_by_name, :pool_name_by_id, :status, :fsid

    private :connect, :setup_using_file

    # Create a new object
    def initialize(config_dir: CONFIG_DIR, cluster: CLUSTER,
                   user: USER, flags: FLAGS)
      CephRuby.logger = CephStorage.logger
      init(config_dir, cluster, user, flags)
      log("init config_dir #{config_dir}, cluster #{cluster}, user: #{user}")

      open

      yield(@cluster_fd) if block_given?
    rescue StandardError
      log("unable to open cluster #{cluster}")
      raise
    end

    def rados_cluster
      return @cluster_fd unless block_given?
      yield(@cluster_fd)
    end

    def pool(name)
      ensure_open
      p = CephStorage::PoolFactory.build(self, name)
      yield(p) if block_given?
      p
    end

    def pools
      CephStorage::PoolEnumerator.new(self)
    end

    def shutdown
      return unless open?
      log('shutdown')
      @cluster_fd.shutdown
    end

    def open?
      !@cluster_fd.nil? && !@cluster_fd.handle.nil?
    end

    def ensure_open
      return if open?
      open
    end

    def open
      return if open?
      log('open')
      fd_init unless @cluster_fd
      @cluster_fd.connect unless open?
    end

    def path
      "ceph://#{cluster}"
    end

    private

    def log(message)
      CephStorage.log("cluster #{cluster} #{message}")
    end

    def fd_init
      @cluster_fd = ::CephRuby::Cluster.new(
        config_path: config_dir,
        cluster: cluster,
        user: user,
        flags: flags
      )
    end

    def init(config_dir, cluster, user, flags)
      @cluster = cluster
      @user = user
      @config_dir = config_dir
      @flags = flags
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ceph_storage-0.1.0 lib/ceph_storage/cluster.rb