)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"982032e4653ea2087ac7fcd86fd280e1c20ae0da","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow collector service database connection re-try when db server goes offline"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"At the startup collector service loads the database dispatcher, if the DB is offline"},{"line_number":10,"context_line":"momentarily the collector service starts but continues to run with out having the ability"},{"line_number":11,"context_line":"to re-try the DB connection. This fix will allow the connection to be retried next time"},{"line_number":12,"context_line":"when collector service attempts to write to the database."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baa201ad_6d11445c","line":9,"updated":"2014-10-09 04:08:14.000000000","message":"Please make sure that the max char are less than 80 for the commit message","commit_id":"c53b7aee18a1a432a9d604149be8d6359f31dc25"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"3d937737e0eeb6cc24d3a2731c9932874414f6ed","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow collector service database connection re-try when db server goes offline"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"At the startup collector service loads the database dispatcher, if the DB is offline"},{"line_number":10,"context_line":"momentarily the collector service starts but continues to run with out having the ability"},{"line_number":11,"context_line":"to re-try the DB connection. This fix will allow the connection to be retried next time"},{"line_number":12,"context_line":"when collector service attempts to write to the database."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baa201ad_f0bc2708","line":9,"in_reply_to":"baa201ad_6d11445c","updated":"2014-10-09 15:31:51.000000000","message":"Done","commit_id":"c53b7aee18a1a432a9d604149be8d6359f31dc25"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"af623268bcd80dd8682616c1cf9168567ca620c9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow collector service database connection retry"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"At the startup collector service loads the database dispatcher, if the DB is offline"},{"line_number":10,"context_line":"momentarily the collector service starts but continues to run with out having the ability"},{"line_number":11,"context_line":"to re-try the DB connection. This fix will allow the connection to be retried next time"},{"line_number":12,"context_line":"when collector service attempts to write to the database."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baa201ad_e1a8db21","line":9,"updated":"2014-10-09 07:56:18.000000000","message":"Please make strings in comment message not longe then 79 chars.","commit_id":"a8685d9568193ed50122f352b8ec8979133103e7"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"669faff160f188ba041b2f41de9be6d8717297b5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow collector service database connection retry"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"At the startup collector service loads the database dispatcher, if the DB is"},{"line_number":10,"context_line":"offline momentarily the collector service starts but continues to run with"},{"line_number":11,"context_line":"out having the ability to re-try the DB connection. This fix will allow the"},{"line_number":12,"context_line":"connection to be retried next time when collector service attempts to write"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9aa7fdbe_bc907aed","line":9,"updated":"2014-10-21 10:09:20.000000000","message":"Here and further strings are too long.","commit_id":"3b95f9826cf3d4d61495019c2c2b2203ea907d51"}],"ceilometer/dispatcher/database.py":[{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"982032e4653ea2087ac7fcd86fd280e1c20ae0da","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    def __init__(self, conf):"},{"line_number":40,"context_line":"        super(DatabaseDispatcher, self).__init__(conf)"},{"line_number":41,"context_line":"        self._storage_conn \u003d self._get_db_conn(ignore_exception\u003dTrue)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _get_db_conn(self, ignore_exception\u003dFalse):"},{"line_number":44,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_0d00b800","line":41,"updated":"2014-10-09 04:08:14.000000000","message":"Why you can\u0027t simply put the storage.get_connection_from_config(self.conf) in a try catch and avoid all this extra scaffolding?","commit_id":"c53b7aee18a1a432a9d604149be8d6359f31dc25"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"3d937737e0eeb6cc24d3a2731c9932874414f6ed","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    def __init__(self, conf):"},{"line_number":40,"context_line":"        super(DatabaseDispatcher, self).__init__(conf)"},{"line_number":41,"context_line":"        self._storage_conn \u003d self._get_db_conn(ignore_exception\u003dTrue)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _get_db_conn(self, ignore_exception\u003dFalse):"},{"line_number":44,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_f0e50738","line":41,"in_reply_to":"baa201ad_0d00b800","updated":"2014-10-09 15:31:51.000000000","message":"Yes that can be done. I started with slightly different logic with respect to retries which required a function. Since the retry logic is moved to a different module I can clean this up","commit_id":"c53b7aee18a1a432a9d604149be8d6359f31dc25"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"af623268bcd80dd8682616c1cf9168567ca620c9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(DatabaseDispatcher, self).__init__(conf)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        try:"},{"line_number":43,"context_line":"            self._storage_conn \u003d storage.get_connection_from_config(self.conf)"},{"line_number":44,"context_line":"        except Exception as err:"},{"line_number":45,"context_line":"            LOG.exception(_(\u0027Failed to connect to database, re-try later: %s\u0027),"},{"line_number":46,"context_line":"                          err)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_a127b3c8","line":43,"updated":"2014-10-09 07:56:18.000000000","message":"It is seems to be not a good practice to start name of  functions with \u0027_\u0027 if they are not internal and could be used outside the module.","commit_id":"a8685d9568193ed50122f352b8ec8979133103e7"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"3ccc4a889f8b99c40b0c510a01952bb6cd71387c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(DatabaseDispatcher, self).__init__(conf)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        try:"},{"line_number":43,"context_line":"            self._storage_conn \u003d storage.get_connection_from_config(self.conf)"},{"line_number":44,"context_line":"        except Exception as err:"},{"line_number":45,"context_line":"            LOG.exception(_(\u0027Failed to connect to database, re-try later: %s\u0027),"},{"line_number":46,"context_line":"                          err)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_7f455b16","line":43,"in_reply_to":"baa201ad_a127b3c8","updated":"2014-10-09 13:42:58.000000000","message":"It is not a function, but a variable that stores the storage connection and not used externally","commit_id":"a8685d9568193ed50122f352b8ec8979133103e7"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"365372fe740af8be1c5bf9b53ba22ebe708859c6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            LOG.exception(_(\u0027Failed to connect to database, re-try later: %s\u0027),"},{"line_number":46,"context_line":"                          err)"},{"line_number":47,"context_line":"            self._storage_conn \u003d None"},{"line_number":48,"context_line":"            pass"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @property"},{"line_number":51,"context_line":"    def storage_conn(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_ce4ab882","line":48,"updated":"2014-10-14 08:26:33.000000000","message":"\u0027pass\u0027 doesn\u0027t need here","commit_id":"ce39805aa4a7fbc341c856da0841f856d3e8a451"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"609f16b268ed2c061a90598e6279b7338903b17c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                raise"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return None"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @property"},{"line_number":59,"context_line":"    def meter_conn(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_a8544454","line":56,"updated":"2014-10-16 06:57:36.000000000","message":"no need for this, I think the above pass already returned None","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"9e3cf8af806da9e116da82223964f6d2f8ec9e88","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                raise"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return None"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @property"},{"line_number":59,"context_line":"    def meter_conn(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_e972c47a","line":56,"in_reply_to":"baa201ad_a8544454","updated":"2014-10-16 15:01:50.000000000","message":"Done","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7c05f1659baec4838ede7a9bc7d13bbbd792b082","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self._meter_conn \u003d self._get_db_conn(\u0027metering\u0027, True)"},{"line_number":43,"context_line":"        self._event_conn \u003d self._get_db_conn(\u0027event\u0027, True)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _get_db_conn(self, purpose, ignore_exception\u003dFalse):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            return storage.get_connection_from_config(self.conf, purpose)"},{"line_number":48,"context_line":"        except Exception as err:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_745e47eb","line":45,"updated":"2014-10-20 15:02:10.000000000","message":"i\u0027m not sure what the point of this method is for. why is it only called on initialisation and not below as well?","commit_id":"eeba814f8e4257b8375f08909f95022af1ddf369"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"0572464184539acd3da2670f13959c5cad123b10","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self._meter_conn \u003d self._get_db_conn(\u0027metering\u0027, True)"},{"line_number":43,"context_line":"        self._event_conn \u003d self._get_db_conn(\u0027event\u0027, True)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _get_db_conn(self, purpose, ignore_exception\u003dFalse):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            return storage.get_connection_from_config(self.conf, purpose)"},{"line_number":48,"context_line":"        except Exception as err:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_8be2a99d","line":45,"in_reply_to":"9aa7fdbe_745e47eb","updated":"2014-10-20 16:02:20.000000000","message":"That was my bad. I cleaned it up with new patch set. thanks for catching that.","commit_id":"eeba814f8e4257b8375f08909f95022af1ddf369"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c62ad07eeb6457a725d6261979e59bd7e998f2b7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            return storage.get_connection_from_config(self.conf, purpose)"},{"line_number":48,"context_line":"        except Exception as err:"},{"line_number":49,"context_line":"            params \u003d {\"purpose\": purpose, \"err\": err}"},{"line_number":50,"context_line":"            LOG.exception(_(\"Failed to connect to db, purpose %(purpose)s \""},{"line_number":51,"context_line":"                            \"re-try later: %(err)s\") % params)"},{"line_number":52,"context_line":"            if not ignore_exception:"},{"line_number":53,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa7fdbe_bd63ebda","line":50,"updated":"2014-10-22 13:25:21.000000000","message":"this could probably be written as \"Failed to connect to %(purpose)s db. retry later: %(err)s\"\n\nnot a big deal","commit_id":"48f0c4b423ea54ba89a85cc49819308295eb45a5"}],"ceilometer/storage/__init__.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"beab95dad9795c9136751fa8721b0ff1737d3442","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return get_connection(url, namespace)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@retrying.retry(wait_fixed\u003d500, stop_max_attempt_number\u003d50)"},{"line_number":91,"context_line":"def get_connection(url, namespace):"},{"line_number":92,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""},{"line_number":93,"context_line":"    connection_scheme \u003d urlparse.urlparse(url).scheme"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_3f93d350","line":90,"updated":"2014-10-09 13:48:40.000000000","message":"I would say these param should not be hard coded, but used from the config options. cfg.CONF.database.max_retries and cfg.CONF.database.retry_interval look to be suitable here","commit_id":"75473441a9daaf5aa36d4c4334ea74abb6f70347"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"96d42dcb65feb9b9a7e0077cef7132c5a0d1c228","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return get_connection(url, namespace)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@retrying.retry(wait_fixed\u003d500, stop_max_attempt_number\u003d50)"},{"line_number":91,"context_line":"def get_connection(url, namespace):"},{"line_number":92,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""},{"line_number":93,"context_line":"    connection_scheme \u003d urlparse.urlparse(url).scheme"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_5aba62c1","line":90,"in_reply_to":"baa201ad_3f93d350","updated":"2014-10-09 15:30:59.000000000","message":"Thanks, I changed it to use the config params and tested it.","commit_id":"75473441a9daaf5aa36d4c4334ea74abb6f70347"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"365372fe740af8be1c5bf9b53ba22ebe708859c6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer.openstack.common.gettextutils import _"},{"line_number":27,"context_line":"from ceilometer.openstack.common import log"},{"line_number":28,"context_line":"from ceilometer import utils"},{"line_number":29,"context_line":"import retrying"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_ee669c28","line":29,"updated":"2014-10-14 08:26:33.000000000","message":"This import should be in second group with other ?third party modules.","commit_id":"ce39805aa4a7fbc341c856da0841f856d3e8a451"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"1bcd53eea5cd9dd7716118df3bd21a14be7450c2","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return get_connection(url, namespace)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":91,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries)"},{"line_number":92,"context_line":"def get_connection(url, namespace):"},{"line_number":93,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_ddc36f88","line":90,"range":{"start_line":90,"start_character":62,"end_line":90,"end_character":66},"updated":"2014-10-13 08:28:40.000000000","message":"well, I really don\u0027t like any hardcoded numbers... I suppose if you need some multiplier like this, you may define new config option with default value equal to cfg.CONF.database.retry_interval * 1000 - what do you think?","commit_id":"ce39805aa4a7fbc341c856da0841f856d3e8a451"},{"author":{"_account_id":7336,"name":"Phil Neal","email":"phil.neal@hp.com","username":"nealph"},"change_message_id":"e4c9606d8399485f7f1d5733b378aaabe63acb54","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return get_connection(url, namespace)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":91,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries)"},{"line_number":92,"context_line":"def get_connection(url, namespace):"},{"line_number":93,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_269b75ca","line":90,"in_reply_to":"baa201ad_1deecd8b","updated":"2014-10-13 22:04:43.000000000","message":"Srini, I think there\u0027s no improvement in readability with a constant. In this case it\u0027s better to add a brief comment to explain the reasoning.","commit_id":"ce39805aa4a7fbc341c856da0841f856d3e8a451"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"7766137627f91970c168f42230063033a84de8d5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return get_connection(url, namespace)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":91,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries)"},{"line_number":92,"context_line":"def get_connection(url, namespace):"},{"line_number":93,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_30b8f9e4","line":90,"in_reply_to":"baa201ad_269b75ca","updated":"2014-10-14 11:27:07.000000000","message":"yeah, comment will be really nice here - and it\u0027ll be enough","commit_id":"ce39805aa4a7fbc341c856da0841f856d3e8a451"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"66e066bf4597eb8e681dfc8ae2076679d6ee5a40","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return get_connection(url, namespace)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":91,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries)"},{"line_number":92,"context_line":"def get_connection(url, namespace):"},{"line_number":93,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_1deecd8b","line":90,"in_reply_to":"baa201ad_ddc36f88","updated":"2014-10-13 15:20:32.000000000","message":"This is conversion from seconds to milliseconds since retry function expects milli seconds. I can add a constant for this what do you think?","commit_id":"ce39805aa4a7fbc341c856da0841f856d3e8a451"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"74da849eab75568069ecd10716bf0f66b5b1f948","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer.openstack.common.gettextutils import _"},{"line_number":27,"context_line":"from ceilometer.openstack.common import log"},{"line_number":28,"context_line":"from ceilometer import utils"},{"line_number":29,"context_line":"import retrying"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_9c21984f","line":29,"updated":"2014-10-15 13:59:27.000000000","message":"This import should be in the first import block.","commit_id":"73f77f9c1f27b4a402223db740828575cb08db07"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"fd7cb5de779cacf82b329e371870920aa8835879","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer.openstack.common.gettextutils import _"},{"line_number":27,"context_line":"from ceilometer.openstack.common import log"},{"line_number":28,"context_line":"from ceilometer import utils"},{"line_number":29,"context_line":"import retrying"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_edb3d04a","line":29,"in_reply_to":"baa201ad_9c21984f","updated":"2014-10-15 15:13:54.000000000","message":"Pep8 complains about the imports not being a-z order if I moved up, moved up but after oslo imports","commit_id":"73f77f9c1f27b4a402223db740828575cb08db07"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"2b4eb782e9257f713fc4b0b2ede21a4cfa2fddef","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer.openstack.common.gettextutils import _"},{"line_number":27,"context_line":"from ceilometer.openstack.common import log"},{"line_number":28,"context_line":"from ceilometer import utils"},{"line_number":29,"context_line":"import retrying"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_301a84c6","line":29,"in_reply_to":"baa201ad_edb3d04a","updated":"2014-10-15 19:59:38.000000000","message":"It seems that this import should be under \u0027import six\u0027","commit_id":"73f77f9c1f27b4a402223db740828575cb08db07"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"74da849eab75568069ecd10716bf0f66b5b1f948","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"# Convert retry_interval secs to msecs for retry decorator"},{"line_number":91,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":92,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries)"},{"line_number":93,"context_line":"def get_connection(url, namespace):"},{"line_number":94,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""},{"line_number":95,"context_line":"    connection_scheme \u003d urlparse.urlparse(url).scheme"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_dc9c006d","line":92,"updated":"2014-10-15 13:59:27.000000000","message":"I try to guess what would happens if it was set max_retries to -1. Now -1 is set if you need to specify that param to infinity. https://github.com/openstack/oslo.db/blob/master/oslo/db/options.py#L84","commit_id":"73f77f9c1f27b4a402223db740828575cb08db07"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"fd7cb5de779cacf82b329e371870920aa8835879","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"# Convert retry_interval secs to msecs for retry decorator"},{"line_number":91,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":92,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries)"},{"line_number":93,"context_line":"def get_connection(url, namespace):"},{"line_number":94,"context_line":"    \"\"\"Return an open connection to the database.\"\"\""},{"line_number":95,"context_line":"    connection_scheme \u003d urlparse.urlparse(url).scheme"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_0d84945c","line":92,"in_reply_to":"baa201ad_dc9c006d","updated":"2014-10-15 15:13:54.000000000","message":"Done","commit_id":"73f77f9c1f27b4a402223db740828575cb08db07"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b3870f7681a2edb2fe223bed8e6cf06329190bad","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# Convert retry_interval secs to msecs for retry decorator"},{"line_number":79,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":80,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries"},{"line_number":81,"context_line":"                if cfg.CONF.database.max_retries \u003e\u003d 0"},{"line_number":82,"context_line":"                else None)"},{"line_number":83,"context_line":"def get_connection_from_config(conf, purpose\u003dNone):"},{"line_number":84,"context_line":"    if conf.database_connection:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_a46a8f17","line":81,"updated":"2014-10-17 07:19:38.000000000","message":"Now we will have one attempt of connection even if max_retries\u003d0 what about this case in your patch. Probably will be nice to add that case for consistency with previous implementation.","commit_id":"548232419701089ec872ccc101371895df275977"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"40d71b4df34de8fae722f2561900fb382dbb6471","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# Convert retry_interval secs to msecs for retry decorator"},{"line_number":79,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":80,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries"},{"line_number":81,"context_line":"                if cfg.CONF.database.max_retries \u003e\u003d 0"},{"line_number":82,"context_line":"                else None)"},{"line_number":83,"context_line":"def get_connection_from_config(conf, purpose\u003dNone):"},{"line_number":84,"context_line":"    if conf.database_connection:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_e53c8795","line":81,"in_reply_to":"baa201ad_2784d709","updated":"2014-10-17 15:25:45.000000000","message":"No problem at all!","commit_id":"548232419701089ec872ccc101371895df275977"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"68e25b8466729fff7e08ca9b4da7a7e05ca26d02","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# Convert retry_interval secs to msecs for retry decorator"},{"line_number":79,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":80,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries"},{"line_number":81,"context_line":"                if cfg.CONF.database.max_retries \u003e\u003d 0"},{"line_number":82,"context_line":"                else None)"},{"line_number":83,"context_line":"def get_connection_from_config(conf, purpose\u003dNone):"},{"line_number":84,"context_line":"    if conf.database_connection:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_f11d2d74","line":81,"in_reply_to":"baa201ad_a46a8f17","updated":"2014-10-17 14:03:09.000000000","message":"Yes it will have one attempt of connection, but no retries in case of failure. Since max_retries\u003d0. I don\u0027t see a problem here. Care to explain?","commit_id":"548232419701089ec872ccc101371895df275977"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"3b5d892137eed4b250dbd7a908529fed7cf0c334","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# Convert retry_interval secs to msecs for retry decorator"},{"line_number":79,"context_line":"@retrying.retry(wait_fixed\u003dcfg.CONF.database.retry_interval * 1000,"},{"line_number":80,"context_line":"                stop_max_attempt_number\u003dcfg.CONF.database.max_retries"},{"line_number":81,"context_line":"                if cfg.CONF.database.max_retries \u003e\u003d 0"},{"line_number":82,"context_line":"                else None)"},{"line_number":83,"context_line":"def get_connection_from_config(conf, purpose\u003dNone):"},{"line_number":84,"context_line":"    if conf.database_connection:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_2784d709","line":81,"in_reply_to":"baa201ad_f11d2d74","updated":"2014-10-17 14:37:47.000000000","message":"Yeah, you are right! I just have missed how stop_max_attempt is implement in retrying. Sorry for silly question.","commit_id":"548232419701089ec872ccc101371895df275977"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"d6fa26eb15fb965dff290906375060f8e8932b31","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        url \u003d getattr(conf.database, \u0027%s_connection\u0027 % purpose) or url"},{"line_number":92,"context_line":"    # Set max_retries to 0, since oslo.db in certain cases may attempt to retry"},{"line_number":93,"context_line":"    # making the db connection retried max_retries ^ 2 times in failure case"},{"line_number":94,"context_line":"    conf.set_override(\u0027max_retries\u0027, 0, group\u003d\u0027database\u0027)"},{"line_number":95,"context_line":"    return get_connection(url, namespace)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_e73b7d36","line":94,"updated":"2014-10-20 02:21:41.000000000","message":"Is the overwriting here too much? Or should we just pass max_retries\u003d0 when creating EngineFacade instance in impl_sqlalchemy.Connection? just a comment","commit_id":"eeba814f8e4257b8375f08909f95022af1ddf369"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"1a42e04f9129273320a3181a1fc2de689003febc","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        url \u003d getattr(conf.database, \u0027%s_connection\u0027 % purpose) or url"},{"line_number":92,"context_line":"    # Set max_retries to 0, since oslo.db in certain cases may attempt to retry"},{"line_number":93,"context_line":"    # making the db connection retried max_retries ^ 2 times in failure case"},{"line_number":94,"context_line":"    conf.set_override(\u0027max_retries\u0027, 0, group\u003d\u0027database\u0027)"},{"line_number":95,"context_line":"    return get_connection(url, namespace)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_87447175","line":94,"in_reply_to":"9aa7fdbe_a78895e8","updated":"2014-10-20 02:52:36.000000000","message":"if future oslo.db supports other than sqlalchemy, that\u0027s fair enough.","commit_id":"eeba814f8e4257b8375f08909f95022af1ddf369"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"8e0b4f54afcb9d5789df4ae170cc6d2cee90c57c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        url \u003d getattr(conf.database, \u0027%s_connection\u0027 % purpose) or url"},{"line_number":92,"context_line":"    # Set max_retries to 0, since oslo.db in certain cases may attempt to retry"},{"line_number":93,"context_line":"    # making the db connection retried max_retries ^ 2 times in failure case"},{"line_number":94,"context_line":"    conf.set_override(\u0027max_retries\u0027, 0, group\u003d\u0027database\u0027)"},{"line_number":95,"context_line":"    return get_connection(url, namespace)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_a78895e8","line":94,"in_reply_to":"9aa7fdbe_e73b7d36","updated":"2014-10-20 02:29:11.000000000","message":"We want all oslo.db dependent connections (For e.g. impl_hbase, or impl_db2 other db implementations) to be affected since the retry logic is in oslo.db not in sqlalchemy. max_retries is only a oslo.db setting so I think this is ok to override in this manner. Let me know if you think differently?","commit_id":"eeba814f8e4257b8375f08909f95022af1ddf369"}],"ceilometer/storage/mongo/utils.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"74da849eab75568069ecd10716bf0f66b5b1f948","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            try:"},{"line_number":187,"context_line":"                client \u003d pymongo.MongoClient(url, safe\u003dTrue)"},{"line_number":188,"context_line":"            except pymongo.errors.ConnectionFailure as e:"},{"line_number":189,"context_line":"                if 0 \u003c\u003d max_retries \u003c\u003d attempts:"},{"line_number":190,"context_line":"                    LOG.error(_(\u0027Unable to connect to the database after \u0027"},{"line_number":191,"context_line":"                                \u0027%(retries)d retries. Giving up.\u0027) %"},{"line_number":192,"context_line":"                              {\u0027retries\u0027: max_retries})"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_5cae5082","side":"PARENT","line":189,"updated":"2014-10-15 13:59:27.000000000","message":"ditto \nwhat about infinity max_retries, I am not sure that this case is implemented in retrying, amiright?","commit_id":"42c3d487aac5d383f5224ffc4d402387562895df"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"fd7cb5de779cacf82b329e371870920aa8835879","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            try:"},{"line_number":187,"context_line":"                client \u003d pymongo.MongoClient(url, safe\u003dTrue)"},{"line_number":188,"context_line":"            except pymongo.errors.ConnectionFailure as e:"},{"line_number":189,"context_line":"                if 0 \u003c\u003d max_retries \u003c\u003d attempts:"},{"line_number":190,"context_line":"                    LOG.error(_(\u0027Unable to connect to the database after \u0027"},{"line_number":191,"context_line":"                                \u0027%(retries)d retries. Giving up.\u0027) %"},{"line_number":192,"context_line":"                              {\u0027retries\u0027: max_retries})"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_0d7654a4","side":"PARENT","line":189,"in_reply_to":"baa201ad_5cae5082","updated":"2014-10-15 15:13:54.000000000","message":"This code is removed.","commit_id":"42c3d487aac5d383f5224ffc4d402387562895df"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"4c64aff7489e450d3c3f9922e36b22a8da6e6302","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    @staticmethod"},{"line_number":179,"context_line":"    def _mongo_connect(url):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            client \u003d pymongo.MongoClient(url, safe\u003dTrue)"},{"line_number":182,"context_line":"            return client"},{"line_number":183,"context_line":"        except pymongo.errors.ConnectionFailure as e:"},{"line_number":184,"context_line":"            LOG.warn(_(\u0027Unable to connect to the database server: \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_0369aabd","line":181,"updated":"2014-10-16 12:11:15.000000000","message":"It could be refactor as:\nreturn pymongo.MongoClient(url, safe\u003dTrue)","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"9e3cf8af806da9e116da82223964f6d2f8ec9e88","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    @staticmethod"},{"line_number":179,"context_line":"    def _mongo_connect(url):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            client \u003d pymongo.MongoClient(url, safe\u003dTrue)"},{"line_number":182,"context_line":"            return client"},{"line_number":183,"context_line":"        except pymongo.errors.ConnectionFailure as e:"},{"line_number":184,"context_line":"            LOG.warn(_(\u0027Unable to connect to the database server: \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_c9118005","line":181,"in_reply_to":"baa201ad_0369aabd","updated":"2014-10-16 15:01:50.000000000","message":"Done","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"}],"ceilometer/tests/storage/test_pymongo_base.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"74da849eab75568069ecd10716bf0f66b5b1f948","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        meters \u003d list(self.conn.get_meters())"},{"line_number":170,"context_line":"        self.assertEqual(1, len(meters))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_mongodb_connect_raises_after_custom_number_of_attempts(self):"},{"line_number":173,"context_line":"        retry_interval \u003d 13"},{"line_number":174,"context_line":"        max_retries \u003d 37"},{"line_number":175,"context_line":"        self.CONF.set_override("}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_9c551852","side":"PARENT","line":172,"updated":"2014-10-15 13:59:27.000000000","message":"Could you please clarify why do we need to skip this test?","commit_id":"42c3d487aac5d383f5224ffc4d402387562895df"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"fd7cb5de779cacf82b329e371870920aa8835879","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        meters \u003d list(self.conn.get_meters())"},{"line_number":170,"context_line":"        self.assertEqual(1, len(meters))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_mongodb_connect_raises_after_custom_number_of_attempts(self):"},{"line_number":173,"context_line":"        retry_interval \u003d 13"},{"line_number":174,"context_line":"        max_retries \u003d 37"},{"line_number":175,"context_line":"        self.CONF.set_override("}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_8d42443c","side":"PARENT","line":172,"in_reply_to":"baa201ad_9c551852","updated":"2014-10-15 15:13:54.000000000","message":"The retrying logic moved to storage driver level. So we don\u0027t need retrying in the mongo code or the test. I will be adding another test for retrying logic that I added","commit_id":"42c3d487aac5d383f5224ffc4d402387562895df"}],"requirements.txt":[{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"982032e4653ea2087ac7fcd86fd280e1c20ae0da","unresolved":false,"context_lines":[{"line_number":45,"context_line":"tooz\u003e\u003d0.3 # Apache-2.0"},{"line_number":46,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":47,"context_line":"WSME\u003e\u003d0.6"},{"line_number":48,"context_line":"retrying\u003e\u003d1.2.3"}],"source_content_type":"text/plain","patch_set":1,"id":"baa201ad_ed045419","line":48,"updated":"2014-10-09 04:08:14.000000000","message":"You are not satisfying the requirements for gating:\n\n2014-10-09 03:51:45.714 | Requirement retrying\u003e\u003d1.2.3 does not match openstack/requirements value retrying\u003e\u003d1.2.2,!\u003d1.3.0\n\nPlease adjust to that value.","commit_id":"c53b7aee18a1a432a9d604149be8d6359f31dc25"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"3d937737e0eeb6cc24d3a2731c9932874414f6ed","unresolved":false,"context_lines":[{"line_number":45,"context_line":"tooz\u003e\u003d0.3 # Apache-2.0"},{"line_number":46,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":47,"context_line":"WSME\u003e\u003d0.6"},{"line_number":48,"context_line":"retrying\u003e\u003d1.2.3"}],"source_content_type":"text/plain","patch_set":1,"id":"baa201ad_90ccbbbc","line":48,"in_reply_to":"baa201ad_ed045419","updated":"2014-10-09 15:31:51.000000000","message":"Done","commit_id":"c53b7aee18a1a432a9d604149be8d6359f31dc25"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"609f16b268ed2c061a90598e6279b7338903b17c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"tooz\u003e\u003d0.3 # Apache-2.0"},{"line_number":46,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":47,"context_line":"WSME\u003e\u003d0.6"},{"line_number":48,"context_line":"retrying\u003e\u003d1.2.2,!\u003d1.3.0"}],"source_content_type":"text/plain","patch_set":8,"id":"baa201ad_e81c8cc4","line":48,"updated":"2014-10-16 06:57:36.000000000","message":"maybe we should follow https://review.openstack.org/#/c/125265/ here?","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"9e3cf8af806da9e116da82223964f6d2f8ec9e88","unresolved":false,"context_lines":[{"line_number":45,"context_line":"tooz\u003e\u003d0.3 # Apache-2.0"},{"line_number":46,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":47,"context_line":"WSME\u003e\u003d0.6"},{"line_number":48,"context_line":"retrying\u003e\u003d1.2.2,!\u003d1.3.0"}],"source_content_type":"text/plain","patch_set":8,"id":"baa201ad_e9e72410","line":48,"in_reply_to":"baa201ad_48a75150","updated":"2014-10-16 15:01:50.000000000","message":"Done","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"9e3cf8af806da9e116da82223964f6d2f8ec9e88","unresolved":false,"context_lines":[{"line_number":45,"context_line":"tooz\u003e\u003d0.3 # Apache-2.0"},{"line_number":46,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":47,"context_line":"WSME\u003e\u003d0.6"},{"line_number":48,"context_line":"retrying\u003e\u003d1.2.2,!\u003d1.3.0"}],"source_content_type":"text/plain","patch_set":8,"id":"baa201ad_a9da7c48","line":48,"in_reply_to":"baa201ad_e81c8cc4","updated":"2014-10-16 15:01:50.000000000","message":"Done","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"1fe11bac13ccf1740d40ff800dbee73d0b586963","unresolved":false,"context_lines":[{"line_number":45,"context_line":"tooz\u003e\u003d0.3 # Apache-2.0"},{"line_number":46,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":47,"context_line":"WSME\u003e\u003d0.6"},{"line_number":48,"context_line":"retrying\u003e\u003d1.2.2,!\u003d1.3.0"}],"source_content_type":"text/plain","patch_set":8,"id":"baa201ad_48a75150","line":48,"in_reply_to":"baa201ad_e81c8cc4","updated":"2014-10-16 12:01:04.000000000","message":"I would say yes, let\u0027s follow Monty here","commit_id":"bbee2f6af2c3bfd69d741aacdc89f074ef8a4dc3"}]}
