)]}'
{"releasenotes/notes/persist-error-message-fb69ddf885bcde84.yaml":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8b0d715114616116232373e51b26f15190e4d6d1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Errors that occur in Trove are now persisted in"},{"line_number":4,"context_line":"    the database and are returned in the standard"},{"line_number":5,"context_line":"    \u0027show\u0027 command."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bab6814e_ab3df7bc","line":5,"range":{"start_line":3,"start_character":0,"end_line":5,"end_character":19},"updated":"2016-05-19 19:54:37.000000000","message":"for admin users. The persistence in the database is irrelevant to users reading release notes (I think).","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"}],"trove/cmd/api.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8b0d715114616116232373e51b26f15190e4d6d1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    from trove.common import notification"},{"line_number":24,"context_line":"    from trove.common import wsgi"},{"line_number":25,"context_line":"    from trove.instance import models as inst_models"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    notification.DBaaSAPINotification.register_notify_callback("},{"line_number":28,"context_line":"        inst_models.persist_instance_fault)"},{"line_number":29,"context_line":"    cfg.set_api_config_defaults()"},{"line_number":30,"context_line":"    profile.setup_profiler(\u0027api\u0027, CONF.host)"},{"line_number":31,"context_line":"    conf_file \u003d CONF.find_file(CONF.api_paste_config)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_ebb53f31","line":28,"range":{"start_line":26,"start_character":0,"end_line":28,"end_character":43},"updated":"2016-05-19 19:54:37.000000000","message":"why?","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4bde5bf9a4079c8e766e67318b406f8b7d2e4885","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    from trove.common import notification"},{"line_number":24,"context_line":"    from trove.common import wsgi"},{"line_number":25,"context_line":"    from trove.instance import models as inst_models"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    notification.DBaaSAPINotification.register_notify_callback("},{"line_number":28,"context_line":"        inst_models.persist_instance_fault)"},{"line_number":29,"context_line":"    cfg.set_api_config_defaults()"},{"line_number":30,"context_line":"    profile.setup_profiler(\u0027api\u0027, CONF.host)"},{"line_number":31,"context_line":"    conf_file \u003d CONF.find_file(CONF.api_paste_config)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_2306441d","line":28,"range":{"start_line":26,"start_character":0,"end_line":28,"end_character":43},"in_reply_to":"bab6814e_ebb53f31","updated":"2016-05-19 23:02:05.000000000","message":"This is for completeness - if an API process ever sent out an error notification it would be missed otherwise. (I\u0027m assuming that there aren\u0027t any at the moment since I can\u0027t think of any, but I might be wrong).","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"}],"trove/cmd/taskmanager.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8b0d715114616116232373e51b26f15190e4d6d1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    from trove.common.rpc import service as rpc_service"},{"line_number":27,"context_line":"    from trove.common.rpc import version as rpc_version"},{"line_number":28,"context_line":"    from trove.instance import models as inst_models"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    notification.DBaaSAPINotification.register_notify_callback("},{"line_number":31,"context_line":"        inst_models.persist_instance_fault)"},{"line_number":32,"context_line":"    server \u003d rpc_service.RpcService("},{"line_number":33,"context_line":"        manager\u003dconf.taskmanager_manager, topic\u003dtopic,"},{"line_number":34,"context_line":"        rpc_api_version\u003drpc_version.RPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_ab92179d","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":43},"updated":"2016-05-19 19:54:37.000000000","message":"why?","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4bde5bf9a4079c8e766e67318b406f8b7d2e4885","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    from trove.common.rpc import service as rpc_service"},{"line_number":27,"context_line":"    from trove.common.rpc import version as rpc_version"},{"line_number":28,"context_line":"    from trove.instance import models as inst_models"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    notification.DBaaSAPINotification.register_notify_callback("},{"line_number":31,"context_line":"        inst_models.persist_instance_fault)"},{"line_number":32,"context_line":"    server \u003d rpc_service.RpcService("},{"line_number":33,"context_line":"        manager\u003dconf.taskmanager_manager, topic\u003dtopic,"},{"line_number":34,"context_line":"        rpc_api_version\u003drpc_version.RPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_630ccc3b","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":43},"in_reply_to":"bab6814e_ab92179d","updated":"2016-05-19 23:02:05.000000000","message":"Error notifications can definitely be sent out by the taskmanager.","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"}],"trove/common/utils.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"a5300cd0afdcc74d5b978c32282b9ef95a6eef21","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        if len(line) \u003e format_len:"},{"line_number":349,"context_line":"            ok_to_split_again \u003d False"},{"line_number":350,"context_line":"            for count in range(0, len(replacements)):"},{"line_number":351,"context_line":"                lines \u003d line.replace("},{"line_number":352,"context_line":"                    replacements[replace_index][0],"},{"line_number":353,"context_line":"                    replacements[replace_index][1],"},{"line_number":354,"context_line":"                    1"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_4cc3348b","line":351,"range":{"start_line":351,"start_character":16,"end_line":351,"end_character":21},"updated":"2016-06-27 14:56:54.000000000","message":"Jinxing - \u0027lines\u0027 is defined here, and no, it\u0027s not global.","commit_id":"08ec7d01de317edc65e45da2510eaac6ee0bade3"},{"author":{"_account_id":18777,"name":"Jinxing Fang","email":"fang.jinxing@99cloud.net","username":"jinxingfang"},"change_message_id":"eb5a91bc29fbd27c47e9b2eb76d14c8627d64a74","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                if len(lines) \u003e 1:"},{"line_number":358,"context_line":"                    ok_to_split_again \u003d True"},{"line_number":359,"context_line":"                    break"},{"line_number":360,"context_line":"            for item in lines:"},{"line_number":361,"context_line":"                # If we spilt, but a line is still too long, do it again"},{"line_number":362,"context_line":"                if ok_to_split_again and len(item) \u003e format_len:"},{"line_number":363,"context_line":"                    item \u003d format_output(item, format_len\u003dformat_len,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_98ec56bc","line":360,"range":{"start_line":360,"start_character":24,"end_line":360,"end_character":29},"updated":"2016-06-27 01:38:37.000000000","message":"Is \u0027lines\u0027  a global parameter? it seems out of action scope.","commit_id":"08ec7d01de317edc65e45da2510eaac6ee0bade3"}],"trove/conductor/manager.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8b0d715114616116232373e51b26f15190e4d6d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"bab6814e_2b62a7ad","updated":"2016-05-19 19:54:37.000000000","message":"is this change somehow required as part of this review?","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4bde5bf9a4079c8e766e67318b406f8b7d2e4885","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"bab6814e_034a2055","in_reply_to":"bab6814e_2b62a7ad","updated":"2016-05-19 23:02:05.000000000","message":"I noticed that exception in notify_exc_info was shadowing the import, so I fixed it (and t_models didn\u0027t make sense).  Let me know if you think these changes out of scope and warrants their own changeset.","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"}],"trove/db/sqlalchemy/migrate_repo/versions/038_instance_faults.py":[{"author":{"_account_id":8932,"name":"Telles Mota Vidal Nóbrega","email":"tellesnobrega@gmail.com","username":"tellesnobrega"},"change_message_id":"99207d5673f91b7c8078744256edf7a6445ec296","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def downgrade(migrate_engine):"},{"line_number":55,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":56,"context_line":"    drop_tables([instance_faults])"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_c4bc6508","line":56,"updated":"2016-05-21 04:29:06.000000000","message":"We shouldn\u0027t be using downgrades anymore. In fact we should remove the ones we have, but a good start would be not to add new ones.","commit_id":"9a6cb50095e43b36d27df0c3d803b08ffb4f9c41"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"b8c6a84bb66958a441136367df3f2679acf67d15","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def downgrade(migrate_engine):"},{"line_number":55,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":56,"context_line":"    drop_tables([instance_faults])"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_6cd91b57","line":56,"in_reply_to":"bab6814e_c4bc6508","updated":"2016-05-21 19:31:01.000000000","message":"We still have tests that check to make sure they exist.  It would be out of scope to remove that here, but I agree, it should be done.","commit_id":"9a6cb50095e43b36d27df0c3d803b08ffb4f9c41"}],"trove/instance/models.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8b0d715114616116232373e51b26f15190e4d6d1","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    @property"},{"line_number":376,"context_line":"    def fault(self):"},{"line_number":377,"context_line":"        # Fault can be non-existent, so we have a loaded flag"},{"line_number":378,"context_line":"        if not self._fault_loaded:"},{"line_number":379,"context_line":"            try:"},{"line_number":380,"context_line":"                self._fault \u003d DBInstanceFault.find_by(instance_id\u003dself.id)"},{"line_number":381,"context_line":"                # Get rid of the stack trace if we\u0027re not admin"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_5d5c0eed","line":378,"updated":"2016-05-19 19:54:37.000000000","message":"hmm ...\n\nI\u0027m not sure whether this can happen or not but I\u0027ll let you figure that out.\n\nSuppose the fault is loaded (by an admin) and a subsequent non-admin command is run, doesn\u0027t this run the risk of exposing the details?","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4bde5bf9a4079c8e766e67318b406f8b7d2e4885","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    @property"},{"line_number":376,"context_line":"    def fault(self):"},{"line_number":377,"context_line":"        # Fault can be non-existent, so we have a loaded flag"},{"line_number":378,"context_line":"        if not self._fault_loaded:"},{"line_number":379,"context_line":"            try:"},{"line_number":380,"context_line":"                self._fault \u003d DBInstanceFault.find_by(instance_id\u003dself.id)"},{"line_number":381,"context_line":"                # Get rid of the stack trace if we\u0027re not admin"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_a3aeb4e3","line":378,"in_reply_to":"bab6814e_5d5c0eed","updated":"2016-05-19 23:02:05.000000000","message":"I\u0027ve tested this using admin then non-admin in quick succession and it always returns the right thing. It should only be cached if the same request accesses it.","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8b0d715114616116232373e51b26f15190e4d6d1","unresolved":false,"context_lines":[{"line_number":1376,"context_line":"                msg \u003d msg[:252] + \u0027...\u0027"},{"line_number":1377,"context_line":"            det \u003d \"\".join(details).replace(\u0027. \u0027, \u0027.\\n\u0027)"},{"line_number":1378,"context_line":"            try:"},{"line_number":1379,"context_line":"                fault \u003d DBInstanceFault.find_by(instance_id\u003dinstance_id)"},{"line_number":1380,"context_line":"                fault.set_info(msg, det)"},{"line_number":1381,"context_line":"                fault.save()"},{"line_number":1382,"context_line":"            except exception.ModelNotFoundError:"},{"line_number":1383,"context_line":"                DBInstanceFault.create("},{"line_number":1384,"context_line":"                    instance_id\u003dinstance_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_fd1ea261","line":1381,"range":{"start_line":1379,"start_character":1,"end_line":1381,"end_character":28},"updated":"2016-05-19 19:54:37.000000000","message":"so the consequence of this is that the created timestamp is always the time when the first fault is created, and you keep updating it.\n\non the other hand, I think you should do something like:\n\n            fault.deleted \u003d True\n\n            fault.deleted_at \u003d datetime.utcnow()\n\n            fault.save()\n\n            DBInstanceFault.create(\n                    instance_id\u003dinstance_id,\n                    message\u003dmsg, details\u003ddet)\n\nI would even go as far as saying that you should add a field called seq (sequence) to the fault table and create the new fault record with:\n\n            DBInstanceFault.create(\n                    instance_id\u003dinstance_id,\n                    message\u003dmsg, details\u003ddet,\n                    sequence\u003dfault.sequence+1)","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4bde5bf9a4079c8e766e67318b406f8b7d2e4885","unresolved":false,"context_lines":[{"line_number":1376,"context_line":"                msg \u003d msg[:252] + \u0027...\u0027"},{"line_number":1377,"context_line":"            det \u003d \"\".join(details).replace(\u0027. \u0027, \u0027.\\n\u0027)"},{"line_number":1378,"context_line":"            try:"},{"line_number":1379,"context_line":"                fault \u003d DBInstanceFault.find_by(instance_id\u003dinstance_id)"},{"line_number":1380,"context_line":"                fault.set_info(msg, det)"},{"line_number":1381,"context_line":"                fault.save()"},{"line_number":1382,"context_line":"            except exception.ModelNotFoundError:"},{"line_number":1383,"context_line":"                DBInstanceFault.create("},{"line_number":1384,"context_line":"                    instance_id\u003dinstance_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_038fc075","line":1381,"range":{"start_line":1379,"start_character":1,"end_line":1381,"end_character":28},"in_reply_to":"bab6814e_fd1ea261","updated":"2016-05-19 23:02:05.000000000","message":"That would add new records in the db that wouldn\u0027t be accessible.  Unless we want to add a \u0027trove instance-fault\u0027 command to see them all (might be overkill).","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8b0d715114616116232373e51b26f15190e4d6d1","unresolved":false,"context_lines":[{"line_number":1396,"context_line":"        super(DBInstanceFault, self).__init__(**kwargs)"},{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":"    def set_info(self, message, details):"},{"line_number":1399,"context_line":"        self.message \u003d message"},{"line_number":1400,"context_line":"        self.details \u003d details"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"class InstanceServiceStatus(dbmodels.DatabaseModelBase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_bd97fa8e","line":1400,"range":{"start_line":1399,"start_character":0,"end_line":1400,"end_character":30},"updated":"2016-05-19 19:54:37.000000000","message":"and do the right thing(s) here to deal with sequence","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4bde5bf9a4079c8e766e67318b406f8b7d2e4885","unresolved":false,"context_lines":[{"line_number":1396,"context_line":"        super(DBInstanceFault, self).__init__(**kwargs)"},{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":"    def set_info(self, message, details):"},{"line_number":1399,"context_line":"        self.message \u003d message"},{"line_number":1400,"context_line":"        self.details \u003d details"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"class InstanceServiceStatus(dbmodels.DatabaseModelBase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_23f004fe","line":1400,"range":{"start_line":1399,"start_character":0,"end_line":1400,"end_character":30},"in_reply_to":"bab6814e_bd97fa8e","updated":"2016-05-19 23:02:05.000000000","message":"see above","commit_id":"c56473e97664adc66b5189a1d849b125972ce32f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"b8c6a84bb66958a441136367df3f2679acf67d15","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            try:"},{"line_number":380,"context_line":"                self._fault \u003d DBInstanceFault.find_by(instance_id\u003dself.id)"},{"line_number":381,"context_line":"                # Get rid of the stack trace if we\u0027re not admin"},{"line_number":382,"context_line":"                if not self.context.is_admin:"},{"line_number":383,"context_line":"                    self._fault.details \u003d None"},{"line_number":384,"context_line":"            except exception.ModelNotFoundError:"},{"line_number":385,"context_line":"                pass"},{"line_number":386,"context_line":"            self._fault_loaded \u003d True"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_acdf8338","line":383,"range":{"start_line":382,"start_character":0,"end_line":383,"end_character":46},"updated":"2016-05-21 19:31:01.000000000","message":"Telles, here\u0027s the code that removes the stack trace for non-admin","commit_id":"9a6cb50095e43b36d27df0c3d803b08ffb4f9c41"},{"author":{"_account_id":8932,"name":"Telles Mota Vidal Nóbrega","email":"tellesnobrega@gmail.com","username":"tellesnobrega"},"change_message_id":"cd74a682f7c32224954de55e74e6656d00362095","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            try:"},{"line_number":380,"context_line":"                self._fault \u003d DBInstanceFault.find_by(instance_id\u003dself.id)"},{"line_number":381,"context_line":"                # Get rid of the stack trace if we\u0027re not admin"},{"line_number":382,"context_line":"                if not self.context.is_admin:"},{"line_number":383,"context_line":"                    self._fault.details \u003d None"},{"line_number":384,"context_line":"            except exception.ModelNotFoundError:"},{"line_number":385,"context_line":"                pass"},{"line_number":386,"context_line":"            self._fault_loaded \u003d True"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_960b8f7c","line":383,"range":{"start_line":382,"start_character":0,"end_line":383,"end_character":46},"in_reply_to":"bab6814e_acdf8338","updated":"2016-05-23 10:25:11.000000000","message":"Perfect.","commit_id":"9a6cb50095e43b36d27df0c3d803b08ffb4f9c41"},{"author":{"_account_id":18777,"name":"Jinxing Fang","email":"fang.jinxing@99cloud.net","username":"jinxingfang"},"change_message_id":"eb5a91bc29fbd27c47e9b2eb76d14c8627d64a74","unresolved":false,"context_lines":[{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"def save_instance_fault(instance_id, message, details):"},{"line_number":1400,"context_line":"    if instance_id:"},{"line_number":1401,"context_line":"        try:"},{"line_number":1402,"context_line":"            # Make sure it\u0027s a valid id - sometimes the error is related"},{"line_number":1403,"context_line":"            # to an invalid id and we can\u0027t save those"},{"line_number":1404,"context_line":"            DBInstance.find_by(id\u003dinstance_id, deleted\u003dFalse)"},{"line_number":1405,"context_line":"            msg \u003d utils.format_output(message, truncate_len\u003d255)"},{"line_number":1406,"context_line":"            det \u003d utils.format_output(details)"},{"line_number":1407,"context_line":"            try:"},{"line_number":1408,"context_line":"                fault \u003d DBInstanceFault.find_by(instance_id\u003dinstance_id)"},{"line_number":1409,"context_line":"                fault.set_info(msg, det)"},{"line_number":1410,"context_line":"                fault.save()"},{"line_number":1411,"context_line":"            except exception.ModelNotFoundError:"},{"line_number":1412,"context_line":"                DBInstanceFault.create("},{"line_number":1413,"context_line":"                    instance_id\u003dinstance_id,"},{"line_number":1414,"context_line":"                    message\u003dmsg, details\u003ddet)"},{"line_number":1415,"context_line":"        except exception.ModelNotFoundError:"},{"line_number":1416,"context_line":"            # We don\u0027t need to save anything if the instance id isn\u0027t valid"},{"line_number":1417,"context_line":"            pass"},{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"class DBInstanceFault(dbmodels.DatabaseModelBase):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_b8767203","line":1417,"range":{"start_line":1400,"start_character":4,"end_line":1417,"end_character":16},"updated":"2016-06-27 01:38:37.000000000","message":"I think there should be a process for instance_id is None.Throw exception or add message to log if the instance_id is None.","commit_id":"08ec7d01de317edc65e45da2510eaac6ee0bade3"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"a5300cd0afdcc74d5b978c32282b9ef95a6eef21","unresolved":false,"context_lines":[{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"def save_instance_fault(instance_id, message, details):"},{"line_number":1400,"context_line":"    if instance_id:"},{"line_number":1401,"context_line":"        try:"},{"line_number":1402,"context_line":"            # Make sure it\u0027s a valid id - sometimes the error is related"},{"line_number":1403,"context_line":"            # to an invalid id and we can\u0027t save those"},{"line_number":1404,"context_line":"            DBInstance.find_by(id\u003dinstance_id, deleted\u003dFalse)"},{"line_number":1405,"context_line":"            msg \u003d utils.format_output(message, truncate_len\u003d255)"},{"line_number":1406,"context_line":"            det \u003d utils.format_output(details)"},{"line_number":1407,"context_line":"            try:"},{"line_number":1408,"context_line":"                fault \u003d DBInstanceFault.find_by(instance_id\u003dinstance_id)"},{"line_number":1409,"context_line":"                fault.set_info(msg, det)"},{"line_number":1410,"context_line":"                fault.save()"},{"line_number":1411,"context_line":"            except exception.ModelNotFoundError:"},{"line_number":1412,"context_line":"                DBInstanceFault.create("},{"line_number":1413,"context_line":"                    instance_id\u003dinstance_id,"},{"line_number":1414,"context_line":"                    message\u003dmsg, details\u003ddet)"},{"line_number":1415,"context_line":"        except exception.ModelNotFoundError:"},{"line_number":1416,"context_line":"            # We don\u0027t need to save anything if the instance id isn\u0027t valid"},{"line_number":1417,"context_line":"            pass"},{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"class DBInstanceFault(dbmodels.DatabaseModelBase):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_67dc4975","line":1417,"range":{"start_line":1400,"start_character":4,"end_line":1417,"end_character":16},"in_reply_to":"3aaa91ec_b8767203","updated":"2016-06-27 14:56:54.000000000","message":"The purpose of this change is to persist the messages in the db and link them with an instance ID so it can be reported easily back to the end user (or operator).  If there is no ID, we can\u0027t link them so writing the error back into the log makes no sense as any exception that\u0027s passed to this is already logged (so we\u0027d be logging the same thing twice). Note that this gets called whenever an \u0027error\u0027 notification gets sent, and not all notifications involve an instance ...","commit_id":"08ec7d01de317edc65e45da2510eaac6ee0bade3"}],"trove/tests/scenario/runners/instance_create_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"efe6f40e3c75391b79a65f94c469944dacf8b13b","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        database_definitions, user_definitions,"},{"line_number":137,"context_line":"            configuration_id, root_password, datastore, datastore_version,"},{"line_number":138,"context_line":"            expected_states, expected_http_code, create_helper_user\u003dFalse,"},{"line_number":139,"context_line":"            fault\u003dFalse):"},{"line_number":140,"context_line":"        \"\"\"This assert method executes a \u0027create\u0027 call and verifies the server"},{"line_number":141,"context_line":"        response. It neither waits for the instance to become available"},{"line_number":142,"context_line":"        nor it performs any other validations itself."}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_488b78c3","line":139,"updated":"2016-05-20 18:19:55.000000000","message":"I don\u0027t think this is being used anywhere.","commit_id":"b64b6cf64bff7469d11b7d514d4089d206a90dea"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"efe6f40e3c75391b79a65f94c469944dacf8b13b","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        name \u003d self.instance_info.name + \u0027_error2\u0027"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        flavor \u003d self._get_instance_flavor(fault_num\u003d2)"},{"line_number":262,"context_line":"        trove_volume_size \u003d CONFIG.get(\u0027trove_volume_size\u0027, 1)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        inst \u003d self.assert_instance_create("},{"line_number":265,"context_line":"            name, flavor, trove_volume_size, [], [], None, None,"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_e86fccf9","line":262,"updated":"2016-05-20 18:19:55.000000000","message":"(0) Since it is now used at more than one spot, this could almost be a class-level constant.","commit_id":"b64b6cf64bff7469d11b7d514d4089d206a90dea"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c9fa5e9388d32afa5c40093cbfe9a30e45fa8a9d","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        else:"},{"line_number":325,"context_line":"            raise SkipTest(\"Cleanup is not required.\")"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def run_wait_for_initialized_instance_delete(self,"},{"line_number":328,"context_line":"                                                 expected_states\u003d[\u0027SHUTDOWN\u0027]):"},{"line_number":329,"context_line":"        if self.init_inst_id:"},{"line_number":330,"context_line":"            self.assert_all_gone(self.init_inst_id, expected_states[-1])"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_81cb4c71","side":"PARENT","line":327,"range":{"start_line":327,"start_character":8,"end_line":327,"end_character":48},"updated":"2016-07-01 01:54:43.000000000","message":"The scenari tests are breaking.\nThis method should not have been removed.","commit_id":"d412c3c0feaeb9b207611d27bd89096ab388a43d"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d8f575af0e97f3351dc3862af3116842e2757e5e","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        else:"},{"line_number":325,"context_line":"            raise SkipTest(\"Cleanup is not required.\")"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def run_wait_for_initialized_instance_delete(self,"},{"line_number":328,"context_line":"                                                 expected_states\u003d[\u0027SHUTDOWN\u0027]):"},{"line_number":329,"context_line":"        if self.init_inst_id:"},{"line_number":330,"context_line":"            self.assert_all_gone(self.init_inst_id, expected_states[-1])"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_7291b0f1","side":"PARENT","line":327,"range":{"start_line":327,"start_character":8,"end_line":327,"end_character":48},"in_reply_to":"3aaa91ec_81cb4c71","updated":"2016-07-01 13:46:34.000000000","message":"It was renamed - probably needs to be changed elsewhere too","commit_id":"d412c3c0feaeb9b207611d27bd89096ab388a43d"}]}
