)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"9dc31c9ba96cd80fcb12f60c1757730fc1ae4e63","unresolved":false,"context_lines":[{"line_number":7,"context_line":"move region and service exist checks into manager layer"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When creating or updating endpoint we should check if the region or"},{"line_number":10,"context_line":"service passed exists. But it is confused in our current implement:"},{"line_number":11,"context_line":"some checks are in backends, some checks are in controller, some"},{"line_number":12,"context_line":"checks are duplicated, some checks are missing..."},{"line_number":13,"context_line":"Now, move these checks into manager where they should be."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_79b9deeb","line":10,"updated":"2014-12-16 11:57:12.000000000","message":"nit: s/implement/implementation","commit_id":"f90453fbde371ba854205079097b1f5eed693be8"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"9dc31c9ba96cd80fcb12f60c1757730fc1ae4e63","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When creating or updating endpoint we should check if the region or"},{"line_number":10,"context_line":"service passed exists. But it is confused in our current implement:"},{"line_number":11,"context_line":"some checks are in backends, some checks are in controller, some"},{"line_number":12,"context_line":"checks are duplicated, some checks are missing..."},{"line_number":13,"context_line":"Now, move these checks into manager where they should be."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I191394540ffe43f0ee9f0d28e00e70d44bfcf701"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_d9b812e8","line":12,"updated":"2014-12-16 11:57:12.000000000","message":"Didn\u0027t get why the three dots here.","commit_id":"f90453fbde371ba854205079097b1f5eed693be8"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"9dc31c9ba96cd80fcb12f60c1757730fc1ae4e63","unresolved":false,"context_lines":[{"line_number":10,"context_line":"service passed exists. But it is confused in our current implement:"},{"line_number":11,"context_line":"some checks are in backends, some checks are in controller, some"},{"line_number":12,"context_line":"checks are duplicated, some checks are missing..."},{"line_number":13,"context_line":"Now, move these checks into manager where they should be."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I191394540ffe43f0ee9f0d28e00e70d44bfcf701"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_19ca9a6e","line":13,"updated":"2014-12-16 11:57:12.000000000","message":"sounds like a bp/whishlist bug","commit_id":"f90453fbde371ba854205079097b1f5eed693be8"}],"keystone/catalog/core.py":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"d6e2928bb5f882d08a02e868800e68a6258d1a38","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":186,"context_line":"            if endpoint_ref.get(\u0027service_id\u0027) is not None:"},{"line_number":187,"context_line":"                self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":188,"context_line":"        except exception.RegionNotFound:"},{"line_number":189,"context_line":"            raise exception.ValidationError(attribute\u003d\u0027endpoint region_id\u0027,"},{"line_number":190,"context_line":"                                            target\u003d\u0027region table\u0027)"},{"line_number":191,"context_line":"        except exception.ServiceNotFound:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_a3d6c5c3","line":188,"updated":"2015-01-21 06:53:49.000000000","message":"Who is throwing these exceptions and on what conditions they are thrown? .","commit_id":"5343b231eb89268cc56f2b596576f611c7c0bced"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"5c15d1d1ee937e14c445936c1bf9eb6a73bb0e10","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":186,"context_line":"            if endpoint_ref.get(\u0027service_id\u0027) is not None:"},{"line_number":187,"context_line":"                self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":188,"context_line":"        except exception.RegionNotFound:"},{"line_number":189,"context_line":"            raise exception.ValidationError(attribute\u003d\u0027endpoint region_id\u0027,"},{"line_number":190,"context_line":"                                            target\u003d\u0027region table\u0027)"},{"line_number":191,"context_line":"        except exception.ServiceNotFound:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_b940b236","line":188,"in_reply_to":"1a930d6b_a3d6c5c3","updated":"2015-01-21 08:07:37.000000000","message":"self.get_region will raise RegionNotFound when no region found.","commit_id":"5343b231eb89268cc56f2b596576f611c7c0bced"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"3bbb6d1b0634792c4504fa98c6dbe2bd2d422520","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    @notifications.created(_ENDPOINT, public\u003dFalse)"},{"line_number":196,"context_line":"    def create_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":197,"context_line":"        self._assert_region_and_service_exist(endpoint_ref)"},{"line_number":198,"context_line":"        return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @notifications.updated(_ENDPOINT, public\u003dFalse)"},{"line_number":201,"context_line":"    def update_endpoint(self, endpoint_id, endpoint_ref):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_9e74a5fe","line":198,"updated":"2015-01-21 17:35:12.000000000","message":"Can you please create test with endpoint_id and no body?  I.e endpoint_ref is none.","commit_id":"5343b231eb89268cc56f2b596576f611c7c0bced"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"b34e48bc6eaff6341eca105da3417e251eb498f4","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    @notifications.created(_ENDPOINT, public\u003dFalse)"},{"line_number":196,"context_line":"    def create_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":197,"context_line":"        self._assert_region_and_service_exist(endpoint_ref)"},{"line_number":198,"context_line":"        return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @notifications.updated(_ENDPOINT, public\u003dFalse)"},{"line_number":201,"context_line":"    def update_endpoint(self, endpoint_id, endpoint_ref):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_6a2c8948","line":198,"in_reply_to":"1a930d6b_9e74a5fe","updated":"2015-01-22 02:03:44.000000000","message":"I think controller layer will prevent this behavior, so we don\u0027t need this test.","commit_id":"5343b231eb89268cc56f2b596576f611c7c0bced"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"50f6ecc157f9011c47adacffc01a9990671b2c11","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _assert_region_and_service_exist(self, endpoint_ref):"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":185,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":186,"context_line":"            if endpoint_ref.get(\u0027service_id\u0027) is not None:"},{"line_number":187,"context_line":"                self.get_service(endpoint_ref[\u0027service_id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_41de3a3f","line":184,"updated":"2015-02-19 00:08:19.000000000","message":"Check both region and region_id for backward compatibility.\n\nThe region would have already been created by the Controller if the region does not exists\n- V2 https://github.com/openstack/keystone/blob/master/keystone/catalog/controllers.py#L104\n- V3 \nhttps://github.com/openstack/keystone/blob/master/keystone/catalog/controllers.py#L299\n\nthis check is not required. \n\nShould that region auto-creation logic move to the manager too?","commit_id":"0976817c489be5973683c169d71de2dfcb6cb1f5"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"0f35623391845b4d61b6c82bdb86e44beaf7af81","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _assert_region_and_service_exist(self, endpoint_ref):"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":185,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":186,"context_line":"            if endpoint_ref.get(\u0027service_id\u0027) is not None:"},{"line_number":187,"context_line":"                self.get_service(endpoint_ref[\u0027service_id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_6351a035","line":184,"in_reply_to":"da86d52c_41de3a3f","updated":"2015-02-25 03:10:09.000000000","message":"1. It seams that we do region auto-creation logic only when we specify \u0027region\u0027 parameter. But, we can specify \u0027region_id\u0027 parameter too.\n\n2. I can\u0027t find the review but there is an another patch to do this.","commit_id":"0976817c489be5973683c169d71de2dfcb6cb1f5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4a705ec895049c033ac38ad93f9a17160ff80b71","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def list_services(self, hints\u003dNone):"},{"line_number":180,"context_line":"        return self.driver.list_services(hints or driver_hints.Hints())"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _assert_region_and_service_exist(self, endpoint_ref):"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":185,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_e02e4afa","line":182,"updated":"2015-02-25 15:41:32.000000000","message":"I\u0027d rather see this take region_id and service_id as args. That way create and continue to expect them passing in endpoint_ref[\u0027region_id\u0027] and update can still be optional by passing in endpoint_ref.get(\u0027region_id\u0027)","commit_id":"9f7e751ff34a9c8a9ce257c2a59378aeb013f810"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"593187b6e932957d544f99ebd4d07f08178b91c9","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def list_services(self, hints\u003dNone):"},{"line_number":180,"context_line":"        return self.driver.list_services(hints or driver_hints.Hints())"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _assert_region_and_service_exist(self, endpoint_ref):"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":185,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_8529fc8b","line":182,"in_reply_to":"ba7be1f8_67fb3a47","updated":"2015-02-26 08:36:27.000000000","message":"region_id is not required but service_id is.","commit_id":"9f7e751ff34a9c8a9ce257c2a59378aeb013f810"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"01d4650cf48a23034efb518f3fd380ba555d772e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def list_services(self, hints\u003dNone):"},{"line_number":180,"context_line":"        return self.driver.list_services(hints or driver_hints.Hints())"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _assert_region_and_service_exist(self, endpoint_ref):"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":185,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_67fb3a47","line":182,"in_reply_to":"ba7be1f8_e02e4afa","updated":"2015-02-26 00:36:51.000000000","message":"++ nice suggestion","commit_id":"9f7e751ff34a9c8a9ce257c2a59378aeb013f810"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"5954e5f0eda13f29890d7c27f61cbd01216db5da","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def list_services(self, hints\u003dNone):"},{"line_number":183,"context_line":"        return self.driver.list_services(hints or driver_hints.Hints())"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _assert_region_and_service_exist(self, region_id, service_id):"},{"line_number":186,"context_line":"        try:"},{"line_number":187,"context_line":"            if region_id is not None:"},{"line_number":188,"context_line":"                self.get_region(region_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_252425ae","line":185,"updated":"2015-03-06 15:15:19.000000000","message":"why not split this method into two?","commit_id":"84ed5907de45778ea31fec01243122f4d04ec20d"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"da4e018f0694bf7e0e45590fc079790f1e1fafdc","unresolved":false,"context_lines":[{"line_number":4742,"context_line":"                          self.catalog_api.delete_service,"},{"line_number":4743,"context_line":"                          uuid.uuid4().hex)"},{"line_number":4744,"context_line":""},{"line_number":4745,"context_line":"    def test_create_endpoint_nonexist_service(self):"},{"line_number":4746,"context_line":"        endpoint \u003d {"},{"line_number":4747,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":4748,"context_line":"            \u0027service_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_6db04cde","line":4745,"updated":"2015-01-21 04:47:54.000000000","message":"(nit) s/nonexist/nonexistent","commit_id":"5c49e7cb073bd7c04f53a6035b79d39f5f2e8c6a"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"da4e018f0694bf7e0e45590fc079790f1e1fafdc","unresolved":false,"context_lines":[{"line_number":4752,"context_line":"                          endpoint[\u0027id\u0027],"},{"line_number":4753,"context_line":"                          endpoint)"},{"line_number":4754,"context_line":""},{"line_number":4755,"context_line":"    def test_create_endpoint_nonexist_region(self):"},{"line_number":4756,"context_line":"        service \u003d {"},{"line_number":4757,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":4758,"context_line":"            \u0027type\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_cdcdc05f","line":4755,"updated":"2015-01-21 04:47:54.000000000","message":"Same here","commit_id":"5c49e7cb073bd7c04f53a6035b79d39f5f2e8c6a"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"da4e018f0694bf7e0e45590fc079790f1e1fafdc","unresolved":false,"context_lines":[{"line_number":4774,"context_line":"                          endpoint[\u0027id\u0027],"},{"line_number":4775,"context_line":"                          endpoint)"},{"line_number":4776,"context_line":""},{"line_number":4777,"context_line":"    def test_update_endpoint_nonexist_service(self):"},{"line_number":4778,"context_line":"        dummy_service, enabled_endpoint, dummy_disabled_endpoint \u003d ("},{"line_number":4779,"context_line":"            self._create_endpoints())"},{"line_number":4780,"context_line":"        new_endpoint \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_4d09d094","line":4777,"updated":"2015-01-21 04:47:54.000000000","message":"idem","commit_id":"5c49e7cb073bd7c04f53a6035b79d39f5f2e8c6a"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"da4e018f0694bf7e0e45590fc079790f1e1fafdc","unresolved":false,"context_lines":[{"line_number":4785,"context_line":"                          enabled_endpoint[\u0027id\u0027],"},{"line_number":4786,"context_line":"                          new_endpoint)"},{"line_number":4787,"context_line":""},{"line_number":4788,"context_line":"    def test_update_endpoint_nonexist_region(self):"},{"line_number":4789,"context_line":"        dummy_service, enabled_endpoint, dummy_disabled_endpoint \u003d ("},{"line_number":4790,"context_line":"            self._create_endpoints())"},{"line_number":4791,"context_line":"        new_endpoint \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_6dfe8c6d","line":4788,"updated":"2015-01-21 04:47:54.000000000","message":"idem","commit_id":"5c49e7cb073bd7c04f53a6035b79d39f5f2e8c6a"}],"keystone/tests/test_keystoneclient_sql.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"da4e018f0694bf7e0e45590fc079790f1e1fafdc","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self.default_client.ec2.delete(user_id\u003dself.user_foo[\u0027id\u0027],"},{"line_number":256,"context_line":"                                       access\u003dcred.access)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def test_endpoint_create_non_exist_service(self):"},{"line_number":259,"context_line":"        client \u003d self.get_client(admin\u003dTrue)"},{"line_number":260,"context_line":"        self.assertRaises(client_exceptions.BadRequest,"},{"line_number":261,"context_line":"                          client.endpoints.create,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_0dc1882e","line":258,"updated":"2015-01-21 04:47:54.000000000","message":"(nit) s/non_exist/non_existent","commit_id":"5c49e7cb073bd7c04f53a6035b79d39f5f2e8c6a"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4a705ec895049c033ac38ad93f9a17160ff80b71","unresolved":false,"context_lines":[{"line_number":4779,"context_line":"                          endpoint[\u0027id\u0027],"},{"line_number":4780,"context_line":"                          endpoint)"},{"line_number":4781,"context_line":""},{"line_number":4782,"context_line":"    def test_update_endpoint_nonexistent_service(self):"},{"line_number":4783,"context_line":"        dummy_service, enabled_endpoint, dummy_disabled_endpoint \u003d ("},{"line_number":4784,"context_line":"            self._create_endpoints())"},{"line_number":4785,"context_line":"        new_endpoint \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_80874eb4","line":4782,"updated":"2015-02-25 15:41:32.000000000","message":"Can you move this test up by the  test_create_endpoint_nonexistent_service test so that they are grouped together?","commit_id":"9f7e751ff34a9c8a9ce257c2a59378aeb013f810"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"01d4650cf48a23034efb518f3fd380ba555d772e","unresolved":false,"context_lines":[{"line_number":4779,"context_line":"                          endpoint[\u0027id\u0027],"},{"line_number":4780,"context_line":"                          endpoint)"},{"line_number":4781,"context_line":""},{"line_number":4782,"context_line":"    def test_update_endpoint_nonexistent_service(self):"},{"line_number":4783,"context_line":"        dummy_service, enabled_endpoint, dummy_disabled_endpoint \u003d ("},{"line_number":4784,"context_line":"            self._create_endpoints())"},{"line_number":4785,"context_line":"        new_endpoint \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_c7c226e8","line":4782,"in_reply_to":"ba7be1f8_80874eb4","updated":"2015-02-26 00:36:51.000000000","message":"I\u0027d prefer to have separate tests, since we can\u0027t guarantee the behavior will remain the same...","commit_id":"9f7e751ff34a9c8a9ce257c2a59378aeb013f810"}]}
