)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"dc5ba61d17424b891d8f50c1c231a03da70b65d5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* vitrage-persistor has an expirer timer to remove old db events"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Icccf230e69c41a2f115c0797e60df774db637594"},{"line_number":14,"context_line":"implements: blueprint vitrage-fast-failover"},{"line_number":15,"context_line":"Depends-On: I042665e0d642ba36a97af84a6dc0581888025207"},{"line_number":16,"context_line":"Depends-On: Id5dbd165a1e0220e4e24207e8d237f94415fc490"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"5f7c97a3_25eaf5d8","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":43},"updated":"2018-07-24 06:48:07.000000000","message":"Please replace this line with:\n\nStory: 2002663\nTask: 22473","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"}],"setup.cfg":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"08001d46a61fc59eb3c1ee2eb0cec2e80a4af337","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    vitrage-persistor \u003d vitrage.cli.persistor:main"},{"line_number":33,"context_line":"    vitrage-ml \u003d vitrage.cli.machine_learning:main"},{"line_number":34,"context_line":"    vitrage-dbsync \u003d vitrage.cli.storage:dbsync"},{"line_number":35,"context_line":"    vitrage-clear-data \u003d vitrage.cli.storage:clear_data"},{"line_number":36,"context_line":"    vitrage-snmp-parsing \u003d vitrage.cli.snmp_parsing:main"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"vitrage.entity_graph \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":10,"id":"5f7c97a3_15768b93","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":22},"updated":"2018-07-18 08:22:29.000000000","message":"nit: maybe vitgare-purge-data will be more clear command for operators","commit_id":"375b80f25d7c6e8500d59d4aa343c8cbc054a396"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"13956ec3d1c359f37cf78f10664b3ed6ddc15c90","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    vitrage-persistor \u003d vitrage.cli.persistor:main"},{"line_number":33,"context_line":"    vitrage-ml \u003d vitrage.cli.machine_learning:main"},{"line_number":34,"context_line":"    vitrage-dbsync \u003d vitrage.cli.storage:dbsync"},{"line_number":35,"context_line":"    vitrage-clear-data \u003d vitrage.cli.storage:clear_data"},{"line_number":36,"context_line":"    vitrage-snmp-parsing \u003d vitrage.cli.snmp_parsing:main"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"vitrage.entity_graph \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":10,"id":"5f7c97a3_b6af8129","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":22},"in_reply_to":"5f7c97a3_15768b93","updated":"2018-07-19 08:57:39.000000000","message":"Thanks - was looking for a better name :)","commit_id":"375b80f25d7c6e8500d59d4aa343c8cbc054a396"}],"vitrage/common/constants.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    VITRAGE_AGGREGATED_SEVERITY \u003d \u0027vitrage_aggregated_severity\u0027"},{"line_number":28,"context_line":"    VITRAGE_OPERATIONAL_SEVERITY \u003d \u0027vitrage_operational_severity\u0027"},{"line_number":29,"context_line":"    VITRAGE_RESOURCE_ID \u003d \u0027vitrage_resource_id\u0027"},{"line_number":30,"context_line":"    VITRAGE_CACHED_ID \u003d \u0027vitrage_cached_id\u0027"},{"line_number":31,"context_line":"    ID \u003d \u0027id\u0027"},{"line_number":32,"context_line":"    STATE \u003d \u0027state\u0027"},{"line_number":33,"context_line":"    PROJECT_ID \u003d \u0027project_id\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_49364352","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":21},"updated":"2018-07-11 14:00:48.000000000","message":"Make sure to remove this id from the message sent in the webhook and also from the properties list in vitrage-dashboard. Maybe even filter it out in the output of vitrage topology show.","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    VITRAGE_AGGREGATED_SEVERITY \u003d \u0027vitrage_aggregated_severity\u0027"},{"line_number":28,"context_line":"    VITRAGE_OPERATIONAL_SEVERITY \u003d \u0027vitrage_operational_severity\u0027"},{"line_number":29,"context_line":"    VITRAGE_RESOURCE_ID \u003d \u0027vitrage_resource_id\u0027"},{"line_number":30,"context_line":"    VITRAGE_CACHED_ID \u003d \u0027vitrage_cached_id\u0027"},{"line_number":31,"context_line":"    ID \u003d \u0027id\u0027"},{"line_number":32,"context_line":"    STATE \u003d \u0027state\u0027"},{"line_number":33,"context_line":"    PROJECT_ID \u003d \u0027project_id\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_786174d4","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":21},"in_reply_to":"5f7c97a3_49364352","updated":"2018-07-12 11:59:53.000000000","message":"already supported","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"}],"vitrage/entity_graph/graph_init.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        snapshot \u003d self.persist.query_recent_snapshot()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        if snapshot:"},{"line_number":60,"context_line":"            LOG.info(\u0027applying db snapshot (%sKb)\u0027,"},{"line_number":61,"context_line":"                     len(snapshot.graph_snapshot) / 1024)"},{"line_number":62,"context_line":"            NXGraph.read_gpickle(snapshot.graph_snapshot, self.graph)"},{"line_number":63,"context_line":"            self.persist.replay_events(self.graph, snapshot.event_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e9706f0c","line":60,"range":{"start_line":60,"start_character":22,"end_line":60,"end_character":42},"updated":"2018-07-11 14:00:48.000000000","message":"I think a message like \u0027Initializing graph from database snapshot\u0027 would be more clear. It\u0027s info level, so it is expected to be visible to anyone","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        snapshot \u003d self.persist.query_recent_snapshot()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        if snapshot:"},{"line_number":60,"context_line":"            LOG.info(\u0027applying db snapshot (%sKb)\u0027,"},{"line_number":61,"context_line":"                     len(snapshot.graph_snapshot) / 1024)"},{"line_number":62,"context_line":"            NXGraph.read_gpickle(snapshot.graph_snapshot, self.graph)"},{"line_number":63,"context_line":"            self.persist.replay_events(self.graph, snapshot.event_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e55ddd54","line":60,"range":{"start_line":60,"start_character":22,"end_line":60,"end_character":42},"in_reply_to":"5f7c97a3_e9706f0c","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self.persist.replay_events(self.graph, snapshot.event_id)"},{"line_number":64,"context_line":"            self.recreate_transformers_id_cache()"},{"line_number":65,"context_line":"        else:"},{"line_number":66,"context_line":"            LOG.info(\u0027starting for the first time\u0027)"},{"line_number":67,"context_line":"            LOG.info(\u0027clearing database active_actions\u0027)"},{"line_number":68,"context_line":"            self.db.active_actions.delete()"},{"line_number":69,"context_line":"            ds_rpc.get_all("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_49d2c3d1","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":49},"updated":"2018-07-11 14:00:48.000000000","message":"Maybe: Initializing graph without snapshot","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            if not v.get(VProps.VITRAGE_CACHED_ID):"},{"line_number":101,"context_line":"                LOG.warning(\"missing vitrage_cached_id %s\", str(v))"},{"line_number":102,"context_line":"            else:"},{"line_number":103,"context_line":"                TransformerBase.key_to_uuid_cache[v[VProps.VITRAGE_CACHED_ID]]\\"},{"line_number":104,"context_line":"                    \u003d v.vertex_id"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def add_graph_subscriptions(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e97aafb9","line":103,"range":{"start_line":103,"start_character":16,"end_line":103,"end_character":31},"updated":"2018-07-11 14:00:48.000000000","message":"Why is it part of TransformerBase? why not move the cache outside to a separate class? it\u0027s static anyway.","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            if not v.get(VProps.VITRAGE_CACHED_ID):"},{"line_number":101,"context_line":"                LOG.warning(\"missing vitrage_cached_id %s\", str(v))"},{"line_number":102,"context_line":"            else:"},{"line_number":103,"context_line":"                TransformerBase.key_to_uuid_cache[v[VProps.VITRAGE_CACHED_ID]]\\"},{"line_number":104,"context_line":"                    \u003d v.vertex_id"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def add_graph_subscriptions(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_188c007f","line":103,"range":{"start_line":103,"start_character":16,"end_line":103,"end_character":31},"in_reply_to":"5f7c97a3_e97aafb9","updated":"2018-07-12 11:59:53.000000000","message":"You are right, it shouldn\u0027t be in the base class, but I think we\u0027ll do that in a different commit","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        vitrage_notifier \u003d GraphNotifier(self.conf)"},{"line_number":109,"context_line":"        if vitrage_notifier.enabled:"},{"line_number":110,"context_line":"            self.graph.subscribe(vitrage_notifier.notify_when_applicable)"},{"line_number":111,"context_line":"            LOG.info(\u0027vitrage-notifier enabled\u0027)"},{"line_number":112,"context_line":"        # self.processor.start_notifier()"},{"line_number":113,"context_line":"        self.graph.subscribe(PersistNotifier(self.conf).submit_persist_event,"},{"line_number":114,"context_line":"                             finalization\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_295ae750","line":111,"range":{"start_line":111,"start_character":22,"end_line":111,"end_character":38},"updated":"2018-07-11 14:00:48.000000000","message":"vitrage-notifier is a name of another service. The message is a bit confusing. And should it be info level?","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        vitrage_notifier \u003d GraphNotifier(self.conf)"},{"line_number":109,"context_line":"        if vitrage_notifier.enabled:"},{"line_number":110,"context_line":"            self.graph.subscribe(vitrage_notifier.notify_when_applicable)"},{"line_number":111,"context_line":"            LOG.info(\u0027vitrage-notifier enabled\u0027)"},{"line_number":112,"context_line":"        # self.processor.start_notifier()"},{"line_number":113,"context_line":"        self.graph.subscribe(PersistNotifier(self.conf).submit_persist_event,"},{"line_number":114,"context_line":"                             finalization\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_38b77c24","line":111,"range":{"start_line":111,"start_character":22,"end_line":111,"end_character":38},"in_reply_to":"5f7c97a3_295ae750","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        LOG.info(\u0027Init Started\u0027)"},{"line_number":56,"context_line":"        snapshot \u003d self.persist.query_recent_snapshot()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if snapshot:"},{"line_number":59,"context_line":"            LOG.info(\u0027Initializing graph from database snapshot (%sKb)\u0027,"},{"line_number":60,"context_line":"                     len(snapshot.graph_snapshot) / 1024)"},{"line_number":61,"context_line":"            NXGraph.read_gpickle(snapshot.graph_snapshot, self.graph)"},{"line_number":62,"context_line":"            self.persist.replay_events(self.graph, snapshot.event_id)"},{"line_number":63,"context_line":"            self.recreate_transformers_id_cache()"},{"line_number":64,"context_line":"        else:"},{"line_number":65,"context_line":"            LOG.info(\u0027Starting for the first time\u0027)"},{"line_number":66,"context_line":"            LOG.info(\u0027Clearing database active_actions\u0027)"},{"line_number":67,"context_line":"            self.db.active_actions.delete()"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_18c97379","line":64,"range":{"start_line":58,"start_character":8,"end_line":64,"end_character":13},"updated":"2018-07-23 15:37:21.000000000","message":"Please add a comment about this if/else, or split the code to two different creation functions","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    def recreate_transformers_id_cache(self):"},{"line_number":97,"context_line":"        for v in self.graph.get_vertices():"},{"line_number":98,"context_line":"            if not v.get(VProps.VITRAGE_CACHED_ID):"},{"line_number":99,"context_line":"                LOG.warning(\"missing vitrage_cached_id %s\", str(v))"},{"line_number":100,"context_line":"            else:"},{"line_number":101,"context_line":"                TransformerBase.key_to_uuid_cache[v[VProps.VITRAGE_CACHED_ID]]\\"},{"line_number":102,"context_line":"                    \u003d v.vertex_id"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_d8977b46","line":99,"range":{"start_line":99,"start_character":29,"end_line":99,"end_character":57},"updated":"2018-07-23 15:37:21.000000000","message":"I think that a warning should be more clear. Something like: Missing vitrage_cached_id in the vertex. Vertex is not added to the cache","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"}],"vitrage/entity_graph/graph_persistency.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        LOG.info(\u0027Getting events from database\u0027)"},{"line_number":70,"context_line":"        events \u003d self.db.events.get_replay_events("},{"line_number":71,"context_line":"            event_id\u003devent_id)"},{"line_number":72,"context_line":"        LOG.info(\u0027Applying %s database events\u0027, len(events))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        for event in events:"},{"line_number":75,"context_line":"            props \u003d copy.deepcopy(event.payload)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_38746f37","line":72,"range":{"start_line":72,"start_character":18,"end_line":72,"end_character":45},"updated":"2018-07-23 15:37:21.000000000","message":"How about putting the %s at the end? I believe it will be a long string","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if curr and not before:"},{"line_number":120,"context_line":"            return True"},{"line_number":121,"context_line":"        for key, content in curr.properties.items():"},{"line_number":122,"context_line":"            if key in args:"},{"line_number":123,"context_line":"                continue"},{"line_number":124,"context_line":"            elif isinstance(content, dict) or isinstance(content, list):"},{"line_number":125,"context_line":"                return True  # TODO(ihefetz): can be imporved"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_d8a53ba2","line":122,"range":{"start_line":122,"start_character":12,"end_line":122,"end_character":26},"updated":"2018-07-23 15:37:21.000000000","message":"Why? please explain what args mean","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"}],"vitrage/entity_graph/processor/notifier.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                LOG.exception(\u0027Cannot notify - %s.\u0027, notification_type)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class PersistNotifier(object):"},{"line_number":105,"context_line":"    def __init__(self, conf):"},{"line_number":106,"context_line":"        self.oslo_notifier \u003d None"},{"line_number":107,"context_line":"        self.enabled \u003d conf.persistency.enable_persistency"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_491c037b","line":104,"range":{"start_line":104,"start_character":6,"end_line":104,"end_character":21},"updated":"2018-07-11 14:00:48.000000000","message":"PersistorNotifier?","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                LOG.exception(\u0027Cannot notify - %s.\u0027, notification_type)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class PersistNotifier(object):"},{"line_number":105,"context_line":"    def __init__(self, conf):"},{"line_number":106,"context_line":"        self.oslo_notifier \u003d None"},{"line_number":107,"context_line":"        self.enabled \u003d conf.persistency.enable_persistency"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_b8838c03","line":104,"range":{"start_line":104,"start_character":6,"end_line":104,"end_character":21},"in_reply_to":"5f7c97a3_491c037b","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.enabled \u003d conf.persistency.enable_persistency"},{"line_number":108,"context_line":"        topics \u003d [conf.persistency.persistor_topic]"},{"line_number":109,"context_line":"        if not topics or not self.enabled:"},{"line_number":110,"context_line":"            LOG.info(\u0027Persist Notifier is disabled\u0027)"},{"line_number":111,"context_line":"            return"},{"line_number":112,"context_line":"        self.oslo_notifier \u003d oslo_messaging.Notifier("},{"line_number":113,"context_line":"            get_transport(conf),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e9286f99","line":110,"range":{"start_line":110,"start_character":22,"end_line":110,"end_character":38},"updated":"2018-07-11 14:00:48.000000000","message":"Persistency is disabled.","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.enabled \u003d conf.persistency.enable_persistency"},{"line_number":108,"context_line":"        topics \u003d [conf.persistency.persistor_topic]"},{"line_number":109,"context_line":"        if not topics or not self.enabled:"},{"line_number":110,"context_line":"            LOG.info(\u0027Persist Notifier is disabled\u0027)"},{"line_number":111,"context_line":"            return"},{"line_number":112,"context_line":"        self.oslo_notifier \u003d oslo_messaging.Notifier("},{"line_number":113,"context_line":"            get_transport(conf),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_f8890425","line":110,"range":{"start_line":110,"start_character":22,"end_line":110,"end_character":38},"in_reply_to":"5f7c97a3_e9286f99","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            return"},{"line_number":131,"context_line":"        if is_vertex:"},{"line_number":132,"context_line":"            curr \u003d current.properties.copy()"},{"line_number":133,"context_line":"            curr[\u0027vertex_id\u0027] \u003d current.vertex_id"},{"line_number":134,"context_line":"            notification_types \u003d [\u0027graph.vertex\u0027]"},{"line_number":135,"context_line":"        else:"},{"line_number":136,"context_line":"            curr \u003d current.properties.copy()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_690e9f3e","line":133,"range":{"start_line":133,"start_character":17,"end_line":133,"end_character":28},"updated":"2018-07-11 14:00:48.000000000","message":"Don\u0027t we have constants for it? (same for source_id, target_id, etc.)","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    notification_type,"},{"line_number":147,"context_line":"                    curr)"},{"line_number":148,"context_line":"            except Exception as e:"},{"line_number":149,"context_line":"                LOG.exception(\u0027Cannot notify - %s - %s\u0027, notification_type, e)"},{"line_number":150,"context_line":"        return curr, notification_types"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_2c0d1536","line":149,"range":{"start_line":149,"start_character":74,"end_line":149,"end_character":77},"updated":"2018-07-11 14:00:48.000000000","message":"No need to pass the exception as a parameter, it is logged anyway","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    notification_type,"},{"line_number":147,"context_line":"                    curr)"},{"line_number":148,"context_line":"            except Exception as e:"},{"line_number":149,"context_line":"                LOG.exception(\u0027Cannot notify - %s - %s\u0027, notification_type, e)"},{"line_number":150,"context_line":"        return curr, notification_types"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_f805847a","line":149,"range":{"start_line":149,"start_character":74,"end_line":149,"end_character":77},"in_reply_to":"5f7c97a3_2c0d1536","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c558c59b1fd5e999f2d482a722fb8022b12f5927","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    {},"},{"line_number":147,"context_line":"                    notification_type,"},{"line_number":148,"context_line":"                    curr)"},{"line_number":149,"context_line":"            except Exception:"},{"line_number":150,"context_line":"                LOG.exception(\u0027Cannot notify - %s\u0027, notification_type)"},{"line_number":151,"context_line":"        return curr, notification_types"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_1ec7d63f","line":149,"updated":"2018-07-14 19:21:51.000000000","message":"Can we catch less general exception here?","commit_id":"bf27b8a39a2a090345890320da61cf50394e6825"}],"vitrage/entity_graph/processor/processor.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        if entity.action in \\"},{"line_number":61,"context_line":"            [GraphAction.DELETE_ENTITY, GraphAction.REMOVE_DELETED_ENTITY]\\"},{"line_number":62,"context_line":"                and not entity.vertex:"},{"line_number":63,"context_line":"            LOG.warning(\"- - ???WTF??? - - - %s\", str(event))  # REMOVE THIS"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self._calculate_vitrage_aggregated_values(entity.vertex, entity.action)"},{"line_number":66,"context_line":"        self.actions[entity.action](entity.vertex, entity.neighbors)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_58ab6b70","line":63,"range":{"start_line":63,"start_character":12,"end_line":63,"end_character":76},"updated":"2018-07-23 15:37:21.000000000","message":"Don\u0027t forget to remove this ;-)","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"}],"vitrage/entity_graph/workers.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Supported message types"},{"line_number":44,"context_line":"GRAPH_UPDATE \u003d \u0027graph_update\u0027"},{"line_number":45,"context_line":"ENABLE_EVALUATOR \u003d \u0027enable_evaluation\u0027"},{"line_number":46,"context_line":"START_EVALUATION \u003d \u0027start_evaluation\u0027"},{"line_number":47,"context_line":"RELOAD_TEMPLATES \u003d \u0027reload_templates\u0027"},{"line_number":48,"context_line":"TEMPLATE_ACTION \u003d \u0027template_action\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_ec2f1d87","line":45,"range":{"start_line":45,"start_character":7,"end_line":45,"end_character":16},"updated":"2018-07-11 14:00:48.000000000","message":"EVALUATION","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Supported message types"},{"line_number":44,"context_line":"GRAPH_UPDATE \u003d \u0027graph_update\u0027"},{"line_number":45,"context_line":"ENABLE_EVALUATOR \u003d \u0027enable_evaluation\u0027"},{"line_number":46,"context_line":"START_EVALUATION \u003d \u0027start_evaluation\u0027"},{"line_number":47,"context_line":"RELOAD_TEMPLATES \u003d \u0027reload_templates\u0027"},{"line_number":48,"context_line":"TEMPLATE_ACTION \u003d \u0027template_action\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_d873e81b","line":45,"range":{"start_line":45,"start_character":7,"end_line":45,"end_character":16},"in_reply_to":"5f7c97a3_ec2f1d87","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"}],"vitrage/graph/driver/graph.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \"\"\"Subscribe to graph changes"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        :param function: function will be called after each graph change"},{"line_number":56,"context_line":"        :param finalization: function will be called after all non finalization"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        self.notifier.subscribe(function, finalization)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_8c56a905","line":56,"range":{"start_line":56,"start_character":59,"end_line":56,"end_character":79},"updated":"2018-07-11 14:00:48.000000000","message":"What does it mean?","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \"\"\"Subscribe to graph changes"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        :param function: function will be called after each graph change"},{"line_number":56,"context_line":"        :param finalization: function will be called after all non finalization"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        self.notifier.subscribe(function, finalization)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_182173fe","line":56,"range":{"start_line":56,"start_character":63,"end_line":56,"end_character":79},"updated":"2018-07-23 15:37:21.000000000","message":"not clear what it is","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0a9dd48705e11037efc8d1ccb2c1dcba87af615f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        graph.subscribe(foo2, finalization\u003dFalse)"},{"line_number":62,"context_line":"        graph.subscribe(foo3, finalization\u003dFalse)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        The order of the calls in this example wii be:"},{"line_number":65,"context_line":"        1. foo2"},{"line_number":66,"context_line":"        2. foo3"},{"line_number":67,"context_line":"        3. foo1"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_8afc2db7","line":64,"range":{"start_line":64,"start_character":47,"end_line":64,"end_character":50},"updated":"2018-07-24 12:35:01.000000000","message":"will","commit_id":"fb4088c32c54979f9be2b8efa83f3140458a3982"}],"vitrage/graph/driver/notifier.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self._subscriptions \u003d []"},{"line_number":38,"context_line":"        self._finalization_subscriptions \u003d []"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def subscribe(self, function, finalization\u003dFalse):"},{"line_number":41,"context_line":"        if finalization:"},{"line_number":42,"context_line":"            self._finalization_subscriptions.append(function)"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            self._subscriptions.append(function)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def is_subscribed(self):"},{"line_number":47,"context_line":"        size \u003d len(self._subscriptions) + len(self._finalization_subscriptions)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_8ca46909","line":44,"range":{"start_line":40,"start_character":0,"end_line":44,"end_character":48},"updated":"2018-07-11 14:00:48.000000000","message":"You could split it to two different methods: subscribe() and subscribe_finalization().\nAnd BTW, why do you need two separate lists?","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self._subscriptions \u003d []"},{"line_number":38,"context_line":"        self._finalization_subscriptions \u003d []"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def subscribe(self, function, finalization\u003dFalse):"},{"line_number":41,"context_line":"        if finalization:"},{"line_number":42,"context_line":"            self._finalization_subscriptions.append(function)"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            self._subscriptions.append(function)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def is_subscribed(self):"},{"line_number":47,"context_line":"        size \u003d len(self._subscriptions) + len(self._finalization_subscriptions)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_b8771f08","line":44,"range":{"start_line":40,"start_character":4,"end_line":44,"end_character":48},"updated":"2018-07-23 15:37:21.000000000","message":"Alternatively, you could have two separate subscribe methods","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"}],"vitrage/persistency/__init__.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c558c59b1fd5e999f2d482a722fb8022b12f5927","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Periodically store entity graph snapshot to database\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_persistency_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d3600,"},{"line_number":27,"context_line":"               help\u003d\u0027Store graph to database every X seconds\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_bed582e8","side":"PARENT","line":25,"updated":"2018-07-14 19:21:51.000000000","message":"Please, mark it as deprecated via deprecated_for_removal\u003dTrue flag","commit_id":"d5c742f4602ae95b85363edbb3f6276466a4343c"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"13956ec3d1c359f37cf78f10664b3ed6ddc15c90","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Periodically store entity graph snapshot to database\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_persistency_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d3600,"},{"line_number":27,"context_line":"               help\u003d\u0027Store graph to database every X seconds\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_5632ad10","side":"PARENT","line":25,"in_reply_to":"5f7c97a3_bed582e8","updated":"2018-07-19 08:57:39.000000000","message":"Deprecated suggests it actually does something.\nBut, it was never supported, and still is not supported.","commit_id":"d5c742f4602ae95b85363edbb3f6276466a4343c"}],"vitrage/persistency/persist.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                graph_snapshot\u003dgraph_snapshot))"},{"line_number":50,"context_line":"            LOG.info(\u0027Persisting graph - done\u0027)"},{"line_number":51,"context_line":"        except Exception as e:"},{"line_number":52,"context_line":"            LOG.exception(\"Graph is not stored: %s\", e)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def query_recent_snapshot(self):"},{"line_number":55,"context_line":"        if not self.conf.persistency.enable_persistency:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_8cf22905","line":52,"range":{"start_line":52,"start_character":53,"end_line":52,"end_character":54},"updated":"2018-07-11 14:00:48.000000000","message":"No need to pass the exception","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                graph_snapshot\u003dgraph_snapshot))"},{"line_number":50,"context_line":"            LOG.info(\u0027Persisting graph - done\u0027)"},{"line_number":51,"context_line":"        except Exception as e:"},{"line_number":52,"context_line":"            LOG.exception(\"Graph is not stored: %s\", e)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def query_recent_snapshot(self):"},{"line_number":55,"context_line":"        if not self.conf.persistency.enable_persistency:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_38ebfca4","line":52,"range":{"start_line":52,"start_character":53,"end_line":52,"end_character":54},"in_reply_to":"5f7c97a3_8cf22905","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return self.db.graph_snapshots.query(timestamp\u003dt)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def replay_events(self, graph, event_id):"},{"line_number":62,"context_line":"        LOG.info(\u0027getting db events\u0027)"},{"line_number":63,"context_line":"        events \u003d self.db.events.get_replay_events("},{"line_number":64,"context_line":"            event_id\u003devent_id)"},{"line_number":65,"context_line":"        LOG.info(\u0027applying %s db events\u0027, len(events))"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_6cc6ad9f","line":62,"range":{"start_line":62,"start_character":18,"end_line":62,"end_character":35},"updated":"2018-07-11 14:00:48.000000000","message":"Getting events from database (same below)","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"3cea68d171c9f9e8b2fcfac5a98204818ab2784b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return self.db.graph_snapshots.query(timestamp\u003dt)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def replay_events(self, graph, event_id):"},{"line_number":62,"context_line":"        LOG.info(\u0027getting db events\u0027)"},{"line_number":63,"context_line":"        events \u003d self.db.events.get_replay_events("},{"line_number":64,"context_line":"            event_id\u003devent_id)"},{"line_number":65,"context_line":"        LOG.info(\u0027applying %s db events\u0027, len(events))"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_78365452","line":62,"range":{"start_line":62,"start_character":18,"end_line":62,"end_character":35},"in_reply_to":"5f7c97a3_6cc6ad9f","updated":"2018-07-12 11:59:53.000000000","message":"Done","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        for event in events:"},{"line_number":68,"context_line":"            props \u003d copy.deepcopy(event.payload)"},{"line_number":69,"context_line":"            if event.is_vertex:"},{"line_number":70,"context_line":"                del props[\u0027vertex_id\u0027]"},{"line_number":71,"context_line":"                v \u003d Vertex(event.payload[\u0027vertex_id\u0027], props)"},{"line_number":72,"context_line":"                graph.update_vertex(v)"},{"line_number":73,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_0cb7f923","line":70,"range":{"start_line":70,"start_character":26,"end_line":70,"end_character":37},"updated":"2018-07-11 14:00:48.000000000","message":"Please use a constant","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"}],"vitrage/persistency/service.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"69faf2c5b027aa2a2c93cf701cf19e53146b9fa6","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def info(self, ctxt, publisher_id, event_type, payload, metadata):"},{"line_number":74,"context_line":"        LOG.debug(\u0027Vitrage Event Info: payload %s\u0027, payload)"},{"line_number":75,"context_line":"        LOG.info(\u0027got \u0027 + event_type)"},{"line_number":76,"context_line":"        self.funcs[event_type](self.db_connection, event_type, payload)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_4c6bb185","line":75,"range":{"start_line":75,"start_character":8,"end_line":75,"end_character":37},"updated":"2018-07-11 14:00:48.000000000","message":"Do we need it in info? there might be many events","commit_id":"28ec72cbdde69e1b30543c20056237e77e585ea2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c558c59b1fd5e999f2d482a722fb8022b12f5927","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from __future__ import print_function"},{"line_number":16,"context_line":"from concurrent.futures import ThreadPoolExecutor"},{"line_number":17,"context_line":"import cotyledon"},{"line_number":18,"context_line":"from futurist import periodics"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"import oslo_messaging as oslo_m"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_ded07ef7","line":18,"range":{"start_line":16,"start_character":1,"end_line":18,"end_character":30},"updated":"2018-07-14 19:21:51.000000000","message":"This imports should be placed in the same block as oslo_*","commit_id":"bf27b8a39a2a090345890320da61cf50394e6825"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c558c59b1fd5e999f2d482a722fb8022b12f5927","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            try:"},{"line_number":103,"context_line":"                event_id \u003d self.db.graph_snapshots.query_snapshot_event_id()"},{"line_number":104,"context_line":"                if event_id:"},{"line_number":105,"context_line":"                    LOG.debug(\u0027expirer running with event_id %s\u0027, event_id)"},{"line_number":106,"context_line":"                    self.db.events.delete(event_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_1ef03692","line":105,"updated":"2018-07-14 19:21:51.000000000","message":"Please, start all log messages with an upper-case letter","commit_id":"bf27b8a39a2a090345890320da61cf50394e6825"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c558c59b1fd5e999f2d482a722fb8022b12f5927","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                    LOG.debug(\u0027expirer running with event_id %s\u0027, event_id)"},{"line_number":106,"context_line":"                    self.db.events.delete(event_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            except Exception:"},{"line_number":109,"context_line":"                LOG.exception(\u0027expirer_periodic failed.\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self.periodic.add(expirer_periodic)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_7e012a6d","line":108,"updated":"2018-07-14 19:21:51.000000000","message":"Can we handle less general exception here?","commit_id":"bf27b8a39a2a090345890320da61cf50394e6825"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    self.db.events.delete(event_id)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            except Exception:"},{"line_number":99,"context_line":"                LOG.exception(\u0027expirer_periodic failed.\u0027)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.periodic.add(expirer_periodic)"},{"line_number":102,"context_line":"        LOG.info(\"added expirer_periodic (spacing\u003d%s)\", spacing)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_384c6fc8","line":99,"range":{"start_line":99,"start_character":31,"end_line":99,"end_character":54},"updated":"2018-07-23 15:37:21.000000000","message":"Please write a nicer exception message","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cf8031cf36ee64e1c336e0b79d87fdf815fe7e46","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                LOG.exception(\u0027expirer_periodic failed.\u0027)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.periodic.add(expirer_periodic)"},{"line_number":102,"context_line":"        LOG.info(\"added expirer_periodic (spacing\u003d%s)\", spacing)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_98c023fc","line":102,"range":{"start_line":102,"start_character":18,"end_line":102,"end_character":40},"updated":"2018-07-23 15:37:21.000000000","message":"Please write a more clear info message","commit_id":"3b54ed6858cec46cded6997ee6e9672ed56222d9"}]}
