)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"fb0dc9ba4450e3977f28990caf68a9dd08ba92e1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch introduces generic logging agent extension following"},{"line_number":10,"context_line":"the spec [1]."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://goo.gl/iZ3nZ9"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Yushiro FURUKAWA \u003cy.furukawa_2@jp.fujitsu.com\u003e"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"3f1d235d_7d4356b0","line":12,"range":{"start_line":12,"start_character":4,"end_line":12,"end_character":25},"updated":"2017-07-05 05:30:15.000000000","message":"better to avoid url shortener","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a656d8261bdd3123d8e130c15dc6d62483882c0a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch introduces generic logging agent extension following"},{"line_number":10,"context_line":"the spec [1]."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://goo.gl/iZ3nZ9"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Yushiro FURUKAWA \u003cy.furukawa_2@jp.fujitsu.com\u003e"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"3f1d235d_b7983075","line":12,"range":{"start_line":12,"start_character":4,"end_line":12,"end_character":25},"in_reply_to":"3f1d235d_7d4356b0","updated":"2017-07-11 10:04:45.000000000","message":"Done","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"}],"neutron/agent/linux/openvswitch_firewall/constants.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"a0dbe911dd223c5763969d0d8319a2b84a29e919","unresolved":false,"context_lines":[{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"UNMATCHED_COOKIE \u003d 0x0000000000000001"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"PROTOCOLS_WITH_PORTS \u003d (constants.PROTO_NAME_TCP, constants.PROTO_NAME_UDP)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba2be162_be7c8d21","line":38,"updated":"2017-03-01 08:28:19.000000000","message":"IIRC, cookies must be dynamically allocated. Commits 73673bea and ea8d60f5 might be informative.","commit_id":"c04150b5488e0c3758715808920be2790f510817"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"bb17b226d8882f888ba1e41d5b0c0d8c177de96e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"UNMATCHED_COOKIE \u003d 0x0000000000000001"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"PROTOCOLS_WITH_PORTS \u003d (constants.PROTO_NAME_TCP, constants.PROTO_NAME_UDP)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba2be162_999e0355","line":38,"in_reply_to":"ba2be162_be7c8d21","updated":"2017-03-01 08:44:43.000000000","message":"Sorry, this code made you confuse. Actually, It\u0027s not necessary. I will remove it in next patch-set. Thanks.","commit_id":"c04150b5488e0c3758715808920be2790f510817"}],"neutron/conf/services/logging.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"862987298ab02d0d3052ed92e89360b9b4150745","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"log_driver_opts \u003d ["},{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003d100,"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_21b39e4f","line":24,"range":{"start_line":21,"start_character":4,"end_line":24,"end_character":77},"updated":"2017-08-02 18:18:47.000000000","message":"Why do you need this option? If you don\u0027t enable \u0027logging\u0027 service plugin in neutron.conf, the logging API will be disabled. What is the use case where the service plugin is loaded but this \u0027enable\u0027 config option is set to False?","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"558cd196585d9b39a0b99bce58a5ccd161691939","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"log_driver_opts \u003d ["},{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003d100,"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_d7a21dae","line":24,"range":{"start_line":21,"start_character":4,"end_line":24,"end_character":77},"in_reply_to":"df3967d1_0be1a72a","updated":"2017-08-04 06:37:46.000000000","message":"Thanks. Done.","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"bac867543c65a8171d3ab1b5f60fb821151135a9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"log_driver_opts \u003d ["},{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003d100,"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_58c9e323","line":24,"range":{"start_line":21,"start_character":4,"end_line":24,"end_character":77},"in_reply_to":"df3967d1_21b39e4f","updated":"2017-08-03 07:48:48.000000000","message":"As I mentioned at [1]. I\u0027d like to know logging plugin is enabled or not in server-side. Because, this option will be used in during implementation of OVSFirewallLoggingDriver. Actually, I don\u0027t want to always resubmit packet to log_table in case of  logging plugin is not enabled. How can I check logging plugin is enabled in server-sdie without \u0027enable\u0027 option?\n\nIn addition, I will remove it if we agree always resubmit packet to log table.\n[1] https://review.openstack.org/#/c/396104/40/neutron/conf/services/loggingapi.py@24","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7864742cacfaf27d695bf3203fda403e8a71bdef","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"log_driver_opts \u003d ["},{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003d100,"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_a420a649","line":24,"range":{"start_line":21,"start_character":4,"end_line":24,"end_character":77},"in_reply_to":"df3967d1_58c9e323","updated":"2017-08-03 09:10:06.000000000","message":"Maybe helping message made you confusing. So I\u0027d like to change it as I commented at https://review.openstack.org/#/c/396104/49/neutron/services/logapi/agent/log_extension.py@118. What do you think?","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"00ffed51b448803e5fbf5191bf953f9b9faa0a50","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"log_driver_opts \u003d ["},{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003d100,"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_0be1a72a","line":24,"range":{"start_line":21,"start_character":4,"end_line":24,"end_character":77},"in_reply_to":"df3967d1_a420a649","updated":"2017-08-03 22:23:11.000000000","message":"my suggestion is to remove this option and make ovsfw unconditional.","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"862987298ab02d0d3052ed92e89360b9b4150745","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def register_log_driver_opts(cfg\u003dcfg.CONF):"},{"line_number":42,"context_line":"    cfg.register_opts(log_driver_opts, \u0027LOG\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_c1c972ac","line":42,"range":{"start_line":42,"start_character":39,"end_line":42,"end_character":44},"updated":"2017-08-02 18:18:47.000000000","message":"We now use lower case as group name for all new option groups.\nConsider using \u0027log\u0027 or \u0027network_log\u0027.\n\nIt might be better to use \u0027network_log\u0027 as the configuration group because we have logging options from oslo.log in the config files at the same time.","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7864742cacfaf27d695bf3203fda403e8a71bdef","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def register_log_driver_opts(cfg\u003dcfg.CONF):"},{"line_number":42,"context_line":"    cfg.register_opts(log_driver_opts, \u0027LOG\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_e4dfce37","line":42,"range":{"start_line":42,"start_character":39,"end_line":42,"end_character":44},"in_reply_to":"df3967d1_c1c972ac","updated":"2017-08-03 09:10:06.000000000","message":"Thanks for your suggestion. I will change it to \u0027network_log\u0027. :)","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"5a48dd25177db32a6c6d95b4b2574c842bd14ed4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.IntOpt("},{"line_number":27,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":28,"context_line":"        default\u003d25,"},{"line_number":29,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit\u0027"},{"line_number":30,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027local_output_log_base\u0027,"}],"source_content_type":"text/x-python","patch_set":51,"id":"df3967d1_f7b2c148","line":29,"range":{"start_line":29,"start_character":56,"end_line":29,"end_character":57},"updated":"2017-08-04 06:28:09.000000000","message":"nit, add space","commit_id":"17bff3215ae93c9bb73b0328f9e873f574b9f654"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"70c63d40b56a507f6e170fe9ef554fc7fb149dab","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.IntOpt("},{"line_number":27,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":28,"context_line":"        default\u003d25,"},{"line_number":29,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit\u0027"},{"line_number":30,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027local_output_log_base\u0027,"}],"source_content_type":"text/x-python","patch_set":51,"id":"df3967d1_b7c2f957","line":29,"range":{"start_line":29,"start_character":56,"end_line":29,"end_character":57},"in_reply_to":"df3967d1_f7b2c148","updated":"2017-08-04 06:36:34.000000000","message":"Thank Tovin, will update next patch-set.","commit_id":"17bff3215ae93c9bb73b0328f9e873f574b9f654"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"681205d0a179bfb00c975c3d9a96c69503ce57e7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron._i18n import _"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"log_driver_opts \u003d ["},{"line_number":21,"context_line":"    cfg.IntOpt("}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_f85ee543","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":27},"updated":"2017-08-08 04:40:36.000000000","message":"grouping can be better","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7cec097ee9122abc704ce8fac6142f7ce812759b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron._i18n import _"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"log_driver_opts \u003d ["},{"line_number":21,"context_line":"    cfg.IntOpt("}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_49b76588","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":27},"in_reply_to":"9f436f4f_f85ee543","updated":"2017-08-08 07:28:51.000000000","message":"Done","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"681205d0a179bfb00c975c3d9a96c69503ce57e7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":23,"context_line":"        default\u003d100,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Maximum packets logging per second \u0027"},{"line_number":25,"context_line":"               \u0027(integer value, at least 100)\u0027)),"},{"line_number":26,"context_line":"    cfg.IntOpt("},{"line_number":27,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":28,"context_line":"        default\u003d25,"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_d820c1b3","line":25,"range":{"start_line":25,"start_character":32,"end_line":25,"end_character":44},"updated":"2017-08-08 04:40:36.000000000","message":"why?\n\nyou can specify min\u003d100 if desirable","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7cec097ee9122abc704ce8fac6142f7ce812759b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":23,"context_line":"        default\u003d100,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Maximum packets logging per second \u0027"},{"line_number":25,"context_line":"               \u0027(integer value, at least 100)\u0027)),"},{"line_number":26,"context_line":"    cfg.IntOpt("},{"line_number":27,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":28,"context_line":"        default\u003d25,"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_04126459","line":25,"range":{"start_line":25,"start_character":32,"end_line":25,"end_character":44},"in_reply_to":"9f436f4f_d820c1b3","updated":"2017-08-08 07:28:51.000000000","message":"I\u0027m referencing the document [1]. You can search with \u0027controller_rate_limit\u0027 to get more detail information. In the document said controller_rate_limit at least 100. Is there any updating from ovs-vswitchd?\n\n[1] http://openvswitch.org/support/dist-docs/ovs-vswitchd.conf.db.5.html","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"681205d0a179bfb00c975c3d9a96c69503ce57e7","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":28,"context_line":"        default\u003d25,"},{"line_number":29,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit \u0027"},{"line_number":30,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":33,"context_line":"        help\u003d_(\u0027Output logfile path on agent side, default syslog file\u0027)),"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_b82dfda9","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":43},"updated":"2017-08-08 04:40:36.000000000","message":"ditto","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7cec097ee9122abc704ce8fac6142f7ce812759b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":28,"context_line":"        default\u003d25,"},{"line_number":29,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit \u0027"},{"line_number":30,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":33,"context_line":"        help\u003d_(\u0027Output logfile path on agent side, default syslog file\u0027)),"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_e43760e3","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":43},"in_reply_to":"9f436f4f_b82dfda9","updated":"2017-08-08 07:28:51.000000000","message":"Please see above comment.","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"681205d0a179bfb00c975c3d9a96c69503ce57e7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":33,"context_line":"        help\u003d_(\u0027Output logfile path on agent side, default syslog file\u0027)),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_1818897f","line":33,"range":{"start_line":33,"start_character":66,"end_line":33,"end_character":70},"updated":"2017-08-08 04:40:36.000000000","message":"better to end with a period for the rendered documentation.\nditto for other options.","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7cec097ee9122abc704ce8fac6142f7ce812759b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":33,"context_line":"        help\u003d_(\u0027Output logfile path on agent side, default syslog file\u0027)),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_a4183875","line":33,"range":{"start_line":33,"start_character":66,"end_line":33,"end_character":70},"in_reply_to":"9f436f4f_1818897f","updated":"2017-08-08 07:28:51.000000000","message":"Done","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":24,"context_line":"        default\u003d100,"},{"line_number":25,"context_line":"        help\u003d_(\u0027Maximum packets logging per second. \u0027"},{"line_number":26,"context_line":"               \u0027(integer value, min\u003d100)\u0027)),"},{"line_number":27,"context_line":"    cfg.IntOpt("},{"line_number":28,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":29,"context_line":"        default\u003d25,"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_dce89e17","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":39},"updated":"2017-10-10 16:04:49.000000000","message":"you can define min as a parameter when creating IntOpt instance: https://docs.openstack.org/oslo.config/latest/reference/opts.html#oslo_config.cfg.IntOpt","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":24,"context_line":"        default\u003d100,"},{"line_number":25,"context_line":"        help\u003d_(\u0027Maximum packets logging per second. \u0027"},{"line_number":26,"context_line":"               \u0027(integer value, min\u003d100)\u0027)),"},{"line_number":27,"context_line":"    cfg.IntOpt("},{"line_number":28,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":29,"context_line":"        default\u003d25,"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_6be30335","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":39},"in_reply_to":"5f4e5783_dce89e17","updated":"2017-10-11 09:00:26.000000000","message":"Great! Thanks for your suggestion. Done.","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":29,"context_line":"        default\u003d25,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit. \u0027"},{"line_number":31,"context_line":"               \u0027(integer value, min\u003d25)\u0027)),"},{"line_number":32,"context_line":"    cfg.StrOpt("},{"line_number":33,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":34,"context_line":"        help\u003d_(\u0027Output logfile path on agent side, default syslog file.\u0027)),"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_5cdcae73","line":31,"range":{"start_line":31,"start_character":32,"end_line":31,"end_character":38},"updated":"2017-10-10 16:04:49.000000000","message":"ditto","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":29,"context_line":"        default\u003d25,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit. \u0027"},{"line_number":31,"context_line":"               \u0027(integer value, min\u003d25)\u0027)),"},{"line_number":32,"context_line":"    cfg.StrOpt("},{"line_number":33,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":34,"context_line":"        help\u003d_(\u0027Output logfile path on agent side, default syslog file.\u0027)),"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_0bcc8fba","line":31,"range":{"start_line":31,"start_character":32,"end_line":31,"end_character":38},"in_reply_to":"5f4e5783_5cdcae73","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"}],"neutron/conf/services/loggingapi.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"fb0dc9ba4450e3977f28990caf68a9dd08ba92e1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_fd1086aa","line":24,"updated":"2017-07-05 05:30:15.000000000","message":"when is it useful?\nhow is it different from removing the service plugin from the list?","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"834cbe616868699b0f633bd5cf7a0d2c6e441bf4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff346bd7_17603aa5","line":24,"in_reply_to":"1f1a1f67_10bf63d1","updated":"2017-07-24 08:51:21.000000000","message":"Yes, It\u0027s an agent option.","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"e2d8cec1a5251c17b3493c0ac03776933d81c268","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":40,"id":"1f1a1f67_10bf63d1","line":24,"in_reply_to":"3f1d235d_57e9dc7d","updated":"2017-07-19 08:37:19.000000000","message":"you mean, despite of the help message, this is actually an agent option?","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a656d8261bdd3123d8e130c15dc6d62483882c0a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    cfg.BoolOpt("},{"line_number":22,"context_line":"        \u0027enable\u0027,"},{"line_number":23,"context_line":"        default\u003dFalse,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Controls whether the logging API is enabled in the server\u0027)),"},{"line_number":25,"context_line":"    cfg.IntOpt("},{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_57e9dc7d","line":24,"in_reply_to":"3f1d235d_fd1086aa","updated":"2017-07-11 10:04:45.000000000","message":"Basically, this attribute is used in the during implementation of  ovs_firewall_log, If \u0027enable\u0027 is set True, that mean logging extension is enabled. So we can insert resubmit packets action from security group rules flows for logging likes https://review.openstack.org/#/c/468281/15/neutron/agent/linux/openvswitch_firewall/rules.py@183. This is my idea. Do you have any suggestion?","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"fb0dc9ba4450e3977f28990caf68a9dd08ba92e1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003dNone,"},{"line_number":28,"context_line":"        help\u003d_(\u0027Maximum packets logging per second. \u0027"},{"line_number":29,"context_line":"               \u0027(integer value, at least 100)\u0027)),"},{"line_number":30,"context_line":"    cfg.IntOpt("},{"line_number":31,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":32,"context_line":"        default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_5d165aaa","line":29,"updated":"2017-07-05 05:30:15.000000000","message":"better to say what\u0027s the default","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a656d8261bdd3123d8e130c15dc6d62483882c0a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        \u0027rate_limit\u0027,"},{"line_number":27,"context_line":"        default\u003dNone,"},{"line_number":28,"context_line":"        help\u003d_(\u0027Maximum packets logging per second. \u0027"},{"line_number":29,"context_line":"               \u0027(integer value, at least 100)\u0027)),"},{"line_number":30,"context_line":"    cfg.IntOpt("},{"line_number":31,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":32,"context_line":"        default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_57831c05","line":29,"in_reply_to":"3f1d235d_5d165aaa","updated":"2017-07-11 10:04:45.000000000","message":"Done","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"fb0dc9ba4450e3977f28990caf68a9dd08ba92e1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":32,"context_line":"        default\u003dNone,"},{"line_number":33,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit\u0027"},{"line_number":34,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt("},{"line_number":36,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Output logfile path, default syslog file\u0027)),"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_3d1b9ed0","line":34,"updated":"2017-07-05 05:30:15.000000000","message":"ditto","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a656d8261bdd3123d8e130c15dc6d62483882c0a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027burst_limit\u0027,"},{"line_number":32,"context_line":"        default\u003dNone,"},{"line_number":33,"context_line":"        help\u003d_(\u0027Maximum number of packets per rate_limit\u0027"},{"line_number":34,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt("},{"line_number":36,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Output logfile path, default syslog file\u0027)),"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_d7760c3f","line":34,"in_reply_to":"3f1d235d_3d1b9ed0","updated":"2017-07-11 10:04:45.000000000","message":"Done","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"fb0dc9ba4450e3977f28990caf68a9dd08ba92e1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt("},{"line_number":36,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Output logfile path, default syslog file\u0027)),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_3d803ec0","line":37,"updated":"2017-07-05 05:30:15.000000000","message":"better to separate server options and agent options.","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a656d8261bdd3123d8e130c15dc6d62483882c0a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               \u0027(integer value, at least 25)\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt("},{"line_number":36,"context_line":"        \u0027local_output_log_base\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Output logfile path, default syslog file\u0027)),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_b7715047","line":37,"in_reply_to":"3f1d235d_3d803ec0","updated":"2017-07-11 10:04:45.000000000","message":"Done","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"}],"neutron/opts.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"681205d0a179bfb00c975c3d9a96c69503ce57e7","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        (\u0027securitygroup\u0027,"},{"line_number":255,"context_line":"         neutron.conf.agent.securitygroups_rpc.security_group_opts),"},{"line_number":256,"context_line":"        (\u0027network_log\u0027,"},{"line_number":257,"context_line":"         neutron.conf.services.logging.log_driver_opts)"},{"line_number":258,"context_line":"    ]"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_98035910","line":257,"updated":"2017-08-08 04:40:36.000000000","message":"do you need this in ml2 opts?","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7cec097ee9122abc704ce8fac6142f7ce812759b","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        (\u0027securitygroup\u0027,"},{"line_number":255,"context_line":"         neutron.conf.agent.securitygroups_rpc.security_group_opts),"},{"line_number":256,"context_line":"        (\u0027network_log\u0027,"},{"line_number":257,"context_line":"         neutron.conf.services.logging.log_driver_opts)"},{"line_number":258,"context_line":"    ]"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_a98ed1cd","line":257,"in_reply_to":"9f436f4f_98035910","updated":"2017-08-08 07:28:51.000000000","message":"It should be removed.","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ovs_ryuapp.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"a0dbe911dd223c5763969d0d8319a2b84a29e919","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.packet_in_handlers.remove(caller)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":79,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":80,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":81,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba2be162_5e1711a3","line":79,"updated":"2017-03-01 08:28:19.000000000","message":"I think it\u0027s better to create your RyuApp thread for logging, rather than piggybacking the ovs-agent thread this way.","commit_id":"c04150b5488e0c3758715808920be2790f510817"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"694ce6329838d8a8fd88b5cca4b2e5bf57a9a2cd","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.packet_in_handlers.remove(caller)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":79,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":80,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":81,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba2be162_3257b4cf","line":79,"in_reply_to":"ba2be162_5e1711a3","updated":"2017-03-02 09:10:01.000000000","message":"Done","commit_id":"c04150b5488e0c3758715808920be2790f510817"}],"neutron/services/logapi/agent/log_extension.py":[{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"d097d701490ef73e2d47f4e41f7a9e388e471439","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                pass"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def handle_port(self, context, port):"},{"line_number":127,"context_line":"        LOG.debug(\"port data %s\", str(port))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_port(self, context, port):"},{"line_number":130,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":30,"id":"df140735_ebb5677f","line":127,"updated":"2017-06-02 08:04:54.000000000","message":"Should I add \u0027log_ids\u0027 to get_device_details payload to determine which sg_rules are logged for port?","commit_id":"d4ba3acbc8cc5fb26d071c1b6f623fede859eafa"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"2be40b6089ccf564fffad835aeea055a93091dd2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.resource_rpc \u003d None"},{"line_number":96,"context_line":"        self.log_driver \u003d load_extension_driver_class("},{"line_number":97,"context_line":"            \u0027neutron.services.logapi.agent.drivers\u0027,"},{"line_number":98,"context_line":"            cfg.CONF.LOG.log_driver)()"},{"line_number":99,"context_line":"        self._register_rpc_consumers(connection)"},{"line_number":100,"context_line":"        self.log_driver.consume_api(self.agent_api)"},{"line_number":101,"context_line":"        self.log_driver.initialize(self.resource_rpc)"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_d0041481","line":98,"range":{"start_line":98,"start_character":12,"end_line":98,"end_character":34},"updated":"2017-06-07 05:58:42.000000000","message":"What is a value for LOG.log_driver?  If log_driver is \u0027ovs\u0027, you can use an argument \u0027driver_type\u0027 to load driver class.  I think it depends on mechanism driver.  How about loading a driver same as an environment?","commit_id":"86288c554d51b5e648aa215fabf76dca191df0a7"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"434d6e09340fbaa7fa7100c253237ac112210c5d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.resource_rpc \u003d None"},{"line_number":96,"context_line":"        self.log_driver \u003d load_extension_driver_class("},{"line_number":97,"context_line":"            \u0027neutron.services.logapi.agent.drivers\u0027,"},{"line_number":98,"context_line":"            cfg.CONF.LOG.log_driver)()"},{"line_number":99,"context_line":"        self._register_rpc_consumers(connection)"},{"line_number":100,"context_line":"        self.log_driver.consume_api(self.agent_api)"},{"line_number":101,"context_line":"        self.log_driver.initialize(self.resource_rpc)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f231b9d_a27c0983","line":98,"range":{"start_line":98,"start_character":12,"end_line":98,"end_character":34},"in_reply_to":"df140735_d0041481","updated":"2017-06-16 01:40:33.000000000","message":"Done. Thank you for your suggestion.","commit_id":"86288c554d51b5e648aa215fabf76dca191df0a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"2be40b6089ccf564fffad835aeea055a93091dd2","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            if event_type \u003d\u003d events.UPDATED:"},{"line_number":117,"context_line":"                for log_resource in log_resources:"},{"line_number":118,"context_line":"                    self._update_logging(context, log_resource)"},{"line_number":119,"context_line":"            elif event_type \u003d\u003d events.CREATED:"},{"line_number":120,"context_line":"                self.log_driver.start_logging(context, log_resources)"},{"line_number":121,"context_line":"            elif event_type \u003d\u003d events.DELETED:"},{"line_number":122,"context_line":"                self.log_driver.stop_logging(context, log_resources)"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_5026c418","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":14},"updated":"2017-06-07 05:58:42.000000000","message":"\u0027if\u0027 is better to read","commit_id":"86288c554d51b5e648aa215fabf76dca191df0a7"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"434d6e09340fbaa7fa7100c253237ac112210c5d","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            if event_type \u003d\u003d events.UPDATED:"},{"line_number":117,"context_line":"                for log_resource in log_resources:"},{"line_number":118,"context_line":"                    self._update_logging(context, log_resource)"},{"line_number":119,"context_line":"            elif event_type \u003d\u003d events.CREATED:"},{"line_number":120,"context_line":"                self.log_driver.start_logging(context, log_resources)"},{"line_number":121,"context_line":"            elif event_type \u003d\u003d events.DELETED:"},{"line_number":122,"context_line":"                self.log_driver.stop_logging(context, log_resources)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f231b9d_82a22dfb","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":14},"in_reply_to":"df140735_5026c418","updated":"2017-06-16 01:40:33.000000000","message":"Yeah, I\u0027ll update in next patch-set.","commit_id":"86288c554d51b5e648aa215fabf76dca191df0a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"2be40b6089ccf564fffad835aeea055a93091dd2","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                pass"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def handle_port(self, context, port):"},{"line_number":127,"context_line":"        LOG.debug(\"port data %s\", str(port))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_port(self, context, port):"},{"line_number":130,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_f01cb8c2","line":127,"range":{"start_line":127,"start_character":34,"end_line":127,"end_character":37},"updated":"2017-06-07 05:58:42.000000000","message":"\"%s\" modifies string format.  Therefore not need to specify \u0027str\u0027.","commit_id":"86288c554d51b5e648aa215fabf76dca191df0a7"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"434d6e09340fbaa7fa7100c253237ac112210c5d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                pass"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def handle_port(self, context, port):"},{"line_number":127,"context_line":"        LOG.debug(\"port data %s\", str(port))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_port(self, context, port):"},{"line_number":130,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f231b9d_c29ca5c1","line":127,"range":{"start_line":127,"start_character":34,"end_line":127,"end_character":37},"in_reply_to":"df140735_f01cb8c2","updated":"2017-06-16 01:40:33.000000000","message":"Thanks for your teaching. :)","commit_id":"86288c554d51b5e648aa215fabf76dca191df0a7"},{"author":{"_account_id":19741,"name":"Hieu LE","email":"hieulq2@viettel.com.vn","username":"hieulq"},"change_message_id":"338b438fc2246402fcec6920fa8f8b0688cea2c5","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                pass"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def handle_port(self, context, port):"},{"line_number":114,"context_line":"        LOG.debug(\"port data %s\", str(port))"},{"line_number":115,"context_line":"        if port[\u0027device_owner\u0027] !\u003d \u0027compute:nova\u0027:"},{"line_number":116,"context_line":"            return"},{"line_number":117,"context_line":"        self.log_driver.start_logging("}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_f5475d4b","line":114,"range":{"start_line":114,"start_character":34,"end_line":114,"end_character":37},"updated":"2017-06-16 02:38:23.000000000","message":"string interpolation is done automatically, no need to do this as Furukawa-san commented in previous PS.","commit_id":"2d910af9d84e9a659fd47ead56028cabdac9ed19"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"9b6c2f387811355c9d67b3206da0f7801b97e7e7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def start_logging(self, context, **kwargs):"},{"line_number":55,"context_line":"        \"\"\"Enabled logging"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        :param kwargs: logging resource data"},{"line_number":58,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_96ee0feb","line":55,"range":{"start_line":55,"start_character":17,"end_line":55,"end_character":18},"updated":"2017-07-05 07:39:40.000000000","message":"unnecessary \u0027d\u0027; please use imperative here.","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a656d8261bdd3123d8e130c15dc6d62483882c0a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def start_logging(self, context, **kwargs):"},{"line_number":55,"context_line":"        \"\"\"Enabled logging"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        :param kwargs: logging resource data"},{"line_number":58,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_b7539039","line":55,"range":{"start_line":55,"start_character":17,"end_line":55,"end_character":18},"in_reply_to":"3f1d235d_96ee0feb","updated":"2017-07-11 10:04:45.000000000","message":"Done","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"9b6c2f387811355c9d67b3206da0f7801b97e7e7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def stop_logging(self, context, **kwargs):"},{"line_number":61,"context_line":"        \"\"\"Disabled logging"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        :param kwargs: logging resource data"},{"line_number":64,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_36c3bb5f","line":61,"range":{"start_line":61,"start_character":18,"end_line":61,"end_character":19},"updated":"2017-07-05 07:39:40.000000000","message":"ditto","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a656d8261bdd3123d8e130c15dc6d62483882c0a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def stop_logging(self, context, **kwargs):"},{"line_number":61,"context_line":"        \"\"\"Disabled logging"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        :param kwargs: logging resource data"},{"line_number":64,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_97309409","line":61,"range":{"start_line":61,"start_character":18,"end_line":61,"end_character":19},"in_reply_to":"3f1d235d_36c3bb5f","updated":"2017-07-11 10:04:45.000000000","message":"Done","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"63cc188611f61e2be18882e74c1af7288e621573","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def _handle_notification(self, context, resource_type,"},{"line_number":125,"context_line":"                             log_resources, event_type):"},{"line_number":126,"context_line":"        with self.log_driver.defer_apply():"},{"line_number":127,"context_line":"            kwargs \u003d {\u0027resource_type\u0027: \u0027security_group\u0027,"},{"line_number":128,"context_line":"                      \u0027log_resources\u0027: log_resources}"},{"line_number":129,"context_line":"            if event_type \u003d\u003d events.UPDATED:"},{"line_number":130,"context_line":"                self._update_logging(context, log_resources)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1f1a1f67_a412ac60","line":127,"range":{"start_line":127,"start_character":40,"end_line":127,"end_character":54},"updated":"2017-07-19 13:05:51.000000000","message":"is LoggingExtension specific to security_group?","commit_id":"fe9f46bd8548252119c5c421e1cc335bfe6db43f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"e278213f9613b790f15a36db2186703e8529bbf0","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def _handle_notification(self, context, resource_type,"},{"line_number":125,"context_line":"                             log_resources, event_type):"},{"line_number":126,"context_line":"        with self.log_driver.defer_apply():"},{"line_number":127,"context_line":"            kwargs \u003d {\u0027resource_type\u0027: \u0027security_group\u0027,"},{"line_number":128,"context_line":"                      \u0027log_resources\u0027: log_resources}"},{"line_number":129,"context_line":"            if event_type \u003d\u003d events.UPDATED:"},{"line_number":130,"context_line":"                self._update_logging(context, log_resources)"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff346bd7_02f59657","line":127,"range":{"start_line":127,"start_character":40,"end_line":127,"end_character":54},"in_reply_to":"1f1a1f67_a412ac60","updated":"2017-07-24 09:44:09.000000000","message":"LoggingExtension should be generic for not only \u0027security_group\u0027 resource but also for other resources. So I removed it, and handle resource_type at log_driver implementation. Do you think so?","commit_id":"fe9f46bd8548252119c5c421e1cc335bfe6db43f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"862987298ab02d0d3052ed92e89360b9b4150745","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        self.resource_rpc \u003d None"},{"line_number":97,"context_line":"        int_br \u003d self.agent_api.request_int_br()"},{"line_number":98,"context_line":"        self.log_driver \u003d manager.NeutronManager.load_class_for_provider("},{"line_number":99,"context_line":"            \u0027neutron.services.logapi.drivers\u0027, driver_type)(int_br)"},{"line_number":100,"context_line":"        self._register_rpc_consumers(connection)"},{"line_number":101,"context_line":"        self.log_driver.initialize(self.resource_rpc)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_e131165c","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":67},"updated":"2017-08-02 18:18:47.000000000","message":"The config value name is \u0027drivers\u0027, but it seem the manager loads only one driver. Is it correct?","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"bac867543c65a8171d3ab1b5f60fb821151135a9","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        self.resource_rpc \u003d None"},{"line_number":97,"context_line":"        int_br \u003d self.agent_api.request_int_br()"},{"line_number":98,"context_line":"        self.log_driver \u003d manager.NeutronManager.load_class_for_provider("},{"line_number":99,"context_line":"            \u0027neutron.services.logapi.drivers\u0027, driver_type)(int_br)"},{"line_number":100,"context_line":"        self._register_rpc_consumers(connection)"},{"line_number":101,"context_line":"        self.log_driver.initialize(self.resource_rpc)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_631cf8c0","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":67},"in_reply_to":"df3967d1_e131165c","updated":"2017-08-03 07:48:48.000000000","message":"You\u0027re right. In future, do we want to support logging for LinuxBridge (IptablesFirewallLoggingDriver)? So namespace\u0027s name is \u0027neutron.services.logapi.drivers\u0027. What do you think?","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"862987298ab02d0d3052ed92e89360b9b4150745","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    def skip_if_log_driver_disable(func):"},{"line_number":114,"context_line":"        @functools.wraps(func)"},{"line_number":115,"context_line":"        def decorated_function(self, *args, **kwargs):"},{"line_number":116,"context_line":"            if not is_logging_enabled():"},{"line_number":117,"context_line":"                LOG.info(_(\"Skipping method %s as log_driver is disabled \"),"},{"line_number":118,"context_line":"                         func.__name__)"},{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                return func(self, *args, **kwargs)"},{"line_number":121,"context_line":"        return decorated_function"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_e1c23659","line":118,"range":{"start_line":116,"start_character":11,"end_line":118,"end_character":39},"updated":"2017-08-02 18:18:47.000000000","message":"Hmm.... is_logging_enabled refers to cfg.CONF.LOG.enable and the help message says it controls whether the logging API is enabled in the server. However, the config option controls an agent driver is enabled or not here. Looks inconsistent.\n\nIf you control the **agent** driver is enabled or not, it looks better to call some method of self.log_driver.","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f2016f45c1d694f633b86c73fbaf518cb8e1a701","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    def skip_if_log_driver_disable(func):"},{"line_number":114,"context_line":"        @functools.wraps(func)"},{"line_number":115,"context_line":"        def decorated_function(self, *args, **kwargs):"},{"line_number":116,"context_line":"            if not is_logging_enabled():"},{"line_number":117,"context_line":"                LOG.info(_(\"Skipping method %s as log_driver is disabled \"),"},{"line_number":118,"context_line":"                         func.__name__)"},{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                return func(self, *args, **kwargs)"},{"line_number":121,"context_line":"        return decorated_function"}],"source_content_type":"text/x-python","patch_set":49,"id":"df3967d1_e4f58eee","line":118,"range":{"start_line":116,"start_character":11,"end_line":118,"end_character":39},"in_reply_to":"df3967d1_e1c23659","updated":"2017-08-03 09:05:26.000000000","message":"Maybe helping message made you confusing. So Can I change helping message as \"Control whether the agent driver is enable\". What do you think?","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"681205d0a179bfb00c975c3d9a96c69503ce57e7","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                self.log_driver.stop_logging("},{"line_number":113,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @lockutils.synchronized(\u0027log-port\u0027)"},{"line_number":116,"context_line":"    def handle_port(self, context, port):"},{"line_number":117,"context_line":"        if not port[\u0027device_owner\u0027].startswith("},{"line_number":118,"context_line":"                constants.DEVICE_OWNER_COMPUTE_PREFIX):"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_a3b4b236","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":39},"updated":"2017-08-08 04:40:36.000000000","message":"why only this method needs the lock?","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7cec097ee9122abc704ce8fac6142f7ce812759b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                self.log_driver.stop_logging("},{"line_number":113,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @lockutils.synchronized(\u0027log-port\u0027)"},{"line_number":116,"context_line":"    def handle_port(self, context, port):"},{"line_number":117,"context_line":"        if not port[\u0027device_owner\u0027].startswith("},{"line_number":118,"context_line":"                constants.DEVICE_OWNER_COMPUTE_PREFIX):"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f436f4f_499e4508","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":39},"in_reply_to":"9f436f4f_a3b4b236","updated":"2017-08-08 07:28:51.000000000","message":"From my understanding, @lockutils.synchronized(\u0027log-port\u0027) also need for _handle_notifications. So I will update. Thanks.","commit_id":"96a6ed33b08f3521413016e1c98b1f03ad93649a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Defines abstract interface for logging driver\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    # specific logging types are supported"},{"line_number":39,"context_line":"    SUPPORTED_LOGGING_TYPES \u003d set()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @abc.abstractmethod"},{"line_number":42,"context_line":"    def initialize(self, resource_rpc, **kwargs):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_7cbacade","line":39,"range":{"start_line":39,"start_character":30,"end_line":39,"end_character":35},"updated":"2017-10-10 16:04:49.000000000","message":"Consider setting this to None as if you\u0027d have two classes inheriting from LoggingDriver and then instantiating each class, they would share this class attribute.\n\ne.g.\n\n class ALoggingDriver(LoggingDriver):\n     pass\n\n class BLoggingDriver(LoggingDriver):\n     pass\n\n a_driver \u003d ALoggingDriver()\n b_driver \u003d BLoggingDriver()\n\nthen a_driver and b_driver would reference to the same SUPPORTED_LOGGING_TYPES object.","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Defines abstract interface for logging driver\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    # specific logging types are supported"},{"line_number":39,"context_line":"    SUPPORTED_LOGGING_TYPES \u003d set()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @abc.abstractmethod"},{"line_number":42,"context_line":"    def initialize(self, resource_rpc, **kwargs):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_8bbf5ffa","line":39,"range":{"start_line":39,"start_character":30,"end_line":39,"end_character":35},"in_reply_to":"5f4e5783_7cbacade","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.resource_rpc \u003d None"},{"line_number":87,"context_line":"        int_br \u003d self.agent_api.request_int_br()"},{"line_number":88,"context_line":"        self.log_driver \u003d manager.NeutronManager.load_class_for_provider("},{"line_number":89,"context_line":"            \u0027neutron.services.logapi.drivers\u0027, driver_type)(int_br)"},{"line_number":90,"context_line":"        self._register_rpc_consumers(connection)"},{"line_number":91,"context_line":"        self.log_driver.initialize(self.resource_rpc)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_bcbcc2bb","line":89,"range":{"start_line":89,"start_character":12,"end_line":89,"end_character":45},"updated":"2017-10-10 16:04:49.000000000","message":"Consider making this a module constant","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.resource_rpc \u003d None"},{"line_number":87,"context_line":"        int_br \u003d self.agent_api.request_int_br()"},{"line_number":88,"context_line":"        self.log_driver \u003d manager.NeutronManager.load_class_for_provider("},{"line_number":89,"context_line":"            \u0027neutron.services.logapi.drivers\u0027, driver_type)(int_br)"},{"line_number":90,"context_line":"        self._register_rpc_consumers(connection)"},{"line_number":91,"context_line":"        self.log_driver.initialize(self.resource_rpc)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_2b3ceb91","line":89,"range":{"start_line":89,"start_character":12,"end_line":89,"end_character":45},"in_reply_to":"5f4e5783_bcbcc2bb","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        with self.log_driver.defer_apply():"},{"line_number":107,"context_line":"            if event_type \u003d\u003d events.UPDATED:"},{"line_number":108,"context_line":"                self._update_logging(context, log_resources)"},{"line_number":109,"context_line":"            if event_type \u003d\u003d events.CREATED:"},{"line_number":110,"context_line":"                self.log_driver.start_logging("},{"line_number":111,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":112,"context_line":"            if event_type \u003d\u003d events.DELETED:"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_7c39aa3f","line":109,"range":{"start_line":109,"start_character":12,"end_line":109,"end_character":15},"updated":"2017-10-10 16:04:49.000000000","message":"elif","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        with self.log_driver.defer_apply():"},{"line_number":107,"context_line":"            if event_type \u003d\u003d events.UPDATED:"},{"line_number":108,"context_line":"                self._update_logging(context, log_resources)"},{"line_number":109,"context_line":"            if event_type \u003d\u003d events.CREATED:"},{"line_number":110,"context_line":"                self.log_driver.start_logging("},{"line_number":111,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":112,"context_line":"            if event_type \u003d\u003d events.DELETED:"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_cb4af725","line":109,"range":{"start_line":109,"start_character":12,"end_line":109,"end_character":15},"in_reply_to":"5f4e5783_7c39aa3f","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            if event_type \u003d\u003d events.CREATED:"},{"line_number":110,"context_line":"                self.log_driver.start_logging("},{"line_number":111,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":112,"context_line":"            if event_type \u003d\u003d events.DELETED:"},{"line_number":113,"context_line":"                self.log_driver.stop_logging("},{"line_number":114,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_fc447ab9","line":112,"range":{"start_line":112,"start_character":12,"end_line":112,"end_character":14},"updated":"2017-10-10 16:04:49.000000000","message":"elif","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            if event_type \u003d\u003d events.CREATED:"},{"line_number":110,"context_line":"                self.log_driver.start_logging("},{"line_number":111,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":112,"context_line":"            if event_type \u003d\u003d events.DELETED:"},{"line_number":113,"context_line":"                self.log_driver.stop_logging("},{"line_number":114,"context_line":"                    context, log_resources\u003dlog_resources)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_ab47bb1d","line":112,"range":{"start_line":112,"start_character":12,"end_line":112,"end_character":14},"in_reply_to":"5f4e5783_fc447ab9","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @lockutils.synchronized(\u0027log-port\u0027)"},{"line_number":117,"context_line":"    def handle_port(self, context, port):"},{"line_number":118,"context_line":"        if not port[\u0027device_owner\u0027].startswith("},{"line_number":119,"context_line":"                constants.DEVICE_OWNER_COMPUTE_PREFIX):"},{"line_number":120,"context_line":"            return"},{"line_number":121,"context_line":"        self.log_driver.start_logging(context, port_id\u003dport[\u0027port_id\u0027])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def delete_port(self, context, port):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_bcf4c25c","line":120,"range":{"start_line":118,"start_character":0,"end_line":120,"end_character":18},"updated":"2017-10-10 16:04:49.000000000","message":"nit: Given that no actions are done, consider switching the condition:\n\n if port[\u0027device_owner\u0027].startswith(...):\n     self.log_driver.start_logging()","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @lockutils.synchronized(\u0027log-port\u0027)"},{"line_number":117,"context_line":"    def handle_port(self, context, port):"},{"line_number":118,"context_line":"        if not port[\u0027device_owner\u0027].startswith("},{"line_number":119,"context_line":"                constants.DEVICE_OWNER_COMPUTE_PREFIX):"},{"line_number":120,"context_line":"            return"},{"line_number":121,"context_line":"        self.log_driver.start_logging(context, port_id\u003dport[\u0027port_id\u0027])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def delete_port(self, context, port):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_4b6047a6","line":120,"range":{"start_line":118,"start_character":0,"end_line":120,"end_character":18},"in_reply_to":"5f4e5783_bcf4c25c","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"}],"neutron/tests/unit/services/logapi/agent/test_log_extension.py":[{"author":{"_account_id":19741,"name":"Hieu LE","email":"hieulq2@viettel.com.vn","username":"hieulq"},"change_message_id":"338b438fc2246402fcec6920fa8f8b0688cea2c5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @mock.patch.object(registry, \u0027register\u0027)"},{"line_number":80,"context_line":"    @mock.patch.object(resources_rpc, \u0027ResourcesPushRpcCallback\u0027)"},{"line_number":81,"context_line":"    def test_initialize_subscribed_to_rpc(self, rpc_mock, subscribe_mock):"},{"line_number":82,"context_line":"        self.agent_ext.initialize("},{"line_number":83,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":84,"context_line":"        self.connection.create_consumer.assert_has_calls("},{"line_number":85,"context_line":"            [mock.call("},{"line_number":86,"context_line":"                resources_rpc.resource_type_versioned_topic(resource_type),"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_15dbf97b","line":83,"range":{"start_line":82,"start_character":8,"end_line":83,"end_character":61},"updated":"2017-06-16 02:38:23.000000000","message":"these line is dupplicated in setUp() of this test, no need to call it again.","commit_id":"2d910af9d84e9a659fd47ead56028cabdac9ed19"},{"author":{"_account_id":19741,"name":"Hieu LE","email":"hieulq2@viettel.com.vn","username":"hieulq"},"change_message_id":"338b438fc2246402fcec6920fa8f8b0688cea2c5","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                fanout\u003dTrue)"},{"line_number":89,"context_line":"             for resource_type in self.agent_ext.SUPPORTED_RESOURCE_TYPES]"},{"line_number":90,"context_line":"        )"},{"line_number":91,"context_line":"        subscribe_mock.assert_called_with(mock.ANY, resources.LOGGING_RESOURCE)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test__handle_notification_passes_update_events_enabled_log(self):"},{"line_number":94,"context_line":"        log_obj \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_b585655c","line":91,"updated":"2017-06-16 02:38:23.000000000","message":"should assert called of rpc_mock here","commit_id":"2d910af9d84e9a659fd47ead56028cabdac9ed19"},{"author":{"_account_id":19741,"name":"Hieu LE","email":"hieulq2@viettel.com.vn","username":"hieulq"},"change_message_id":"338b438fc2246402fcec6920fa8f8b0688cea2c5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        subscribe_mock.assert_called_with(mock.ANY, resources.LOGGING_RESOURCE)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test__handle_notification_passes_update_events_enabled_log(self):"},{"line_number":94,"context_line":"        log_obj \u003d mock.Mock()"},{"line_number":95,"context_line":"        log_obj.enabled \u003d True"},{"line_number":96,"context_line":"        self.agent_ext._handle_notification("},{"line_number":97,"context_line":"            self.context, \u0027log\u0027, [log_obj], events.UPDATED)"},{"line_number":98,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":99,"context_line":"                 mock.call.start_logging(self.context,"},{"line_number":100,"context_line":"                                         **{\u0027resource_type\u0027: \u0027security_group\u0027,"},{"line_number":101,"context_line":"                                            \u0027log_resources\u0027: [log_obj]})]"},{"line_number":102,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test__handle_notification_passes_update_events_disabled_log(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_75b34d0b","line":101,"range":{"start_line":94,"start_character":8,"end_line":101,"end_character":73},"updated":"2017-06-16 02:38:23.000000000","message":"this could be duplicate too many times, how about create private method that can test all handle method:\n\ndef _test_handle_notification(self, enabled\u003dTrue, event\u003devents.UPDATED):\n   log_obj \u003d mock.Mock()\n   log_obj.enabled \u003d enabled\n   self.agent_ext._handle_notification(\n       self.context, \u0027log\u0027, [log_obj], event)\n   calls \u003d [mock.call.defer_apply(),\n       mock.call.start_logging(self.context,\n                               **{\u0027resource_type\u0027: \u0027security_group\u0027,\n                              \u0027log_resources\u0027: [log_obj]})]\n   self.log_driver.assert_has_calls(calls)","commit_id":"2d910af9d84e9a659fd47ead56028cabdac9ed19"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"871215695cf6f8d6d896ead93c80247c9982aa7a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    ovs_agent_extension_api as ovs_ext_api)"},{"line_number":26,"context_line":"from neutron.plugins.ml2.drivers.openvswitch.agent.common import constants"},{"line_number":27,"context_line":"from neutron.plugins.ml2.drivers.openvswitch.agent.openflow.ovs_ofctl import ("},{"line_number":28,"context_line":"    ovs_bridge)"},{"line_number":29,"context_line":"from neutron.services.logapi.agent import log_extension as log_ext"},{"line_number":30,"context_line":"from neutron.tests import base"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"9f436f4f_dfd29e5c","line":28,"updated":"2017-08-10 08:54:52.000000000","message":"It\u0027s better to avoid importing specific of_interface driver.\nCan\u0027t you use a mock?","commit_id":"d0b019e8bbf925abc3737428df424291a4d297b3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        conn_patcher \u003d mock.patch("},{"line_number":52,"context_line":"            \u0027neutron.agent.ovsdb.native.connection.Connection.start\u0027)"},{"line_number":53,"context_line":"        conn_patcher.start()"},{"line_number":54,"context_line":"        self.addCleanup(conn_patcher.stop)"},{"line_number":55,"context_line":"        self.agent_ext \u003d log_ext.LoggingExtension()"},{"line_number":56,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":57,"context_line":"        self.connection \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_7c3f6ad6","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":42},"updated":"2017-10-10 16:04:49.000000000","message":"You don\u0027t need to do that. All TestCases stop mocked objects on teardown","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        conn_patcher \u003d mock.patch("},{"line_number":52,"context_line":"            \u0027neutron.agent.ovsdb.native.connection.Connection.start\u0027)"},{"line_number":53,"context_line":"        conn_patcher.start()"},{"line_number":54,"context_line":"        self.addCleanup(conn_patcher.stop)"},{"line_number":55,"context_line":"        self.agent_ext \u003d log_ext.LoggingExtension()"},{"line_number":56,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":57,"context_line":"        self.connection \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_eb5ed3e4","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":42},"in_reply_to":"5f4e5783_7c3f6ad6","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.agent_ext \u003d log_ext.LoggingExtension()"},{"line_number":56,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":57,"context_line":"        self.connection \u003d mock.Mock()"},{"line_number":58,"context_line":"        self.agent_id \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":59,"context_line":"            ovs_bridge.OVSAgentBridge(\u0027br-int\u0027),"},{"line_number":60,"context_line":"            ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027))"},{"line_number":61,"context_line":"        self.agent_ext.consume_api(self.agent_id)"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_9c134667","line":58,"range":{"start_line":58,"start_character":13,"end_line":58,"end_character":21},"updated":"2017-10-10 16:04:49.000000000","message":"agent_api ? Do you need a self here? looks like it\u0027s not used anywhere else","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.agent_ext \u003d log_ext.LoggingExtension()"},{"line_number":56,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":57,"context_line":"        self.connection \u003d mock.Mock()"},{"line_number":58,"context_line":"        self.agent_id \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":59,"context_line":"            ovs_bridge.OVSAgentBridge(\u0027br-int\u0027),"},{"line_number":60,"context_line":"            ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027))"},{"line_number":61,"context_line":"        self.agent_ext.consume_api(self.agent_id)"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_cb731780","line":58,"range":{"start_line":58,"start_character":13,"end_line":58,"end_character":21},"in_reply_to":"5f4e5783_9c134667","updated":"2017-10-11 09:00:26.000000000","message":"Thanks. :)","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def setUp(self):"},{"line_number":69,"context_line":"        super(LoggingExtensionTestCase, self).setUp()"},{"line_number":70,"context_line":"        self.agent_ext.initialize("},{"line_number":71,"context_line":"                    self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":72,"context_line":"        self.log_driver \u003d mock.Mock()"},{"line_number":73,"context_line":"        log_driver_object \u003d FakeLogDriver()"},{"line_number":74,"context_line":"        self.log_driver.defer_apply.side_effect \u003d log_driver_object.defer_apply"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_7f0d1c36","line":71,"updated":"2017-10-10 16:04:49.000000000","message":"Indentation","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def setUp(self):"},{"line_number":69,"context_line":"        super(LoggingExtensionTestCase, self).setUp()"},{"line_number":70,"context_line":"        self.agent_ext.initialize("},{"line_number":71,"context_line":"                    self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":72,"context_line":"        self.log_driver \u003d mock.Mock()"},{"line_number":73,"context_line":"        log_driver_object \u003d FakeLogDriver()"},{"line_number":74,"context_line":"        self.log_driver.defer_apply.side_effect \u003d log_driver_object.defer_apply"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_6b6ae380","line":71,"in_reply_to":"5f4e5783_7f0d1c36","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        log_obj.enabled \u003d True"},{"line_number":84,"context_line":"        self.agent_ext._handle_notification("},{"line_number":85,"context_line":"            self.context, \u0027log\u0027, [log_obj], events.UPDATED)"},{"line_number":86,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":87,"context_line":"                 mock.call.start_logging("},{"line_number":88,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":89,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test__handle_notification_passes_update_events_disabled_log(self):"},{"line_number":92,"context_line":"        log_obj \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_ff8d8c7b","line":89,"range":{"start_line":86,"start_character":0,"end_line":89,"end_character":47},"updated":"2017-10-10 16:04:49.000000000","message":"I think the main point is to validate a correct routine was called for given event type, defer_apply is an implementation detail, I would not validate it as if you change the method in the future, you would need to change the test too. Consider just\n\n self.assertTrue(self.log_driver.start_logging.called)","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        log_obj.enabled \u003d True"},{"line_number":84,"context_line":"        self.agent_ext._handle_notification("},{"line_number":85,"context_line":"            self.context, \u0027log\u0027, [log_obj], events.UPDATED)"},{"line_number":86,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":87,"context_line":"                 mock.call.start_logging("},{"line_number":88,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":89,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test__handle_notification_passes_update_events_disabled_log(self):"},{"line_number":92,"context_line":"        log_obj \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_4b05e7c1","line":89,"range":{"start_line":86,"start_character":0,"end_line":89,"end_character":47},"in_reply_to":"5f4e5783_ff8d8c7b","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        log_obj.enabled \u003d False"},{"line_number":94,"context_line":"        self.agent_ext._handle_notification("},{"line_number":95,"context_line":"            self.context, \u0027log\u0027, [log_obj], events.UPDATED)"},{"line_number":96,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":97,"context_line":"                 mock.call.stop_logging("},{"line_number":98,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":99,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test__handle_notification_passes_create_events(self):"},{"line_number":102,"context_line":"        log_obj \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_1fe62846","line":99,"range":{"start_line":96,"start_character":0,"end_line":99,"end_character":47},"updated":"2017-10-10 16:04:49.000000000","message":"ditto","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        log_obj.enabled \u003d False"},{"line_number":94,"context_line":"        self.agent_ext._handle_notification("},{"line_number":95,"context_line":"            self.context, \u0027log\u0027, [log_obj], events.UPDATED)"},{"line_number":96,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":97,"context_line":"                 mock.call.stop_logging("},{"line_number":98,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":99,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test__handle_notification_passes_create_events(self):"},{"line_number":102,"context_line":"        log_obj \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_cbf8b7c5","line":99,"range":{"start_line":96,"start_character":0,"end_line":99,"end_character":47},"in_reply_to":"5f4e5783_1fe62846","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":106,"context_line":"                 mock.call.start_logging("},{"line_number":107,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":108,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test__handle_notification_passes_delete_events(self):"},{"line_number":111,"context_line":"        log_obj \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_bfd6f44e","line":108,"updated":"2017-10-10 16:04:49.000000000","message":"ditto","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":106,"context_line":"                 mock.call.start_logging("},{"line_number":107,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":108,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test__handle_notification_passes_delete_events(self):"},{"line_number":111,"context_line":"        log_obj \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_8b02bfb3","line":108,"in_reply_to":"5f4e5783_bfd6f44e","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":115,"context_line":"                 mock.call.stop_logging("},{"line_number":116,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":117,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_handle_vm_port(self):"},{"line_number":120,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_9fcb38a4","line":117,"updated":"2017-10-10 16:04:49.000000000","message":"ditto","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        calls \u003d [mock.call.defer_apply(),"},{"line_number":115,"context_line":"                 mock.call.stop_logging("},{"line_number":116,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":117,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_handle_vm_port(self):"},{"line_number":120,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_0b280f32","line":117,"in_reply_to":"5f4e5783_9fcb38a4","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":117,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_handle_vm_port(self):"},{"line_number":120,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"},{"line_number":121,"context_line":"        self.agent_ext.handle_port(self.context, port)"},{"line_number":122,"context_line":"        self.log_driver.start_logging.assert_called_with("}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_df3650b5","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":27},"updated":"2017-10-10 16:04:49.000000000","message":"It\u0027s handle_port, so according name convention it should be test_handle_port_vm","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                     self.context, log_resources\u003d[log_obj])]"},{"line_number":117,"context_line":"        self.log_driver.assert_has_calls(calls)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_handle_vm_port(self):"},{"line_number":120,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"},{"line_number":121,"context_line":"        self.agent_ext.handle_port(self.context, port)"},{"line_number":122,"context_line":"        self.log_driver.start_logging.assert_called_with("}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_ab1e9b09","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":27},"in_reply_to":"5f4e5783_df3650b5","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def test_handle_vm_port(self):"},{"line_number":120,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"},{"line_number":121,"context_line":"        self.agent_ext.handle_port(self.context, port)"},{"line_number":122,"context_line":"        self.log_driver.start_logging.assert_called_with("},{"line_number":123,"context_line":"            self.context, port_id\u003dport[\u0027port_id\u0027]"},{"line_number":124,"context_line":"        )"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def test_handle_not_vm_port(self):"},{"line_number":127,"context_line":"        port \u003d self._create_test_port_dict("}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_5f738081","line":124,"range":{"start_line":122,"start_character":8,"end_line":124,"end_character":9},"updated":"2017-10-10 16:04:49.000000000","message":"Consider just checking whether the start_logging was called. Parameters are not important to check that condition in handle_port() was met","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def test_handle_vm_port(self):"},{"line_number":120,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"},{"line_number":121,"context_line":"        self.agent_ext.handle_port(self.context, port)"},{"line_number":122,"context_line":"        self.log_driver.start_logging.assert_called_with("},{"line_number":123,"context_line":"            self.context, port_id\u003dport[\u0027port_id\u0027]"},{"line_number":124,"context_line":"        )"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def test_handle_not_vm_port(self):"},{"line_number":127,"context_line":"        port \u003d self._create_test_port_dict("}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_8b1bdf19","line":124,"range":{"start_line":122,"start_character":8,"end_line":124,"end_character":9},"in_reply_to":"5f4e5783_5f738081","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.agent_ext.handle_port(self.context, port)"},{"line_number":130,"context_line":"        self.log_driver.start_logging.assert_not_called()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_delete_port(self):"},{"line_number":133,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"},{"line_number":134,"context_line":"        self.agent_ext.delete_port(self.context, port)"},{"line_number":135,"context_line":"        self.log_driver.stop_logging.assert_called_with("},{"line_number":136,"context_line":"            self.context, port_id\u003dport[\u0027port_id\u0027]"},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class LoggingExtensionInitializeTestCase(LoggingExtensionBaseTestCase):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_3f1e840c","line":137,"range":{"start_line":132,"start_character":0,"end_line":137,"end_character":9},"updated":"2017-10-10 16:04:49.000000000","message":"I would remove this test completely. The interaction should be tested in different test suite","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.agent_ext.handle_port(self.context, port)"},{"line_number":130,"context_line":"        self.log_driver.start_logging.assert_not_called()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_delete_port(self):"},{"line_number":133,"context_line":"        port \u003d self._create_test_port_dict(device_owner\u003d\u0027compute:nova\u0027)"},{"line_number":134,"context_line":"        self.agent_ext.delete_port(self.context, port)"},{"line_number":135,"context_line":"        self.log_driver.stop_logging.assert_called_with("},{"line_number":136,"context_line":"            self.context, port_id\u003dport[\u0027port_id\u0027]"},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class LoggingExtensionInitializeTestCase(LoggingExtensionBaseTestCase):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_4bd3a739","line":137,"range":{"start_line":132,"start_character":0,"end_line":137,"end_character":9},"in_reply_to":"5f4e5783_3f1e840c","updated":"2017-10-11 09:00:26.000000000","message":"Done","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b34d822746be92e66ac9e22de002c608bd10c5bc","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class LoggingExtensionInitializeTestCase(LoggingExtensionBaseTestCase):"},{"line_number":141,"context_line":"    @mock.patch.object(registry, \u0027register\u0027)"},{"line_number":142,"context_line":"    @mock.patch.object(resources_rpc, \u0027ResourcesPushRpcCallback\u0027)"},{"line_number":143,"context_line":"    def test_initialize_subscribed_to_rpc(self, rpc_mock, subscribe_mock):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_bfc03452","line":140,"range":{"start_line":140,"start_character":6,"end_line":140,"end_character":40},"updated":"2017-10-10 16:04:49.000000000","message":"Why does this have its own class? Shouldn\u0027t it be moved to the above?","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9bbdaecd5563c8f70c0a9bdb268c0075633c613e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class LoggingExtensionInitializeTestCase(LoggingExtensionBaseTestCase):"},{"line_number":141,"context_line":"    @mock.patch.object(registry, \u0027register\u0027)"},{"line_number":142,"context_line":"    @mock.patch.object(resources_rpc, \u0027ResourcesPushRpcCallback\u0027)"},{"line_number":143,"context_line":"    def test_initialize_subscribed_to_rpc(self, rpc_mock, subscribe_mock):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_6b8f83cc","line":140,"range":{"start_line":140,"start_character":6,"end_line":140,"end_character":40},"in_reply_to":"5f4e5783_0b836fce","updated":"2017-10-11 09:07:10.000000000","message":"Thanks for your understanding. Have a great day ahead. :)","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"31e6eddaad413fc371dc601ad0b06ff1685131ce","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class LoggingExtensionInitializeTestCase(LoggingExtensionBaseTestCase):"},{"line_number":141,"context_line":"    @mock.patch.object(registry, \u0027register\u0027)"},{"line_number":142,"context_line":"    @mock.patch.object(resources_rpc, \u0027ResourcesPushRpcCallback\u0027)"},{"line_number":143,"context_line":"    def test_initialize_subscribed_to_rpc(self, rpc_mock, subscribe_mock):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_ebeb73ad","line":140,"range":{"start_line":140,"start_character":6,"end_line":140,"end_character":40},"in_reply_to":"5f4e5783_bfc03452","updated":"2017-10-11 09:00:26.000000000","message":"We can move it to the above as you said. However in LoggingExtensionTestCase class, we already call self.agent_ext.initialize(...) at setUp. But this test need to call self.agent_ext.initialize again. So we have a duplicate code. That\u0027s reason I made a class for this test. Do you think we should keep this code?","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b7853939c249974bad2d71369ecf9de2709fda83","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class LoggingExtensionInitializeTestCase(LoggingExtensionBaseTestCase):"},{"line_number":141,"context_line":"    @mock.patch.object(registry, \u0027register\u0027)"},{"line_number":142,"context_line":"    @mock.patch.object(resources_rpc, \u0027ResourcesPushRpcCallback\u0027)"},{"line_number":143,"context_line":"    def test_initialize_subscribed_to_rpc(self, rpc_mock, subscribe_mock):"}],"source_content_type":"text/x-python","patch_set":60,"id":"5f4e5783_0b836fce","line":140,"range":{"start_line":140,"start_character":6,"end_line":140,"end_character":40},"in_reply_to":"5f4e5783_ebeb73ad","updated":"2017-10-11 09:02:42.000000000","message":"Yeah, if there is a reason then it\u0027s fine :) I just didn\u0027t see the reason before. Thanks for explanation","commit_id":"d81801d08be9c24365cc589258e7518356e1c70f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e43dcd02a617b353aecb395eec679a24ed5b87e9","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        self.assertFalse(self.log_driver.start_logging.called)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class LoggingExtensionDeletePortTestCase(LoggingExtensionBaseTestCase):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def setUp(self):"},{"line_number":121,"context_line":"        super(LoggingExtensionDeletePortTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":61,"id":"5f4e5783_cb21d74f","line":118,"updated":"2017-10-11 08:51:54.000000000","message":"Maybe my previous comment was confusing. I don\u0027t think we need to test that method calls another method at all. Rather this should be covered by more highlevel integration test (scenario job or something).","commit_id":"2f99f9715b74d77940ef545f89c7c4bbfa85d6a6"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"c3c6305ae6695a663cf7a74c6379b15d775ff46e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        self.assertFalse(self.log_driver.start_logging.called)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class LoggingExtensionDeletePortTestCase(LoggingExtensionBaseTestCase):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def setUp(self):"},{"line_number":121,"context_line":"        super(LoggingExtensionDeletePortTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":61,"id":"5f4e5783_6b730317","line":118,"in_reply_to":"5f4e5783_cb21d74f","updated":"2017-10-11 09:03:03.000000000","message":"I got it. Let me remove it. Thanks.","commit_id":"2f99f9715b74d77940ef545f89c7c4bbfa85d6a6"}],"setup.cfg":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62a53a8651187e4a905f4b5eb20ec6a9cddcf439","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    revisions \u003d neutron.services.revisions.revision_plugin:RevisionPlugin"},{"line_number":83,"context_line":"    timestamp \u003d neutron.services.timestamp.timestamp_plugin:TimeStampPlugin"},{"line_number":84,"context_line":"    trunk \u003d neutron.services.trunk.plugin:TrunkPlugin"},{"line_number":85,"context_line":"    logapi \u003d neutron.services.logapi.logging_plugin:LoggingApiPlugin"},{"line_number":86,"context_line":"neutron.qos.notification_drivers \u003d"},{"line_number":87,"context_line":"    message_queue \u003d neutron.services.qos.notification_drivers.message_queue:RpcQosServiceNotificationDriver"},{"line_number":88,"context_line":"neutron.ml2.type_drivers \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"ba5201f7_f37c4622","line":85,"range":{"start_line":85,"start_character":4,"end_line":85,"end_character":10},"updated":"2017-01-11 04:52:14.000000000","message":"I think \u0027api\u0027 is not necessary.  How about \u0027logging\u0027 or \u0027network_log\u0027?","commit_id":"00ed74c2d90202fab18652fc1dd25dd181c9fc3f"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"fb0dc9ba4450e3977f28990caf68a9dd08ba92e1","unresolved":false,"context_lines":[{"line_number":113,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":114,"context_line":"    qos \u003d neutron.agent.l2.extensions.qos:QosAgentExtension"},{"line_number":115,"context_line":"    fdb \u003d neutron.agent.l2.extensions.fdb_population:FdbPopulationAgentExtension"},{"line_number":116,"context_line":"    logapi \u003d neutron.services.logapi.agent.log_extension:LoggingExtension"},{"line_number":117,"context_line":"neutron.qos.agent_drivers \u003d"},{"line_number":118,"context_line":"    ovs \u003d neutron.plugins.ml2.drivers.openvswitch.agent.extension_drivers.qos_driver:QosOVSAgentDriver"},{"line_number":119,"context_line":"    sriov \u003d neutron.plugins.ml2.drivers.mech_sriov.agent.extension_drivers.qos_driver:QosSRIOVAgentDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":40,"id":"3f1d235d_5d641a4a","line":116,"updated":"2017-07-05 05:30:15.000000000","message":"why don\u0027t you follow the precedents to have it under neutron.agent.l2.extensions?\n\n(i don\u0027t have any strong preferences either ways. just wondering)","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"0a59fa5f005e02824074a0c16c0f37d21db9c49a","unresolved":false,"context_lines":[{"line_number":113,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":114,"context_line":"    qos \u003d neutron.agent.l2.extensions.qos:QosAgentExtension"},{"line_number":115,"context_line":"    fdb \u003d neutron.agent.l2.extensions.fdb_population:FdbPopulationAgentExtension"},{"line_number":116,"context_line":"    logapi \u003d neutron.services.logapi.agent.log_extension:LoggingExtension"},{"line_number":117,"context_line":"neutron.qos.agent_drivers \u003d"},{"line_number":118,"context_line":"    ovs \u003d neutron.plugins.ml2.drivers.openvswitch.agent.extension_drivers.qos_driver:QosOVSAgentDriver"},{"line_number":119,"context_line":"    sriov \u003d neutron.plugins.ml2.drivers.mech_sriov.agent.extension_drivers.qos_driver:QosSRIOVAgentDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":40,"id":"1f1a1f67_0ac7b447","line":116,"in_reply_to":"3f1d235d_5d641a4a","updated":"2017-07-14 10:04:18.000000000","message":"Actually, I only want to structure it in same folder with other codes of logging. That is.","commit_id":"b2b2eceb8553c8805ca38983834b83e1ec490678"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"862987298ab02d0d3052ed92e89360b9b4150745","unresolved":false,"context_lines":[{"line_number":114,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":115,"context_line":"    qos \u003d neutron.agent.l2.extensions.qos:QosAgentExtension"},{"line_number":116,"context_line":"    fdb \u003d neutron.agent.l2.extensions.fdb_population:FdbPopulationAgentExtension"},{"line_number":117,"context_line":"    logapi \u003d neutron.services.logapi.agent.log_extension:LoggingExtension"},{"line_number":118,"context_line":"neutron.qos.agent_drivers \u003d"},{"line_number":119,"context_line":"    ovs \u003d neutron.plugins.ml2.drivers.openvswitch.agent.extension_drivers.qos_driver:QosOVSAgentDriver"},{"line_number":120,"context_line":"    sriov \u003d neutron.plugins.ml2.drivers.mech_sriov.agent.extension_drivers.qos_driver:QosSRIOVAgentDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":49,"id":"df3967d1_c18052c2","line":117,"range":{"start_line":117,"start_character":4,"end_line":117,"end_character":10},"updated":"2017-08-02 18:18:47.000000000","message":"This is not \"API\". \u0027logapi\u0027 looks a bit odd.","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7864742cacfaf27d695bf3203fda403e8a71bdef","unresolved":false,"context_lines":[{"line_number":114,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":115,"context_line":"    qos \u003d neutron.agent.l2.extensions.qos:QosAgentExtension"},{"line_number":116,"context_line":"    fdb \u003d neutron.agent.l2.extensions.fdb_population:FdbPopulationAgentExtension"},{"line_number":117,"context_line":"    logapi \u003d neutron.services.logapi.agent.log_extension:LoggingExtension"},{"line_number":118,"context_line":"neutron.qos.agent_drivers \u003d"},{"line_number":119,"context_line":"    ovs \u003d neutron.plugins.ml2.drivers.openvswitch.agent.extension_drivers.qos_driver:QosOVSAgentDriver"},{"line_number":120,"context_line":"    sriov \u003d neutron.plugins.ml2.drivers.mech_sriov.agent.extension_drivers.qos_driver:QosSRIOVAgentDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":49,"id":"df3967d1_64c4fe5f","line":117,"range":{"start_line":117,"start_character":4,"end_line":117,"end_character":10},"in_reply_to":"df3967d1_431c5477","updated":"2017-08-03 09:10:06.000000000","message":"Do you like \u0027net_log\u0027? :)","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"1b44ab3a5e6532d83665a4e9bc23df4a8d842f91","unresolved":false,"context_lines":[{"line_number":114,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":115,"context_line":"    qos \u003d neutron.agent.l2.extensions.qos:QosAgentExtension"},{"line_number":116,"context_line":"    fdb \u003d neutron.agent.l2.extensions.fdb_population:FdbPopulationAgentExtension"},{"line_number":117,"context_line":"    logapi \u003d neutron.services.logapi.agent.log_extension:LoggingExtension"},{"line_number":118,"context_line":"neutron.qos.agent_drivers \u003d"},{"line_number":119,"context_line":"    ovs \u003d neutron.plugins.ml2.drivers.openvswitch.agent.extension_drivers.qos_driver:QosOVSAgentDriver"},{"line_number":120,"context_line":"    sriov \u003d neutron.plugins.ml2.drivers.mech_sriov.agent.extension_drivers.qos_driver:QosSRIOVAgentDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":49,"id":"df3967d1_431c5477","line":117,"range":{"start_line":117,"start_character":4,"end_line":117,"end_character":10},"in_reply_to":"df3967d1_c18052c2","updated":"2017-08-03 08:35:48.000000000","message":"Actually, I haven\u0027t found a pretty name for it, yet. Do you have any suggestion for me? How about \u0027log\u0027 or \u0027logging\u0027?","commit_id":"4c7ae4557c8ad493e9d96c513381f98ae3099f70"}]}
