)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"d4682f86f770e4de50d0c201f8ffd864bc04ea55","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-10-23 15:50:47 +0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Libnetfilter_log python binding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduce a libnetfilter_log python binding, this one used"},{"line_number":10,"context_line":"for capturing NFLOG packet."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3f79a3b5_ae15fd4d","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":5},"updated":"2018-10-25 13:47:07.000000000","message":"Plz remove it :p","commit_id":"05f3660bf82564cfb85a44ade43225355515e7aa"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"d4682f86f770e4de50d0c201f8ffd864bc04ea55","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Libnetfilter_log python binding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduce a libnetfilter_log python binding, this one used"},{"line_number":10,"context_line":"for capturing NFLOG packet."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Bug: #1752290"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3f79a3b5_ce1ab97a","line":9,"range":{"start_line":9,"start_character":11,"end_line":9,"end_character":20},"updated":"2018-10-25 13:47:07.000000000","message":"introduces","commit_id":"05f3660bf82564cfb85a44ade43225355515e7aa"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"6e3caeea4f7d9a9970ea9cae2403a3f55e7bd3f0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Libnetfilter_log python binding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces a libnetfilter_log python binding, this one used"},{"line_number":10,"context_line":"for capturing NFLOG packet."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Bug: #1752290"},{"line_number":13,"context_line":"Change-Id: I20252850d62b4e45048a1f916bbfd512a2826926"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f79a3b5_eb3a19c3","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":27},"updated":"2018-11-07 04:46:40.000000000","message":"capturing packet log as NFLOG rule in iptables\nHow about this description?","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c97ee022a90dbdabc295fd553ad43bc0a5308d4e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Libnetfilter_log python binding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces a libnetfilter_log python binding, this one used"},{"line_number":10,"context_line":"for capturing NFLOG packet."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Bug: #1752290"},{"line_number":13,"context_line":"Change-Id: I20252850d62b4e45048a1f916bbfd512a2826926"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3f79a3b5_a4a98078","line":10,"range":{"start_line":10,"start_character":26,"end_line":10,"end_character":27},"updated":"2018-11-09 01:54:04.000000000","message":"It\u0027s better to describe that this module is used for iptables driver.","commit_id":"c8683ebda8f1dce1da8a23b0e5a2d0d8fc5f1c18"}],"neutron/privileged/agent/linux/libnetfilter_log.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"d4682f86f770e4de50d0c201f8ffd864bc04ea55","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2018 Fujitsu Limited"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_69003f00","line":1,"updated":"2018-10-25 13:47:07.000000000","message":"It\u0027s better to add TODO or NOTE to migrate neutron-lib in the future.  I think this is temporary solution.","commit_id":"05f3660bf82564cfb85a44ade43225355515e7aa"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"397a96b3aeb15d0a0fafac8153da933ab520919b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# TODO(annp): move this to neutron-lib for other project can consume this lib"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import contextlib"},{"line_number":19,"context_line":"import multiprocessing"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_31507ed1","line":16,"updated":"2018-11-07 08:25:28.000000000","message":"why not propose it to neutron-lib directly?","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ee4439fc58a83b8b8dfcb1285e98566cac29e6a0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# TODO(annp): move this to neutron-lib for other project can consume this lib"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import contextlib"},{"line_number":19,"context_line":"import multiprocessing"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_e50e8f3a","line":16,"in_reply_to":"3f79a3b5_31507ed1","updated":"2018-11-09 10:06:17.000000000","message":"Hi Slawek,\n\nBecause neutron-lib didn\u0027t allow on eventlet. So we propose it in neutron repo as a temporary solution for Stein cycle.","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"397a96b3aeb15d0a0fafac8153da933ab520919b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"libnflog \u003d None"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"def init_library():"},{"line_number":118,"context_line":"    \"\"\"Load libnetfilter_log library\"\"\""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    global ffi"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_11f0e2d9","line":117,"updated":"2018-11-07 08:25:28.000000000","message":"IMO in privileged module we should only have things which really are privileged (or are used only here).\nIf You have some \"generic\" library, maybe it could be proposed in neutron.agent.linux module then?","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ee4439fc58a83b8b8dfcb1285e98566cac29e6a0","unresolved":false,"context_lines":[{"line_number":114,"context_line":"libnflog \u003d None"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"def init_library():"},{"line_number":118,"context_line":"    \"\"\"Load libnetfilter_log library\"\"\""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    global ffi"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_880ed230","line":117,"in_reply_to":"3f79a3b5_11f0e2d9","updated":"2018-11-09 10:06:17.000000000","message":"Thanks. I will follow you.","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"397a96b3aeb15d0a0fafac8153da933ab520919b","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        g_handle \u003d libnflog.nflog_bind_group(self.nflog_handle, group)"},{"line_number":227,"context_line":"        if g_handle:"},{"line_number":228,"context_line":"            self.nflog_g_hanldes[group] \u003d g_handle"},{"line_number":229,"context_line":"            self._set_mode(g_handle, 0x2, 0xffff)"},{"line_number":230,"context_line":"            self._set_callback(g_handle, self.cb)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def _bind_pf(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_f1c9a679","line":229,"range":{"start_line":229,"start_character":37,"end_line":229,"end_character":48},"updated":"2018-11-07 08:25:28.000000000","message":"maybe You could use some more descriptive constant names for those values?","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ee4439fc58a83b8b8dfcb1285e98566cac29e6a0","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        g_handle \u003d libnflog.nflog_bind_group(self.nflog_handle, group)"},{"line_number":227,"context_line":"        if g_handle:"},{"line_number":228,"context_line":"            self.nflog_g_hanldes[group] \u003d g_handle"},{"line_number":229,"context_line":"            self._set_mode(g_handle, 0x2, 0xffff)"},{"line_number":230,"context_line":"            self._set_callback(g_handle, self.cb)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def _bind_pf(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_c8192a76","line":229,"range":{"start_line":229,"start_character":37,"end_line":229,"end_character":48},"in_reply_to":"3f79a3b5_f1c9a679","updated":"2018-11-09 10:06:17.000000000","message":"I will update in next version.","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"397a96b3aeb15d0a0fafac8153da933ab520919b","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                pkt_len \u003d libnflog.recv(fd, buff, 4096, 0)"},{"line_number":275,"context_line":"            except OSError as err:"},{"line_number":276,"context_line":"                # No buffer space available"},{"line_number":277,"context_line":"                if err.errno \u003d\u003d 11:"},{"line_number":278,"context_line":"                    continue"},{"line_number":279,"context_line":"                msg \u003d _(\"Unknown exception\")"},{"line_number":280,"context_line":"                raise Exception(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_b16d6e69","line":277,"range":{"start_line":277,"start_character":32,"end_line":277,"end_character":34},"updated":"2018-11-07 08:25:28.000000000","message":"is this errno.ENOBUFS maybe? Can You use constant here?","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ee4439fc58a83b8b8dfcb1285e98566cac29e6a0","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                pkt_len \u003d libnflog.recv(fd, buff, 4096, 0)"},{"line_number":275,"context_line":"            except OSError as err:"},{"line_number":276,"context_line":"                # No buffer space available"},{"line_number":277,"context_line":"                if err.errno \u003d\u003d 11:"},{"line_number":278,"context_line":"                    continue"},{"line_number":279,"context_line":"                msg \u003d _(\"Unknown exception\")"},{"line_number":280,"context_line":"                raise Exception(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_28277eb7","line":277,"range":{"start_line":277,"start_character":32,"end_line":277,"end_character":34},"in_reply_to":"3f79a3b5_b16d6e69","updated":"2018-11-09 10:06:17.000000000","message":"Yes. You\u0027re right. Thanks.","commit_id":"2ea83f4f44a94d0af17aee638b6b0ce0b4da6092"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c97ee022a90dbdabc295fd553ad43bc0a5308d4e","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        def loop():"},{"line_number":335,"context_line":"            while True:"},{"line_number":336,"context_line":"                if self.callback:"},{"line_number":337,"context_line":"                    ctx \u003d zmq.Context(1)"},{"line_number":338,"context_line":"                    sub \u003d ctx.socket(zmq.XREQ)"},{"line_number":339,"context_line":"                    sub.connect(ADDR_IPC)"},{"line_number":340,"context_line":"                    msg \u003d sub.recv()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_446aec4f","line":337,"range":{"start_line":337,"start_character":38,"end_line":337,"end_character":39},"updated":"2018-11-09 01:54:04.000000000","message":"Is there any reason why you specify magic number?","commit_id":"c8683ebda8f1dce1da8a23b0e5a2d0d8fc5f1c18"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c97ee022a90dbdabc295fd553ad43bc0a5308d4e","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                    if len(msg):"},{"line_number":342,"context_line":"                        self.callback(jsonutils.loads(msg))"},{"line_number":343,"context_line":"                    sub.close()"},{"line_number":344,"context_line":"                time.sleep(1.0)"},{"line_number":345,"context_line":"        # Spawn loop"},{"line_number":346,"context_line":"        eventlet.spawn_n(loop)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_048e3425","line":344,"range":{"start_line":344,"start_character":26,"end_line":344,"end_character":30},"updated":"2018-11-09 01:54:04.000000000","message":"ditto #337","commit_id":"c8683ebda8f1dce1da8a23b0e5a2d0d8fc5f1c18"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c97ee022a90dbdabc295fd553ad43bc0a5308d4e","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                    sub.close()"},{"line_number":344,"context_line":"                time.sleep(1.0)"},{"line_number":345,"context_line":"        # Spawn loop"},{"line_number":346,"context_line":"        eventlet.spawn_n(loop)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_c4935c4c","line":346,"range":{"start_line":346,"start_character":17,"end_line":346,"end_character":24},"updated":"2018-11-09 01:54:04.000000000","message":"Is that correct?","commit_id":"c8683ebda8f1dce1da8a23b0e5a2d0d8fc5f1c18"}]}
