)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":13,"context_line":"in the [compute] group. Also, global cache requires a distributed"},{"line_number":14,"context_line":"lock enabling for the cache backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"New workflow periodically cache instances info to the global cache"},{"line_number":17,"context_line":"and for the every polling interval it combine all instances by host"},{"line_number":18,"context_line":"from the hypervisor with cache info."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"dae33548_30d223d3","line":16,"range":{"start_line":16,"start_character":26,"end_line":16,"end_character":31},"updated":"2016-02-16 13:03:01.000000000","message":"caches","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":13,"context_line":"in the [compute] group. Also, global cache requires a distributed"},{"line_number":14,"context_line":"lock enabling for the cache backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"New workflow periodically cache instances info to the global cache"},{"line_number":17,"context_line":"and for the every polling interval it combine all instances by host"},{"line_number":18,"context_line":"from the hypervisor with cache info."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"dae33548_1f3c48e1","line":16,"range":{"start_line":16,"start_character":26,"end_line":16,"end_character":31},"in_reply_to":"dae33548_30d223d3","updated":"2016-02-16 13:58:09.000000000","message":"I\u0027ll fix it.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":14,"context_line":"lock enabling for the cache backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"New workflow periodically cache instances info to the global cache"},{"line_number":17,"context_line":"and for the every polling interval it combine all instances by host"},{"line_number":18,"context_line":"from the hypervisor with cache info."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Caching could be started from the every compute agent and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"dae33548_10d55fb8","line":17,"range":{"start_line":17,"start_character":38,"end_line":17,"end_character":45},"updated":"2016-02-16 13:03:01.000000000","message":"combines","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":14,"context_line":"lock enabling for the cache backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"New workflow periodically cache instances info to the global cache"},{"line_number":17,"context_line":"and for the every polling interval it combine all instances by host"},{"line_number":18,"context_line":"from the hypervisor with cache info."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Caching could be started from the every compute agent and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"dae33548_3f214cb5","line":17,"range":{"start_line":17,"start_character":38,"end_line":17,"end_character":45},"in_reply_to":"dae33548_10d55fb8","updated":"2016-02-16 13:58:09.000000000","message":"I\u0027ll fix it.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":23,"context_line":"lock name is used."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"According to the fact what we use a `change_since` search option"},{"line_number":26,"context_line":"for the collect instances list, instances info doesn\u0027t expires,"},{"line_number":27,"context_line":"only resource updating lock can be expired."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Implements: improve-nova-instance-metering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"dae33548_904a0fab","line":26,"range":{"start_line":26,"start_character":55,"end_line":26,"end_character":62},"updated":"2016-02-16 13:03:01.000000000","message":"expire","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":23,"context_line":"lock name is used."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"According to the fact what we use a `change_since` search option"},{"line_number":26,"context_line":"for the collect instances list, instances info doesn\u0027t expires,"},{"line_number":27,"context_line":"only resource updating lock can be expired."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Implements: improve-nova-instance-metering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"dae33548_9f305803","line":26,"range":{"start_line":26,"start_character":55,"end_line":26,"end_character":62},"in_reply_to":"dae33548_904a0fab","updated":"2016-02-16 13:58:09.000000000","message":"I\u0027ll fix it.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"}],"ceilometer/agent/manager.py":[{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"9c6ba709e78dc4e856f4876990431d0ceee0a704","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        cache_data \u003d {}"},{"line_number":517,"context_line":"        for key, message in info.items():"},{"line_number":518,"context_line":"            try:"},{"line_number":519,"context_line":"                cache_data[key] \u003d json.dumps(message)"},{"line_number":520,"context_line":"            except ValueError:"},{"line_number":521,"context_line":"                LOG.debug(_(\"Info for instance %s caching \""},{"line_number":522,"context_line":"                            \"could not be serialized\") % key)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_7a428caf","line":519,"range":{"start_line":519,"start_character":39,"end_line":519,"end_character":44},"updated":"2016-02-02 06:20:12.000000000","message":"just curious, it it necessary to store serialized resource info ? because we need to get the instances info of a host, if possible, it is better to support search the instances by host name, right ?","commit_id":"a497be4e6873e36a528f1bc2da64eb0a721663ce"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"92fe43a904e02a7d4c6f033df914f8d553d991de","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        cache_data \u003d {}"},{"line_number":517,"context_line":"        for key, message in info.items():"},{"line_number":518,"context_line":"            try:"},{"line_number":519,"context_line":"                cache_data[key] \u003d json.dumps(message)"},{"line_number":520,"context_line":"            except ValueError:"},{"line_number":521,"context_line":"                LOG.debug(_(\"Info for instance %s caching \""},{"line_number":522,"context_line":"                            \"could not be serialized\") % key)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_639e7564","line":519,"range":{"start_line":519,"start_character":39,"end_line":519,"end_character":44},"in_reply_to":"7a5de9d1_7a428caf","updated":"2016-02-08 16:03:02.000000000","message":"Yes, we can to use a dicts and lists. But I don\u0027t sure that oslo.cache supports finding by text or getting by regexp. I suggest to store in the cache data with following schema:\nhost: {instance_id: \u003cmetadata\u003e, ...}","commit_id":"a497be4e6873e36a528f1bc2da64eb0a721663ce"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"9c6ba709e78dc4e856f4876990431d0ceee0a704","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        return resources_info"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def set_resource_update_lock(self, name):"},{"line_number":546,"context_line":"        self.cache.set(\"resource_update_%s\" % name, True)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def get_resource_update_lock(self, name, expired_after\u003dNone):"},{"line_number":549,"context_line":"        lock \u003d self.cache.get(\"resource_update_%s\" % name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_7ade0cde","line":546,"range":{"start_line":546,"start_character":8,"end_line":546,"end_character":57},"updated":"2016-02-02 06:20:12.000000000","message":"can oslo_cache support any  locking mechanism ?","commit_id":"a497be4e6873e36a528f1bc2da64eb0a721663ce"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"92fe43a904e02a7d4c6f033df914f8d553d991de","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        return resources_info"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def set_resource_update_lock(self, name):"},{"line_number":546,"context_line":"        self.cache.set(\"resource_update_%s\" % name, True)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def get_resource_update_lock(self, name, expired_after\u003dNone):"},{"line_number":549,"context_line":"        lock \u003d self.cache.get(\"resource_update_%s\" % name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_bc554efb","line":546,"range":{"start_line":546,"start_character":8,"end_line":546,"end_character":57},"in_reply_to":"7a5de9d1_7ade0cde","updated":"2016-02-08 16:03:02.000000000","message":"Yes, we can use a region.backend mutex for the locking. Support of this mechanism should be turned on in the config: backend_argument\u003ddistributed_cache:True, at least for redis and memcache.","commit_id":"a497be4e6873e36a528f1bc2da64eb0a721663ce"}],"ceilometer/cache.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"884d06930d74ec1edb3bba3a0e1c1b45d95344c3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"_CACHE_REGION \u003d None"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_cache_region(without_expiration\u003dFalse):"},{"line_number":21,"context_line":"    global _CACHE_REGION"},{"line_number":22,"context_line":"    if not _CACHE_REGION:"},{"line_number":23,"context_line":"        oslo_cache.configure(cfg.CONF)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_fb73c8b2","line":20,"updated":"2016-02-19 12:34:41.000000000","message":"\"without_expiration\u003dFalse\" is a bit of a double negative and rather confusing. Would \"with_expiration\u003dTrue\" be a little easier to understand?","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"}],"ceilometer/compute/discovery.py":[{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"301b43d2cce03fe1c8835a836d3dbd64618d2460","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                manager.cache_metadata(instance.id, instance.user_id,"},{"line_number":83,"context_line":"                                       instance.tenant_id,"},{"line_number":84,"context_line":"                                       util.get_metadata_from_object(instance))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        self.last_run \u003d timeutils.utcnow(True).isoformat()"},{"line_number":87,"context_line":"        return []"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_76b770f5","line":85,"updated":"2016-01-14 07:45:23.000000000","message":"IIUC, every polling agent will get the instance of *its own host* in a polling interval, this won\u0027t reduce the Nova API requests. right ?\nI suggested that the the all instances should be queried and cached and don\u0027t need all polling agents to query in a polling cycle.","commit_id":"d80b776428aad2ac3b71a126cdf95b04d70707e9"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"af9bdb84a0d9792445af49ead11156c8d0397053","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                manager.cache_metadata(instance.id, instance.user_id,"},{"line_number":83,"context_line":"                                       instance.tenant_id,"},{"line_number":84,"context_line":"                                       util.get_metadata_from_object(instance))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        self.last_run \u003d timeutils.utcnow(True).isoformat()"},{"line_number":87,"context_line":"        return []"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_a3090d86","line":85,"in_reply_to":"da6ed579_76b770f5","updated":"2016-01-14 17:34:37.000000000","message":"liusheng: In this patchset this discovery used only by \"instance\" meter polling. \nOther pollsters use a HypervisorInstancesDiscovery. \nIn my devstack I checked it via 600s period for instance and 1s for cpu pollsters. \n\nIn next patchset I move metadata discovery/polling to the central agent, i think","commit_id":"d80b776428aad2ac3b71a126cdf95b04d70707e9"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"7854d86315d5996601cddbb82aa649b64a44494e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            return None"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class NovaInstanceDiscovery(plugin_base.DiscoveryBase):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def __init__(self):"},{"line_number":72,"context_line":"        super(NovaInstanceDiscovery, self).__init__()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_c5f70df4","line":69,"range":{"start_line":69,"start_character":53,"end_line":69,"end_character":55},"updated":"2016-01-18 20:06:21.000000000","message":"Ilya, could you please add a doc line here, because I had the same question as liusheng had in patch set 1","commit_id":"f6c62b8c446b878ba4839d7b8e1a4d51ca727a0f"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"9c6ba709e78dc4e856f4876990431d0ceee0a704","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        return instances_info"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _discover_hypervisor_instances(self, manager, instance_info\u003dNone):"},{"line_number":82,"context_line":"        vms \u003d self.inspector.get_all_vms()"},{"line_number":83,"context_line":"        ids \u003d [vm.id for vm in vms]"},{"line_number":84,"context_line":"        if not instance_info:"},{"line_number":85,"context_line":"            instance_info \u003d manager.get_cached_resource_mapping("},{"line_number":86,"context_line":"                ids, cfg.CONF.compute.interval_to_update_resource)"},{"line_number":87,"context_line":"        for vm in vms:"},{"line_number":88,"context_line":"            cache \u003d instance_info.get(vm.id)"},{"line_number":89,"context_line":"            if not cache:"},{"line_number":90,"context_line":"                continue"},{"line_number":91,"context_line":"            self._extend_vm_by_cache(vm, cache)"},{"line_number":92,"context_line":"        return vms"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":95,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_0d05600f","line":92,"range":{"start_line":82,"start_character":8,"end_line":92,"end_character":18},"updated":"2016-02-02 06:20:12.000000000","message":"how about get the instances of this host from cache, then get the info from hypervisor ?","commit_id":"a497be4e6873e36a528f1bc2da64eb0a721663ce"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"92fe43a904e02a7d4c6f033df914f8d553d991de","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        return instances_info"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _discover_hypervisor_instances(self, manager, instance_info\u003dNone):"},{"line_number":82,"context_line":"        vms \u003d self.inspector.get_all_vms()"},{"line_number":83,"context_line":"        ids \u003d [vm.id for vm in vms]"},{"line_number":84,"context_line":"        if not instance_info:"},{"line_number":85,"context_line":"            instance_info \u003d manager.get_cached_resource_mapping("},{"line_number":86,"context_line":"                ids, cfg.CONF.compute.interval_to_update_resource)"},{"line_number":87,"context_line":"        for vm in vms:"},{"line_number":88,"context_line":"            cache \u003d instance_info.get(vm.id)"},{"line_number":89,"context_line":"            if not cache:"},{"line_number":90,"context_line":"                continue"},{"line_number":91,"context_line":"            self._extend_vm_by_cache(vm, cache)"},{"line_number":92,"context_line":"        return vms"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":95,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_be16c449","line":92,"range":{"start_line":82,"start_character":8,"end_line":92,"end_character":18},"in_reply_to":"7a5de9d1_0d05600f","updated":"2016-02-08 16:03:02.000000000","message":"I think it\u0027s a good idea and will implement it","commit_id":"a497be4e6873e36a528f1bc2da64eb0a721663ce"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class InstanceDiscovery(plugin_base.DiscoveryBase):"},{"line_number":46,"context_line":"    \"\"\"Discovery plugin for compute pollsters."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    In this discovery we get all vms with hypervisor inspector and"},{"line_number":49,"context_line":"    extended they via cached info."},{"line_number":50,"context_line":"    Usually in the cache we have a user_id, project_id,"},{"line_number":51,"context_line":"    instance name and metadata."}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_3397f649","line":48,"updated":"2016-02-11 09:07:20.000000000","message":"they \u003d\u003e them","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class InstanceDiscovery(plugin_base.DiscoveryBase):"},{"line_number":46,"context_line":"    \"\"\"Discovery plugin for compute pollsters."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    In this discovery we get all vms with hypervisor inspector and"},{"line_number":49,"context_line":"    extended they via cached info."},{"line_number":50,"context_line":"    Usually in the cache we have a user_id, project_id,"},{"line_number":51,"context_line":"    instance name and metadata."}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_450e643c","line":48,"in_reply_to":"3a57f1b5_3397f649","updated":"2016-02-11 11:02:11.000000000","message":"Yep, I\u0027ll fix it","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.inspector \u003d inspector.get_hypervisor_inspector()"},{"line_number":61,"context_line":"        self.nova_cli \u003d nova_client.Client()"},{"line_number":62,"context_line":"        self.cache_region \u003d cache.get_cache()"},{"line_number":63,"context_line":"        self.cache_lock \u003d (self.cache_region.backend.get_mutex(self.LOCK_NAME)"},{"line_number":64,"context_line":"                           if cache else None)"},{"line_number":65,"context_line":"        self.expiration_time \u003d cfg.CONF.compute.interval_to_update_resource"},{"line_number":66,"context_line":"        self._instances \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_b305267b","line":63,"updated":"2016-02-11 09:07:20.000000000","message":"what is \"cache\"? Probably, it should be \"cache_region\" here.\nAlso, I think cache_region is better to rename to \"cache\" indeed. IMHO, cache_region may confuse","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.inspector \u003d inspector.get_hypervisor_inspector()"},{"line_number":61,"context_line":"        self.nova_cli \u003d nova_client.Client()"},{"line_number":62,"context_line":"        self.cache_region \u003d cache.get_cache()"},{"line_number":63,"context_line":"        self.cache_lock \u003d (self.cache_region.backend.get_mutex(self.LOCK_NAME)"},{"line_number":64,"context_line":"                           if cache else None)"},{"line_number":65,"context_line":"        self.expiration_time \u003d cfg.CONF.compute.interval_to_update_resource"},{"line_number":66,"context_line":"        self._instances \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_770d5336","line":63,"in_reply_to":"3a57f1b5_b305267b","updated":"2016-02-11 11:02:11.000000000","message":"Agreed, I\u0027ll fix it.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._instances \u003d {}"},{"line_number":67,"context_line":"        self._last_nova_request_time \u003d None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def last_nova_request_time(self):"},{"line_number":71,"context_line":"        if cfg.CONF.compute.enable_global_cache:"},{"line_number":72,"context_line":"            return self.cache_region.get(self.LAST_REQUEST_KEY)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_13f99a4d","line":69,"updated":"2016-02-11 09:07:20.000000000","message":"Do I understand correctly that \"_last_nova_request_time\" is time of the latest cache update? For the local cache, each compute will have its own time, for global cache, this variable will be stored in the cache?\nIf it\u0027s right, please remove the var to last_update_time","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._instances \u003d {}"},{"line_number":67,"context_line":"        self._last_nova_request_time \u003d None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def last_nova_request_time(self):"},{"line_number":71,"context_line":"        if cfg.CONF.compute.enable_global_cache:"},{"line_number":72,"context_line":"            return self.cache_region.get(self.LAST_REQUEST_KEY)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_173c1fc7","line":69,"in_reply_to":"3a57f1b5_13f99a4d","updated":"2016-02-11 11:02:11.000000000","message":"Ok, agreed. I\u0027ll rename it.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            self._last_nova_request_time \u003d time"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @staticmethod"},{"line_number":84,"context_line":"    def _extend_vm_by_cache(instance, cache):"},{"line_number":85,"context_line":"        \"\"\"Set instances info as attributes in util.Instance.\"\"\""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_b34be686","line":83,"updated":"2016-02-11 09:07:20.000000000","message":"_extend_vm_info would be clearer","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            self._last_nova_request_time \u003d time"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @staticmethod"},{"line_number":84,"context_line":"    def _extend_vm_by_cache(instance, cache):"},{"line_number":85,"context_line":"        \"\"\"Set instances info as attributes in util.Instance.\"\"\""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_f73063ea","line":83,"in_reply_to":"3a57f1b5_b34be686","updated":"2016-02-11 11:02:11.000000000","message":"Ok","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _cache_nova_instances(self):"},{"line_number":119,"context_line":"        \"\"\"Collect nova instances and update the cache."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        If any error is raised due this method lock will been released."},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_f66dcc98","line":120,"updated":"2016-02-11 09:07:20.000000000","message":"If any error is raised during this method, the lock will be released.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _cache_nova_instances(self):"},{"line_number":119,"context_line":"        \"\"\"Collect nova instances and update the cache."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        If any error is raised due this method lock will been released."},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_777233af","line":120,"in_reply_to":"3a57f1b5_f66dcc98","updated":"2016-02-11 11:02:11.000000000","message":"ok. I had a doubts about it)","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            active_instances, deleted_instances \u003d self._get_nova_instances()"},{"line_number":126,"context_line":"            self._update_cache(active_instances, deleted_instances)"},{"line_number":127,"context_line":"            self.last_nova_request_time \u003d timeutils.utcnow(True).isoformat()"},{"line_number":128,"context_line":"        except Exception:"},{"line_number":129,"context_line":"            self._release_lock()"},{"line_number":130,"context_line":"            LOG.debug(\"Lock has been released due to the error \""},{"line_number":131,"context_line":"                      \"during the nova instances discovery.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_d64e9095","line":128,"updated":"2016-02-11 09:07:20.000000000","message":"I see that lock is released. Where we acquire it?  Shouldn\u0027t it be in the same method?","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if cfg.CONF.compute.enable_global_cache:"},{"line_number":144,"context_line":"            try:"},{"line_number":145,"context_line":"                if active_instances:"},{"line_number":146,"context_line":"                    self.cache_region.set_multi(active_instances)"},{"line_number":147,"context_line":"                if deleted_instances:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_d92a437e","line":144,"updated":"2016-02-11 09:07:20.000000000","message":"Will it happen in one transaction?","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if cfg.CONF.compute.enable_global_cache:"},{"line_number":144,"context_line":"            try:"},{"line_number":145,"context_line":"                if active_instances:"},{"line_number":146,"context_line":"                    self.cache_region.set_multi(active_instances)"},{"line_number":147,"context_line":"                if deleted_instances:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_57d297d3","line":144,"in_reply_to":"3a57f1b5_d92a437e","updated":"2016-02-11 11:02:11.000000000","message":"*_multi works as a one transaction for the Redis and Memcache, how i see. \nRedis uses a mset or pipe operation for it and Memcache send set of commands in one request.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    self.cache_region.set_multi(active_instances)"},{"line_number":147,"context_line":"                if deleted_instances:"},{"line_number":148,"context_line":"                    self.cache_region.delete_multi(deleted_instances)"},{"line_number":149,"context_line":"            except Exception:"},{"line_number":150,"context_line":"                LOG.exception(_LE(\"Exception during the cache updating.\"))"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            self._instances.update(active_instances)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_593e53b9","line":149,"updated":"2016-02-11 09:07:20.000000000","message":"What should we do?","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    self.cache_region.set_multi(active_instances)"},{"line_number":147,"context_line":"                if deleted_instances:"},{"line_number":148,"context_line":"                    self.cache_region.delete_multi(deleted_instances)"},{"line_number":149,"context_line":"            except Exception:"},{"line_number":150,"context_line":"                LOG.exception(_LE(\"Exception during the cache updating.\"))"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            self._instances.update(active_instances)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_b7998b21","line":149,"in_reply_to":"3a57f1b5_593e53b9","updated":"2016-02-11 11:02:11.000000000","message":"Hmm, we don\u0027t should to stop and I think it\u0027s possible to use a previous cached info. Another compute agent will try to update the cache.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _get_nova_instances(self):"},{"line_number":157,"context_line":"        \"\"\"Collect instances list from nova client."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        This method collect all instances from the nova client which changed"},{"line_number":160,"context_line":"        since last cache updating and separate it to the two objects:"},{"line_number":161,"context_line":"        * list with ids of deleted and error instances"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_5692a058","line":158,"updated":"2016-02-11 09:07:20.000000000","message":"This method collects all instances from the nova client which have been changed since the last cache updating. All instances are separated into two groups:","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _get_nova_instances(self):"},{"line_number":157,"context_line":"        \"\"\"Collect instances list from nova client."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        This method collect all instances from the nova client which changed"},{"line_number":160,"context_line":"        since last cache updating and separate it to the two objects:"},{"line_number":161,"context_line":"        * list with ids of deleted and error instances"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_d79447e3","line":158,"in_reply_to":"3a57f1b5_5692a058","updated":"2016-02-11 11:02:11.000000000","message":"I\u0027ll fix it","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        Also, instances are collected for the current host if we use"},{"line_number":165,"context_line":"        local cache instead of global."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        :returns tuple of dict with significant instances and"},{"line_number":168,"context_line":"        list of deleted instances ids for further caching"},{"line_number":169,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_36fa8476","line":166,"updated":"2016-02-11 09:07:20.000000000","message":"significant \u003d\u003e existing (or running)","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        Also, instances are collected for the current host if we use"},{"line_number":165,"context_line":"        local cache instead of global."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        :returns tuple of dict with significant instances and"},{"line_number":168,"context_line":"        list of deleted instances ids for further caching"},{"line_number":169,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_57b7f785","line":166,"in_reply_to":"3a57f1b5_36fa8476","updated":"2016-02-11 11:02:11.000000000","message":"Ok","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        try:"},{"line_number":172,"context_line":"            instances \u003d self.nova_cli.instance_get_all("},{"line_number":173,"context_line":"                self.last_nova_request_time,"},{"line_number":174,"context_line":"                host\u003d(None if cfg.CONF.compute.enable_global_cache"},{"line_number":175,"context_line":"                      else cfg.CONF.host),"},{"line_number":176,"context_line":"                with_flavor_and_image\u003dTrue"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_56ce205b","line":173,"updated":"2016-02-11 09:07:20.000000000","message":"Please store cfg.CONF.compute.enable_global_cache to a var to make it easier to read","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        try:"},{"line_number":172,"context_line":"            instances \u003d self.nova_cli.instance_get_all("},{"line_number":173,"context_line":"                self.last_nova_request_time,"},{"line_number":174,"context_line":"                host\u003d(None if cfg.CONF.compute.enable_global_cache"},{"line_number":175,"context_line":"                      else cfg.CONF.host),"},{"line_number":176,"context_line":"                with_flavor_and_image\u003dTrue"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_77ba3370","line":173,"in_reply_to":"3a57f1b5_56ce205b","updated":"2016-02-11 11:02:11.000000000","message":"Ok","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                host\u003d(None if cfg.CONF.compute.enable_global_cache"},{"line_number":175,"context_line":"                      else cfg.CONF.host),"},{"line_number":176,"context_line":"                with_flavor_and_image\u003dTrue"},{"line_number":177,"context_line":"            )"},{"line_number":178,"context_line":"        except Exception:"},{"line_number":179,"context_line":"            raise"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_b613d4b7","line":177,"updated":"2016-02-11 09:07:20.000000000","message":"I think, we need to handle this better","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                host\u003d(None if cfg.CONF.compute.enable_global_cache"},{"line_number":175,"context_line":"                      else cfg.CONF.host),"},{"line_number":176,"context_line":"                with_flavor_and_image\u003dTrue"},{"line_number":177,"context_line":"            )"},{"line_number":178,"context_line":"        except Exception:"},{"line_number":179,"context_line":"            raise"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_7771d3df","line":177,"in_reply_to":"3a57f1b5_b613d4b7","updated":"2016-02-11 11:02:11.000000000","message":"Why? Nova client will add log entry with exception, but raised Exception need for deleting lock key.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            )"},{"line_number":178,"context_line":"        except Exception:"},{"line_number":179,"context_line":"            raise"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        active_instances \u003d []"},{"line_number":182,"context_line":"        deleted_instances \u003d []"},{"line_number":183,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_96a3384f","line":180,"updated":"2016-02-11 09:07:20.000000000","message":"use one description for the entity you use, please. In the class you call these instances : \"significant\", \"active\", \"working\". It would be easier to read if names are not changed :)","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            )"},{"line_number":178,"context_line":"        except Exception:"},{"line_number":179,"context_line":"            raise"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        active_instances \u003d []"},{"line_number":182,"context_line":"        deleted_instances \u003d []"},{"line_number":183,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_b7350bf8","line":180,"in_reply_to":"3a57f1b5_96a3384f","updated":"2016-02-11 11:02:11.000000000","message":"Okay :)","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        active_instances \u003d []"},{"line_number":182,"context_line":"        deleted_instances \u003d []"},{"line_number":183,"context_line":"        for instance in instances:"},{"line_number":184,"context_line":"            if (getattr(instance, \u0027OS-EXT-STS:vm_state\u0027, None)"},{"line_number":185,"context_line":"                    in [\u0027deleted\u0027, \u0027error\u0027]):"},{"line_number":186,"context_line":"                deleted_instances.append(instance.id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_79b54fec","line":183,"updated":"2016-02-11 09:07:20.000000000","message":"The following is better to put into \"utils\"","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        active_instances \u003d []"},{"line_number":182,"context_line":"        deleted_instances \u003d []"},{"line_number":183,"context_line":"        for instance in instances:"},{"line_number":184,"context_line":"            if (getattr(instance, \u0027OS-EXT-STS:vm_state\u0027, None)"},{"line_number":185,"context_line":"                    in [\u0027deleted\u0027, \u0027error\u0027]):"},{"line_number":186,"context_line":"                deleted_instances.append(instance.id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_170e5f3b","line":183,"in_reply_to":"3a57f1b5_79b54fec","updated":"2016-02-11 11:02:11.000000000","message":"ok","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        lock if it exists."},{"line_number":196,"context_line":"        :return True if cache should be updated and False if not"},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        is_cache_exists \u003d None"},{"line_number":200,"context_line":"        if self.cache_lock:"},{"line_number":201,"context_line":"            with self.cache_lock:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_f9913f9a","line":198,"updated":"2016-02-11 09:07:20.000000000","message":"is_cache_exists \u003d\u003e does_cache_exist or just \"cache_exists\"","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        lock if it exists."},{"line_number":196,"context_line":"        :return True if cache should be updated and False if not"},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        is_cache_exists \u003d None"},{"line_number":200,"context_line":"        if self.cache_lock:"},{"line_number":201,"context_line":"            with self.cache_lock:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_7716b356","line":198,"in_reply_to":"3a57f1b5_f9913f9a","updated":"2016-02-11 11:02:11.000000000","message":"Ok","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                is_cache_exists \u003d self.cache_region.get(self.LOCK_NAME,"},{"line_number":203,"context_line":"                                                        self.expiration_time)"},{"line_number":204,"context_line":"                if not is_cache_exists:"},{"line_number":205,"context_line":"                    self.cache_region.set(self.LOCK_NAME, True)"},{"line_number":206,"context_line":"        return False if is_cache_exists else True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _release_lock(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_79cb0fa6","line":205,"updated":"2016-02-11 09:07:20.000000000","message":"return not cache_exists?","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                is_cache_exists \u003d self.cache_region.get(self.LOCK_NAME,"},{"line_number":203,"context_line":"                                                        self.expiration_time)"},{"line_number":204,"context_line":"                if not is_cache_exists:"},{"line_number":205,"context_line":"                    self.cache_region.set(self.LOCK_NAME, True)"},{"line_number":206,"context_line":"        return False if is_cache_exists else True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _release_lock(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_9a4ef66d","line":205,"in_reply_to":"3a57f1b5_79cb0fa6","updated":"2016-02-11 11:02:11.000000000","message":"Yes, it\u0027s better","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"}],"ceilometer/compute/discovery/cache.py":[{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def acquire(self):"},{"line_number":110,"context_line":"        \"\"\"Acquire resource updating lock by creating a lock key."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        This function update resource lock with synchronizing by distributed"},{"line_number":113,"context_line":"        lock if it exists."},{"line_number":114,"context_line":"        :return True if lock acquired and False if not"},{"line_number":115,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_66b07144","line":112,"range":{"start_line":112,"start_character":22,"end_line":112,"end_character":28},"updated":"2016-02-16 13:03:01.000000000","message":"updates","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def acquire(self):"},{"line_number":110,"context_line":"        \"\"\"Acquire resource updating lock by creating a lock key."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        This function update resource lock with synchronizing by distributed"},{"line_number":113,"context_line":"        lock if it exists."},{"line_number":114,"context_line":"        :return True if lock acquired and False if not"},{"line_number":115,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_bf66fc26","line":112,"range":{"start_line":112,"start_character":22,"end_line":112,"end_character":28},"in_reply_to":"dae33548_66b07144","updated":"2016-02-16 13:58:09.000000000","message":"I\u0027ll fix it.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":124,"context_line":"                    self.lock_name, self.expiration_time)"},{"line_number":125,"context_line":"                if not resource_update_locked:"},{"line_number":126,"context_line":"                    self.cache_region.set(self.lock_name, True)"},{"line_number":127,"context_line":"            finally:"},{"line_number":128,"context_line":"                self.cache_lock.release()"},{"line_number":129,"context_line":"        return not resource_update_locked"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_30b7c387","line":126,"updated":"2016-02-16 13:03:01.000000000","message":"If the set() operation fails for whatever reason, the method will return True while the lock may not be acquired. I would reset resource_update_locked in the finally block. What do you think?","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":124,"context_line":"                    self.lock_name, self.expiration_time)"},{"line_number":125,"context_line":"                if not resource_update_locked:"},{"line_number":126,"context_line":"                    self.cache_region.set(self.lock_name, True)"},{"line_number":127,"context_line":"            finally:"},{"line_number":128,"context_line":"                self.cache_lock.release()"},{"line_number":129,"context_line":"        return not resource_update_locked"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_7fa63454","line":126,"in_reply_to":"dae33548_30b7c387","updated":"2016-02-16 13:58:09.000000000","message":"If the set operator fails and raises exception, exception will be raised up to the InstanceDiscovery.discover and discover returns empty list of resources. We won\u0027t make any nova requests in this case.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"1409ddc80e0a0361bf09c574da45f80eb2d1c655","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2016 Mirantis, Inc"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_e83167a3","line":3,"updated":"2016-02-18 13:42:29.000000000","message":"look this files tree, it is easily to mislead people that we have two discovery plugins *cache* and *instance* :) like ceilometer/agent/discovery/*, not blocking.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"35a8d7798daba63f94c9261973b199bc28b3866c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2016 Mirantis, Inc"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_ce63c6af","line":3,"in_reply_to":"dae33548_e83167a3","updated":"2016-02-18 15:40:29.000000000","message":"Hmm, I also had a same thoughts. maybe it will be better to move cache to ceilometer.compute.discovery.utils.cache?","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"1409ddc80e0a0361bf09c574da45f80eb2d1c655","unresolved":false,"context_lines":[{"line_number":21,"context_line":"OPTS \u003d ["},{"line_number":22,"context_line":"    cfg.IntOpt(\u0027interval_to_update_resource\u0027,"},{"line_number":23,"context_line":"               default\u003d600,"},{"line_number":24,"context_line":"               help\u003d\u0027Expiration time for cached instance info requested via \u0027"},{"line_number":25,"context_line":"                    \u0027Nova API.\u0027),"},{"line_number":26,"context_line":"    cfg.BoolOpt(\u0027enable_global_cache\u0027,"},{"line_number":27,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_65d3c3d5","line":24,"updated":"2016-02-18 13:42:29.000000000","message":"(in seconds)","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f6877b96bb647d7d922e72b032855d24793a50a6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"OPTS \u003d ["},{"line_number":22,"context_line":"    cfg.IntOpt(\u0027interval_to_update_resource\u0027,"},{"line_number":23,"context_line":"               default\u003d600,"},{"line_number":24,"context_line":"               help\u003d\u0027Expiration time for cached instance info requested via \u0027"},{"line_number":25,"context_line":"                    \u0027Nova API.\u0027),"},{"line_number":26,"context_line":"    cfg.BoolOpt(\u0027enable_global_cache\u0027,"},{"line_number":27,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_485dbae8","line":24,"in_reply_to":"dae33548_2e57d2ca","updated":"2016-02-19 16:44:52.000000000","message":"as discussed, let\u0027s maybe make this more obvious that this is instance discovery interval...\n\nwe should also warn that it possibly match stale metadata to measurements. ie. you might update flavour to large but it may appear that cpu_util is 100% on a tiny flavour for span of interval.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"35a8d7798daba63f94c9261973b199bc28b3866c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"OPTS \u003d ["},{"line_number":22,"context_line":"    cfg.IntOpt(\u0027interval_to_update_resource\u0027,"},{"line_number":23,"context_line":"               default\u003d600,"},{"line_number":24,"context_line":"               help\u003d\u0027Expiration time for cached instance info requested via \u0027"},{"line_number":25,"context_line":"                    \u0027Nova API.\u0027),"},{"line_number":26,"context_line":"    cfg.BoolOpt(\u0027enable_global_cache\u0027,"},{"line_number":27,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_2e57d2ca","line":24,"in_reply_to":"dae33548_65d3c3d5","updated":"2016-02-18 15:40:29.000000000","message":"Ok","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"1409ddc80e0a0361bf09c574da45f80eb2d1c655","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self._last_nova_request_time \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @property"},{"line_number":46,"context_line":"    def last_update(self):"},{"line_number":47,"context_line":"        if self.enable_global_cache:"},{"line_number":48,"context_line":"            return self.cache_region.get(self.LAST_UPDATE_KEY)"},{"line_number":49,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_8aaa5483","line":46,"updated":"2016-02-18 13:42:29.000000000","message":"it is a bit implicit to put the global and local stuff together that all these methods include \"if enable_global... else ...\", but .. OK.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"884d06930d74ec1edb3bba3a0e1c1b45d95344c3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self._last_nova_request_time \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @property"},{"line_number":46,"context_line":"    def last_update(self):"},{"line_number":47,"context_line":"        if self.enable_global_cache:"},{"line_number":48,"context_line":"            return self.cache_region.get(self.LAST_UPDATE_KEY)"},{"line_number":49,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_bb0300b8","line":46,"in_reply_to":"dae33548_2eaa3285","updated":"2016-02-19 12:34:41.000000000","message":"Does it make any sense to have LocalDiscoveryCache and GlobalDiscoveryCache class?","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"35a8d7798daba63f94c9261973b199bc28b3866c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self._last_nova_request_time \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @property"},{"line_number":46,"context_line":"    def last_update(self):"},{"line_number":47,"context_line":"        if self.enable_global_cache:"},{"line_number":48,"context_line":"            return self.cache_region.get(self.LAST_UPDATE_KEY)"},{"line_number":49,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_2eaa3285","line":46,"in_reply_to":"dae33548_8aaa5483","updated":"2016-02-18 15:40:29.000000000","message":"How I think cache usage is a encapsulated info for the InstanceDiscovery. How can I make it clearer from your point of view?","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"1409ddc80e0a0361bf09c574da45f80eb2d1c655","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            instances_info \u003d self.cache_region.get_multi("},{"line_number":92,"context_line":"                [srv.id for srv in servers])"},{"line_number":93,"context_line":"            instances \u003d [util.inject_info(srv, info)"},{"line_number":94,"context_line":"                         for srv, info in zip(servers, instances_info) if info]"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            instances \u003d [util.inject_info(srv, self._instances[srv.id])"},{"line_number":97,"context_line":"                         for srv in servers if srv.id in self._instances]"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_4bf20d07","line":94,"updated":"2016-02-18 13:42:29.000000000","message":"IIUC, here will silently drop the instances existed in hypervisor and not in the cache, right ? it is OK, but I think it is better to add a log hint.\n\nfurthermore, I am thinking that should we need to check the \"host\" filed of instance from cache. maybe the instance in the hypervisor and nova instance info in the cache, but the \"host\" field is not this host because of some instance migration exceptions... but AFAIK, this is impossible in Nova :)\n\nAnd furthermore, I am not sure we should just ignore the instance in Nova db(in the cache), but not in hypervisor, the instance may be ERROR state.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"35a8d7798daba63f94c9261973b199bc28b3866c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            instances_info \u003d self.cache_region.get_multi("},{"line_number":92,"context_line":"                [srv.id for srv in servers])"},{"line_number":93,"context_line":"            instances \u003d [util.inject_info(srv, info)"},{"line_number":94,"context_line":"                         for srv, info in zip(servers, instances_info) if info]"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            instances \u003d [util.inject_info(srv, self._instances[srv.id])"},{"line_number":97,"context_line":"                         for srv in servers if srv.id in self._instances]"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_a78f8573","line":94,"in_reply_to":"dae33548_4bf20d07","updated":"2016-02-18 15:40:29.000000000","message":"About the instances existed in hypervisor and not in the cache I agreed and will add a LOG.debug entry.\n\nYes, AFAIK, Nova change host for the instance, then it\u0027s migrated.\n\nFor the instances in the ERROR state I have a couple of objections.\n\nFirstly, in current Instance discovery we exclude all instances with deleted/error state from the output. [1]\nFurther, for example, if we want to collect info about error instances it is possible to make especial discovery for the \"instance\" polling which collects nova instances only if it needs, because we can\u0027t measure other info for this instance. Now, we catch info about error instance only from notifications.  \n\nSecondary, in oslo_cache we have not ability to find values by any parameter. So, for support this search we should make an additional writes to cache like `host1: [instance1, instance2, ...]` and for the updates we should get it, update list and put it to cache again. I think it\u0027s a not good way even under the distibuted synchronizing.  \n\n[1] https://github.com/openstack/ceilometer/blob/master/ceilometer/compute/discovery.py#L50","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"1409ddc80e0a0361bf09c574da45f80eb2d1c655","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":124,"context_line":"                    self.lock_name, self.expiration_time)"},{"line_number":125,"context_line":"                if not resource_update_locked:"},{"line_number":126,"context_line":"                    self.cache_region.set(self.lock_name, True)"},{"line_number":127,"context_line":"            finally:"},{"line_number":128,"context_line":"                self.cache_lock.release()"},{"line_number":129,"context_line":"        return not resource_update_locked"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_45595e8d","line":126,"updated":"2016-02-18 13:42:29.000000000","message":"shouldn\u0027t handle the possible \"exception\" ?","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"35a8d7798daba63f94c9261973b199bc28b3866c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":124,"context_line":"                    self.lock_name, self.expiration_time)"},{"line_number":125,"context_line":"                if not resource_update_locked:"},{"line_number":126,"context_line":"                    self.cache_region.set(self.lock_name, True)"},{"line_number":127,"context_line":"            finally:"},{"line_number":128,"context_line":"                self.cache_lock.release()"},{"line_number":129,"context_line":"        return not resource_update_locked"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_8e437eae","line":126,"in_reply_to":"dae33548_45595e8d","updated":"2016-02-18 15:40:29.000000000","message":"This exception will be handled in InstanceDiscovery.discover and will cause a polling skipping, because cache is not available.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"}],"ceilometer/compute/discovery/instance.py":[{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                with_flavor_and_image\u003dTrue"},{"line_number":75,"context_line":"            )"},{"line_number":76,"context_line":"        except Exception:"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return (util.group_instances_by_vmstate(instances)"},{"line_number":80,"context_line":"                if group_by_state else (instances, None))"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_d03497fc","line":77,"updated":"2016-02-16 13:03:01.000000000","message":"Why re-raising here? It seems pointless.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                with_flavor_and_image\u003dTrue"},{"line_number":75,"context_line":"            )"},{"line_number":76,"context_line":"        except Exception:"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return (util.group_instances_by_vmstate(instances)"},{"line_number":80,"context_line":"                if group_by_state else (instances, None))"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_fa0c123d","line":77,"in_reply_to":"dae33548_d03497fc","updated":"2016-02-16 13:58:09.000000000","message":"agreed, it\u0027s a my mistake. Early I added a logging here, but it redundant. I\u0027ll fix it.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def update_instance_info_cache(self):"},{"line_number":83,"context_line":"        \"\"\"Trying to acquire lock and update instances cache via nova client."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        If any error is raised during this methods, the lock will be released."},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if self.cache.lock.acquire():"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_902b2f94","line":85,"range":{"start_line":85,"start_character":43,"end_line":85,"end_character":50},"updated":"2016-02-16 13:03:01.000000000","message":"method","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def update_instance_info_cache(self):"},{"line_number":83,"context_line":"        \"\"\"Trying to acquire lock and update instances cache via nova client."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        If any error is raised during this methods, the lock will be released."},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if self.cache.lock.acquire():"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_7a192279","line":85,"range":{"start_line":85,"start_character":43,"end_line":85,"end_character":50},"in_reply_to":"dae33548_902b2f94","updated":"2016-02-16 13:58:09.000000000","message":"I\u0027ll fix it.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"44d8008371f54ca158776f5d7f9c8cbfce6d7027","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":101,"context_line":"        \"\"\"Discover instances for polling."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        This method update cache if it need and discover"},{"line_number":104,"context_line":"        running instances via virt inspector and cached instance info."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :returns: list of discovered instances"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_90020f0a","line":103,"updated":"2016-02-16 13:03:01.000000000","message":"This method updates the cache if needed and discovers","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"51453ee76560ed6b7db313e09e915ea3dbbbad77","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":101,"context_line":"        \"\"\"Discover instances for polling."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        This method update cache if it need and discover"},{"line_number":104,"context_line":"        running instances via virt inspector and cached instance info."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :returns: list of discovered instances"}],"source_content_type":"text/x-python","patch_set":17,"id":"dae33548_1a21f69f","line":103,"in_reply_to":"dae33548_90020f0a","updated":"2016-02-16 13:58:09.000000000","message":"I\u0027ll fix it.","commit_id":"bbbc4b25a2e8c730224cf56cc19f11708cf71341"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"06acfb5e2233dccbf05d2fc1c9f0f39bffb0c67a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        host \u003d (None if self.cache.enable_global_cache else cfg.CONF.host)"},{"line_number":70,"context_line":"        instances \u003d self.nova_cli.instance_get_all("},{"line_number":71,"context_line":"            self.cache.last_update,"},{"line_number":72,"context_line":"            host\u003dhost,"},{"line_number":73,"context_line":"            with_flavor_and_image\u003dTrue"}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_c176ce3d","line":70,"updated":"2016-02-19 14:55:43.000000000","message":"how is this minimising the number of calls to nova API? this appears to make exactly the same number of calls. it\u0027s just that Nova will return potentially a bigger chunk of data for one call and nothing for other calls vs smaller chunks of data for all calls.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"884d06930d74ec1edb3bba3a0e1c1b45d95344c3","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                              exception)"},{"line_number":93,"context_line":"                self.cache.lock.release()"},{"line_number":94,"context_line":"            else:"},{"line_number":95,"context_line":"                self.cache.last_update \u003d timeutils.utcnow(True).isoformat()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":98,"context_line":"        \"\"\"Discover instances for polling."}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_3b0c1094","line":95,"updated":"2016-02-19 12:34:41.000000000","message":"You may wish to set last_update to a time slightly before when you\u0027ve made the \u0027self.nova_cli.instance_get_all\u0027 call. Otherwise might you introduce a slight window of time when an instance is changed but will not be recorded in changes_since?","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"1409ddc80e0a0361bf09c574da45f80eb2d1c655","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                              exception)"},{"line_number":93,"context_line":"                self.cache.lock.release()"},{"line_number":94,"context_line":"            else:"},{"line_number":95,"context_line":"                self.cache.last_update \u003d timeutils.utcnow(True).isoformat()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":98,"context_line":"        \"\"\"Discover instances for polling."}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_ca057c46","line":95,"updated":"2016-02-18 13:42:29.000000000","message":"sorry, shouldn\u0027t manually release lock if no exception ?\n\nand, if it is possible to acquire lock failed ? what is the \"else\" situation ?","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"35a8d7798daba63f94c9261973b199bc28b3866c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                              exception)"},{"line_number":93,"context_line":"                self.cache.lock.release()"},{"line_number":94,"context_line":"            else:"},{"line_number":95,"context_line":"                self.cache.last_update \u003d timeutils.utcnow(True).isoformat()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":98,"context_line":"        \"\"\"Discover instances for polling."}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_f1602fa7","line":95,"in_reply_to":"dae33548_ca057c46","updated":"2016-02-18 15:40:29.000000000","message":"This lock will be released when cache.LOCK_KEY expires. It\u0027s a resource metadata updating lock for all agents and we check key existing, then trying to acquire this lock.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2014 Red Hat, Inc"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_f7c35f55","line":2,"updated":"2016-02-22 23:10:12.000000000","message":"why was this file moved from discovery.py to discovery/instance.py?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2014 Red Hat, Inc"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_21c9a5ac","line":2,"in_reply_to":"bae84128_f7c35f55","updated":"2016-02-24 12:53:31.000000000","message":"I created a module \"discovery\" for having discovery and cache for discoveries in one place.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.nova_cli \u003d nova_client.Client()"},{"line_number":52,"context_line":"        self.cache \u003d cache.get_discovery_cache()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_nova_instances(self, group_by_state\u003dFalse):"},{"line_number":55,"context_line":"        \"\"\"Collect instances list from nova client."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        This method collects all instances from the nova client"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_1ae42aaa","line":54,"updated":"2016-02-22 23:10:12.000000000","message":"when is group_by_state ever false?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.nova_cli \u003d nova_client.Client()"},{"line_number":52,"context_line":"        self.cache \u003d cache.get_discovery_cache()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_nova_instances(self, group_by_state\u003dFalse):"},{"line_number":55,"context_line":"        \"\"\"Collect instances list from nova client."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        This method collects all instances from the nova client"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_01d3c1d5","line":54,"in_reply_to":"bae84128_1ae42aaa","updated":"2016-02-24 12:53:31.000000000","message":"Never, I think it is not used anywhere","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                host\u003dhost,"},{"line_number":74,"context_line":"                with_flavor_and_image\u003dTrue"},{"line_number":75,"context_line":"            )"},{"line_number":76,"context_line":"        except Exception:"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return (util.group_instances_by_vmstate(instances)"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_ba01be3a","line":76,"updated":"2016-02-22 23:10:12.000000000","message":"what\u0027s the point of catching if we just re-raise?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                host\u003dhost,"},{"line_number":74,"context_line":"                with_flavor_and_image\u003dTrue"},{"line_number":75,"context_line":"            )"},{"line_number":76,"context_line":"        except Exception:"},{"line_number":77,"context_line":"            raise"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return (util.group_instances_by_vmstate(instances)"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_01eaa173","line":76,"in_reply_to":"bae84128_ba01be3a","updated":"2016-02-24 12:53:31.000000000","message":"Hmm, yes, try should be removed.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"}],"ceilometer/compute/discovery/util/cache.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                    \u0027requested via Nova API. If this parameter is greater \u0027"},{"line_number":28,"context_line":"                    \u0027than polling interval you can catch an expired \u0027"},{"line_number":29,"context_line":"                    \u0027instance metadata in samples while the cache \u0027"},{"line_number":30,"context_line":"                    \u0027is not updated.\u0027),"},{"line_number":31,"context_line":"    cfg.BoolOpt(\u0027enable_global_cache\u0027,"},{"line_number":32,"context_line":"                default\u003dFalse,"},{"line_number":33,"context_line":"                help\u003d\u0027Enable global cache for nova polling.\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_9a815ac6","line":30,"updated":"2016-02-22 23:10:12.000000000","message":"resource_update_interval\n\n\n\"If global cache is enabled, the instance list to poll will be gathered based on this options interval. measurements relating to the instances will match intervals defined in pipeline. new instances will be picked up according to this options interval\"","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                    \u0027requested via Nova API. If this parameter is greater \u0027"},{"line_number":28,"context_line":"                    \u0027than polling interval you can catch an expired \u0027"},{"line_number":29,"context_line":"                    \u0027instance metadata in samples while the cache \u0027"},{"line_number":30,"context_line":"                    \u0027is not updated.\u0027),"},{"line_number":31,"context_line":"    cfg.BoolOpt(\u0027enable_global_cache\u0027,"},{"line_number":32,"context_line":"                default\u003dFalse,"},{"line_number":33,"context_line":"                help\u003d\u0027Enable global cache for nova polling.\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_2edcf444","line":30,"in_reply_to":"bae84128_9a815ac6","updated":"2016-02-24 12:53:31.000000000","message":"Ok, will fix it","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                                      with_expiration\u003dFalse)"},{"line_number":106,"context_line":"        self.expiration_time \u003d cfg.CONF.compute.interval_to_update_resource"},{"line_number":107,"context_line":"        self.cache_lock \u003d (self.cache_region.backend.get_mutex(self.LOCK_NAME)"},{"line_number":108,"context_line":"                           if cache else None)"},{"line_number":109,"context_line":"        self._instances \u003d {}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_57f04b67","line":108,"updated":"2016-02-22 23:10:12.000000000","message":"why would cache module be False here?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                                      with_expiration\u003dFalse)"},{"line_number":106,"context_line":"        self.expiration_time \u003d cfg.CONF.compute.interval_to_update_resource"},{"line_number":107,"context_line":"        self.cache_lock \u003d (self.cache_region.backend.get_mutex(self.LOCK_NAME)"},{"line_number":108,"context_line":"                           if cache else None)"},{"line_number":109,"context_line":"        self._instances \u003d {}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_0eadb09a","line":108,"in_reply_to":"bae84128_57f04b67","updated":"2016-02-24 12:53:31.000000000","message":"You are right. self.cache_region should be here.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def acquire_resource_update_lock(self):"},{"line_number":137,"context_line":"        resource_update_locked \u003d None"},{"line_number":138,"context_line":"        if self.cache_lock:"},{"line_number":139,"context_line":"            # NOTE(ityaptin): We use try-finally for acquiring the lock"},{"line_number":140,"context_line":"            # because not all backend mutexes support entering to context."},{"line_number":141,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_37f5c756","line":138,"updated":"2016-02-22 23:10:12.000000000","message":"do we need this? see question  in __init__","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def acquire_resource_update_lock(self):"},{"line_number":137,"context_line":"        resource_update_locked \u003d None"},{"line_number":138,"context_line":"        if self.cache_lock:"},{"line_number":139,"context_line":"            # NOTE(ityaptin): We use try-finally for acquiring the lock"},{"line_number":140,"context_line":"            # because not all backend mutexes support entering to context."},{"line_number":141,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_cebbc8c2","line":138,"in_reply_to":"bae84128_37f5c756","updated":"2016-02-24 12:53:31.000000000","message":"Yes, we need it. If we have not option \"backend_argument\u003ddistributed_cache:True\" self.cache_lock will be strictly None. And we should check it.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            try:"},{"line_number":142,"context_line":"                self.cache_lock.acquire()"},{"line_number":143,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":144,"context_line":"                    self.LOCK_NAME, self.expiration_time)"},{"line_number":145,"context_line":"                if not resource_update_locked:"},{"line_number":146,"context_line":"                    self.cache_region.set(self.LOCK_NAME, True)"},{"line_number":147,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_da7e4218","line":144,"updated":"2016-02-22 23:10:12.000000000","message":"i\u0027m having trouble finding get function in oslo.cache that takes key (LOCK_NAME) and expiration_time, can you point me to it?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            try:"},{"line_number":142,"context_line":"                self.cache_lock.acquire()"},{"line_number":143,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":144,"context_line":"                    self.LOCK_NAME, self.expiration_time)"},{"line_number":145,"context_line":"                if not resource_update_locked:"},{"line_number":146,"context_line":"                    self.cache_region.set(self.LOCK_NAME, True)"},{"line_number":147,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_4e24d80b","line":144,"in_reply_to":"bae84128_da7e4218","updated":"2016-02-24 12:53:31.000000000","message":"oslo.cache returns us a dogpile.cache.CacheRegion. \nhttps://github.com/dprince/dogpile.cache/blob/master/dogpile/cache/region.py#L351","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":144,"context_line":"                    self.LOCK_NAME, self.expiration_time)"},{"line_number":145,"context_line":"                if not resource_update_locked:"},{"line_number":146,"context_line":"                    self.cache_region.set(self.LOCK_NAME, True)"},{"line_number":147,"context_line":"            finally:"},{"line_number":148,"context_line":"                self.cache_lock.release()"},{"line_number":149,"context_line":"        return not resource_update_locked"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_dacc826c","line":146,"updated":"2016-02-22 23:10:12.000000000","message":"i\u0027m having trouble understanding what exactly this function does to be honest. we\u0027re caching the value True?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":144,"context_line":"                    self.LOCK_NAME, self.expiration_time)"},{"line_number":145,"context_line":"                if not resource_update_locked:"},{"line_number":146,"context_line":"                    self.cache_region.set(self.LOCK_NAME, True)"},{"line_number":147,"context_line":"            finally:"},{"line_number":148,"context_line":"                self.cache_lock.release()"},{"line_number":149,"context_line":"        return not resource_update_locked"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_ee7b2cf3","line":146,"in_reply_to":"bae84128_dacc826c","updated":"2016-02-24 12:53:31.000000000","message":"This function works with","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"02e33546e8f83f6bab097b4742b5a00245e26b51","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                resource_update_locked \u003d self.cache_region.get("},{"line_number":144,"context_line":"                    self.LOCK_NAME, self.expiration_time)"},{"line_number":145,"context_line":"                if not resource_update_locked:"},{"line_number":146,"context_line":"                    self.cache_region.set(self.LOCK_NAME, True)"},{"line_number":147,"context_line":"            finally:"},{"line_number":148,"context_line":"                self.cache_lock.release()"},{"line_number":149,"context_line":"        return not resource_update_locked"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_70fc11b8","line":146,"in_reply_to":"bae84128_ee7b2cf3","updated":"2016-02-24 14:15:17.000000000","message":"i think you hit enter to early :)","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def delete_instances(self, instances):"},{"line_number":173,"context_line":"        if instances:"},{"line_number":174,"context_line":"            instance_ids \u003d [instance.id for instance in instances]"},{"line_number":175,"context_line":"            for id in instance_ids:"},{"line_number":176,"context_line":"                self._instances.pop(id, None)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_57768ba4","line":174,"updated":"2016-02-22 23:10:12.000000000","message":"this seems to build unnecessary list. just pop it right away.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def delete_instances(self, instances):"},{"line_number":173,"context_line":"        if instances:"},{"line_number":174,"context_line":"            instance_ids \u003d [instance.id for instance in instances]"},{"line_number":175,"context_line":"            for id in instance_ids:"},{"line_number":176,"context_line":"                self._instances.pop(id, None)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_21a40506","line":174,"in_reply_to":"bae84128_57768ba4","updated":"2016-02-24 12:53:31.000000000","message":"Agreed","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"}],"ceilometer/compute/pollsters/util.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            getattr(instance, \"name\", None))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"def get_instance_info(instance):"},{"line_number":114,"context_line":"    \"\"\"Collect from the instance specified fields via getters."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    :param instance - nova Instance object"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_99eb6bb0","line":113,"updated":"2016-02-11 09:07:20.000000000","message":"Collect the instance\u0027s specified fields via getters","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            getattr(instance, \"name\", None))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"def get_instance_info(instance):"},{"line_number":114,"context_line":"    \"\"\"Collect from the instance specified fields via getters."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    :param instance - nova Instance object"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_7a721aaf","line":113,"in_reply_to":"3a57f1b5_99eb6bb0","updated":"2016-02-11 11:02:11.000000000","message":"I\u0027ll rewrite it","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    try:"},{"line_number":121,"context_line":"        return dict((name, getter(instance, name))"},{"line_number":122,"context_line":"                    for name, getter in INSTANCE_CACHED_FIELDS.items())"},{"line_number":123,"context_line":"    except Exception as e:"},{"line_number":124,"context_line":"        LOG.exception(_LE(\"Exception during the getting instance info \""},{"line_number":125,"context_line":"                          \"for caching\"), e)"},{"line_number":126,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_d9080394","line":123,"updated":"2016-02-11 09:07:20.000000000","message":"the getting \u003d\u003e getting","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    try:"},{"line_number":121,"context_line":"        return dict((name, getter(instance, name))"},{"line_number":122,"context_line":"                    for name, getter in INSTANCE_CACHED_FIELDS.items())"},{"line_number":123,"context_line":"    except Exception as e:"},{"line_number":124,"context_line":"        LOG.exception(_LE(\"Exception during the getting instance info \""},{"line_number":125,"context_line":"                          \"for caching\"), e)"},{"line_number":126,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_da630edb","line":123,"in_reply_to":"3a57f1b5_d9080394","updated":"2016-02-11 11:02:11.000000000","message":"Ok","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        return dict((name, getter(instance, name))"},{"line_number":122,"context_line":"                    for name, getter in INSTANCE_CACHED_FIELDS.items())"},{"line_number":123,"context_line":"    except Exception as e:"},{"line_number":124,"context_line":"        LOG.exception(_LE(\"Exception during the getting instance info \""},{"line_number":125,"context_line":"                          \"for caching\"), e)"},{"line_number":126,"context_line":"        return {}"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_79846fd3","line":124,"updated":"2016-02-11 09:07:20.000000000","message":"This is the util script. Potentially, we may reuse all these methods. So, I\u0027d process all Exceptions outside. Or remove \"for caching\" at least.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        return dict((name, getter(instance, name))"},{"line_number":122,"context_line":"                    for name, getter in INSTANCE_CACHED_FIELDS.items())"},{"line_number":123,"context_line":"    except Exception as e:"},{"line_number":124,"context_line":"        LOG.exception(_LE(\"Exception during the getting instance info \""},{"line_number":125,"context_line":"                          \"for caching\"), e)"},{"line_number":126,"context_line":"        return {}"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_1ab1a647","line":124,"in_reply_to":"3a57f1b5_79846fd3","updated":"2016-02-11 11:02:11.000000000","message":"Agreed, maybe it\u0027s better to raise exception.","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        return {}"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def get_instances_info(instances):"},{"line_number":130,"context_line":"    \"\"\"Combine information from the instances for the cache."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    :param instances - list on instances returned from the nova-api usually"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_f9785ff4","line":129,"updated":"2016-02-11 09:07:20.000000000","message":"ditto, remove \"the cache\"","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        return {}"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def get_instances_info(instances):"},{"line_number":130,"context_line":"    \"\"\"Combine information from the instances for the cache."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    :param instances - list on instances returned from the nova-api usually"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_3aaca2ec","line":129,"in_reply_to":"3a57f1b5_f9785ff4","updated":"2016-02-11 11:02:11.000000000","message":"Done","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"884d06930d74ec1edb3bba3a0e1c1b45d95344c3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \u0027ramdisk_id\u0027,"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"INSTANCE_CACHED_FIELDS \u003d {"},{"line_number":38,"context_line":"    \"user_id\": lambda obj, name: getattr(obj, name, None),"},{"line_number":39,"context_line":"    \"tenant_id\": lambda obj, name: getattr(obj, name, None),"},{"line_number":40,"context_line":"    \"metadata\": lambda obj, name: get_metadata_from_object(obj),"}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_db3524f8","line":37,"updated":"2016-02-19 12:34:41.000000000","message":"Might be useful to explain why these particular fields are the cached ones.","commit_id":"8fd1f88e056f6489b39d3eb6e15ebff7b8582cf2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class Instance(object):"},{"line_number":169,"context_line":"    def __init__(self, id, name\u003dNone, user_id\u003dNone, project_id\u003dNone,"},{"line_number":170,"context_line":"                 metadata\u003dNone, obj\u003dNone):"},{"line_number":171,"context_line":"        self.id \u003d id"},{"line_number":172,"context_line":"        self.obj \u003d obj"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_5707abc9","line":169,"updated":"2016-02-22 23:10:12.000000000","message":"i don\u0027t really understand why we can\u0027t just store the instance objects nova client returns as we did before? what is all this mapping for?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"02e33546e8f83f6bab097b4742b5a00245e26b51","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class Instance(object):"},{"line_number":169,"context_line":"    def __init__(self, id, name\u003dNone, user_id\u003dNone, project_id\u003dNone,"},{"line_number":170,"context_line":"                 metadata\u003dNone, obj\u003dNone):"},{"line_number":171,"context_line":"        self.id \u003d id"},{"line_number":172,"context_line":"        self.obj \u003d obj"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_30c9e9ac","line":169,"in_reply_to":"bae84128_4175c9c8","updated":"2016-02-24 14:15:17.000000000","message":"i thought the workflow was:\n\n  1. query nova for all instances metadata\n  2. store metadata in cache\n  3. query current host instnaces\n  4. combine with metadata\n  5. publish\n\nwhy do we need to combine before we cache?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1cd273b5d9dcd769ef2d21e548d037126e2576c5","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class Instance(object):"},{"line_number":169,"context_line":"    def __init__(self, id, name\u003dNone, user_id\u003dNone, project_id\u003dNone,"},{"line_number":170,"context_line":"                 metadata\u003dNone, obj\u003dNone):"},{"line_number":171,"context_line":"        self.id \u003d id"},{"line_number":172,"context_line":"        self.obj \u003d obj"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_4175c9c8","line":169,"in_reply_to":"bae84128_5707abc9","updated":"2016-02-24 13:00:38.000000000","message":"This object is returned from the hypervisor and it doesn\u0027t have any nova instances attributes. Also, we combine this object with metadata, user_id, tenant_id, name, which are stored in cache. It\u0027s more useful than store instance attributes in the cache.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"}],"ceilometer/compute/virt/inspector.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        \"\"\""},{"line_number":303,"context_line":"        raise ceilometer.NotImplementedError"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def get_all_vms(self):"},{"line_number":306,"context_line":"        \"\"\"Return all vms are run at the hypervisor."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        :return list of HypervisorVM instances with ids"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_3956f75c","line":305,"updated":"2016-02-11 09:07:20.000000000","message":"return all running vms","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        \"\"\""},{"line_number":303,"context_line":"        raise ceilometer.NotImplementedError"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def get_all_vms(self):"},{"line_number":306,"context_line":"        \"\"\"Return all vms are run at the hypervisor."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        :return list of HypervisorVM instances with ids"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_7a80da46","line":305,"in_reply_to":"3a57f1b5_3956f75c","updated":"2016-02-11 11:02:11.000000000","message":"Done","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"}],"ceilometer/nova_client.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            setattr(instance, attr, ameta)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @logged"},{"line_number":146,"context_line":"    def instance_get_all_by_host(self, hostname, since\u003dNone):"},{"line_number":147,"context_line":"        \"\"\"Returns list of instances on particular host."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        If since is supplied, it will return the instances changed since that"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_65b79cf5","line":146,"updated":"2016-02-22 23:10:12.000000000","message":"should we just remove this then?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            setattr(instance, attr, ameta)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @logged"},{"line_number":146,"context_line":"    def instance_get_all_by_host(self, hostname, since\u003dNone):"},{"line_number":147,"context_line":"        \"\"\"Returns list of instances on particular host."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        If since is supplied, it will return the instances changed since that"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_4ef7b8d2","line":146,"in_reply_to":"bae84128_65b79cf5","updated":"2016-02-24 12:53:31.000000000","message":"Maybe, we don\u0027t use it now.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"}],"ceilometer/sample.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                   resource_metadata\u003dmetadata,"},{"line_number":98,"context_line":"                   source\u003dsource)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def get_message_metadata(message):"},{"line_number":102,"context_line":"    metadata \u003d (copy.copy(message[\u0027payload\u0027])"},{"line_number":103,"context_line":"                if isinstance(message[\u0027payload\u0027], dict) else {})"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_79e9cf7f","line":100,"updated":"2016-02-11 09:07:20.000000000","message":"to utils?","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                   resource_metadata\u003dmetadata,"},{"line_number":98,"context_line":"                   source\u003dsource)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def get_message_metadata(message):"},{"line_number":102,"context_line":"    metadata \u003d (copy.copy(message[\u0027payload\u0027])"},{"line_number":103,"context_line":"                if isinstance(message[\u0027payload\u0027], dict) else {})"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_cd56fad1","line":100,"in_reply_to":"3a57f1b5_79e9cf7f","updated":"2016-02-11 11:02:11.000000000","message":"I think it\u0027s redundant function and can be removed","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"}],"ceilometer/tests/unit/compute/pollsters/test_instance.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                         samples[0].resource_metadata[\u0027user_metadata\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":58,"context_line":"    def test_get_reserved_metadata_with_namespace(self):"},{"line_number":59,"context_line":"        mgr \u003d manager.AgentManager()"},{"line_number":60,"context_line":"        pollster \u003d pollsters_instance.InstancePollster()"},{"line_number":61,"context_line":"        samples \u003d list(pollster.get_samples(mgr, {}, [self.instance]))"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_a5c36488","side":"PARENT","line":58,"updated":"2016-02-22 23:10:12.000000000","message":"why is this getting deleted? this functionality should still exist no?","commit_id":"08433892d152b8e5ff6271d08e3283c0e881fc6f"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                         samples[0].resource_metadata[\u0027user_metadata\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":58,"context_line":"    def test_get_reserved_metadata_with_namespace(self):"},{"line_number":59,"context_line":"        mgr \u003d manager.AgentManager()"},{"line_number":60,"context_line":"        pollster \u003d pollsters_instance.InstancePollster()"},{"line_number":61,"context_line":"        samples \u003d list(pollster.get_samples(mgr, {}, [self.instance]))"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_ee396ca5","side":"PARENT","line":58,"in_reply_to":"bae84128_a5c36488","updated":"2016-02-24 12:53:31.000000000","message":"This test moved to the discovery test namespace, because now we are transforming instance info to metadata in the discovery not in pollster","commit_id":"08433892d152b8e5ff6271d08e3283c0e881fc6f"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"02e33546e8f83f6bab097b4742b5a00245e26b51","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                         samples[0].resource_metadata[\u0027user_metadata\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":58,"context_line":"    def test_get_reserved_metadata_with_namespace(self):"},{"line_number":59,"context_line":"        mgr \u003d manager.AgentManager()"},{"line_number":60,"context_line":"        pollster \u003d pollsters_instance.InstancePollster()"},{"line_number":61,"context_line":"        samples \u003d list(pollster.get_samples(mgr, {}, [self.instance]))"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_b557ab24","side":"PARENT","line":58,"in_reply_to":"bae84128_ee396ca5","updated":"2016-02-24 14:15:17.000000000","message":"yeah, sorry. i noticed the move afterwards but i forgot to delete original comment.","commit_id":"08433892d152b8e5ff6271d08e3283c0e881fc6f"}],"etc/ceilometer/pipeline.yaml":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    - name: meter_source"},{"line_number":4,"context_line":"      interval: 600"},{"line_number":5,"context_line":"      meters:"},{"line_number":6,"context_line":"          - \"*\""},{"line_number":7,"context_line":"          - \"!instance\""},{"line_number":8,"context_line":"      sinks:"},{"line_number":9,"context_line":"          - meter_sink"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3a57f1b5_598653ba","line":6,"updated":"2016-02-11 09:07:20.000000000","message":"Let\u0027s change this file later?","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    - name: meter_source"},{"line_number":4,"context_line":"      interval: 600"},{"line_number":5,"context_line":"      meters:"},{"line_number":6,"context_line":"          - \"*\""},{"line_number":7,"context_line":"          - \"!instance\""},{"line_number":8,"context_line":"      sinks:"},{"line_number":9,"context_line":"          - meter_sink"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3a57f1b5_4d59aafd","line":6,"in_reply_to":"3a57f1b5_598653ba","updated":"2016-02-11 11:02:11.000000000","message":"Done","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"}],"requirements.txt":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c80083588fbe16e1d959236949946eb633729572","unresolved":false,"context_lines":[{"line_number":47,"context_line":"# NOTE(jd) We do not import it directly, but WSME datetime string parsing"},{"line_number":48,"context_line":"# behaviour changes when this library is installed"},{"line_number":49,"context_line":"python-dateutil\u003e\u003d2.4.2 # BSD"},{"line_number":50,"context_line":"oslo.cache\u003e\u003d0.8.0  # Apache-2.0"}],"source_content_type":"text/plain","patch_set":19,"id":"bae84128_459d38bb","line":50,"updated":"2016-02-22 23:10:12.000000000","message":"why is this changing?","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"a7e5f53e56966df80e6330c556b127a7a515c14b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"# NOTE(jd) We do not import it directly, but WSME datetime string parsing"},{"line_number":48,"context_line":"# behaviour changes when this library is installed"},{"line_number":49,"context_line":"python-dateutil\u003e\u003d2.4.2 # BSD"},{"line_number":50,"context_line":"oslo.cache\u003e\u003d0.8.0  # Apache-2.0"}],"source_content_type":"text/plain","patch_set":19,"id":"bae84128_aeb8042b","line":50,"in_reply_to":"bae84128_459d38bb","updated":"2016-02-24 12:53:31.000000000","message":"Now it\u0027s same as in global requirements. Couple of previous changes has a typo with \"0.8\" instead of \"0.8.0\".","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"02e33546e8f83f6bab097b4742b5a00245e26b51","unresolved":false,"context_lines":[{"line_number":47,"context_line":"# NOTE(jd) We do not import it directly, but WSME datetime string parsing"},{"line_number":48,"context_line":"# behaviour changes when this library is installed"},{"line_number":49,"context_line":"python-dateutil\u003e\u003d2.4.2 # BSD"},{"line_number":50,"context_line":"oslo.cache\u003e\u003d0.8.0  # Apache-2.0"}],"source_content_type":"text/plain","patch_set":19,"id":"bae84128_1546577a","line":50,"in_reply_to":"bae84128_aeb8042b","updated":"2016-02-24 14:15:17.000000000","message":"we should keep it in test-requirements as it\u0027s an optional path.","commit_id":"4ef3971cc744a20c25dde35161037dbfce9bbc75"}],"setup.cfg":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ce60d46c968bae38af391e8156aff077e3cdaad2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    disk.usage \u003d ceilometer.compute.pollsters.disk:PhysicalPollster"},{"line_number":108,"context_line":"    disk.device.capacity \u003d ceilometer.compute.pollsters.disk:PerDeviceCapacityPollster"},{"line_number":109,"context_line":"    disk.device.allocation \u003d ceilometer.compute.pollsters.disk:PerDeviceAllocationPollster"},{"line_number":110,"context_line":"    disk.device.usage \u003d ceilometer.compute.pollsters.disk:PerDevicePhysicalPollster"},{"line_number":111,"context_line":"    instance \u003d ceilometer.compute.pollsters.instance:InstancePollster"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"3a57f1b5_79b78f86","line":110,"updated":"2016-02-11 09:07:20.000000000","message":"unneeded change?","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"fdf149daf238f8a9e3dcd4bfcd2ba6e0ba96c15c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    disk.usage \u003d ceilometer.compute.pollsters.disk:PhysicalPollster"},{"line_number":108,"context_line":"    disk.device.capacity \u003d ceilometer.compute.pollsters.disk:PerDeviceCapacityPollster"},{"line_number":109,"context_line":"    disk.device.allocation \u003d ceilometer.compute.pollsters.disk:PerDeviceAllocationPollster"},{"line_number":110,"context_line":"    disk.device.usage \u003d ceilometer.compute.pollsters.disk:PerDevicePhysicalPollster"},{"line_number":111,"context_line":"    instance \u003d ceilometer.compute.pollsters.instance:InstancePollster"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"3a57f1b5_6d5ca6ed","line":110,"in_reply_to":"3a57f1b5_79b78f86","updated":"2016-02-11 11:02:11.000000000","message":"Done","commit_id":"84c5eb39e9d1874810fff12964a037b3eabe21dd"}]}
