From c8ce4e5ea772c1eca1690c78d69eb9d038a609f8 Mon Sep 17 00:00:00 2001 From: ChiZhang Date: Thu, 15 Jan 2015 10:59:00 +0800 Subject: [PATCH] add volume metadata sync function Change-Id: Iff0a0f5c319014d4a69ef84b614711eaa7868c0e --- cinderproxy/cinder/volume/cinder_proxy.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/cinderproxy/cinder/volume/cinder_proxy.py b/cinderproxy/cinder/volume/cinder_proxy.py index 3da4089..f7ca842 100644 --- a/cinderproxy/cinder/volume/cinder_proxy.py +++ b/cinderproxy/cinder/volume/cinder_proxy.py @@ -60,8 +60,9 @@ from cinderclient.v2 import client as cinder_client from cinderclient import exceptions as cinder_exception from eventlet.greenpool import GreenPool -from keystoneclient import exceptions as keystone_exception from keystoneclient.v2_0 import client as kc +from keystoneclient import exceptions as keystone_exception + LOG = logging.getLogger(__name__) @@ -546,6 +547,8 @@ class CinderProxy(manager.SchedulerDependentManager): 'attach_time': None, 'bootable': bootable_vl }) + metadata = volume._info['metadata'] + self._update_volume_metada(context, volume_id, metadata) elif volume_status == "in-use": self.db.volume_update(context, volume_id, {'status': volume._info['status'], @@ -558,6 +561,20 @@ class CinderProxy(manager.SchedulerDependentManager): LOG.info(_('cascade ino: updated the volume %s status from' 'cinder-proxy'), volume_id) + def _update_volume_metada(self, context, volume_id, ccded_volume_metadata): + ccding_vol_metadata = self.db.volume_metadata_get(context, volume_id) + ccded_vol_metadata_keys = ccded_volume_metadata.keys() + if 'logicalVolumeId' in ccded_vol_metadata_keys: + ccded_vol_metadata_keys.remove('logicalVolumeId') + for temp_key in ccded_vol_metadata_keys: + if temp_key not in ccding_vol_metadata: + ccding_vol_metadata[temp_key] =\ + ccded_volume_metadata.get(temp_key, None) + else: + continue + self.db.volume_metadata_update(context, volume_id, + ccding_vol_metadata, True) + def _update_volume_types(self, context, volumetypes): vol_types = self.db.volume_type_get_all(context, inactive=False) LOG.debug(_("cascade ino:, vol_types cascading :%s"), vol_types)