)]}'
{"designate/pool_manager/service.py":[{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"6de7195172c9b1629e33ddc08227d75b2dc73190","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self._periodic_sync_retry_interval \u003d \\"},{"line_number":114,"context_line":"            CONF[\u0027service:pool_manager\u0027].periodic_sync_retry_interval"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # Compute a time by which things probably should have propagated"},{"line_number":117,"context_line":"        self.max_prop_time \u003d (self.timeout * self.max_retries +"},{"line_number":118,"context_line":"                             self.max_retries * self.retry_interval +"},{"line_number":119,"context_line":"                             self.delay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_d8aec697","line":116,"updated":"2016-02-04 12:47:57.000000000","message":"Please add the unit (seconds) in the comment","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"cb017e53174b422bab2c68cc795c0de417144c71","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    @property"},{"line_number":194,"context_line":"    def pool_manager_api(self):"},{"line_number":195,"context_line":"        return pool_manager_rpcapi.PoolManagerAPI.get_instance()"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _get_admin_context_all_tenants(self):"},{"line_number":198,"context_line":"        return DesignateContext.get_admin_context(all_tenants\u003dTrue)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_a803610c","line":196,"updated":"2016-02-04 19:34:15.000000000","message":"This is not a deal breaker, but a suggestion. I\u0027ve been doing something like this:\n\n  @property\n  def pool_manager_api(self):\n      if not self.hasattr(self, \u0027_pool_manager_api\u0027):\n          self._pool_manager_api \u003d pool_manager_rpcapi.PoolManagerAPI.get_instance()\n      return self._pool_manager_api\n\nThe reason being is that in tests you can easily inject the manager of choice easily:\n\n  def test_foo(self):\n      self.obj._pool_manager_api \u003d Mock()\n      ...\n\nIt also potentially can skip some lookups against the config and/or object creation. \n\nJust throwing it out there in case it seems helpful or if there is a good reason to avoid the pattern.","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"482df00465c5d31401dc2007686186d9e2406ef6","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    @property"},{"line_number":194,"context_line":"    def pool_manager_api(self):"},{"line_number":195,"context_line":"        return pool_manager_rpcapi.PoolManagerAPI.get_instance()"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _get_admin_context_all_tenants(self):"},{"line_number":198,"context_line":"        return DesignateContext.get_admin_context(all_tenants\u003dTrue)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_d9c47160","line":196,"in_reply_to":"5a5ae5dd_a803610c","updated":"2016-02-04 20:28:23.000000000","message":"Forgive me for the stupid question: why are we using properties here instead of simply using a pool_manager_api attribute? Do we (really) need the read-only behavior?\n\nA quick test shows that the unit tests will succeed after replacing the property with an attribute and while we are there we can refactor it to use a private attribute.","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"f2c4a7e818fe3f24a153619cf698e0998dd11593","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    @property"},{"line_number":194,"context_line":"    def pool_manager_api(self):"},{"line_number":195,"context_line":"        return pool_manager_rpcapi.PoolManagerAPI.get_instance()"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _get_admin_context_all_tenants(self):"},{"line_number":198,"context_line":"        return DesignateContext.get_admin_context(all_tenants\u003dTrue)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dae33548_f60b4a22","line":196,"in_reply_to":"5a5ae5dd_d9c47160","updated":"2016-02-17 14:45:14.000000000","message":"I\u0027d assume it is better to lazily create the reference to the API instances, which is why we create them via properties. My example of saving the property as a private attribute also ensures that the property is still lazy, while avoiding recreating the instance for every reference. \n\nThat said, I\u0027d presume others would have explicit reasons for using properties.","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"cb017e53174b422bab2c68cc795c0de417144c71","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            LOG.info(_LI(\"periodic_recovery:update_zone needed on %d zones\"),"},{"line_number":230,"context_line":"                     len(zones))"},{"line_number":231,"context_line":"            for zone in zones:"},{"line_number":232,"context_line":"                self.pool_manager_api.update_zone(context, zone)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        except Exception:"},{"line_number":235,"context_line":"            LOG.exception(_LE(\u0027An unhandled exception in periodic \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_68b489d0","line":232,"updated":"2016-02-04 19:34:15.000000000","message":"Would it be worthwhile to break this out into its own function in order to get more granular error handling? For example, you could either:\n\n    def periodic_recover():\n        recover_creates()\n        recover_deletes()\n        recover_updates()\n\nWhere each recover_* func has its own try/except where you could then log what action specifically failed. \n\nAnother option would be to have:\n\n   def periodic_recover(self):\n        for action in [\u0027create\u0027, \u0027update\u0027, \u0027delete\u0027]:\n            self.recover_action(action)\n\n   def recover_action(self, context, action):\n        actioncode \u003d {\n            \u0027create\u0027: CREATE_ACTION,\n            \u0027delete\u0027: DELETE_ACTION,\n            \u0027update\u0027: UPDATE_ACTION,\n        }\n\n        try:\n            zones \u003d self._get_failed_zones(context, actioncode[action])\n            for zone in zones:\n                zone_action \u003d getattr(self.pool_manager_api, \u0027%s_zone\u0027 % action)\n                zone_action(context, zone)\n        except Exception as e:\n            LOG.exception(_LE(\u0027Error in periodic recover for %s\u0027), action)\n\n\nThe generalized passing around of an action term might be a bit too magical, but whenever I see a group of functions like this it seems ripe for making a mistake when something needs to change.","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"0613595d23e3ef2f1a834650a0cf73a55bd76315","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        if not self._pool_election.is_leader:"},{"line_number":244,"context_line":"            return"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        LOG.info(_LI(\"Starting Periodic Synchronization\"))"},{"line_number":247,"context_line":"        context \u003d self._get_admin_context_all_tenants()"},{"line_number":248,"context_line":"        zones \u003d self._fetch_healthy_zones(context)"},{"line_number":249,"context_line":"        zones \u003d set(zones)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_1178c0f1","line":246,"updated":"2016-01-28 20:30:39.000000000","message":"+1","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"6de7195172c9b1629e33ddc08227d75b2dc73190","unresolved":false,"context_lines":[{"line_number":580,"context_line":"                self._clear_cache(context, zone, action)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    # Utility Methods"},{"line_number":583,"context_line":"    def _get_failed_zones(self, context, action):"},{"line_number":584,"context_line":"        result \u003d []"},{"line_number":585,"context_line":"        criterion \u003d {"},{"line_number":586,"context_line":"            \u0027pool_id\u0027: CONF[\u0027service:pool_manager\u0027].pool_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_b85aea81","line":583,"updated":"2016-02-04 12:47:57.000000000","message":"\"\"\"\nFetch zones that are in ERROR status or have been PENDING for a long time.\nUsed by periodic recovery.\n\nAfter a certain time changes either should have successfully propagated, or gone to an ERROR state. However, random failures and undiscovered bugs leave zones hanging out in PENDING state forever.\nBy treating those \"stale\" zones as failed, periodic recovery will attempt to restore them.\n:return: :class:`ZoneList` zones\n\"\"\"\n\nshould we return a ZoneList instead of just a list?","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"6de7195172c9b1629e33ddc08227d75b2dc73190","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            \u0027action\u0027: action,"},{"line_number":588,"context_line":"            \u0027status\u0027: ERROR_STATUS"},{"line_number":589,"context_line":"        }"},{"line_number":590,"context_line":"        result +\u003d self.central_api.find_zones(context, criterion)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # Include things that have been hanging out in PENDING"},{"line_number":593,"context_line":"        # status for longer than they should"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_18c0dedf","line":590,"updated":"2016-02-04 12:47:57.000000000","message":"extend() instead of +\u003d is slightly more explicit, and safer.","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"482df00465c5d31401dc2007686186d9e2406ef6","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            \u0027action\u0027: action,"},{"line_number":588,"context_line":"            \u0027status\u0027: ERROR_STATUS"},{"line_number":589,"context_line":"        }"},{"line_number":590,"context_line":"        result +\u003d self.central_api.find_zones(context, criterion)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # Include things that have been hanging out in PENDING"},{"line_number":593,"context_line":"        # status for longer than they should"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_ae304902","line":590,"in_reply_to":"5a5ae5dd_08fab575","updated":"2016-02-04 20:28:23.000000000","message":"(I\u0027m not sure if ZoneList would support extend and/or +\u003d)","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"cb017e53174b422bab2c68cc795c0de417144c71","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            \u0027action\u0027: action,"},{"line_number":588,"context_line":"            \u0027status\u0027: ERROR_STATUS"},{"line_number":589,"context_line":"        }"},{"line_number":590,"context_line":"        result +\u003d self.central_api.find_zones(context, criterion)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # Include things that have been hanging out in PENDING"},{"line_number":593,"context_line":"        # status for longer than they should"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_08fab575","line":590,"in_reply_to":"5a5ae5dd_18c0dedf","updated":"2016-02-04 19:34:15.000000000","message":"Or you could just set result to the return value of find_zones. Even better might be to call it errored_zone_results.","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"6de7195172c9b1629e33ddc08227d75b2dc73190","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                                               \u0027status\u0027: PENDING_STATUS,"},{"line_number":605,"context_line":"                                               \u0027seconds\u0027: self.max_prop_time})"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        result +\u003d self.central_api.find_zones(context, criterion_two)"},{"line_number":608,"context_line":"        return result"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def _fetch_healthy_zones(self, context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_33e85d10","line":607,"updated":"2016-02-04 12:47:57.000000000","message":"I would log a warning given that stale zones are a real problem.\n\nstale_zones \u003d self.central....\nif stale_zones:\n    LOG.warn(_LI(\"%d zones in PENDING for more %d sec detected\" % (len(stale_zones), self.max_prop_time))\n    result.extend(stale_zones)","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"cb017e53174b422bab2c68cc795c0de417144c71","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                                               \u0027status\u0027: PENDING_STATUS,"},{"line_number":605,"context_line":"                                               \u0027seconds\u0027: self.max_prop_time})"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        result +\u003d self.central_api.find_zones(context, criterion_two)"},{"line_number":608,"context_line":"        return result"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def _fetch_healthy_zones(self, context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_0856355c","line":607,"in_reply_to":"5a5ae5dd_33e85d10","updated":"2016-02-04 19:34:15.000000000","message":"Related to my comment regarding results, you could call it pending_zone_results and return errored_zone_results + pending_zone_results, which help communicates what \"failed\" zones really are.","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"a6544ddea4c4b869f65099064ac420efc9186432","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @property"},{"line_number":194,"context_line":"    def pool_manager_api(self):"},{"line_number":195,"context_line":"        return pool_manager_rpcapi.PoolManagerAPI.get_instance()"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _get_admin_context_all_tenants(self):"},{"line_number":198,"context_line":"        return DesignateContext.get_admin_context(all_tenants\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_ae91299b","line":195,"updated":"2016-02-04 19:58:26.000000000","message":"@elarson re: you comment on PS1. We do something similar here https://github.com/openstack/designate/blob/master/designate/pool_manager/rpcapi.py#L26\n\nBut I think would be more expressive to do it here.","commit_id":"c718a45a746ab048aa4f02e7a10bff65f6d75f13"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"a6544ddea4c4b869f65099064ac420efc9186432","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            LOG.info(_LI(\"periodic_recovery:delete_zone needed on %d zones\"),"},{"line_number":216,"context_line":"                     len(zones))"},{"line_number":217,"context_line":"            for zone in zones:"},{"line_number":218,"context_line":"                self.pool_manager_api.delete_zone(context, zone)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"            # Handle Creation Failures"},{"line_number":221,"context_line":"            zones \u003d self._get_failed_zones(context, CREATE_ACTION)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_6ed1f156","line":218,"updated":"2016-02-04 19:58:26.000000000","message":"@elarson: Re your comment on PS1. I agree, that would be better. There are so many ways this code could be better, I hope to worker on it all at once some time ;)","commit_id":"c718a45a746ab048aa4f02e7a10bff65f6d75f13"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"e614f2b9c96a83842195fc83f31a45658532c8db","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                                      \u0027sec\u0027: self.max_prop_time})"},{"line_number":621,"context_line":"            zones.extend(stale_zones)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        return zones"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    def _fetch_healthy_zones(self, context):"},{"line_number":626,"context_line":"        \"\"\"Fetch all zones not in error"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_532aa22d","line":623,"updated":"2016-02-04 19:38:28.000000000","message":"I\u0027m a fan of doing errored_zones + stale_zones here as I think it helps confirm the meaning of \"failed\".","commit_id":"c718a45a746ab048aa4f02e7a10bff65f6d75f13"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"a6544ddea4c4b869f65099064ac420efc9186432","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                                      \u0027sec\u0027: self.max_prop_time})"},{"line_number":621,"context_line":"            zones.extend(stale_zones)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        return zones"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    def _fetch_healthy_zones(self, context):"},{"line_number":626,"context_line":"        \"\"\"Fetch all zones not in error"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_0e3e3db8","line":623,"in_reply_to":"5a5ae5dd_532aa22d","updated":"2016-02-04 19:58:26.000000000","message":"That is better, if there\u0027s another patch, I will.","commit_id":"c718a45a746ab048aa4f02e7a10bff65f6d75f13"}],"designate/tests/test_pool_manager/test_service.py":[{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"6de7195172c9b1629e33ddc08227d75b2dc73190","unresolved":false,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        # the zones have been put in ERROR status"},{"line_number":537,"context_line":"        self.assertEqual(3, mock_cent_update_status.call_count)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    # Periodic recovery"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @patch.object(pm_module.time, \u0027sleep\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_f305e5c1","side":"PARENT","line":538,"updated":"2016-02-04 12:47:57.000000000","message":"Why is this being removed?","commit_id":"eba1f9e9b4e5f67b94fdb15192359d09bd0dba72"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"e36de922d95531f09452af70d2c83a685ee24974","unresolved":false,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        # the zones have been put in ERROR status"},{"line_number":537,"context_line":"        self.assertEqual(3, mock_cent_update_status.call_count)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    # Periodic recovery"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @patch.object(pm_module.time, \u0027sleep\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_5d107a01","side":"PARENT","line":538,"in_reply_to":"5a5ae5dd_f305e5c1","updated":"2016-02-04 16:14:56.000000000","message":"Because it failed, and in general when tests fail in the old units, we\u0027re deleting and implementing them in the new unit tests.","commit_id":"eba1f9e9b4e5f67b94fdb15192359d09bd0dba72"}],"designate/tests/unit/test_pool_manager/test_service.py":[{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"6de7195172c9b1629e33ddc08227d75b2dc73190","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            with patch.object(pm_module.utils, \u0027increment_serial\u0027,"},{"line_number":100,"context_line":"                              return_value\u003d1453758656):"},{"line_number":101,"context_line":"                self.pm._get_failed_zones(\u0027ctx\u0027, pm_module.DELETE_ACTION)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            call_one \u003d call(\u0027ctx\u0027, {\u0027action\u0027: \u0027DELETE\u0027, \u0027status\u0027: \u0027ERROR\u0027,"},{"line_number":104,"context_line":"                                    \u0027pool_id\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_b3abed88","line":101,"updated":"2016-02-04 12:47:57.000000000","message":"Maybe this is still WIP? Are you testing that _get_failed_zones:\n- returns zones in ERROR\n- returns \"stale\" PENDING zones\n- does not return \"fresh\" PENDING zones   ?","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"e36de922d95531f09452af70d2c83a685ee24974","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            with patch.object(pm_module.utils, \u0027increment_serial\u0027,"},{"line_number":100,"context_line":"                              return_value\u003d1453758656):"},{"line_number":101,"context_line":"                self.pm._get_failed_zones(\u0027ctx\u0027, pm_module.DELETE_ACTION)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            call_one \u003d call(\u0027ctx\u0027, {\u0027action\u0027: \u0027DELETE\u0027, \u0027status\u0027: \u0027ERROR\u0027,"},{"line_number":104,"context_line":"                                    \u0027pool_id\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_7daf7694","line":101,"in_reply_to":"5a5ae5dd_b3abed88","updated":"2016-02-04 16:14:56.000000000","message":"Yes, I\u0027m testing that it gets zones in ERROR (which it always did) and PENDING zones that have been hanging out too long. That\u0027s part of the \"feature\" in this patch. (commit msg explains rationale.)","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"cb017e53174b422bab2c68cc795c0de417144c71","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.pm.pool_manager_api.delete_zone \u003d Mock()"},{"line_number":155,"context_line":"        self.pm.pool_manager_api.create_zone \u003d Mock("},{"line_number":156,"context_line":"                                                side_effect\u003dException(\u0027oops\u0027)"},{"line_number":157,"context_line":"                                               )"},{"line_number":158,"context_line":"        self.pm.pool_manager_api.update_zone \u003d Mock()"},{"line_number":159,"context_line":"        mock_ctx \u003d mock_get_ctx.return_value"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_28ad3131","line":157,"updated":"2016-02-04 19:34:15.000000000","message":"I\u0027d indent this like:\n\n    self.pm.pool_manager_api.create_zone \u003d Mock(\n        side_effect\u003dException(\u0027oops\u0027)\n    )\n\nUnless of course the diff in gerrit is not telling the truth ;)","commit_id":"fe140b3ee58f1a54faeb7f89c400c2f22d8369c8"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"e614f2b9c96a83842195fc83f31a45658532c8db","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.pm.pool_manager_api.delete_zone \u003d Mock()"},{"line_number":155,"context_line":"        self.pm.pool_manager_api.create_zone \u003d Mock("},{"line_number":156,"context_line":"                                                side_effect\u003dException(\u0027oops\u0027)"},{"line_number":157,"context_line":"                                               )"},{"line_number":158,"context_line":"        self.pm.pool_manager_api.update_zone \u003d Mock()"},{"line_number":159,"context_line":"        mock_ctx \u003d mock_get_ctx.return_value"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_d31692f0","line":157,"updated":"2016-02-04 19:38:28.000000000","message":"This indentation is weird to me.","commit_id":"c718a45a746ab048aa4f02e7a10bff65f6d75f13"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"a6544ddea4c4b869f65099064ac420efc9186432","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.pm.pool_manager_api.delete_zone \u003d Mock()"},{"line_number":155,"context_line":"        self.pm.pool_manager_api.create_zone \u003d Mock("},{"line_number":156,"context_line":"                                                side_effect\u003dException(\u0027oops\u0027)"},{"line_number":157,"context_line":"                                               )"},{"line_number":158,"context_line":"        self.pm.pool_manager_api.update_zone \u003d Mock()"},{"line_number":159,"context_line":"        mock_ctx \u003d mock_get_ctx.return_value"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_6e4ed170","line":157,"in_reply_to":"5a5ae5dd_d31692f0","updated":"2016-02-04 19:58:26.000000000","message":"I found something that pleased the flake8 gods when I was in a hurry, so I stuck with it, I hate it too. If there\u0027s another patch I\u0027ll fix it.","commit_id":"c718a45a746ab048aa4f02e7a10bff65f6d75f13"}]}
