コード例 #1
0
ファイル: ukai_core.py プロジェクト: keiichishima/ukai
 def ctl_remove_hypervisor(self, image_name, hypervisor):
     metadata = None
     if image_name in self._metadata_dict:
         # the image is in use on this node.
         metadata = self._metadata_dict[image_name]
     else:
         # XXX need to check if no one is using this image.
         metadata_raw = self._get_metadata(image_name)
         if metadata_raw is None:
             return errno.ENOENT
         metadata = UKAIMetadata(image_name, self._config, metadata_raw)
     metadata.remove_hypervisor(hypervisor)
     return 0
コード例 #2
0
ファイル: ukai_core.py プロジェクト: keiichishima/ukai
 def ctl_remove_location(self, image_name, location,
                         start_index=0, end_index=-1):
     metadata = None
     if image_name in self._metadata_dict:
         # the image is in use on this node.
         metadata = self._metadata_dict[image_name]
     else:
         # XXX need to check if no one is using this image.
         metadata_raw = self._get_metadata(image_name)
         if metadata_raw is None:
             return errno.ENOENT
         metadata = UKAIMetadata(image_name, self._config, metadata_raw)
     metadata.remove_location(location, start_index, end_index)
     ukai_data_location_destroy(image_name, location, self._config)
     return 0 
コード例 #3
0
ファイル: ukai_core.py プロジェクト: keiichishima/ukai
 def ctl_add_location(self, image_name, location,
                      start_index=0, end_index=-1,
                      sync_status=UKAI_OUT_OF_SYNC):
     metadata = None
     if image_name in self._metadata_dict:
         # the image is in use on this node.
         metadata = self._metadata_dict[image_name]
     else:
         # XXX need to check if no one is using this image.
         metadata_raw = self._get_metadata(image_name)
         if metadata_raw is None:
             return errno.ENOENT
         metadata = UKAIMetadata(image_name, self._config, metadata_raw)
     metadata.add_location(location, start_index, end_index, sync_status)
     return 0
コード例 #4
0
ファイル: ukai_core.py プロジェクト: keiichishima/ukai2
 def ctl_add_image(self, image_name):
     if image_name in self._metadata_dict:
         return errno.EEXIST
     metadata = UKAIMetadata(image_name, self._config)
     self._metadata_dict[image_name] = metadata
     data = UKAIData(metadata=metadata,
                     node_error_state_set=self._node_error_state_set,
                     config=self._config)
     self._data_dict[image_name] = data
     UKAIStatistics[image_name] = UKAIImageStatistics()
     return 0
コード例 #5
0
ファイル: ukai_core.py プロジェクト: keiichishima/ukai2
    def proxy_update_metadata(self, image_name, encoded_metadata):
        metadata_raw = json.loads(zlib.decompress(self._rpc_trans.decode(
                    encoded_metadata)))
        if image_name in self._metadata_dict:
            self._metadata_dict[image_name].metadata = metadata_raw
        else:
            metadata = UKAIMetadata(image_name, self._config, metadata_raw)
            self._metadata_dict[image_name] = metadata
            self._data_dict[image_name] = UKAIData(metadata,
                                                   self._node_error_state_set,
                                                   self._config)
            UKAIStatistics[image_name] = UKAIImageStatistics()

        return 0
コード例 #6
0
ファイル: ukai_core.py プロジェクト: keiichishima/ukai
 def ctl_synchronize(self, image_name, start_index=0, end_index=-1,
                     verbose=False):
     metadata = None
     if image_name in self._metadata_dict:
         # the image is in use on this node.
         metadata = self._metadata_dict[image_name]
         data = self._data_dict[image_name]
     else:
         # XXX need to check if no one is using this image.
         metadata_raw = self._get_metadata(image_name)
         if metadata_raw is None:
             return errno.ENOENT
         metadata = UKAIMetadata(image_name, self._config, metadata_raw)
         data = UKAIData(metadata, self._node_error_state_set, self._config)
     if end_index == -1:
         end_index = (metadata.size / metadata.block_size) - 1
     for block_index in range(start_index, end_index + 1):
         if verbose is True:
             print 'Syncing block %d (from %d to %d)' % (block_index,
                                                         start_index,
                                                         end_index)
         if data.synchronize_block(block_index) is True:
             metadata.flush()
     return 0
コード例 #7
0
            fh.close()
        else:
            remote = xmlrpclib.ServerProxy(
                'http://%s:%d/' % (node, self._config.get('core_port')))
            remote.proxy_allocate_dataspace(self._metadata.name,
                                            self._metadata.block_size, blk_idx)


if __name__ == '__main__':
    from ukai_node_error_state import UKAINodeErrorStateSet

    ukai_config.set('data_root', './test/local/data')
    ukai_config.set('metadata_root', './test/local/metadata')
    ness = UKAINodeErrorStateSet()

    meta = UKAIMetadata('./test/local/metadata/test')
    fh = UKAIData(meta, ness)
    data = 'Hello World!'
    offset = 0
    print 'offset %d' % offset
    fh.write(data, offset)
    ver = fh.read(len(data), offset)
    if ver != data:
        print 'error at offset %d' % offset

    offset = meta.block_size - (len(data) / 2)
    print 'offset %d' % offset
    fh.write(data, offset)
    ver = fh.read(len(data), offset)
    if ver != data:
        print ver