)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"bfc5c8ed759a5b2b9b7f0853918ca54613249698","unresolved":false,"context_lines":[{"line_number":13,"context_line":"task status and db instance status with pre-defined statuses;"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Changes:"},{"line_number":16,"context_line":"- best variant for instance task status is FAILED, for DBInstance - BUILDING_ERROR_TEMPLATE;"},{"line_number":17,"context_line":"- adding try:except to _render_config func;"},{"line_number":18,"context_line":"- tests;"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAT3%2F%2Fu%2Fs%3D","line":16,"updated":"2014-01-08 20:22:02.000000000","message":"Please limit under 72 characters.","commit_id":"e862b9785a19c358d8a646530e47c7adf96fb4a8"}],"trove/common/template.py":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"1ffdcb503b72299f6ba65cb46351013916906921","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        template_filename \u003d \"%s/config.template\" % datastore_manager"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            self.template \u003d ENV.get_template(template_filename)"},{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise exception.TroveError(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9f7k%3D","line":48,"updated":"2013-12-10 22:02:49.000000000","message":"Please use TemplateError instead which will also cover syntax errors in the templates.","commit_id":"c3934ed0ccb232c4c8728f20e7176579fb4c7d08"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d8d3d50b702e3845a49a3d7597566a171f79bbd2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        template_filename \u003d \"%s/config.template\" % datastore_manager"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            self.template \u003d ENV.get_template(template_filename)"},{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise exception.TroveError(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9f5Y%3D","line":48,"in_reply_to":"AAAATn%2F9f7k%3D","updated":"2013-12-10 22:05:54.000000000","message":"i disagree, this call could through only jinja2.TemplateNotFound","commit_id":"c3934ed0ccb232c4c8728f20e7176579fb4c7d08"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"40164209f6c8b30622c867c2876b5a951ea1c507","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise exception.TroveError(msg)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9lOw%3D","line":51,"updated":"2013-12-10 00:29:35.000000000","message":"Instead of re-raising a Trove error on encountering a jinja2 TemplateNotFound exception, why don\u0027t we just test for jinja2 exception when we render the template and LOG the full stacktrace?","commit_id":"c3934ed0ccb232c4c8728f20e7176579fb4c7d08"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d8d3d50b702e3845a49a3d7597566a171f79bbd2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise exception.TroveError(msg)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9f5M%3D","line":51,"in_reply_to":"AAAATn%2F9f8E%3D","updated":"2013-12-10 22:05:54.000000000","message":"ok","commit_id":"c3934ed0ccb232c4c8728f20e7176579fb4c7d08"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"1ffdcb503b72299f6ba65cb46351013916906921","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise exception.TroveError(msg)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9f8E%3D","line":51,"in_reply_to":"AAAATn%2F9kHY%3D","updated":"2013-12-10 22:02:49.000000000","message":"I disagree. I don\u0027t think that we should mask the original stack trace (or point of failure and type of exception). Even if we want to \u0027keep a strict exception hierarchy\u0027 (not necessary imho), let\u0027s make sure that we are surfacing the original point of failure, so that debugging/reading the logs isn\u0027t any harder than it should be.","commit_id":"c3934ed0ccb232c4c8728f20e7176579fb4c7d08"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c97f469bdaafb6864bae5f2b6b74b627cdaa6c27","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise exception.TroveError(msg)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9kHY%3D","line":51,"in_reply_to":"AAAATn%2F9lOw%3D","updated":"2013-12-10 07:20:58.000000000","message":"Exception could appear only at loading step (ENV.get_template(...)). \nRender call doesn\u0027t cause any kind of exceptions at all.\nI masked original exception because its preferable to keep strict exception hierarchy and do not let side libs through their own exceptions.","commit_id":"c3934ed0ccb232c4c8728f20e7176579fb4c7d08"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"9f337336cdf93000a7c09c6a6b8fec0ea84edf15","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        template_filename \u003d \"%s/config.template\" % datastore_manager"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            self.template \u003d ENV.get_template(template_filename)"},{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2FuBs%3D","line":48,"updated":"2014-01-02 22:45:49.000000000","message":"Please use TemplateError instead which will also cover syntax errors in the templates. \n\nIs there a specific reason to pick only the TemplateNotFoundException? According to http://jinja.pocoo.org/docs/api/ (under Exceptions), it\u0027s possible for this to raise a TemplateSyntaxError, or an UndefinedError as well.","commit_id":"e862b9785a19c358d8a646530e47c7adf96fb4a8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"ccaed0b646dd57cbf8d8babd57c039d1418aecf2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            self.template \u003d ENV.get_template(template_filename)"},{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2FuZY%3D","line":50,"updated":"2014-01-02 21:15:43.000000000","message":"Doesn\u0027t just doing a LOG.exception() give you the same type of message instead of creating a new string that we should _(msg)","commit_id":"e862b9785a19c358d8a646530e47c7adf96fb4a8"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"bfc5c8ed759a5b2b9b7f0853918ca54613249698","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            self.template \u003d ENV.get_template(template_filename)"},{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FwZU%3D","line":50,"in_reply_to":"AAAAT3%2F%2FuRM%3D","updated":"2014-01-08 20:22:02.000000000","message":"though, i would say that current scope was being limited to templatenotfound, but there is no harm in catching the bigger fish if that helps catching more exceptions related to template.","commit_id":"e862b9785a19c358d8a646530e47c7adf96fb4a8"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"bfc5c8ed759a5b2b9b7f0853918ca54613249698","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            self.template \u003d ENV.get_template(template_filename)"},{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FwaA%3D","line":50,"in_reply_to":"AAAAT3%2F%2FuZY%3D","updated":"2014-01-08 20:22:02.000000000","message":"Agree with Craig\nIt could be single line.","commit_id":"e862b9785a19c358d8a646530e47c7adf96fb4a8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2a50fdceeb7b5b06119f083debe0ab15784de5b8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            self.template \u003d ENV.get_template(template_filename)"},{"line_number":48,"context_line":"        except jinja2.TemplateNotFound:"},{"line_number":49,"context_line":"            msg \u003d \"Missing template %s\" % template_filename"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.instance_id \u003d instance_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2FuRM%3D","line":50,"in_reply_to":"AAAAT3%2F%2FuZY%3D","updated":"2014-01-02 21:42:45.000000000","message":"i guess yes, but logging \"Template not found _name_ \" is not what trove-taskmanager needs, so that is why i logged another message with template name, and i do agreed about _(\"blah\")\nAnd also by calling LOG.exception() will log message as exception - but they are could be not critical to taskmanager and crititcal to user, so user and deployer will interpretate an error statem in same way - something happend and this is an error.","commit_id":"e862b9785a19c358d8a646530e47c7adf96fb4a8"}],"trove/taskmanager/models.py":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"e87556d0fec1f1a20054b19ce7dcca919ea4665a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def _log_and_raise(self, exc, message, task_status):"},{"line_number":155,"context_line":"        LOG.error(message)"},{"line_number":156,"context_line":"        LOG.error(exc)"},{"line_number":157,"context_line":"        LOG.error(traceback.format_exc())"},{"line_number":158,"context_line":"        self.update_db(task_status\u003dtask_status)"},{"line_number":159,"context_line":"        raise TroveError(message\u003dmessage)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FV3g%3D","line":157,"updated":"2014-01-14 21:18:30.000000000","message":"Why not just use LOG.exception?","commit_id":"34ab62d0be838fee3b0f3991102d1fbdbeecc3e3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"50d4c584c0b50bbd5e2c1441994b1462d128832a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def _log_and_raise(self, exc, message, task_status):"},{"line_number":155,"context_line":"        LOG.error(message)"},{"line_number":156,"context_line":"        LOG.error(exc)"},{"line_number":157,"context_line":"        LOG.error(traceback.format_exc())"},{"line_number":158,"context_line":"        self.update_db(task_status\u003dtask_status)"},{"line_number":159,"context_line":"        raise TroveError(message\u003dmessage)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FVyk%3D","line":157,"in_reply_to":"AAAAUH%2F%2FV3g%3D","updated":"2014-01-14 21:30:44.000000000","message":"Does this method work out of scope of except statement ?","commit_id":"34ab62d0be838fee3b0f3991102d1fbdbeecc3e3"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"e87556d0fec1f1a20054b19ce7dcca919ea4665a","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        LOG.error(message)"},{"line_number":156,"context_line":"        LOG.error(exc)"},{"line_number":157,"context_line":"        LOG.error(traceback.format_exc())"},{"line_number":158,"context_line":"        self.update_db(task_status\u003dtask_status)"},{"line_number":159,"context_line":"        raise TroveError(message\u003dmessage)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FV3w%3D","line":158,"updated":"2014-01-14 21:18:30.000000000","message":"I would expect a function defined as _log_and_raise to log and raise an exception. The database update should ideally happen outside of this function to preserve modular cohesion.","commit_id":"34ab62d0be838fee3b0f3991102d1fbdbeecc3e3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"50d4c584c0b50bbd5e2c1441994b1462d128832a","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        LOG.error(message)"},{"line_number":156,"context_line":"        LOG.error(exc)"},{"line_number":157,"context_line":"        LOG.error(traceback.format_exc())"},{"line_number":158,"context_line":"        self.update_db(task_status\u003dtask_status)"},{"line_number":159,"context_line":"        raise TroveError(message\u003dmessage)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FVy4%3D","line":158,"in_reply_to":"AAAAUH%2F%2FV3w%3D","updated":"2014-01-14 21:30:44.000000000","message":"It\u0027s already done here, i just done it in the same way\n\nhttps://github.com/openstack/trove/blob/f18e0936264b6dd96ddacc7594b661b50de1729f/trove/taskmanager/models.py#L439-L444","commit_id":"34ab62d0be838fee3b0f3991102d1fbdbeecc3e3"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"60f6ec9d7b1596aa310f4b72325ce11304fc362d","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        service.set_status(ServiceStatuses.FAILED)"},{"line_number":145,"context_line":"        service.save()"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def update_db(self, **values):"},{"line_number":148,"context_line":"        self.db_info \u003d DBInstance.find_by(id\u003dself.id, deleted\u003dFalse)"},{"line_number":149,"context_line":"        for key in values:"},{"line_number":150,"context_line":"            setattr(self.db_info, key, values[key])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BN0U%3D","line":147,"updated":"2014-01-29 00:16:21.000000000","message":"This method is already in trove.instances.models.BaseInstance. Why duplicate it here?","commit_id":"eda8304abadedddfcf162264a6455ca8088922d4"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c3a179d3b313a33feeacab00cd0ba577a8c9f6fc","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            setattr(self.db_info, key, values[key])"},{"line_number":151,"context_line":"        self.db_info.save()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _log_and_raise(self, exc, message):"},{"line_number":154,"context_line":"        LOG.error(message)"},{"line_number":155,"context_line":"        LOG.error(exc)"},{"line_number":156,"context_line":"        LOG.error(traceback.format_exc())"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F9yaM%3D","line":153,"updated":"2014-02-03 22:58:42.000000000","message":"Any reasons of relocation for _log_and_raise","commit_id":"eda8304abadedddfcf162264a6455ca8088922d4"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"b63bb2941edfc0a810ca51620e654044f19407f7","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        LOG.error(message)"},{"line_number":155,"context_line":"        LOG.error(exc)"},{"line_number":156,"context_line":"        LOG.error(traceback.format_exc())"},{"line_number":157,"context_line":"        raise TroveError(message\u003dmessage)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F9wh8%3D","line":157,"updated":"2014-02-04 09:39:57.000000000","message":"Agreed. These aren\u0027t related to Configuration and shouldn\u0027t be here.","commit_id":"eda8304abadedddfcf162264a6455ca8088922d4"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"60f6ec9d7b1596aa310f4b72325ce11304fc362d","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        LOG.error(message)"},{"line_number":155,"context_line":"        LOG.error(exc)"},{"line_number":156,"context_line":"        LOG.error(traceback.format_exc())"},{"line_number":157,"context_line":"        raise TroveError(message\u003dmessage)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BN2M%3D","line":157,"updated":"2014-01-29 00:16:21.000000000","message":"The name \"ConfigurationMixin\" implies this class handles finding configurations. I don\u0027t know why these three methods were moved here as they don\u0027t have the same focus.","commit_id":"eda8304abadedddfcf162264a6455ca8088922d4"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c3a179d3b313a33feeacab00cd0ba577a8c9f6fc","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        LOG.error(message)"},{"line_number":155,"context_line":"        LOG.error(exc)"},{"line_number":156,"context_line":"        LOG.error(traceback.format_exc())"},{"line_number":157,"context_line":"        raise TroveError(message\u003dmessage)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F9yZ4%3D","line":157,"in_reply_to":"AAAAUH%2F%2BN2M%3D","updated":"2014-02-03 22:58:42.000000000","message":"Agree with Tim\nCannot figure out why we are adding these methods to this class.","commit_id":"eda8304abadedddfcf162264a6455ca8088922d4"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"60f6ec9d7b1596aa310f4b72325ce11304fc362d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                       self.id)"},{"line_number":179,"context_line":"                err \u003d inst_models.InstanceTasks.BUILDING_ERROR_SEC_GROUP"},{"line_number":180,"context_line":"                self.update_db(task_status\u003derr)"},{"line_number":181,"context_line":"                self._log_and_raise(e, msg)"},{"line_number":182,"context_line":"            else:"},{"line_number":183,"context_line":"                LOG.debug(_(\"Successfully created security group for \""},{"line_number":184,"context_line":"                            \"instance: %s\") % self.id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BN1s%3D","line":181,"updated":"2014-01-29 00:16:21.000000000","message":"Why not just have the _log_and_raise method also set the error status like it did before? I don\u0027t see the benefit of this change.","commit_id":"eda8304abadedddfcf162264a6455ca8088922d4"}]}
