# -*- coding: utf-8 -*- require 'isono' module Dcmgr module NodeModules class StaCollector < Isono::NodeModules::Base include Dcmgr::Logger initialize_hook do app = Isono::Rack::ObjectMethod.new(myinstance) rpc = Isono::NodeModules::RpcChannel.new(node) rpc.register_endpoint('sta-collector', Isono::Rack.build do use Isono::Rack::DataStore run proc { |req, res| Thread.current[Models::BaseNew::LOCK_TABLES_KEY] = {} app.call(req, res) } end) end terminate_hook do end # collect all volume instances on the sta node. def get_available_volumes(sta_node_id) stnode = Models::StorageNode.filter(:node_id=>sta_node_id).first || raise("Unknown sta node ID: #{sta_node_id}") v = stnode.volumes_dataset.lives.all v.map { |volume| volume.merge_pool_data } end def get_volume(volume_id) v = Dcmgr::Models::Volume[volume_id] v.merge_pool_data end def get_snapshot(snapshot_id) vs = Dcmgr::Models::VolumeSnapshot[snapshot_id] vs.to_hash end def update_volume(volume_id, data) v = Dcmgr::Models::Volume[volume_id] v.set(data).save if data[:state] == :deleted # Volume#destroy do not really delete row. # just for chain react destroy hooks in the associated models. v.destroy end # do not respond model object. nil end def update_snapshot(snapshot_id, data) vs = Dcmgr::Models::VolumeSnapshot[snapshot_id] vs.set(data).save if data[:state] == :deleted # VolumeSnapshot#destroy do not really delete row. # just for chain react destroy hooks in the associated models. vs.destroy end # do not respond model object. nil end end end end