)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"3629556db1886b01a657c81c01a04beeb379af1d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-11-16 15:12:34 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Vitrage Persistor Service"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I8690dc2332eccd0b5dd51bcf46a231aab95919ba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ff82abbf_fcca894d","line":8,"updated":"2017-11-20 08:42:25.000000000","message":"What\u0027s the difference from patch: https://review.openstack.org/#/c/521359/.\nMaybe you need to add some detail descriptions about these patches.","commit_id":"944806bc651911d896468af57e8081261a31e312"}],"devstack/settings":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"4f6e90706aa8fc1d875fae4182193e441175e7c8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# machine_learning"},{"line_number":11,"context_line":"enable_service vitrage-ml"},{"line_number":12,"context_line":"# Persistor"},{"line_number":13,"context_line":"enable_service vitrage_persistor"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# Default directories"},{"line_number":16,"context_line":"VITRAGE_DIR\u003d$DEST/vitrage"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"ff82abbf_1821724e","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":32},"updated":"2017-11-20 13:26:48.000000000","message":"vitrage-persistor","commit_id":"944806bc651911d896468af57e8081261a31e312"}],"vitrage/datasources/collector_notifier.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.oslo_notifier \u003d None"},{"line_number":28,"context_line":"        try:"},{"line_number":29,"context_line":"            collector_topic \u003d conf.datasources.notification_topic_collector"},{"line_number":30,"context_line":"            persistor_topic \u003d conf.persistor.persistor_topic"},{"line_number":31,"context_line":"            topics \u003d [collector_topic]"},{"line_number":32,"context_line":"            if conf.persistor.persistor_enabled:"},{"line_number":33,"context_line":"                topics.append(persistor_topic)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_31069588","line":30,"range":{"start_line":30,"start_character":12,"end_line":30,"end_character":60},"updated":"2017-11-13 12:51:17.000000000","message":"I would move this line under the if statement. But it not crucial","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"}],"vitrage/persistor/__init__.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"                    \u0027datasources to the persistor\u0027),"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    cfg.BoolOpt(\u0027persistor_enabled\u0027,"},{"line_number":24,"context_line":"                default\u003dFalse,"},{"line_number":25,"context_line":"                help\u003d\u0027Whether or not persistor is enabled\u0027)"},{"line_number":26,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_91f6698f","line":24,"range":{"start_line":24,"start_character":16,"end_line":24,"end_character":29},"updated":"2017-11-13 12:51:17.000000000","message":"Are we going to change the default to True in the future?","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"}],"vitrage/persistor/service.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.db_connection \u003d db_connection"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def info(self, ctxt, publisher_id, event_type, payload, metadata):"},{"line_number":63,"context_line":"        \"\"\"Endpoint for alarm notifications\"\"\""},{"line_number":64,"context_line":"        LOG.info(\u0027Vitrage Event Info: payload %s\u0027, payload)"},{"line_number":65,"context_line":"        self.process_event(payload)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_312b35ec","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":46},"updated":"2017-11-13 12:51:17.000000000","message":"Is it the right comment?","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ff9ee01d18cf51699593f1d13f4198585ecf1570","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.process_event(payload)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def process_event(self, data):"},{"line_number":71,"context_line":"        \"\"\":param data: Serialized to a JSON formatted ``str`` \"\"\""},{"line_number":72,"context_line":"        if data.get(DSProps.EVENT_TYPE) \u003d\u003d GraphAction.END_MESSAGE:"},{"line_number":73,"context_line":"            # TODO(mnajjar): figure out what todo in end msg"},{"line_number":74,"context_line":"            LOG.info(\u0027end_message is being ignored\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f485f77_d9c37a88","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":66},"updated":"2017-11-16 15:53:19.000000000","message":"Why not write that the data is serialized and then stored to DB?","commit_id":"944806bc651911d896468af57e8081261a31e312"}],"vitrage/storage/impl_sqlalchemy.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"ff9ee01d18cf51699593f1d13f4198585ecf1570","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        engine \u003d self._engine_facade.get_engine()"},{"line_number":63,"context_line":"        engine.connect()"},{"line_number":64,"context_line":"        models.Base.metadata.create_all(engine, checkfirst\u003dFalse)"},{"line_number":65,"context_line":"        # TODO(idan_hefetz) upgrade logic is missing"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def disconnect(self):"},{"line_number":68,"context_line":"        self._engine_facade.get_engine().dispose()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f485f77_19111205","line":65,"range":{"start_line":65,"start_character":15,"end_line":65,"end_character":26},"updated":"2017-11-16 15:53:19.000000000","message":"This change was made by Idan. If it appears here, it might mean that you didn\u0027t rebase the latest change. Please check it.","commit_id":"944806bc651911d896468af57e8081261a31e312"}],"vitrage/storage/sqlalchemy/models.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    payload \u003d Column(\u0027payload\u0027, JSON, nullable\u003dFalse)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ActiveAction(Base, models.TimestampMixin):"},{"line_number":52,"context_line":"    __tablename__ \u003d \u0027active_actions\u0027"},{"line_number":53,"context_line":"    __table_args__ \u003d ("},{"line_number":54,"context_line":"        # Index \u0027ix_active_action\u0027 on fields:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_111959d6","line":51,"range":{"start_line":51,"start_character":23,"end_line":51,"end_character":46},"updated":"2017-11-13 12:51:17.000000000","message":"Why did you change the ActiveAction?","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"}],"vitrage_tempest_tests/tests/database/test_persistor.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class TestEvents(BaseVitrageTempest):"},{"line_number":30,"context_line":"    \"\"\"Test class for Vitrage persisror service\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # noinspection PyPep8Naming"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_d13f41d4","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":16},"updated":"2017-11-13 12:51:17.000000000","message":"Other tests that I would add: \n\n1. push two events, and make sure they are written in the right order (or, make sure that they have the correct timestamps)\n\n2. push the same event twice (theoretically this could happen) with different timestamps, and make sure two separate events are written to the DB","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            nova_utils.delete_all_instances()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def validate_create_instance_events(events_list):"},{"line_number":67,"context_line":"    for n in range(len(events_list)):"},{"line_number":68,"context_line":"        event \u003d events_list[n]"},{"line_number":69,"context_line":"        event_payload \u003d event[\u0027payload\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_9100a936","line":66,"range":{"start_line":66,"start_character":4,"end_line":66,"end_character":35},"updated":"2017-11-13 12:51:17.000000000","message":"1. Any reason why this function is not part of the class?\n\n2. Can you please explain what this function does? the tests checks if there is nova create event, but the functions first looks for neutron port event","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"b26cd9cd4c9077cf1bfa96e3774b6861ee08079c","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def validate_create_instance_events(events_list):"},{"line_number":67,"context_line":"    for n in range(len(events_list)):"},{"line_number":68,"context_line":"        event \u003d events_list[n]"},{"line_number":69,"context_line":"        event_payload \u003d event[\u0027payload\u0027]"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_56e1079a","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":37},"updated":"2017-11-13 12:02:24.000000000","message":"use enumarate","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                if event_payload[DatasourceProperties.ENTITY_TYPE] \u003d\u003d \u0027nova.instance\u0027 and \\"},{"line_number":89,"context_line":"                   event_payload[DatasourceProperties.EVENT_TYPE] \u003d\u003d \u0027compute.instance.create.end\u0027 and \\"},{"line_number":90,"context_line":"                   event_payload[\u0027instance_id\u0027] \u003d\u003d instance_id and event_payload[\u0027hostname\u0027] \u003d\u003d \u0027test-persistor-vm-0\u0027:"},{"line_number":91,"context_line":"                    return True, True"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    return False, False"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_314c559d","line":91,"range":{"start_line":91,"start_character":20,"end_line":91,"end_character":37},"updated":"2017-11-13 12:51:17.000000000","message":"I think that you should check here that all other fields of the events were written properly","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"26d2878cf2684f42e2938abc3c56fa30d3bd932a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   event_payload[\u0027instance_id\u0027] \u003d\u003d instance_id and event_payload[\u0027hostname\u0027] \u003d\u003d \u0027test-persistor-vm-0\u0027:"},{"line_number":91,"context_line":"                    return True, True"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    return False, False"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_917309e8","line":93,"range":{"start_line":93,"start_character":11,"end_line":93,"end_character":23},"updated":"2017-11-13 12:51:17.000000000","message":"What is the meaning of this return value? \nDo you even return True, False?","commit_id":"f0b6cb1bf6a94dab9f32fa1d47e8df4297f8d0e3"}]}
