)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1c89729dda237a91f08df49fd3bd7deb3a9135fb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     huangtianhua \u003chuangtianhua@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-24 15:57:48 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The nova update_security_group api raise exception"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When security_group_api is nova,the update_security_group api raises http"},{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F%2F8mw%3D","line":7,"updated":"2013-10-24 18:58:35.000000000","message":"This needs a much better subject line, IMHO. Perhaps:\n\n Fix a lazy-load exception in update_security_group()","commit_id":"95f6410e0abb3cc4614bbc36560eeb0080939875"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7041bbea3bee54321839d1f1438965cc00ecb604","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     huangtianhua \u003chuangtianhua@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-25 18:21:31 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix a lazy-load exception in update_security_group()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When security_group_api is nova,the update_security_group api raises http"},{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2Fwoo%3D","line":7,"updated":"2013-10-29 13:38:37.000000000","message":"Please correct this to use the actual function name. I was just speaking from memory before.","commit_id":"e711309d586061bd9a5dd275b56a005702cabe92"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7041bbea3bee54321839d1f1438965cc00ecb604","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix a lazy-load exception in update_security_group()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When security_group_api is nova,the update_security_group api raises http"},{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1244018"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2Fwog%3D","line":10,"updated":"2013-10-29 13:38:37.000000000","message":"More description here would be appreciated. What is actually triggering the load?","commit_id":"e711309d586061bd9a5dd275b56a005702cabe92"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7041bbea3bee54321839d1f1438965cc00ecb604","unresolved":false,"context_lines":[{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1244018"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie07879ac22e4add90f75968778bf334915e8349c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2Fwoc%3D","line":13,"updated":"2013-10-29 13:38:37.000000000","message":"No space here.","commit_id":"e711309d586061bd9a5dd275b56a005702cabe92"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"70c463890b3f980af49d71bf7e71a3ae837ff507","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When security_group_api is nova,the update_security_group api raises http"},{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception.Because the rule"},{"line_number":11,"context_line":"infos of the security group will be return in response body,but the rule"},{"line_number":12,"context_line":"attribute hasn\u0027t be preloaded."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1244018"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2BtVk%3D","line":11,"updated":"2013-11-21 09:11:53.000000000","message":"\"body,but\" \u003d\u003d\u003e \"body, but \"","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"8d62fa9b02f356d3a535f107cd81ff35e6377188","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When security_group_api is nova,the update_security_group api raises http"},{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception.Because the rule"},{"line_number":11,"context_line":"infos of the security group will be return in response body,but the rule"},{"line_number":12,"context_line":"attribute hasn\u0027t be preloaded."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1244018"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2Bof8%3D","line":11,"in_reply_to":"AAAATn%2F%2BtVk%3D","updated":"2013-11-22 08:07:23.000000000","message":"I will modify this.Thanks.","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"70c463890b3f980af49d71bf7e71a3ae837ff507","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When security_group_api is nova,the update_security_group api raises http"},{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception.Because the rule"},{"line_number":11,"context_line":"infos of the security group will be return in response body,but the rule"},{"line_number":12,"context_line":"attribute hasn\u0027t be preloaded."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1244018"},{"line_number":15,"context_line":"Change-Id: Ie07879ac22e4add90f75968778bf334915e8349c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2BtVc%3D","line":12,"updated":"2013-11-21 09:11:53.000000000","message":"be \u003d\u003d\u003e been","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"8d62fa9b02f356d3a535f107cd81ff35e6377188","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When security_group_api is nova,the update_security_group api raises http"},{"line_number":10,"context_line":"500 error:group rules fails with lazy load exception.Because the rule"},{"line_number":11,"context_line":"infos of the security group will be return in response body,but the rule"},{"line_number":12,"context_line":"attribute hasn\u0027t be preloaded."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1244018"},{"line_number":15,"context_line":"Change-Id: Ie07879ac22e4add90f75968778bf334915e8349c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2Bof4%3D","line":12,"in_reply_to":"AAAATn%2F%2BtVc%3D","updated":"2013-11-22 08:07:23.000000000","message":"I will modify this.Thanks.","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"}],"nova/api/openstack/compute/contrib/security_groups.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"cf418eaf30a56b777ed8f18f3516fb3d751d74b3","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            id \u003d self.security_group_api.validate_id(id)"},{"line_number":328,"context_line":"            security_group \u003d self.security_group_api.get(context, None, id,"},{"line_number":329,"context_line":"                                                         map_exception\u003dTrue)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        security_group_data \u003d self._from_body(body, \u0027security_group\u0027)"},{"line_number":332,"context_line":"        group_name \u003d security_group_data.get(\u0027name\u0027, None)"},{"line_number":333,"context_line":"        group_description \u003d security_group_data.get(\u0027description\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2F%2F2o%3D","side":"PARENT","line":330,"updated":"2013-10-24 03:09:44.000000000","message":"we should not touch the file witch without any change","commit_id":"8f62dd1f054475c0644c83031b86c8e622253ddc"}],"nova/compute/api.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d86739da63041242f5c89a89821ecaf9ad66bf76","unresolved":false,"context_lines":[{"line_number":3426,"context_line":"        group \u003d {\u0027name\u0027: name,"},{"line_number":3427,"context_line":"                 \u0027description\u0027: description}"},{"line_number":3428,"context_line":""},{"line_number":3429,"context_line":"        columns_to_join \u003d [\u0027rules.grantee_group\u0027]"},{"line_number":3430,"context_line":"        group_ref \u003d self.db.security_group_update(context,"},{"line_number":3431,"context_line":"                security_group[\u0027id\u0027],"},{"line_number":3432,"context_line":"                group,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Byiw%3D","line":3429,"updated":"2013-11-20 06:20:19.000000000","message":"we don\u0027t need this extra line here, columns_to_join\u003d[\u0027rules.grantee_group\u0027] on line 3433 will be fine.","commit_id":"f864b22b6f3ff9b36765e0c25240f065a778db39"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"70c463890b3f980af49d71bf7e71a3ae837ff507","unresolved":false,"context_lines":[{"line_number":3442,"context_line":"        group \u003d {\u0027name\u0027: name,"},{"line_number":3443,"context_line":"                 \u0027description\u0027: description}"},{"line_number":3444,"context_line":""},{"line_number":3445,"context_line":"        columns_to_join \u003d [\u0027rules.grantee_group\u0027]"},{"line_number":3446,"context_line":"        group_ref \u003d self.db.security_group_update(context,"},{"line_number":3447,"context_line":"                security_group[\u0027id\u0027],"},{"line_number":3448,"context_line":"                group,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BtU4%3D","line":3445,"updated":"2013-11-21 09:11:53.000000000","message":"Can you please add a unit test case for this?","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"8d62fa9b02f356d3a535f107cd81ff35e6377188","unresolved":false,"context_lines":[{"line_number":3442,"context_line":"        group \u003d {\u0027name\u0027: name,"},{"line_number":3443,"context_line":"                 \u0027description\u0027: description}"},{"line_number":3444,"context_line":""},{"line_number":3445,"context_line":"        columns_to_join \u003d [\u0027rules.grantee_group\u0027]"},{"line_number":3446,"context_line":"        group_ref \u003d self.db.security_group_update(context,"},{"line_number":3447,"context_line":"                security_group[\u0027id\u0027],"},{"line_number":3448,"context_line":"                group,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2Bofo%3D","line":3445,"in_reply_to":"AAAATn%2F%2BtU4%3D","updated":"2013-11-22 08:07:23.000000000","message":"Thanks.\nSee the other reply for you","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"8b2be884c78455ca5db5d727ad931e864bef487a","unresolved":false,"context_lines":[{"line_number":3451,"context_line":"        group \u003d {\u0027name\u0027: name,"},{"line_number":3452,"context_line":"                 \u0027description\u0027: description}"},{"line_number":3453,"context_line":""},{"line_number":3454,"context_line":"        columns_to_join \u003d [\u0027rules.grantee_group\u0027]"},{"line_number":3455,"context_line":"        group_ref \u003d self.db.security_group_update(context,"},{"line_number":3456,"context_line":"                security_group[\u0027id\u0027],"},{"line_number":3457,"context_line":"                group,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9AKo%3D","line":3454,"updated":"2013-12-17 20:35:49.000000000","message":"nit: this line isn\u0027t needed","commit_id":"b9b55935cb61cc1726525b1c4963e352a3a81ea9"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1c89729dda237a91f08df49fd3bd7deb3a9135fb","unresolved":false,"context_lines":[{"line_number":3700,"context_line":"        if not security_group_ref:"},{"line_number":3701,"context_line":"            raise exception.SecurityGroupNotFound("},{"line_number":3702,"context_line":"                    security_group_id\u003dsecurity_group_id)"},{"line_number":3703,"context_line":"        security_group_ref.rules"},{"line_number":3704,"context_line":"        security_group_ref.update(values)"},{"line_number":3705,"context_line":"        name \u003d security_group_ref[\u0027name\u0027]"},{"line_number":3706,"context_line":"        project_id \u003d security_group_ref[\u0027project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F8mc%3D","line":3703,"updated":"2013-10-24 18:58:35.000000000","message":"This just triggers the lazy-load early, right? If I understand correctly, this makes this method trigger two calls to the database every time. Can you just fix the query above to join rules to avoid this?\n\nI didn\u0027t survey every call to this method, but if there are others that do not use rules, then you should make it conditional with a \"columns_to_join\" list, per local convention.","commit_id":"95f6410e0abb3cc4614bbc36560eeb0080939875"}],"nova/tests/api/openstack/compute/contrib/test_security_groups.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"70c463890b3f980af49d71bf7e71a3ae837ff507","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            return security_group_db(sg)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        def return_update_security_group(context, group_id, values,"},{"line_number":430,"context_line":"                                         columns_to_join\u003dNone):"},{"line_number":431,"context_line":"            self.assertEqual(sg_update[\u0027id\u0027], group_id)"},{"line_number":432,"context_line":"            self.assertEqual(sg_update[\u0027name\u0027], values[\u0027name\u0027])"},{"line_number":433,"context_line":"            self.assertEqual(sg_update[\u0027description\u0027], values[\u0027description\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BtUo%3D","line":430,"updated":"2013-11-21 09:11:53.000000000","message":"Can you test a case which is not None for columns_to_join?","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"8d62fa9b02f356d3a535f107cd81ff35e6377188","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            return security_group_db(sg)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        def return_update_security_group(context, group_id, values,"},{"line_number":430,"context_line":"                                         columns_to_join\u003dNone):"},{"line_number":431,"context_line":"            self.assertEqual(sg_update[\u0027id\u0027], group_id)"},{"line_number":432,"context_line":"            self.assertEqual(sg_update[\u0027name\u0027], values[\u0027name\u0027])"},{"line_number":433,"context_line":"            self.assertEqual(sg_update[\u0027description\u0027], values[\u0027description\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BogE%3D","line":430,"in_reply_to":"AAAATn%2F%2BtUo%3D","updated":"2013-11-22 08:07:23.000000000","message":"In my opinion:\n1.whether the columns_to_join is None just effect in db_layer.I modify the related test in db_layer already :)\n2.Here set the default value for rules to [] while create a group,so whether the columns_to_join is None is not matter.\n\nYou mean i should create rules for group here?","commit_id":"07ee0354defe1d88bd40db0790993fd8acce0cbc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcc0df5955ba745cca37c240525137a261b2a39b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            return security_group_db(sg)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        def return_update_security_group(context, group_id, values,"},{"line_number":430,"context_line":"                                         columns_to_join\u003dNone):"},{"line_number":431,"context_line":"            self.assertEqual(sg_update[\u0027id\u0027], group_id)"},{"line_number":432,"context_line":"            self.assertEqual(sg_update[\u0027name\u0027], values[\u0027name\u0027])"},{"line_number":433,"context_line":"            self.assertEqual(sg_update[\u0027description\u0027], values[\u0027description\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Be34%3D","line":430,"updated":"2013-11-25 16:36:47.000000000","message":"This is not necessary.","commit_id":"5ce60368a93a7bd05ad11ed50d8a3ff4156167eb"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"c8a333edafc491f460c67b7ae9ad4f1f803ad4fe","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            return security_group_db(sg)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        def return_update_security_group(context, group_id, values,"},{"line_number":430,"context_line":"                                         columns_to_join\u003dNone):"},{"line_number":431,"context_line":"            self.assertEqual(sg_update[\u0027id\u0027], group_id)"},{"line_number":432,"context_line":"            self.assertEqual(sg_update[\u0027name\u0027], values[\u0027name\u0027])"},{"line_number":433,"context_line":"            self.assertEqual(sg_update[\u0027description\u0027], values[\u0027description\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2BcHE%3D","line":430,"in_reply_to":"AAAATn%2F%2Be34%3D","updated":"2013-11-26 02:33:50.000000000","message":"Thank you.\nI don\u0027t think can remove this.Because the api_layer call the db.security_group_update should take \"columns_to_join\" para, and the value be [\u0027rules.grantee_group\u0027] when update a security_group.\nIf i remove this, it will raise the \"TypeError\" exception.","commit_id":"5ce60368a93a7bd05ad11ed50d8a3ff4156167eb"}],"nova/tests/db/test_db_api.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d86739da63041242f5c89a89821ecaf9ad66bf76","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"        updated_group \u003d db.security_group_update(self.ctxt,"},{"line_number":1309,"context_line":"                                        security_group[\u0027id\u0027],"},{"line_number":1310,"context_line":"                                        new_values,"},{"line_number":1311,"context_line":"                                        columns_to_join\u003dcolumns_to_join)"},{"line_number":1312,"context_line":"        for key, value in new_values.iteritems():"},{"line_number":1313,"context_line":"            self.assertEqual(updated_group[key], value)"},{"line_number":1314,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Byig%3D","line":1311,"updated":"2013-11-20 06:20:19.000000000","message":"we need to add asserts that explicitly check rules.grantee_group loaded succeed.","commit_id":"f864b22b6f3ff9b36765e0c25240f065a778db39"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"d2c1ac4cf38bb7fee7aa06ceabdcd5817a8ba01e","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"        updated_group \u003d db.security_group_update(self.ctxt,"},{"line_number":1309,"context_line":"                                        security_group[\u0027id\u0027],"},{"line_number":1310,"context_line":"                                        new_values,"},{"line_number":1311,"context_line":"                                        columns_to_join\u003dcolumns_to_join)"},{"line_number":1312,"context_line":"        for key, value in new_values.iteritems():"},{"line_number":1313,"context_line":"            self.assertEqual(updated_group[key], value)"},{"line_number":1314,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2ByGU%3D","line":1311,"in_reply_to":"AAAATn%2F%2Byig%3D","updated":"2013-11-20 09:16:45.000000000","message":"I was try to assert \u0027rules\u0027 in \u0027updated_group\u0027,but it failed,error msg as  follows:\n\"DetachedInstanceError: Parent instance \u003cSecurityGroup at 0xb19d890\u003e is not bound to a Session; lazy load operation of attribute \u0027rules\u0027 cannot proceed\"\nI don\u0027t know why?\nWould you please give me some advice?\nThanks very much.","commit_id":"f864b22b6f3ff9b36765e0c25240f065a778db39"}]}
