)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"2c75ba8b104d39d4453d1ee6b353d908931e285e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kim Bao Long \u003clongkb@vn.fujitsu.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-11-05 15:11:48 +0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP][log] Add RPC stuff for SNAT logging driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch aims to add RPC stuff that is called by SNAT logging driver"},{"line_number":10,"context_line":"that includes:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_81a91d26","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":5},"updated":"2018-11-06 10:40:17.000000000","message":"nit: Plz remove it.","commit_id":"46601c6f57048019c0815704f24568ae83f7ec5e"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"2b2159c450f98ae94c20dffc147b0ffbef9c4c5a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kim Bao Long \u003clongkb@vn.fujitsu.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-11-05 15:11:48 +0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP][log] Add RPC stuff for SNAT logging driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch aims to add RPC stuff that is called by SNAT logging driver"},{"line_number":10,"context_line":"that includes:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_472ea342","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":5},"in_reply_to":"3f79a3b5_81a91d26","updated":"2018-11-08 10:00:05.000000000","message":"Done","commit_id":"46601c6f57048019c0815704f24568ae83f7ec5e"}],"neutron/services/logapi/common/db_api.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"f31379453ea1ac29a472536e60582369a7020790","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    # If \u0027resource_id\u0027 (router_id) is specified in a snat_log"},{"line_number":242,"context_line":"    if resource_id:"},{"line_number":243,"context_line":"        router_obj \u003d router_objects.Router.get_object(context, id\u003dresource_id)"},{"line_number":244,"context_line":"        if router_obj:"},{"line_number":245,"context_line":"            routers \u003d [router_obj]"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6ad55f46","line":243,"range":{"start_line":243,"start_character":7,"end_line":243,"end_character":78},"updated":"2018-10-16 08:17:01.000000000","message":"If there is no router objects, what value will be returned?  In case of spceified \u0027resource_id\u0027 and there is no routers, \u0027routers\u0027 are not defined and goes to line #253.","commit_id":"1915ebe614c7e07a9c768e61d4baabc591b5389a"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"dbef33646210dff0dd25bfcee687ba29e608af65","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    # If \u0027resource_id\u0027 (router_id) is specified in a snat_log"},{"line_number":242,"context_line":"    if resource_id:"},{"line_number":243,"context_line":"        router_obj \u003d router_objects.Router.get_object(context, id\u003dresource_id)"},{"line_number":244,"context_line":"        if router_obj:"},{"line_number":245,"context_line":"            routers \u003d [router_obj]"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_c6b0a000","line":243,"range":{"start_line":243,"start_character":7,"end_line":243,"end_character":78},"in_reply_to":"3f79a3b5_6ad55f46","updated":"2018-10-23 06:56:35.000000000","message":"Thanks. I will returned [] if there is no router object.","commit_id":"1915ebe614c7e07a9c768e61d4baabc591b5389a"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"f31379453ea1ac29a472536e60582369a7020790","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    # If \u0027resource_id\u0027 is not specified in a snat_log"},{"line_number":248,"context_line":"    else:"},{"line_number":249,"context_line":"        project_id \u003d snat_log[\u0027project_id\u0027]"},{"line_number":250,"context_line":"        routers \u003d router_objects.Router.get_objects(context,"},{"line_number":251,"context_line":"                                                    project_id\u003dproject_id)"},{"line_number":252,"context_line":"    # Get IDs from SNAT routers"},{"line_number":253,"context_line":"    snat_router_ids \u003d [router.id for router in routers if router.enable_snat]"},{"line_number":254,"context_line":"    return snat_router_ids"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_aa3db78d","line":251,"range":{"start_line":249,"start_character":1,"end_line":251,"end_character":74},"updated":"2018-10-16 08:17:01.000000000","message":"Router must be specified as \u0027resource_id\u0027.  It\u0027s OK to raise an exception at that moment I think.","commit_id":"1915ebe614c7e07a9c768e61d4baabc591b5389a"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"dbef33646210dff0dd25bfcee687ba29e608af65","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    # If \u0027resource_id\u0027 is not specified in a snat_log"},{"line_number":248,"context_line":"    else:"},{"line_number":249,"context_line":"        project_id \u003d snat_log[\u0027project_id\u0027]"},{"line_number":250,"context_line":"        routers \u003d router_objects.Router.get_objects(context,"},{"line_number":251,"context_line":"                                                    project_id\u003dproject_id)"},{"line_number":252,"context_line":"    # Get IDs from SNAT routers"},{"line_number":253,"context_line":"    snat_router_ids \u003d [router.id for router in routers if router.enable_snat]"},{"line_number":254,"context_line":"    return snat_router_ids"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_268dd428","line":251,"range":{"start_line":249,"start_character":1,"end_line":251,"end_character":74},"in_reply_to":"3f79a3b5_aa3db78d","updated":"2018-10-23 06:56:35.000000000","message":"\u0027resource_id\u0027 has already checked by validator. We no need to check in again here.","commit_id":"1915ebe614c7e07a9c768e61d4baabc591b5389a"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"f31379453ea1ac29a472536e60582369a7020790","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        routers \u003d router_objects.Router.get_objects(context,"},{"line_number":251,"context_line":"                                                    project_id\u003dproject_id)"},{"line_number":252,"context_line":"    # Get IDs from SNAT routers"},{"line_number":253,"context_line":"    snat_router_ids \u003d [router.id for router in routers if router.enable_snat]"},{"line_number":254,"context_line":"    return snat_router_ids"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ca5d93ec","line":253,"range":{"start_line":253,"start_character":55,"end_line":253,"end_character":76},"updated":"2018-10-16 08:17:01.000000000","message":"We also have to check whether the router has gateway or not.","commit_id":"1915ebe614c7e07a9c768e61d4baabc591b5389a"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"dbef33646210dff0dd25bfcee687ba29e608af65","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        routers \u003d router_objects.Router.get_objects(context,"},{"line_number":251,"context_line":"                                                    project_id\u003dproject_id)"},{"line_number":252,"context_line":"    # Get IDs from SNAT routers"},{"line_number":253,"context_line":"    snat_router_ids \u003d [router.id for router in routers if router.enable_snat]"},{"line_number":254,"context_line":"    return snat_router_ids"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_46a7b0a9","line":253,"range":{"start_line":253,"start_character":55,"end_line":253,"end_character":76},"in_reply_to":"3f79a3b5_ca5d93ec","updated":"2018-10-23 06:56:35.000000000","message":"Thanks. I have checked the gateway as you comment.","commit_id":"1915ebe614c7e07a9c768e61d4baabc591b5389a"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a83fac1bbe4afe7bf6dd06fb494175d31acad909","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    The list has format as below:"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        ["},{"line_number":325,"context_line":"            {\u0027id\u0027: xxx,"},{"line_number":326,"context_line":"             \u0027log_routers\u0027:"},{"line_number":327,"context_line":"                ["},{"line_number":328,"context_line":"                    router_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_90a7210a","line":325,"range":{"start_line":325,"start_character":19,"end_line":325,"end_character":22},"updated":"2018-10-24 05:14:20.000000000","message":"ditto","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"30f63a3cd1c5203616bffa980ede469866f2890d","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    The list has format as below:"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        ["},{"line_number":325,"context_line":"            {\u0027id\u0027: xxx,"},{"line_number":326,"context_line":"             \u0027log_routers\u0027:"},{"line_number":327,"context_line":"                ["},{"line_number":328,"context_line":"                    router_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_998970c9","line":325,"range":{"start_line":325,"start_character":19,"end_line":325,"end_character":22},"in_reply_to":"3f79a3b5_90a7210a","updated":"2018-10-25 09:34:07.000000000","message":"Done","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a83fac1bbe4afe7bf6dd06fb494175d31acad909","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"def get_snat_log_info_for_log_resources(context, log_resources):"},{"line_number":345,"context_line":"    \"\"\"Return a list of SNAT log info for list of log_resources"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    The list has format as below:"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_10855159","line":345,"range":{"start_line":345,"start_character":46,"end_line":345,"end_character":62},"updated":"2018-10-24 05:14:20.000000000","message":"\"list of log_resources\" is a little confusing.  Is that \"log_resource IDs?\"","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"30f63a3cd1c5203616bffa980ede469866f2890d","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"def get_snat_log_info_for_log_resources(context, log_resources):"},{"line_number":345,"context_line":"    \"\"\"Return a list of SNAT log info for list of log_resources"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    The list has format as below:"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1964801f","line":345,"range":{"start_line":345,"start_character":46,"end_line":345,"end_character":62},"in_reply_to":"3f79a3b5_10855159","updated":"2018-10-25 09:34:07.000000000","message":"No. It is log request from logging driver. It includes: resource_id, project_id, log_id\nBesides, \u0027log_resources\u0027 is name of argument, so I think we should not change it.","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"185a8d047080f081fd38a4de7d53b82a7f85317d","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"def get_snat_log_info_for_log_resources(context, log_resources):"},{"line_number":345,"context_line":"    \"\"\"Return a list of SNAT log info for list of log_resources"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    The list has format as below:"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e9e76f0f","line":345,"range":{"start_line":345,"start_character":46,"end_line":345,"end_character":62},"in_reply_to":"3f79a3b5_1964801f","updated":"2018-10-25 13:58:46.000000000","message":"So, is it log_resource object, right? If so, it should be \u0027log_resource\u0027.","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"cfe721368b54886724b85aad44754b7b2ef573d8","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"def get_snat_log_info_for_log_resources(context, log_resources):"},{"line_number":345,"context_line":"    \"\"\"Return a list of SNAT log info for list of log_resources"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    The list has format as below:"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c08fd673","line":345,"range":{"start_line":345,"start_character":46,"end_line":345,"end_character":62},"in_reply_to":"3f79a3b5_e9e76f0f","updated":"2018-10-26 02:34:32.000000000","message":"Hmm, \u0027log_resources\u0027 is a list of log requests. In which, each of log request is given in form of dictionary. Please look at from line 349 to line 359. \nSo I think it would be better if we keep this variable name.","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a83fac1bbe4afe7bf6dd06fb494175d31acad909","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    The list has format as below:"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        ["},{"line_number":350,"context_line":"            {\u0027id\u0027: xxx,"},{"line_number":351,"context_line":"             \u0027log_routers\u0027:"},{"line_number":352,"context_line":"                ["},{"line_number":353,"context_line":"                    router1_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_d0a119f8","line":350,"range":{"start_line":350,"start_character":19,"end_line":350,"end_character":22},"updated":"2018-10-24 05:14:20.000000000","message":"Please clarify what ID is.","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"30f63a3cd1c5203616bffa980ede469866f2890d","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    The list has format as below:"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        ["},{"line_number":350,"context_line":"            {\u0027id\u0027: xxx,"},{"line_number":351,"context_line":"             \u0027log_routers\u0027:"},{"line_number":352,"context_line":"                ["},{"line_number":353,"context_line":"                    router1_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b986acb6","line":350,"range":{"start_line":350,"start_character":19,"end_line":350,"end_character":22},"in_reply_to":"3f79a3b5_d0a119f8","updated":"2018-10-25 09:34:07.000000000","message":"Done","commit_id":"4e0ee05bc12393d6cfe49bdd9990f1507804a1dd"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"2c75ba8b104d39d4453d1ee6b353d908931e285e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"def _make_snat_log_dict(log_obj, router_ids):"},{"line_number":209,"context_line":"    return {"},{"line_number":210,"context_line":"        \u0027id\u0027: log_obj[\u0027id\u0027],"},{"line_number":211,"context_line":"        \u0027log_routers\u0027: router_ids,"},{"line_number":212,"context_line":"        \u0027project_id\u0027: log_obj[\u0027project_id\u0027]"},{"line_number":213,"context_line":"    }"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_e15d7154","line":211,"range":{"start_line":211,"start_character":9,"end_line":211,"end_character":14},"updated":"2018-11-06 10:40:17.000000000","message":"Does this prefix necessary?  It\u0027s more simple to use \u0027routers\u0027 or \u0027router_ids\u0027.","commit_id":"46601c6f57048019c0815704f24568ae83f7ec5e"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"2b2159c450f98ae94c20dffc147b0ffbef9c4c5a","unresolved":false,"context_lines":[{"line_number":208,"context_line":"def _make_snat_log_dict(log_obj, router_ids):"},{"line_number":209,"context_line":"    return {"},{"line_number":210,"context_line":"        \u0027id\u0027: log_obj[\u0027id\u0027],"},{"line_number":211,"context_line":"        \u0027log_routers\u0027: router_ids,"},{"line_number":212,"context_line":"        \u0027project_id\u0027: log_obj[\u0027project_id\u0027]"},{"line_number":213,"context_line":"    }"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_c76b9383","line":211,"range":{"start_line":211,"start_character":9,"end_line":211,"end_character":14},"in_reply_to":"3f79a3b5_e15d7154","updated":"2018-11-08 10:00:05.000000000","message":"Yeah. I updated to \u0027router_ids\u0027 :)","commit_id":"46601c6f57048019c0815704f24568ae83f7ec5e"}]}
