)]}'
{"devstack/settings":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"9e7d3dd403e1714c54c6ca7096df2179b15ffb1c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"# Toggle for deploying Vitrage with/without nagios"},{"line_number":40,"context_line":"VITRAGE_USE_NAGIOS\u003d$(trueorfalse False VITRAGE_USE_NAGIOS)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"VITRAGE_DEFAULT_DATASOURCES\u003d${VITRAGE_DEFAULT_DATASOURCES:-nova.host,nova.instance,nova.zone,nagios,static,static_physical,aodh,cinder.volume,neutron.network,neutron.port,heat.stack,doctor,prometheus,trove.instance,trove.cluster}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# for now dont use pip install for the client"},{"line_number":45,"context_line":"LIBS_FROM_GIT\u003dpython-vitrageclient"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"3f79a3b5_47680a87","line":42,"range":{"start_line":42,"start_character":199,"end_line":42,"end_character":228},"updated":"2018-10-23 09:23:58.000000000","message":"Do we really want to enable it by default?","commit_id":"0db0f96f0df8196694e1a9cc0fb4c68e8a5e5a21"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"cf9975d24cae8ede9198caad8c478ec779d495a2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"# Toggle for deploying Vitrage with/without nagios"},{"line_number":40,"context_line":"VITRAGE_USE_NAGIOS\u003d$(trueorfalse False VITRAGE_USE_NAGIOS)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"VITRAGE_DEFAULT_DATASOURCES\u003d${VITRAGE_DEFAULT_DATASOURCES:-nova.host,nova.instance,nova.zone,nagios,static,static_physical,aodh,cinder.volume,neutron.network,neutron.port,heat.stack,doctor,prometheus,trove.instance,trove.cluster}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# for now dont use pip install for the client"},{"line_number":45,"context_line":"LIBS_FROM_GIT\u003dpython-vitrageclient"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"3f79a3b5_fc144852","line":42,"range":{"start_line":42,"start_character":199,"end_line":42,"end_character":228},"in_reply_to":"3f79a3b5_47680a87","updated":"2018-10-23 11:28:20.000000000","message":"I guess it might be problematic due to PULL update method. How would Vitrage behave in case Trove is not present in the deployment. Would it fail or handle the situation somehow?","commit_id":"0db0f96f0df8196694e1a9cc0fb4c68e8a5e5a21"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cb0d686588da5277cac1130af48b1345eec1c80d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"# Toggle for deploying Vitrage with/without nagios"},{"line_number":40,"context_line":"VITRAGE_USE_NAGIOS\u003d$(trueorfalse False VITRAGE_USE_NAGIOS)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"VITRAGE_DEFAULT_DATASOURCES\u003d${VITRAGE_DEFAULT_DATASOURCES:-nova.host,nova.instance,nova.zone,nagios,static,static_physical,aodh,cinder.volume,neutron.network,neutron.port,heat.stack,doctor,prometheus,trove.instance,trove.cluster}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# for now dont use pip install for the client"},{"line_number":45,"context_line":"LIBS_FROM_GIT\u003dpython-vitrageclient"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"3f79a3b5_3672bbb1","line":42,"range":{"start_line":42,"start_character":199,"end_line":42,"end_character":228},"in_reply_to":"3f79a3b5_fc144852","updated":"2018-10-24 15:01:18.000000000","message":"Vitrage is supposed to ignore OpenStack datasources if they are not installed. And if Trove is installed, then of course we want to enable the datasource. Why not?","commit_id":"0db0f96f0df8196694e1a9cc0fb4c68e8a5e5a21"}],"requirements.txt":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"d5e4c8f0f12e38ce6dac50a5729b35da6596de45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3f79a3b5_27c2bd03","updated":"2018-10-22 18:07:23.000000000","message":"Update lower constraints.","commit_id":"c20dd184231e9f33afabbdf2d838dc8db02046f7"}],"vitrage/datasources/trove/cluster/__init__.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dd2cc3509dd023f74c3cfc0a0b76165d0dc58aa9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               default\u003d30,"},{"line_number":42,"context_line":"               min\u003d10,"},{"line_number":43,"context_line":"               help\u003d\u0027interval in seconds between checking changes in the\u0027"},{"line_number":44,"context_line":"                    \u0027trove configuration files\u0027)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_0fdbc120","line":44,"range":{"start_line":44,"start_character":27,"end_line":44,"end_character":46},"updated":"2018-10-14 08:06:16.000000000","message":"This is the interval between checking changes in the trove datasource, not in its configuration files. Every CHAGNES_INTERVAL seconds the get_changes() method is called.","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7d0960cc4c1f10bd1846337641b8aaa59799d5f3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               default\u003d30,"},{"line_number":42,"context_line":"               min\u003d10,"},{"line_number":43,"context_line":"               help\u003d\u0027interval in seconds between checking changes in the\u0027"},{"line_number":44,"context_line":"                    \u0027trove configuration files\u0027)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_296e19c8","line":44,"range":{"start_line":44,"start_character":27,"end_line":44,"end_character":46},"in_reply_to":"3f79a3b5_0fdbc120","updated":"2018-10-22 15:06:58.000000000","message":"Done","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"}],"vitrage/datasources/trove/cluster/driver.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dd2cc3509dd023f74c3cfc0a0b76165d0dc58aa9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return TROVE_CLUSTER_DATASOURCE"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _get_all_entities(self):"},{"line_number":38,"context_line":"        # TODO(bzurkowski): Add all_tenants option to Trove client"},{"line_number":39,"context_line":"        return self.extract_entities(self.client.clusters.list())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2fdebd0f","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":66},"updated":"2018-10-14 08:06:16.000000000","message":"Does it mean that Trove does not support multi tenancy at this point? so all users will see in Vitrage the Trove cluster and instances of other tenants?","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cb0d686588da5277cac1130af48b1345eec1c80d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return TROVE_CLUSTER_DATASOURCE"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _get_all_entities(self):"},{"line_number":38,"context_line":"        # TODO(bzurkowski): Add all_tenants option to Trove client"},{"line_number":39,"context_line":"        return self.extract_entities(self.client.clusters.list())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_73512531","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":66},"in_reply_to":"3f79a3b5_290db9e6","updated":"2018-10-24 15:01:18.000000000","message":"Sounds reasonable. Thanks.","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7d0960cc4c1f10bd1846337641b8aaa59799d5f3","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return TROVE_CLUSTER_DATASOURCE"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _get_all_entities(self):"},{"line_number":38,"context_line":"        # TODO(bzurkowski): Add all_tenants option to Trove client"},{"line_number":39,"context_line":"        return self.extract_entities(self.client.clusters.list())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_290db9e6","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":66},"in_reply_to":"3f79a3b5_2fdebd0f","updated":"2018-10-22 15:06:58.000000000","message":"Trove supports multi-tenancy, but there is no option in its client that would allow to list instances or clusters for all tenants. Currently only entities owned by current client user will be displayed.\n\nWe are going to extend Trove by all_tenants option at some point, similarly to Nova [1] or Cinder [2]. Since datasources for these two projects perform snapshots with all_tenants option enabled, I was planning to implement it in the same way for Trove datasource. Is it correct approach?\n\n[1] https://github.com/openstack/vitrage/blob/2d15d80017892f9ce17d6a8bbf3e5edf9de5386f/vitrage/datasources/nova/instance/driver.py#L35\n[2] https://github.com/openstack/vitrage/blob/2d15d80017892f9ce17d6a8bbf3e5edf9de5386f/vitrage/datasources/cinder/volume/driver.py#L42","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"d5e4c8f0f12e38ce6dac50a5729b35da6596de45","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        # TODO(bzurkowski): Add all_tenants option to Trove client"},{"line_number":39,"context_line":"        return self.extract_entities(self.client.clusters.list())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @staticmethod"},{"line_number":42,"context_line":"    def _find_entity(search_entity, entities):"},{"line_number":43,"context_line":"        for entity in entities:"},{"line_number":44,"context_line":"            if entity[TProps.ID] \u003d\u003d search_entity[TProps.ID]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_a7500d61","line":41,"updated":"2018-10-22 18:07:23.000000000","message":"Should be instance method.","commit_id":"c20dd184231e9f33afabbdf2d838dc8db02046f7"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"d5e4c8f0f12e38ce6dac50a5729b35da6596de45","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            if entity[TProps.ID] \u003d\u003d search_entity[TProps.ID]:"},{"line_number":45,"context_line":"                return entity"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _equal_entities(old_entity, new_entity):"},{"line_number":49,"context_line":"        old_state \u003d extract_field_value(old_entity, *TProps.STATE)"},{"line_number":50,"context_line":"        new_state \u003d extract_field_value(old_entity, *TProps.STATE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_c74bc9af","line":47,"updated":"2018-10-22 18:07:23.000000000","message":"Should be instance method.","commit_id":"c20dd184231e9f33afabbdf2d838dc8db02046f7"}],"vitrage/datasources/trove/cluster/transformer.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dd2cc3509dd023f74c3cfc0a0b76165d0dc58aa9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Samsung Electronics"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_effc4572","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2018-10-14 08:06:16.000000000","message":"I would change it to 2018 everywhere :-)","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7d0960cc4c1f10bd1846337641b8aaa59799d5f3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Samsung Electronics"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_89c40d62","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"3f79a3b5_effc4572","updated":"2018-10-22 15:06:58.000000000","message":"Done","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"}],"vitrage/datasources/trove/instance/__init__.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dd2cc3509dd023f74c3cfc0a0b76165d0dc58aa9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               default\u003d30,"},{"line_number":42,"context_line":"               min\u003d10,"},{"line_number":43,"context_line":"               help\u003d\u0027interval in seconds between checking changes in the\u0027"},{"line_number":44,"context_line":"                    \u0027trove configuration files\u0027)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_af65ed4a","line":44,"range":{"start_line":44,"start_character":27,"end_line":44,"end_character":46},"updated":"2018-10-14 08:06:16.000000000","message":"instance datasource","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7d0960cc4c1f10bd1846337641b8aaa59799d5f3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               default\u003d30,"},{"line_number":42,"context_line":"               min\u003d10,"},{"line_number":43,"context_line":"               help\u003d\u0027interval in seconds between checking changes in the\u0027"},{"line_number":44,"context_line":"                    \u0027trove configuration files\u0027)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_89996d7b","line":44,"range":{"start_line":44,"start_character":27,"end_line":44,"end_character":46},"in_reply_to":"3f79a3b5_af65ed4a","updated":"2018-10-22 15:06:58.000000000","message":"Done","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"}],"vitrage/datasources/trove/trove_driver_base.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dd2cc3509dd023f74c3cfc0a0b76165d0dc58aa9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TroveDriverBase, self).__init__()"},{"line_number":28,"context_line":"        self.conf \u003d conf"},{"line_number":29,"context_line":"        self.__client \u003d None"},{"line_number":30,"context_line":"        self.__cached_entities \u003d []"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def client(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_6f16f5a3","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":35},"updated":"2018-10-14 08:06:16.000000000","message":"A general comment regarding the cache and update methods.\n\nIn __init__.py you selected to use UpdateMethod.PULL, which means you should implement get_changes. Does Trove send notifications to the message bus about cluster and instance changes? if so, it might be better to use PUSH update method and reflect the changes in Vitrage immediately. In that case, you don\u0027t need to implement get_changes and you don\u0027t need a cache.\n\nIf you prefer to use PULL update method:\n\nAny datasource that uses PULL update method should implement: \n\n    @staticmethod\n    def should_delete_outdated_entities():\n        return True\n\nThis is needed to support deletion of entities after vitrage-graph restart, where the cache is gone. During Stein release I plan to try and remove all caches from the existing datasources and let the processor class detect deleted entities instead. For now, you still need to use a cache.","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7d0960cc4c1f10bd1846337641b8aaa59799d5f3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TroveDriverBase, self).__init__()"},{"line_number":28,"context_line":"        self.conf \u003d conf"},{"line_number":29,"context_line":"        self.__client \u003d None"},{"line_number":30,"context_line":"        self.__cached_entities \u003d []"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def client(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_89df2dd6","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":35},"in_reply_to":"3f79a3b5_6f16f5a3","updated":"2018-10-22 15:06:58.000000000","message":"You are right. Trove provides notification system that pushes events onto the message bas. Same as you, I find it to be a better option for Vitrage datasource update method.\n\nHowever, current implementation of Trove notifications is not sufficient for integration with Vitrage. Events are very minimalistic and do not contain all required parameters.\n\nChanging Trove logic in this area would consume vast amount of time and probably would require separate blueprint.\n\nAs a first step of integrating Trove with Vitrage I propose the PULL approach. Later we can discuss changing it to PUSH. I am afraid to not have enough time to implement the latter at this point.\n\nDo you aggree for such plan?","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cb0d686588da5277cac1130af48b1345eec1c80d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TroveDriverBase, self).__init__()"},{"line_number":28,"context_line":"        self.conf \u003d conf"},{"line_number":29,"context_line":"        self.__client \u003d None"},{"line_number":30,"context_line":"        self.__cached_entities \u003d []"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def client(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_9323a1bb","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":35},"in_reply_to":"3f79a3b5_89df2dd6","updated":"2018-10-24 15:01:18.000000000","message":"No problem. We often develop our datasources in two stages.","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dd2cc3509dd023f74c3cfc0a0b76165d0dc58aa9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.__cached_entities \u003d actual_entities"},{"line_number":76,"context_line":"        return changed_entities"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @abc.abstractmethod"},{"line_number":79,"context_line":"    def _get_vitrage_type(self):"},{"line_number":80,"context_line":"        pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @abc.abstractmethod"},{"line_number":83,"context_line":"    def _get_all_entities(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ef7f65db","line":80,"range":{"start_line":78,"start_character":0,"end_line":80,"end_character":12},"updated":"2018-10-14 08:06:16.000000000","message":"You can delete it, it is already defined in the base class","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7d0960cc4c1f10bd1846337641b8aaa59799d5f3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.__cached_entities \u003d actual_entities"},{"line_number":76,"context_line":"        return changed_entities"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @abc.abstractmethod"},{"line_number":79,"context_line":"    def _get_vitrage_type(self):"},{"line_number":80,"context_line":"        pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @abc.abstractmethod"},{"line_number":83,"context_line":"    def _get_all_entities(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f408f425","line":80,"range":{"start_line":78,"start_character":0,"end_line":80,"end_character":12},"in_reply_to":"3f79a3b5_ef7f65db","updated":"2018-10-22 15:06:58.000000000","message":"Sorry, but I cannot find similar method in the base class. Note that it is a driver, not transformer. The latter has same method.","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cb0d686588da5277cac1130af48b1345eec1c80d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.__cached_entities \u003d actual_entities"},{"line_number":76,"context_line":"        return changed_entities"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @abc.abstractmethod"},{"line_number":79,"context_line":"    def _get_vitrage_type(self):"},{"line_number":80,"context_line":"        pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @abc.abstractmethod"},{"line_number":83,"context_line":"    def _get_all_entities(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_56009700","line":80,"range":{"start_line":78,"start_character":0,"end_line":80,"end_character":12},"in_reply_to":"3f79a3b5_f408f425","updated":"2018-10-24 15:01:18.000000000","message":"You are right, my mistake.","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"}],"vitrage/tests/functional/datasources/trove/__init__.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"848c2f5ffa10763a8092bddd9fe4369e064d2345","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3f79a3b5_00e4000b","updated":"2018-12-20 12:00:57.000000000","message":"I don\u0027t like the fact that the deleted init file from the static_datasource is identified as a rename to the trove init file... but I don\u0027t see how we can avoid it","commit_id":"149045edbcdaaede210fa01e36e023c9f7b59f4d"}],"vitrage/tests/mocks/mock_driver.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dd2cc3509dd023f74c3cfc0a0b76165d0dc58aa9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"         tg.STATIC_INFO_FKEY: None,"},{"line_number":214,"context_line":"         tg.MAPPING_KEY: mapping,"},{"line_number":215,"context_line":"         tg.EXTERNAL_INFO_KEY: snap_vals,"},{"line_number":216,"context_line":"         tg.NAME_KEY: \u0027Instance (vm) snapshot generator\u0027,"},{"line_number":217,"context_line":"         tg.NUM_EVENTS: snapshot_events"},{"line_number":218,"context_line":"         }"},{"line_number":219,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4f53f93a","line":216,"range":{"start_line":216,"start_character":23,"end_line":216,"end_character":36},"updated":"2018-10-14 08:06:16.000000000","message":"Is it the right name? (with \u0027vm\u0027)","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7d0960cc4c1f10bd1846337641b8aaa59799d5f3","unresolved":false,"context_lines":[{"line_number":213,"context_line":"         tg.STATIC_INFO_FKEY: None,"},{"line_number":214,"context_line":"         tg.MAPPING_KEY: mapping,"},{"line_number":215,"context_line":"         tg.EXTERNAL_INFO_KEY: snap_vals,"},{"line_number":216,"context_line":"         tg.NAME_KEY: \u0027Instance (vm) snapshot generator\u0027,"},{"line_number":217,"context_line":"         tg.NUM_EVENTS: snapshot_events"},{"line_number":218,"context_line":"         }"},{"line_number":219,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_5448c860","line":216,"range":{"start_line":216,"start_character":23,"end_line":216,"end_character":36},"in_reply_to":"3f79a3b5_4f53f93a","updated":"2018-10-22 15:06:58.000000000","message":"Done","commit_id":"922cb9e0a06a27b5ca30a74edb0269ae893baf43"}]}
