)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10391,"name":"Ihor Kalnytskyi","email":"ihor@kalnytskyi.com","username":"ikalnitsky"},"change_message_id":"126b0daf6b246979f64edf4ee79cb64a846e6239","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add DPDK support for node interfaces via API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":" * Add list of supported DPDK drivers to openstack.yaml"},{"line_number":10,"context_line":" * Add correct transformations for enabling DPDK"},{"line_number":11,"context_line":" * Add handling of DPDK data received from nailgun-agent"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"fa0719c6_426e34ca","line":9,"updated":"2016-03-21 10:35:19.000000000","message":"It\u0027s usually a good idea to split a path into smaller ones. You points here is a good example that you\u0027re making few things on one patch.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8705c985407951ae572b684323a509da00afa990","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add DPDK support for node interfaces via API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":" * Add list of supported DPDK drivers to openstack.yaml"},{"line_number":10,"context_line":" * Add correct transformations for enabling DPDK"},{"line_number":11,"context_line":" * Add handling of DPDK data received from nailgun-agent"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"fa0719c6_7d7cbd20","line":9,"in_reply_to":"fa0719c6_426e34ca","updated":"2016-03-21 12:34:29.000000000","message":"Yep, you are right. There was number of changes of this CR, with adding new functionality... I will try to avoid such situations in my next CRs.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"}],"nailgun/nailgun/consts.py":[{"author":{"_account_id":10391,"name":"Ihor Kalnytskyi","email":"ihor@kalnytskyi.com","username":"ikalnitsky"},"change_message_id":"126b0daf6b246979f64edf4ee79cb64a846e6239","unresolved":false,"context_lines":[{"line_number":81,"context_line":"NEUTRON_L23_PROVIDERS \u003d Enum("},{"line_number":82,"context_line":"    \u0027ovs\u0027,"},{"line_number":83,"context_line":"    \u0027nsx\u0027,"},{"line_number":84,"context_line":"    \u0027dpdkovs\u0027"},{"line_number":85,"context_line":")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"NEUTRON_SEGMENT_TYPES \u003d Enum("}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_82ddec72","line":84,"updated":"2016-03-21 10:35:19.000000000","message":"This consts is used for enum values of NeutronConfig model. That means you need to write a migration.\n\nIf your tests are passed, then probably you didn\u0027t use that value in the tests. Am I right?","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8705c985407951ae572b684323a509da00afa990","unresolved":false,"context_lines":[{"line_number":81,"context_line":"NEUTRON_L23_PROVIDERS \u003d Enum("},{"line_number":82,"context_line":"    \u0027ovs\u0027,"},{"line_number":83,"context_line":"    \u0027nsx\u0027,"},{"line_number":84,"context_line":"    \u0027dpdkovs\u0027"},{"line_number":85,"context_line":")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"NEUTRON_SEGMENT_TYPES \u003d Enum("}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_23bcdf6b","line":84,"in_reply_to":"fa0719c6_82ddec72","updated":"2016-03-21 12:34:29.000000000","message":"Done","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"}],"nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_9_0.py":[{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"be13a34f44108ddc37080472ab39cc4a0e4899e1","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    )"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"def upgrade_neutron_l23_providers():"},{"line_number":514,"context_line":"    upgrade_enum("},{"line_number":515,"context_line":"        \"neutron_config\",           # table"},{"line_number":516,"context_line":"        \"net_l23_provider\",         # column"}],"source_content_type":"text/x-python","patch_set":33,"id":"fa0719c6_3c651d45","line":513,"updated":"2016-03-21 14:11:52.000000000","message":"I\u0027m not sure we need this. \u0027dpdkovs\u0027 will not be used here (at cluster level). actually, we can remove net_l23_provider field as l23 provider may vary for different interfaces. We can leave this as is but remove net_l23_provider within separate bug. thoughts?","commit_id":"45e1bf3f48c401a5fd1d008e72e6dc61ac3656df"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"ac7fee57b9796f1d60d92828d07ebcdb23cdef3a","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    )"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"def upgrade_neutron_l23_providers():"},{"line_number":514,"context_line":"    upgrade_enum("},{"line_number":515,"context_line":"        \"neutron_config\",           # table"},{"line_number":516,"context_line":"        \"net_l23_provider\",         # column"}],"source_content_type":"text/x-python","patch_set":33,"id":"fa0719c6_bf375fe2","line":513,"in_reply_to":"fa0719c6_3c651d45","updated":"2016-03-21 14:14:49.000000000","message":"I\u0027d vote for creating separate bug on removing net_l23_provider.","commit_id":"45e1bf3f48c401a5fd1d008e72e6dc61ac3656df"}],"nailgun/nailgun/fixtures/openstack.yaml":[{"author":{"_account_id":17503,"name":"Sergey Kreys","email":"skreys@mirantis.com","username":"skreys"},"change_message_id":"5dd676a83b4fb1aee153cb3b99f2bc58466a249f","unresolved":false,"context_lines":[{"line_number":2011,"context_line":"    networks_metadata:"},{"line_number":2012,"context_line":"      dpdk_drivers:"},{"line_number":2013,"context_line":"      # TODO(fzhadaev): add correct list of supported devices and drivers"},{"line_number":2014,"context_line":"          igb_uio: [\"8086:1010\", \"8086:1012\"]"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"bae84128_fb871310","line":2014,"range":{"start_line":2014,"start_character":6,"end_line":2014,"end_character":10},"updated":"2016-02-25 16:19:40.000000000","message":"shouldn\u0027t it be 2 spaces here instead of 4?","commit_id":"7ee4a5de3542f4ca0de026825a753ed1be020fd0"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"4b52d242e73b0ce3caa27c4b248f1ad71718b3bb","unresolved":false,"context_lines":[{"line_number":2011,"context_line":"    networks_metadata:"},{"line_number":2012,"context_line":"      dpdk_drivers:"},{"line_number":2013,"context_line":"      # TODO(fzhadaev): add correct list of supported devices and drivers"},{"line_number":2014,"context_line":"          igb_uio: [\"8086:1010\", \"8086:1012\"]"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"bae84128_6107d41d","line":2014,"range":{"start_line":2014,"start_character":6,"end_line":2014,"end_character":10},"in_reply_to":"bae84128_fb871310","updated":"2016-02-25 16:24:32.000000000","message":"Yep. Thanks. I\u0027ll fix it with adding full list of drivers.","commit_id":"7ee4a5de3542f4ca0de026825a753ed1be020fd0"},{"author":{"_account_id":18205,"name":"Bulat Gaifullin","email":"gaifullinbf@gmail.com","username":"bgaifullin"},"change_message_id":"aca257f33fbe58050f4a1ec49f9de3995fbabcb1","unresolved":false,"context_lines":[{"line_number":2138,"context_line":"            source: \u0027^\\d+$\u0027"},{"line_number":2139,"context_line":"            error: \"Incorrect value\""},{"line_number":2140,"context_line":"    networks_metadata:"},{"line_number":2141,"context_line":"      dpdk_drivers:"},{"line_number":2142,"context_line":"        # Sources:"},{"line_number":2143,"context_line":"        # http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/known_issues.rst?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9#n168"},{"line_number":2144,"context_line":"        # http://dpdk.org/browse/dpdk/tree/lib/librte_eal/common/include/rte_pci_dev_ids.h?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_f073ddb2","line":2141,"range":{"start_line":2141,"start_character":6,"end_line":2141,"end_character":18},"updated":"2016-03-21 07:07:04.000000000","message":"what is it? and why this data in openstack.yaml.\nit is hardware specific data, not application specific.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10391,"name":"Ihor Kalnytskyi","email":"ihor@kalnytskyi.com","username":"ikalnitsky"},"change_message_id":"126b0daf6b246979f64edf4ee79cb64a846e6239","unresolved":false,"context_lines":[{"line_number":2138,"context_line":"            source: \u0027^\\d+$\u0027"},{"line_number":2139,"context_line":"            error: \"Incorrect value\""},{"line_number":2140,"context_line":"    networks_metadata:"},{"line_number":2141,"context_line":"      dpdk_drivers:"},{"line_number":2142,"context_line":"        # Sources:"},{"line_number":2143,"context_line":"        # http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/known_issues.rst?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9#n168"},{"line_number":2144,"context_line":"        # http://dpdk.org/browse/dpdk/tree/lib/librte_eal/common/include/rte_pci_dev_ids.h?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_57927858","line":2141,"range":{"start_line":2141,"start_character":6,"end_line":2141,"end_character":18},"in_reply_to":"fa0719c6_66e71313","updated":"2016-03-21 10:35:19.000000000","message":"Bulat, few more comments:\n\n* DPDK driver works only with limited set of hardware. Unfortunately, there\u0027s no way to detect that support using discovery mechanism. Each DPDK driver release may support different hardware.\n\n* Since each DPDK driver release may support different hardware, we can\u0027t place that information in settings.yaml, simply because we may have different DPDK version in different OpenStack releases (our mirror would be different for them).\n\nSo the only way to do not hardcode it directly in the code, is to place it in openstack.yaml.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":18205,"name":"Bulat Gaifullin","email":"gaifullinbf@gmail.com","username":"bgaifullin"},"change_message_id":"cd5174a0bf2769f27486dea3e1f4fbf39133d2e0","unresolved":false,"context_lines":[{"line_number":2138,"context_line":"            source: \u0027^\\d+$\u0027"},{"line_number":2139,"context_line":"            error: \"Incorrect value\""},{"line_number":2140,"context_line":"    networks_metadata:"},{"line_number":2141,"context_line":"      dpdk_drivers:"},{"line_number":2142,"context_line":"        # Sources:"},{"line_number":2143,"context_line":"        # http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/known_issues.rst?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9#n168"},{"line_number":2144,"context_line":"        # http://dpdk.org/browse/dpdk/tree/lib/librte_eal/common/include/rte_pci_dev_ids.h?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_d6dde071","line":2141,"range":{"start_line":2141,"start_character":6,"end_line":2141,"end_character":18},"in_reply_to":"fa0719c6_886d1535","updated":"2016-03-21 13:31:11.000000000","message":"If it is not OSt release specific data, why do we put them into openstack.yaml?","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"ebff163d18c84864b4aaa12579cf3298e5b5caab","unresolved":false,"context_lines":[{"line_number":2138,"context_line":"            source: \u0027^\\d+$\u0027"},{"line_number":2139,"context_line":"            error: \"Incorrect value\""},{"line_number":2140,"context_line":"    networks_metadata:"},{"line_number":2141,"context_line":"      dpdk_drivers:"},{"line_number":2142,"context_line":"        # Sources:"},{"line_number":2143,"context_line":"        # http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/known_issues.rst?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9#n168"},{"line_number":2144,"context_line":"        # http://dpdk.org/browse/dpdk/tree/lib/librte_eal/common/include/rte_pci_dev_ids.h?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_66e71313","line":2141,"range":{"start_line":2141,"start_character":6,"end_line":2141,"end_character":18},"in_reply_to":"fa0719c6_b0816592","updated":"2016-03-21 08:23:05.000000000","message":"This data depends on OSt release. So, it was decided to place it here.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":11708,"name":"Atsuko Ito","email":"me@yottatsa.name","username":"yottatsa"},"change_message_id":"1864ff1a908f7c8d458889d9b3aad869beece770","unresolved":false,"context_lines":[{"line_number":2138,"context_line":"            source: \u0027^\\d+$\u0027"},{"line_number":2139,"context_line":"            error: \"Incorrect value\""},{"line_number":2140,"context_line":"    networks_metadata:"},{"line_number":2141,"context_line":"      dpdk_drivers:"},{"line_number":2142,"context_line":"        # Sources:"},{"line_number":2143,"context_line":"        # http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/known_issues.rst?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9#n168"},{"line_number":2144,"context_line":"        # http://dpdk.org/browse/dpdk/tree/lib/librte_eal/common/include/rte_pci_dev_ids.h?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_d6d160fd","line":2141,"range":{"start_line":2141,"start_character":6,"end_line":2141,"end_character":18},"in_reply_to":"fa0719c6_d6dde071","updated":"2016-03-21 13:37:28.000000000","message":"because 1) we\u0027re aligning OSt with Fuel 2) on design we\u0027re reached this agreement to store it per OSt release.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"53a7df9ca9940ca838627f56a03310a922beeb0d","unresolved":false,"context_lines":[{"line_number":2138,"context_line":"            source: \u0027^\\d+$\u0027"},{"line_number":2139,"context_line":"            error: \"Incorrect value\""},{"line_number":2140,"context_line":"    networks_metadata:"},{"line_number":2141,"context_line":"      dpdk_drivers:"},{"line_number":2142,"context_line":"        # Sources:"},{"line_number":2143,"context_line":"        # http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/known_issues.rst?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9#n168"},{"line_number":2144,"context_line":"        # http://dpdk.org/browse/dpdk/tree/lib/librte_eal/common/include/rte_pci_dev_ids.h?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_b0816592","line":2141,"range":{"start_line":2141,"start_character":6,"end_line":2141,"end_character":18},"in_reply_to":"fa0719c6_f073ddb2","updated":"2016-03-21 07:48:10.000000000","message":"It was decided on design stage to store this data here. Please see specification of DPDK feature:\nhttps://specs.openstack.org/openstack/fuel-specs/specs/9.0/support-dpdk.html#nailgun","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":11708,"name":"Atsuko Ito","email":"me@yottatsa.name","username":"yottatsa"},"change_message_id":"141dd4cb17a648808f6a76f9272ed9ee86167bba","unresolved":false,"context_lines":[{"line_number":2138,"context_line":"            source: \u0027^\\d+$\u0027"},{"line_number":2139,"context_line":"            error: \"Incorrect value\""},{"line_number":2140,"context_line":"    networks_metadata:"},{"line_number":2141,"context_line":"      dpdk_drivers:"},{"line_number":2142,"context_line":"        # Sources:"},{"line_number":2143,"context_line":"        # http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/known_issues.rst?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9#n168"},{"line_number":2144,"context_line":"        # http://dpdk.org/browse/dpdk/tree/lib/librte_eal/common/include/rte_pci_dev_ids.h?h\u003dreleases\u0026id\u003d7173acefc7cfdfbbb9b91fcba1c9a67adb4c07c9"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_886d1535","line":2141,"range":{"start_line":2141,"start_character":6,"end_line":2141,"end_character":18},"in_reply_to":"fa0719c6_f073ddb2","updated":"2016-03-21 11:32:24.000000000","message":"This is Fuel (not OSt) release specific data: it contains list of devices that the driver we\u0027re shipping supports.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"}],"nailgun/nailgun/network/manager.py":[{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"f86bec172ee8b19cfa35ba84cd3478d3126fd328","unresolved":false,"context_lines":[{"line_number":1149,"context_line":"            interface.interface_properties \u003d \\"},{"line_number":1150,"context_line":"                cls.get_default_interface_properties()"},{"line_number":1151,"context_line":"        if update_by_agent:"},{"line_number":1152,"context_line":"            cls.__refresh_dpdk_propertis(interface)"},{"line_number":1153,"context_line":""},{"line_number":1154,"context_line":"        new_offloading_modes \u003d interface_attrs.get(\u0027offloading_modes\u0027)"},{"line_number":1155,"context_line":"        old_modes_states \u003d interface.\\"}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_a5110860","line":1152,"range":{"start_line":1152,"start_character":31,"end_line":1152,"end_character":40},"updated":"2016-02-25 09:10:36.000000000","message":"properties","commit_id":"5fc36875aa304e68540058d85b49cecfbedf7c0a"},{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"f86bec172ee8b19cfa35ba84cd3478d3126fd328","unresolved":false,"context_lines":[{"line_number":1168,"context_line":"        dpdk_prperties[\u0027available\u0027] \u003d dpdk_driver is not None"},{"line_number":1169,"context_line":"        if not dpdk_driver and dpdk_prperties.get(\u0027enabled\u0027):"},{"line_number":1170,"context_line":"            dpdk_prperties[\u0027enabled\u0027] \u003d False"},{"line_number":1171,"context_line":"        interface.interface_properties.update({\u0027dpdk\u0027, dpdk_prperties})"},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"    @classmethod"},{"line_number":1174,"context_line":"    def get_dpdk_driver(cls, interface, drivers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_d0f5e8cb","line":1171,"range":{"start_line":1171,"start_character":46,"end_line":1171,"end_character":70},"updated":"2016-02-25 09:10:36.000000000","message":"{\u0027dpdk\u0027: dpdk_properties}","commit_id":"5fc36875aa304e68540058d85b49cecfbedf7c0a"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"4231466614dd1b64f71ada47f3d5e5b2790a921e","unresolved":false,"context_lines":[{"line_number":769,"context_line":"            objects.NIC.assign_networks(current_iface, nets_to_assign)"},{"line_number":770,"context_line":"            update \u003d {}"},{"line_number":771,"context_line":"            if \u0027interface_properties\u0027 in iface:"},{"line_number":772,"context_line":"                current_iface.interface_properties \u003d nailgun_utils.dict_merge("},{"line_number":773,"context_line":"                    current_iface.interface_properties,"},{"line_number":774,"context_line":"                    iface[\u0027interface_properties\u0027]"},{"line_number":775,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aed3d3a_40272c64","line":772,"range":{"start_line":772,"start_character":16,"end_line":772,"end_character":50},"updated":"2016-02-26 15:50:03.000000000","message":"networking related objects should not be updated directly (see https://review.openstack.org/#/q/status:open+project:openstack/fuel-specs+branch:master+topic:bp/network-config-refactoring )\n\nit should be \"update[\u0027interface_properties\u0027] \u003d ...\"","commit_id":"73be1c0cae4c791c57d22d740ca323ec837aeb5e"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"4231466614dd1b64f71ada47f3d5e5b2790a921e","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"            dpdk_properties[\u0027available\u0027] \u003d dpdk_driver is not None"},{"line_number":1003,"context_line":"            if not dpdk_driver and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":1004,"context_line":"                dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":1005,"context_line":"            interface.interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    @classmethod"},{"line_number":1008,"context_line":"    def get_dpdk_driver(cls, interface, drivers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aed3d3a_60d7d0bf","line":1005,"range":{"start_line":1005,"start_character":12,"end_line":1005,"end_character":49},"updated":"2016-02-26 15:50:03.000000000","message":"now we should use objects.NIC.update()","commit_id":"73be1c0cae4c791c57d22d740ca323ec837aeb5e"},{"author":{"_account_id":11708,"name":"Atsuko Ito","email":"me@yottatsa.name","username":"yottatsa"},"change_message_id":"7c37991fbd977cb2fff54a4d2ec2daf62adda403","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"            drivers \u003d cls.get_supported_dpdk_drivers(interface.node)"},{"line_number":1011,"context_line":"        pci_id \u003d interface.interface_properties.get(\u0027pci_id\u0027)"},{"line_number":1012,"context_line":"        for driver, device_ids in six.iteritems(drivers):"},{"line_number":1013,"context_line":"            if pci_id in device_ids:"},{"line_number":1014,"context_line":"                return driver"},{"line_number":1015,"context_line":"        return None"},{"line_number":1016,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9aed3d3a_db797031","line":1013,"updated":"2016-02-26 14:18:33.000000000","message":"Please check that `pci_id` and elements in `device_ids` are in same case.","commit_id":"73be1c0cae4c791c57d22d740ca323ec837aeb5e"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"d764dfd61a5854ef397e2d3c8c957e11662499db","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                default_properties \u003d cls.get_default_interface_properties()"},{"line_number":603,"context_line":"                nic_dict[\u0027interface_properties\u0027] \u003d \\"},{"line_number":604,"context_line":"                    nailgun_utils.dict_merge(nic_dict[\u0027interface_properties\u0027],"},{"line_number":605,"context_line":"                                             default_properties)"},{"line_number":606,"context_line":"            nic_dict[\u0027assigned_networks\u0027] \u003d []"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"            if to_assign_ids:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_f1bf305e","line":605,"updated":"2016-02-26 16:09:20.000000000","message":"does this help with anything? (why was it changed?)","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"ca9cb128022569861265cebb5ac19731e702de6d","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                default_properties \u003d cls.get_default_interface_properties()"},{"line_number":603,"context_line":"                nic_dict[\u0027interface_properties\u0027] \u003d \\"},{"line_number":604,"context_line":"                    nailgun_utils.dict_merge(nic_dict[\u0027interface_properties\u0027],"},{"line_number":605,"context_line":"                                             default_properties)"},{"line_number":606,"context_line":"            nic_dict[\u0027assigned_networks\u0027] \u003d []"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"            if to_assign_ids:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_4251a735","line":605,"in_reply_to":"9aed3d3a_f1bf305e","updated":"2016-03-01 13:50:21.000000000","message":"Thanks for this point. I have changed default values above. Now, we will get correct \u0027pci_id\u0027 in default configuration.","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"d764dfd61a5854ef397e2d3c8c957e11662499db","unresolved":false,"context_lines":[{"line_number":769,"context_line":"            objects.NIC.assign_networks(current_iface, nets_to_assign)"},{"line_number":770,"context_line":"            update \u003d {}"},{"line_number":771,"context_line":"            if \u0027interface_properties\u0027 in iface:"},{"line_number":772,"context_line":"                current_iface.interface_properties \u003d nailgun_utils.dict_merge("},{"line_number":773,"context_line":"                    current_iface.interface_properties,"},{"line_number":774,"context_line":"                    iface[\u0027interface_properties\u0027]"},{"line_number":775,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_f163b03f","line":772,"range":{"start_line":772,"start_character":16,"end_line":772,"end_character":29},"updated":"2016-02-26 16:09:20.000000000","message":"networking related objects should not be updated directly (see https://review.openstack.org/#/q/status:open+project:openstack/fuel-specs+branch:master+topic:bp/network-config-refactoring )\n\nit should be \"update[\u0027interface_properties\u0027] \u003d ...\"","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"ca9cb128022569861265cebb5ac19731e702de6d","unresolved":false,"context_lines":[{"line_number":769,"context_line":"            objects.NIC.assign_networks(current_iface, nets_to_assign)"},{"line_number":770,"context_line":"            update \u003d {}"},{"line_number":771,"context_line":"            if \u0027interface_properties\u0027 in iface:"},{"line_number":772,"context_line":"                current_iface.interface_properties \u003d nailgun_utils.dict_merge("},{"line_number":773,"context_line":"                    current_iface.interface_properties,"},{"line_number":774,"context_line":"                    iface[\u0027interface_properties\u0027]"},{"line_number":775,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_b888a8c6","line":772,"range":{"start_line":772,"start_character":16,"end_line":772,"end_character":29},"in_reply_to":"9aed3d3a_f163b03f","updated":"2016-03-01 13:50:21.000000000","message":"Done","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"e29a8f3e896d6f292242f40737b02d13545e4681","unresolved":false,"context_lines":[{"line_number":994,"context_line":"            interface.offloading_modes \u003d new_offloading_modes"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"    @classmethod"},{"line_number":997,"context_line":"    def refresh_dpdk_properties(cls, node):"},{"line_number":998,"context_line":"        dpdk_drivers \u003d cls.get_supported_dpdk_drivers(node)"},{"line_number":999,"context_line":"        for interface in node.interfaces:"},{"line_number":1000,"context_line":"            dpdk_properties \u003d interface.interface_properties.get(\u0027dpdk\u0027, {})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_793dc2ba","line":997,"range":{"start_line":997,"start_character":0,"end_line":997,"end_character":4},"updated":"2016-02-26 17:06:37.000000000","message":"I\u0027d add these methods into Node/NIC objects. Opinions?","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"ca9cb128022569861265cebb5ac19731e702de6d","unresolved":false,"context_lines":[{"line_number":994,"context_line":"            interface.offloading_modes \u003d new_offloading_modes"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"    @classmethod"},{"line_number":997,"context_line":"    def refresh_dpdk_properties(cls, node):"},{"line_number":998,"context_line":"        dpdk_drivers \u003d cls.get_supported_dpdk_drivers(node)"},{"line_number":999,"context_line":"        for interface in node.interfaces:"},{"line_number":1000,"context_line":"            dpdk_properties \u003d interface.interface_properties.get(\u0027dpdk\u0027, {})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_c4fca274","line":997,"range":{"start_line":997,"start_character":0,"end_line":997,"end_character":4},"in_reply_to":"9aed3d3a_793dc2ba","updated":"2016-03-01 13:50:21.000000000","message":"Done","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"e29a8f3e896d6f292242f40737b02d13545e4681","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"            dpdk_properties \u003d interface.interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":1001,"context_line":"            dpdk_driver \u003d cls.get_dpdk_driver(interface, dpdk_drivers)"},{"line_number":1002,"context_line":"            dpdk_properties[\u0027available\u0027] \u003d dpdk_driver is not None"},{"line_number":1003,"context_line":"            if not dpdk_driver and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":1004,"context_line":"                dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":1005,"context_line":"            interface.interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":1006,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_19eab60f","line":1003,"range":{"start_line":1003,"start_character":12,"end_line":1003,"end_character":14},"updated":"2016-02-26 17:06:37.000000000","message":"afaic, similar validation is required in API also","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"ca9cb128022569861265cebb5ac19731e702de6d","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"            dpdk_properties \u003d interface.interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":1001,"context_line":"            dpdk_driver \u003d cls.get_dpdk_driver(interface, dpdk_drivers)"},{"line_number":1002,"context_line":"            dpdk_properties[\u0027available\u0027] \u003d dpdk_driver is not None"},{"line_number":1003,"context_line":"            if not dpdk_driver and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":1004,"context_line":"                dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":1005,"context_line":"            interface.interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":1006,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_6432f660","line":1003,"range":{"start_line":1003,"start_character":12,"end_line":1003,"end_character":14},"in_reply_to":"9aed3d3a_19eab60f","updated":"2016-03-01 13:50:21.000000000","message":"I will add API validation as separate patch.","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"d764dfd61a5854ef397e2d3c8c957e11662499db","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"            dpdk_properties[\u0027available\u0027] \u003d dpdk_driver is not None"},{"line_number":1003,"context_line":"            if not dpdk_driver and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":1004,"context_line":"                dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":1005,"context_line":"            interface.interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    @classmethod"},{"line_number":1008,"context_line":"    def get_dpdk_driver(cls, interface, drivers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_91550452","line":1005,"range":{"start_line":1005,"start_character":12,"end_line":1005,"end_character":21},"updated":"2016-02-26 16:09:20.000000000","message":"now we should use objects.NIC.update()","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"ca9cb128022569861265cebb5ac19731e702de6d","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"            dpdk_properties[\u0027available\u0027] \u003d dpdk_driver is not None"},{"line_number":1003,"context_line":"            if not dpdk_driver and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":1004,"context_line":"                dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":1005,"context_line":"            interface.interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    @classmethod"},{"line_number":1008,"context_line":"    def get_dpdk_driver(cls, interface, drivers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_e4f72689","line":1005,"range":{"start_line":1005,"start_character":12,"end_line":1005,"end_character":21},"in_reply_to":"9aed3d3a_91550452","updated":"2016-03-01 13:50:21.000000000","message":"Done","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"e29a8f3e896d6f292242f40737b02d13545e4681","unresolved":false,"context_lines":[{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    @classmethod"},{"line_number":1008,"context_line":"    def get_dpdk_driver(cls, interface, drivers\u003dNone):"},{"line_number":1009,"context_line":"        if not drivers:"},{"line_number":1010,"context_line":"            drivers \u003d cls.get_supported_dpdk_drivers(interface.node)"},{"line_number":1011,"context_line":"        pci_id \u003d interface.interface_properties.get(\u0027pci_id\u0027, \u0027\u0027)"},{"line_number":1012,"context_line":"        for driver, device_ids in six.iteritems(drivers):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_b9162aef","line":1009,"range":{"start_line":1009,"start_character":8,"end_line":1009,"end_character":10},"updated":"2016-02-26 17:06:37.000000000","message":"do we need this case?","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":14167,"name":"Andriy Popovych","email":"apopovych@mirantis.com","username":"apopovych"},"change_message_id":"8983eba0b36cfa6d53129a1ed4e62b15b01f4331","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from nailgun import objects"},{"line_number":34,"context_line":"from nailgun.objects.serializers.node import NodeInterfacesSerializer"},{"line_number":35,"context_line":"from nailgun.settings import settings"},{"line_number":36,"context_line":"from nailgun import utils as nailgun_utils"},{"line_number":37,"context_line":"from nailgun.utils.restrictions import RestrictionBase"},{"line_number":38,"context_line":"from nailgun.utils.zabbix import ZabbixManager"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_12584755","line":36,"updated":"2016-03-10 14:24:11.000000000","message":"why?","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"1ad8944454d5100b7e26b9413337580acf098ea0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from nailgun import objects"},{"line_number":34,"context_line":"from nailgun.objects.serializers.node import NodeInterfacesSerializer"},{"line_number":35,"context_line":"from nailgun.settings import settings"},{"line_number":36,"context_line":"from nailgun import utils as nailgun_utils"},{"line_number":37,"context_line":"from nailgun.utils.restrictions import RestrictionBase"},{"line_number":38,"context_line":"from nailgun.utils.zabbix import ZabbixManager"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_2ccdfb5d","line":36,"in_reply_to":"5aef4532_12584755","updated":"2016-03-11 08:54:32.000000000","message":"http://docs.openstack.org/developer/hacking/#imports","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":14167,"name":"Andriy Popovych","email":"apopovych@mirantis.com","username":"apopovych"},"change_message_id":"8983eba0b36cfa6d53129a1ed4e62b15b01f4331","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        objects.Bond.bulk_delete([bond.id for bond in node.bond_interfaces])"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @classmethod"},{"line_number":516,"context_line":"    def get_default_interface_properties(cls):"},{"line_number":517,"context_line":"        return {"},{"line_number":518,"context_line":"            \u0027mtu\u0027: None,"},{"line_number":519,"context_line":"            \u0027disable_offloading\u0027: False,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_3f0b8cd7","line":516,"updated":"2016-03-10 14:24:11.000000000","message":"how about to move it into NIC model (https://github.com/openstack/fuel-web/blob/master/nailgun/nailgun/objects/interface.py)","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"1ad8944454d5100b7e26b9413337580acf098ea0","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        objects.Bond.bulk_delete([bond.id for bond in node.bond_interfaces])"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @classmethod"},{"line_number":516,"context_line":"    def get_default_interface_properties(cls):"},{"line_number":517,"context_line":"        return {"},{"line_number":518,"context_line":"            \u0027mtu\u0027: None,"},{"line_number":519,"context_line":"            \u0027disable_offloading\u0027: False,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_6c4543b2","line":516,"in_reply_to":"5aef4532_3f0b8cd7","updated":"2016-03-11 08:54:32.000000000","message":"It is out of scope of this change and should be done (if should) as part of refactoring.","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"cc5ebbbe7a9cef56985712e28394905c6d16f546","unresolved":false,"context_lines":[{"line_number":605,"context_line":"            nic_dict \u003d NodeInterfacesSerializer.serialize(nic)"},{"line_number":606,"context_line":"            if \u0027interface_properties\u0027 in nic_dict:"},{"line_number":607,"context_line":"                default_properties \u003d cls.get_default_interface_properties()"},{"line_number":608,"context_line":"                nic_dict[\u0027interface_properties\u0027] \u003d \\"},{"line_number":609,"context_line":"                    nailgun_utils.dict_merge(nic_dict[\u0027interface_properties\u0027],"},{"line_number":610,"context_line":"                                             default_properties)"},{"line_number":611,"context_line":"            nic_dict[\u0027assigned_networks\u0027] \u003d []"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"            if to_assign_ids:"}],"source_content_type":"text/x-python","patch_set":21,"id":"5aef4532_69f890c5","line":610,"range":{"start_line":608,"start_character":16,"end_line":610,"end_character":64},"updated":"2016-03-11 11:00:36.000000000","message":"I think you could write it without backslash:\n\nnic_dict[\u0027interface_properties\u0027] \u003d nailgun_utils.dict_merge(\n    nic_dict[\u0027interface_properties\u0027],\n    default_properties)","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"00a84850895218aa07261c8106dfab812a2eb41e","unresolved":false,"context_lines":[{"line_number":605,"context_line":"            nic_dict \u003d NodeInterfacesSerializer.serialize(nic)"},{"line_number":606,"context_line":"            if \u0027interface_properties\u0027 in nic_dict:"},{"line_number":607,"context_line":"                default_properties \u003d cls.get_default_interface_properties()"},{"line_number":608,"context_line":"                nic_dict[\u0027interface_properties\u0027] \u003d \\"},{"line_number":609,"context_line":"                    nailgun_utils.dict_merge(nic_dict[\u0027interface_properties\u0027],"},{"line_number":610,"context_line":"                                             default_properties)"},{"line_number":611,"context_line":"            nic_dict[\u0027assigned_networks\u0027] \u003d []"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"            if to_assign_ids:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_25da3479","line":610,"range":{"start_line":608,"start_character":16,"end_line":610,"end_character":64},"in_reply_to":"5aef4532_69f890c5","updated":"2016-03-11 12:01:11.000000000","message":"Done","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10391,"name":"Ihor Kalnytskyi","email":"ihor@kalnytskyi.com","username":"ikalnitsky"},"change_message_id":"126b0daf6b246979f64edf4ee79cb64a846e6239","unresolved":false,"context_lines":[{"line_number":852,"context_line":"                                                update_by_agent)"},{"line_number":853,"context_line":"            else:"},{"line_number":854,"context_line":"                cls.__add_new_interface(node, interface, update_by_agent)"},{"line_number":855,"context_line":"        if update_by_agent:"},{"line_number":856,"context_line":"            objects.Node.refresh_dpdk_properties(node)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        cls.__delete_not_found_interfaces(node, node.meta[\"interfaces\"])"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_b7c4b440","line":855,"updated":"2016-03-21 10:35:19.000000000","message":"Damn it. How that\u0027s happened we have that flag so deep inside? I don\u0027t like it. Any \"agent\" specific code MUST be isolated in objects.Node.update_by_agent method - no special logic in managers. Please file a High prio ticket to remove that. I\u0027d really appreciate if you would do that right after that feature is merged.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8705c985407951ae572b684323a509da00afa990","unresolved":false,"context_lines":[{"line_number":852,"context_line":"                                                update_by_agent)"},{"line_number":853,"context_line":"            else:"},{"line_number":854,"context_line":"                cls.__add_new_interface(node, interface, update_by_agent)"},{"line_number":855,"context_line":"        if update_by_agent:"},{"line_number":856,"context_line":"            objects.Node.refresh_dpdk_properties(node)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        cls.__delete_not_found_interfaces(node, node.meta[\"interfaces\"])"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_ef4bf057","line":855,"in_reply_to":"fa0719c6_b7c4b440","updated":"2016-03-21 12:34:29.000000000","message":"Done. https://bugs.launchpad.net/fuel/+bug/1559994","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"}],"nailgun/nailgun/objects/interface.py":[{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"cc5ebbbe7a9cef56985712e28394905c6d16f546","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":39,"context_line":"        interface_properties \u003d interface.interface_properties"},{"line_number":40,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":41,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d \\"},{"line_number":42,"context_line":"            cls.dpdk_available(interface, dpdk_drivers)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5aef4532_5c3e342a","line":39,"range":{"start_line":39,"start_character":31,"end_line":39,"end_character":61},"updated":"2016-03-11 11:00:36.000000000","message":"make deepcopy","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"00a84850895218aa07261c8106dfab812a2eb41e","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":39,"context_line":"        interface_properties \u003d interface.interface_properties"},{"line_number":40,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":41,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d \\"},{"line_number":42,"context_line":"            cls.dpdk_available(interface, dpdk_drivers)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_a53004a0","line":39,"range":{"start_line":39,"start_character":31,"end_line":39,"end_character":61},"in_reply_to":"5aef4532_5c3e342a","updated":"2016-03-11 12:01:11.000000000","message":"Done","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"cc5ebbbe7a9cef56985712e28394905c6d16f546","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":39,"context_line":"        interface_properties \u003d interface.interface_properties"},{"line_number":40,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":41,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d \\"},{"line_number":42,"context_line":"            cls.dpdk_available(interface, dpdk_drivers)"},{"line_number":43,"context_line":"        if not dpdk_properties[\u0027available\u0027] \\"},{"line_number":44,"context_line":"                and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":45,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":21,"id":"5aef4532_5c6754ea","line":42,"range":{"start_line":41,"start_character":8,"end_line":42,"end_character":55},"updated":"2016-03-11 11:00:36.000000000","message":"dpdk_properties[\u0027available\u0027] \u003d cls.dpdk_available(\n    interface, dpdk_drivers)\n\nshould be better","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"00a84850895218aa07261c8106dfab812a2eb41e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":39,"context_line":"        interface_properties \u003d interface.interface_properties"},{"line_number":40,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":41,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d \\"},{"line_number":42,"context_line":"            cls.dpdk_available(interface, dpdk_drivers)"},{"line_number":43,"context_line":"        if not dpdk_properties[\u0027available\u0027] \\"},{"line_number":44,"context_line":"                and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":45,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_05261868","line":42,"range":{"start_line":41,"start_character":8,"end_line":42,"end_character":55},"in_reply_to":"5aef4532_5c6754ea","updated":"2016-03-11 12:01:11.000000000","message":"Done","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"cc5ebbbe7a9cef56985712e28394905c6d16f546","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":41,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d \\"},{"line_number":42,"context_line":"            cls.dpdk_available(interface, dpdk_drivers)"},{"line_number":43,"context_line":"        if not dpdk_properties[\u0027available\u0027] \\"},{"line_number":44,"context_line":"                and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":45,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":46,"context_line":"        interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":47,"context_line":"        cls.update(interface,"}],"source_content_type":"text/x-python","patch_set":21,"id":"5aef4532_3c3d28bc","line":44,"range":{"start_line":43,"start_character":11,"end_line":44,"end_character":51},"updated":"2016-03-11 11:00:36.000000000","message":"please use brackets instead of backslash","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"00a84850895218aa07261c8106dfab812a2eb41e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":41,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d \\"},{"line_number":42,"context_line":"            cls.dpdk_available(interface, dpdk_drivers)"},{"line_number":43,"context_line":"        if not dpdk_properties[\u0027available\u0027] \\"},{"line_number":44,"context_line":"                and dpdk_properties.get(\u0027enabled\u0027):"},{"line_number":45,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":46,"context_line":"        interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":47,"context_line":"        cls.update(interface,"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_4520204a","line":44,"range":{"start_line":43,"start_character":11,"end_line":44,"end_character":51},"in_reply_to":"5aef4532_3c3d28bc","updated":"2016-03-11 12:01:11.000000000","message":"Done","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"a81e54adecb3a887f9bf6da191382ef7cee99416","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def dpdk_enabled(cls, instance):"},{"line_number":36,"context_line":"        dpdk \u003d instance.interface_properties.get(\u0027dpdk\u0027)"},{"line_number":37,"context_line":"        return dpdk and dpdk.get(\u0027enabled\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @classmethod"},{"line_number":40,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"}],"source_content_type":"text/x-python","patch_set":29,"id":"1af94dfe_26b9e02e","line":37,"range":{"start_line":36,"start_character":8,"end_line":37,"end_character":43},"updated":"2016-03-18 12:35:43.000000000","message":"return instance.interface_properties.get(\u0027dpdk\u0027, {}).get(\u0027enabled\u0027)","commit_id":"4673a7e20a9e2313512502f4b82cb06ac0731ef0"},{"author":{"_account_id":18205,"name":"Bulat Gaifullin","email":"gaifullinbf@gmail.com","username":"bgaifullin"},"change_message_id":"aca257f33fbe58050f4a1ec49f9de3995fbabcb1","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @classmethod"},{"line_number":40,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":41,"context_line":"        interface_properties \u003d copy.deepcopy(interface.interface_properties)"},{"line_number":42,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":43,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d cls.dpdk_available(interface,"},{"line_number":44,"context_line":"                                                          dpdk_drivers)"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_f0811d4f","line":41,"range":{"start_line":41,"start_character":35,"end_line":41,"end_character":36},"updated":"2016-03-21 07:07:04.000000000","message":"interface_properties should be MutableDict.\nand method interfaces.properties.changed() can be used to notify about changes in second level instead of copying objects.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"fad07cdb213f7fd54aac65d5c28dbe5624e13d57","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @classmethod"},{"line_number":40,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":41,"context_line":"        interface_properties \u003d copy.deepcopy(interface.interface_properties)"},{"line_number":42,"context_line":"        dpdk_properties \u003d interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":43,"context_line":"        dpdk_properties[\u0027available\u0027] \u003d cls.dpdk_available(interface,"},{"line_number":44,"context_line":"                                                          dpdk_drivers)"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_267cfb71","line":41,"range":{"start_line":41,"start_character":35,"end_line":41,"end_character":36},"in_reply_to":"fa0719c6_f0811d4f","updated":"2016-03-21 08:14:43.000000000","message":"Fixed in separate CR: https://review.openstack.org/295109","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":18205,"name":"Bulat Gaifullin","email":"gaifullinbf@gmail.com","username":"bgaifullin"},"change_message_id":"aca257f33fbe58050f4a1ec49f9de3995fbabcb1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def get_dpdk_driver(cls, instance, dpdk_drivers):"},{"line_number":73,"context_line":"        pci_id \u003d instance.interface_properties.get(\u0027pci_id\u0027, \u0027\u0027)"},{"line_number":74,"context_line":"        for driver, device_ids in six.iteritems(dpdk_drivers):"},{"line_number":75,"context_line":"            if pci_id.lower() in device_ids:"},{"line_number":76,"context_line":"                return driver"},{"line_number":77,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_f0e8fd18","line":74,"range":{"start_line":74,"start_character":18,"end_line":74,"end_character":19},"updated":"2016-03-21 07:07:04.000000000","message":"this functional should be part of nailgun agent or other inventory manager. not nailgun. nailgun should not operate on hardware level.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"e842a619d31fa1fade1a5b9e3ab5111115e94dc4","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def get_dpdk_driver(cls, instance, dpdk_drivers):"},{"line_number":73,"context_line":"        pci_id \u003d instance.interface_properties.get(\u0027pci_id\u0027, \u0027\u0027)"},{"line_number":74,"context_line":"        for driver, device_ids in six.iteritems(dpdk_drivers):"},{"line_number":75,"context_line":"            if pci_id.lower() in device_ids:"},{"line_number":76,"context_line":"                return driver"},{"line_number":77,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_c616dfa6","line":74,"range":{"start_line":74,"start_character":18,"end_line":74,"end_character":19},"in_reply_to":"fa0719c6_705ead46","updated":"2016-03-21 08:27:13.000000000","message":"nailgun agent is not as flexible. it doesn\u0027t even have a config file. when this data is in release, user can update it more easily.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10391,"name":"Ihor Kalnytskyi","email":"ihor@kalnytskyi.com","username":"ikalnitsky"},"change_message_id":"126b0daf6b246979f64edf4ee79cb64a846e6239","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def get_dpdk_driver(cls, instance, dpdk_drivers):"},{"line_number":73,"context_line":"        pci_id \u003d instance.interface_properties.get(\u0027pci_id\u0027, \u0027\u0027)"},{"line_number":74,"context_line":"        for driver, device_ids in six.iteritems(dpdk_drivers):"},{"line_number":75,"context_line":"            if pci_id.lower() in device_ids:"},{"line_number":76,"context_line":"                return driver"},{"line_number":77,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_37e8a47c","line":74,"range":{"start_line":74,"start_character":18,"end_line":74,"end_character":19},"in_reply_to":"fa0719c6_c616dfa6","updated":"2016-03-21 10:35:19.000000000","message":"Bulat, few more comments:\n\nIt\u0027s better to do not hardcode business domain logic in nailgun-agent by various reasons. The task of nailgun-agent is to discover as much information as possible and send it to nailgun. All further calculations and assumption must be performed by Nailgun, not by agent. Unfortunately, it\u0027s not the case currently (we do calculate multipath topology on nailgun-agent side), but we\u0027re going toward dull agent and smart nailgun.","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"53a7df9ca9940ca838627f56a03310a922beeb0d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def get_dpdk_driver(cls, instance, dpdk_drivers):"},{"line_number":73,"context_line":"        pci_id \u003d instance.interface_properties.get(\u0027pci_id\u0027, \u0027\u0027)"},{"line_number":74,"context_line":"        for driver, device_ids in six.iteritems(dpdk_drivers):"},{"line_number":75,"context_line":"            if pci_id.lower() in device_ids:"},{"line_number":76,"context_line":"                return driver"},{"line_number":77,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_705ead46","line":74,"range":{"start_line":74,"start_character":18,"end_line":74,"end_character":19},"in_reply_to":"fa0719c6_f0e8fd18","updated":"2016-03-21 07:48:10.000000000","message":"Please see the specification: https://specs.openstack.org/openstack/fuel-specs/specs/9.0/support-dpdk.html#nailgun","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":18205,"name":"Bulat Gaifullin","email":"gaifullinbf@gmail.com","username":"bgaifullin"},"change_message_id":"b1d2c7c73835157b4284be3ad43ece5c8e64b868","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if (not dpdk_properties[\u0027available\u0027] and"},{"line_number":45,"context_line":"                dpdk_properties.get(\u0027enabled\u0027)):"},{"line_number":46,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":47,"context_line":"        interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":48,"context_line":"        interface_properties.changed()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa0719c6_57d7d5be","line":47,"range":{"start_line":47,"start_character":29,"end_line":47,"end_character":35},"updated":"2016-03-22 13:31:04.000000000","message":"minor:\ninterface_properties[\u0027dpdk\u0027] \u003d dpdk_properties\nand changed does not need. because the first level data is updated.","commit_id":"b569ee6f42b1c056cf0d325ac2aede2a435ae241"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"87d3544a053bf242dbbabfecd2b2b431e00697e4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if (not dpdk_properties[\u0027available\u0027] and"},{"line_number":45,"context_line":"                dpdk_properties.get(\u0027enabled\u0027)):"},{"line_number":46,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":47,"context_line":"        interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":48,"context_line":"        interface_properties.changed()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa0719c6_5c037442","line":47,"range":{"start_line":47,"start_character":29,"end_line":47,"end_character":35},"in_reply_to":"fa0719c6_57d7d5be","updated":"2016-03-22 15:00:05.000000000","message":"nope. it is because we separating network storage from nailgun and all transactions should go explicitly through objects.","commit_id":"b569ee6f42b1c056cf0d325ac2aede2a435ae241"},{"author":{"_account_id":18205,"name":"Bulat Gaifullin","email":"gaifullinbf@gmail.com","username":"bgaifullin"},"change_message_id":"551ab1e11d2e5795c3f39e69b573a4c9da7525c0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if (not dpdk_properties[\u0027available\u0027] and"},{"line_number":45,"context_line":"                dpdk_properties.get(\u0027enabled\u0027)):"},{"line_number":46,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":47,"context_line":"        interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":48,"context_line":"        interface_properties.changed()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa0719c6_7e862d66","line":47,"range":{"start_line":47,"start_character":29,"end_line":47,"end_character":35},"in_reply_to":"fa0719c6_5c037442","updated":"2016-03-22 15:06:19.000000000","message":"interface_properties is a dict like object. it is not Object from BL.","commit_id":"b569ee6f42b1c056cf0d325ac2aede2a435ae241"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"60da4198b55f74feeb2a8754e583da6159314206","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if (not dpdk_properties[\u0027available\u0027] and"},{"line_number":45,"context_line":"                dpdk_properties.get(\u0027enabled\u0027)):"},{"line_number":46,"context_line":"            dpdk_properties[\u0027enabled\u0027] \u003d False"},{"line_number":47,"context_line":"        interface_properties.update({\u0027dpdk\u0027: dpdk_properties})"},{"line_number":48,"context_line":"        interface_properties.changed()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa0719c6_5ec6c948","line":47,"range":{"start_line":47,"start_character":29,"end_line":47,"end_character":35},"in_reply_to":"fa0719c6_7e862d66","updated":"2016-03-22 15:13:14.000000000","message":"Ops. Right.","commit_id":"b569ee6f42b1c056cf0d325ac2aede2a435ae241"},{"author":{"_account_id":18205,"name":"Bulat Gaifullin","email":"gaifullinbf@gmail.com","username":"bgaifullin"},"change_message_id":"b1d2c7c73835157b4284be3ad43ece5c8e64b868","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def get_dpdk_driver(cls, instance, dpdk_drivers):"},{"line_number":71,"context_line":"        pci_id \u003d instance.interface_properties.get(\u0027pci_id\u0027, \u0027\u0027)"},{"line_number":72,"context_line":"        for driver, device_ids in six.iteritems(dpdk_drivers):"},{"line_number":73,"context_line":"            if pci_id.lower() in device_ids:"},{"line_number":74,"context_line":"                return driver"},{"line_number":75,"context_line":"        return None"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa0719c6_578515ab","line":73,"range":{"start_line":73,"start_character":22,"end_line":73,"end_character":27},"updated":"2016-03-22 13:31:04.000000000","message":"please move lower outside of loop, because it can be called only one time.","commit_id":"b569ee6f42b1c056cf0d325ac2aede2a435ae241"}],"nailgun/nailgun/objects/node.py":[{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"f86bec172ee8b19cfa35ba84cd3478d3126fd328","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"        instance.attributes \u003d instance.cluster.release.node_attributes"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"    @classmethod"},{"line_number":1183,"context_line":"    def dpdk_configured(cls, instance):"},{"line_number":1184,"context_line":"        for iface in instance.interfaces:"},{"line_number":1185,"context_line":"            if iface.interface_properties.get(\u0027dpdk\u0027, {}).get(\u0027enabled\u0027):"},{"line_number":1186,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_70dcdc18","line":1183,"range":{"start_line":1183,"start_character":13,"end_line":1183,"end_character":23},"updated":"2016-02-25 09:10:36.000000000","message":"may be enabled?","commit_id":"5fc36875aa304e68540058d85b49cecfbedf7c0a"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"8e2c79f51f27d6f717c45edf67a92a362b6883ee","unresolved":false,"context_lines":[{"line_number":967,"context_line":"        cls.assign_group(instance)"},{"line_number":968,"context_line":"        network_manager \u003d Cluster.get_network_manager(instance.cluster)"},{"line_number":969,"context_line":"        network_manager.assign_networks_by_default(instance)"},{"line_number":970,"context_line":"        cls.refresh_dpdk_properties(instance)"},{"line_number":971,"context_line":"        cls.add_pending_change(instance, consts.CLUSTER_CHANGES.interfaces)"},{"line_number":972,"context_line":"        cls.set_network_template(instance)"},{"line_number":973,"context_line":"        cls.set_default_attributes(instance)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_1ddd5d0e","line":970,"updated":"2016-03-02 19:24:26.000000000","message":"need to add this here also: https://github.com/openstack/fuel-web/blob/master/nailgun/nailgun/objects/cluster.py#L550\n\nafaic, it should be where node is updated by agent. Otherwise, we will not see changes when some NIC is added/changed on node. Also, NetworkManager.get_default_interfaces_configuration() will return \u0027available: false\u0027. It should be recalculated somewhere.","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"c576aee9e5ba5ead1fa44d71c5237732fd461b0a","unresolved":false,"context_lines":[{"line_number":967,"context_line":"        cls.assign_group(instance)"},{"line_number":968,"context_line":"        network_manager \u003d Cluster.get_network_manager(instance.cluster)"},{"line_number":969,"context_line":"        network_manager.assign_networks_by_default(instance)"},{"line_number":970,"context_line":"        cls.refresh_dpdk_properties(instance)"},{"line_number":971,"context_line":"        cls.add_pending_change(instance, consts.CLUSTER_CHANGES.interfaces)"},{"line_number":972,"context_line":"        cls.set_network_template(instance)"},{"line_number":973,"context_line":"        cls.set_default_attributes(instance)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_3ea7050c","line":970,"in_reply_to":"7af24918_1ddd5d0e","updated":"2016-03-04 09:21:18.000000000","message":"Done","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"bb3e84924f3c6977a3421f9d0da1517bf387dc75","unresolved":false,"context_lines":[{"line_number":1177,"context_line":"        instance.attributes \u003d instance.cluster.release.node_attributes"},{"line_number":1178,"context_line":""},{"line_number":1179,"context_line":"    @classmethod"},{"line_number":1180,"context_line":"    def dpdk_configured(cls, instance):"},{"line_number":1181,"context_line":"        for iface in instance.interfaces:"},{"line_number":1182,"context_line":"            if iface.interface_properties.get(\u0027dpdk\u0027, {}).get(\u0027enabled\u0027):"},{"line_number":1183,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_4775ddc8","line":1180,"range":{"start_line":1180,"start_character":8,"end_line":1180,"end_character":23},"updated":"2016-03-04 11:33:54.000000000","message":"why not \u0027dpdk_enabled\u0027 ?","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8690e79890b37e6cf42053e2760d188ce0d04165","unresolved":false,"context_lines":[{"line_number":1177,"context_line":"        instance.attributes \u003d instance.cluster.release.node_attributes"},{"line_number":1178,"context_line":""},{"line_number":1179,"context_line":"    @classmethod"},{"line_number":1180,"context_line":"    def dpdk_configured(cls, instance):"},{"line_number":1181,"context_line":"        for iface in instance.interfaces:"},{"line_number":1182,"context_line":"            if iface.interface_properties.get(\u0027dpdk\u0027, {}).get(\u0027enabled\u0027):"},{"line_number":1183,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_eaa310b0","line":1180,"range":{"start_line":1180,"start_character":8,"end_line":1180,"end_character":23},"in_reply_to":"7af24918_4775ddc8","updated":"2016-03-09 09:48:03.000000000","message":"Done","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":14167,"name":"Andriy Popovych","email":"apopovych@mirantis.com","username":"apopovych"},"change_message_id":"8983eba0b36cfa6d53129a1ed4e62b15b01f4331","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"    @classmethod"},{"line_number":1193,"context_line":"    def dpdk_enabled(cls, instance):"},{"line_number":1194,"context_line":"        for iface in instance.interfaces:"},{"line_number":1195,"context_line":"            if iface.interface_properties.get(\u0027dpdk\u0027, {}).get(\u0027enabled\u0027):"},{"line_number":1196,"context_line":"                return True"},{"line_number":1197,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_d26b7fb5","line":1194,"updated":"2016-03-10 14:24:11.000000000","message":"not sure but any(iface.interface_properties.get(\u0027dpdk\u0027, {}).get(\u0027enabled\u0027) for iface in instance.interfaces) should work","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"1ad8944454d5100b7e26b9413337580acf098ea0","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"    @classmethod"},{"line_number":1193,"context_line":"    def dpdk_enabled(cls, instance):"},{"line_number":1194,"context_line":"        for iface in instance.interfaces:"},{"line_number":1195,"context_line":"            if iface.interface_properties.get(\u0027dpdk\u0027, {}).get(\u0027enabled\u0027):"},{"line_number":1196,"context_line":"                return True"},{"line_number":1197,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_ec5dd37a","line":1194,"in_reply_to":"5aef4532_d26b7fb5","updated":"2016-03-11 08:54:32.000000000","message":"Probably yes. But it will be less readable.","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":14167,"name":"Andriy Popovych","email":"apopovych@mirantis.com","username":"apopovych"},"change_message_id":"8983eba0b36cfa6d53129a1ed4e62b15b01f4331","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"            cls.refresh_interface_dpdk_properties(interface, dpdk_drivers)"},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"    @classmethod"},{"line_number":1214,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":1215,"context_line":"        interface_properties \u003d interface.interface_properties"},{"line_number":1216,"context_line":"        if interface.type \u003d\u003d consts.NETWORK_INTERFACE_TYPES.bond:"},{"line_number":1217,"context_line":"            object_class \u003d Bond"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_121a0717","line":1214,"updated":"2016-03-10 14:24:11.000000000","message":"this method should be implemented in both NIC and BOND or in some common parent class for them like `Interface`. With such approach we can avoid that check.","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"1ad8944454d5100b7e26b9413337580acf098ea0","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"            cls.refresh_interface_dpdk_properties(interface, dpdk_drivers)"},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"    @classmethod"},{"line_number":1214,"context_line":"    def refresh_interface_dpdk_properties(cls, interface, dpdk_drivers):"},{"line_number":1215,"context_line":"        interface_properties \u003d interface.interface_properties"},{"line_number":1216,"context_line":"        if interface.type \u003d\u003d consts.NETWORK_INTERFACE_TYPES.bond:"},{"line_number":1217,"context_line":"            object_class \u003d Bond"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_b729588c","line":1214,"in_reply_to":"5aef4532_121a0717","updated":"2016-03-11 08:54:32.000000000","message":"Done","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10391,"name":"Ihor Kalnytskyi","email":"ihor@kalnytskyi.com","username":"ikalnitsky"},"change_message_id":"a6315ebcd3fe83de182410820ff5b97fd00f33fd","unresolved":false,"context_lines":[{"line_number":1241,"context_line":"            Bond.refresh_interface_dpdk_properties(interface, dpdk_drivers)"},{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":"    @classmethod"},{"line_number":1244,"context_line":"    def get_supported_dpdk_drivers(cls, instance):"},{"line_number":1245,"context_line":"        \"\"\"Get all supported DPDK drivers"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        Returns dictionary, where keys are names of supported drivers and"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_4299146e","line":1244,"updated":"2016-03-21 10:39:04.000000000","message":"Since supported dpdk drivers are tied to clusters (or even to release), i think it should be a part of objects.Cluster / objects.Release. What do you think?","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8705c985407951ae572b684323a509da00afa990","unresolved":false,"context_lines":[{"line_number":1241,"context_line":"            Bond.refresh_interface_dpdk_properties(interface, dpdk_drivers)"},{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":"    @classmethod"},{"line_number":1244,"context_line":"    def get_supported_dpdk_drivers(cls, instance):"},{"line_number":1245,"context_line":"        \"\"\"Get all supported DPDK drivers"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        Returns dictionary, where keys are names of supported drivers and"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_03871b62","line":1244,"in_reply_to":"fa0719c6_4299146e","updated":"2016-03-21 12:34:29.000000000","message":"Done","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"}],"nailgun/nailgun/orchestrator/neutron_serializers.py":[{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"df859ac9630e9b30ad2a9009cd5ae2bb398449d6","unresolved":false,"context_lines":[{"line_number":564,"context_line":"        # Dance around Neutron segmentation type."},{"line_number":565,"context_line":"        if node.cluster.network_config.segmentation_type \u003d\u003d \\"},{"line_number":566,"context_line":"                consts.NEUTRON_SEGMENT_TYPES.vlan:"},{"line_number":567,"context_line":"            vendor_specific \u003d None"},{"line_number":568,"context_line":"            dpdk_configured \u003d objects.Node.dpdk_configured(node)"},{"line_number":569,"context_line":"            if dpdk_configured:"},{"line_number":570,"context_line":"                vendor_specific \u003d {\u0027datapath_type\u0027: \u0027netdev\u0027}"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_2cec9f8e","line":567,"range":{"start_line":567,"start_character":0,"end_line":567,"end_character":12},"updated":"2016-02-26 16:16:52.000000000","message":"I suppose it should be done in 9.0 serializer","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":17503,"name":"Sergey Kreys","email":"skreys@mirantis.com","username":"skreys"},"change_message_id":"bbfb31ad6a17da6679ea7272bf5bdf79c5e32064","unresolved":false,"context_lines":[{"line_number":1452,"context_line":"                x[\u0027name\u0027] \u003d\u003d consts.DEFAULT_BRIDGES_NAMES.br_prv),"},{"line_number":1453,"context_line":"            transformations)[0]"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"        if private_br and objects.Node.dpdk_configured(node):"},{"line_number":1456,"context_line":"            private_br[\u0027vendor_specific\u0027] \u003d {\u0027datapath_type\u0027: \u0027netdev\u0027}"},{"line_number":1457,"context_line":"            for iface in node.nic_interfaces:"},{"line_number":1458,"context_line":"                dpdk \u003d iface.interface_properties.get(\u0027dpdk\u0027, {})"}],"source_content_type":"text/x-python","patch_set":12,"id":"7af24918_1a229952","line":1455,"range":{"start_line":1455,"start_character":11,"end_line":1455,"end_character":21},"updated":"2016-03-02 14:42:34.000000000","message":"Can it be empty? According to \u0027filter\u0027 above, private_br has at least two non-empty fields, thus it\u0027s not empty.\nIf this was intended to verify whether \u0027filter\u0027 has returned something, it\u0027s not needed as well: \"filter(...)[0]\" will raise IndexError in case of empty list returned.","commit_id":"4103f1a63685c1552e2bbf04aee9b72aac357b73"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"905fcb209500d0a87599e866744c4ab53f584b30","unresolved":false,"context_lines":[{"line_number":1452,"context_line":"                x[\u0027name\u0027] \u003d\u003d consts.DEFAULT_BRIDGES_NAMES.br_prv),"},{"line_number":1453,"context_line":"            transformations)[0]"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"        if private_br and objects.Node.dpdk_configured(node):"},{"line_number":1456,"context_line":"            private_br[\u0027vendor_specific\u0027] \u003d {\u0027datapath_type\u0027: \u0027netdev\u0027}"},{"line_number":1457,"context_line":"            for iface in node.nic_interfaces:"},{"line_number":1458,"context_line":"                dpdk \u003d iface.interface_properties.get(\u0027dpdk\u0027, {})"}],"source_content_type":"text/x-python","patch_set":12,"id":"7af24918_ba8725d6","line":1455,"range":{"start_line":1455,"start_character":11,"end_line":1455,"end_character":21},"in_reply_to":"7af24918_1a229952","updated":"2016-03-02 14:47:01.000000000","message":"Done","commit_id":"4103f1a63685c1552e2bbf04aee9b72aac357b73"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"8e2c79f51f27d6f717c45edf67a92a362b6883ee","unresolved":false,"context_lines":[{"line_number":769,"context_line":"        return phys"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    @classmethod"},{"line_number":772,"context_line":"    def configure_private_net(cls, node, nm, transformations, prv_base_ep):"},{"line_number":773,"context_line":"        transformations.append(cls.add_bridge(\u0027br-prv\u0027, provider\u003d\u0027ovs\u0027))"},{"line_number":774,"context_line":"        if not prv_base_ep:"},{"line_number":775,"context_line":"            prv_base_ep \u003d \u0027br-aux\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_dd55b550","line":772,"range":{"start_line":772,"start_character":8,"end_line":772,"end_character":29},"updated":"2016-03-02 19:24:26.000000000","message":"afaic, \"configure_private_network\" will be better.\n\nneed a docstring here to say that it is for VLAN segmentation only.","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"c576aee9e5ba5ead1fa44d71c5237732fd461b0a","unresolved":false,"context_lines":[{"line_number":769,"context_line":"        return phys"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    @classmethod"},{"line_number":772,"context_line":"    def configure_private_net(cls, node, nm, transformations, prv_base_ep):"},{"line_number":773,"context_line":"        transformations.append(cls.add_bridge(\u0027br-prv\u0027, provider\u003d\u0027ovs\u0027))"},{"line_number":774,"context_line":"        if not prv_base_ep:"},{"line_number":775,"context_line":"            prv_base_ep \u003d \u0027br-aux\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_ed436a11","line":772,"range":{"start_line":772,"start_character":8,"end_line":772,"end_character":29},"in_reply_to":"7af24918_dd55b550","updated":"2016-03-04 09:21:18.000000000","message":"Done","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"8e2c79f51f27d6f717c45edf67a92a362b6883ee","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"):"},{"line_number":1443,"context_line":"    @classmethod"},{"line_number":1444,"context_line":"    def configure_private_net(cls, node, nm, transformations, prv_base_ep):"},{"line_number":1445,"context_line":"        super(NeutronNetworkDeploymentSerializer90,"},{"line_number":1446,"context_line":"              cls).configure_private_net("},{"line_number":1447,"context_line":"            node, nm, transformations, prv_base_ep)"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        private_br \u003d filter("},{"line_number":1450,"context_line":"            lambda x: ("}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_eff8b44b","line":1447,"range":{"start_line":1445,"start_character":0,"end_line":1447,"end_character":51},"updated":"2016-03-02 19:24:26.000000000","message":"this should not be used if DPDK enabled transformations are added","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"c576aee9e5ba5ead1fa44d71c5237732fd461b0a","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"):"},{"line_number":1443,"context_line":"    @classmethod"},{"line_number":1444,"context_line":"    def configure_private_net(cls, node, nm, transformations, prv_base_ep):"},{"line_number":1445,"context_line":"        super(NeutronNetworkDeploymentSerializer90,"},{"line_number":1446,"context_line":"              cls).configure_private_net("},{"line_number":1447,"context_line":"            node, nm, transformations, prv_base_ep)"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        private_br \u003d filter("},{"line_number":1450,"context_line":"            lambda x: ("}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_e0d5fde4","line":1447,"range":{"start_line":1445,"start_character":0,"end_line":1447,"end_character":51},"in_reply_to":"7af24918_eff8b44b","updated":"2016-03-04 09:21:18.000000000","message":"Done","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"8e2c79f51f27d6f717c45edf67a92a362b6883ee","unresolved":false,"context_lines":[{"line_number":1475,"context_line":""},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"class NeutronNetworkTemplateSerializer90("},{"line_number":1478,"context_line":"    DPDKSerializerMixin90,"},{"line_number":1479,"context_line":"    NeutronNetworkTemplateSerializer80"},{"line_number":1480,"context_line":"):"},{"line_number":1481,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_cf27b810","line":1478,"range":{"start_line":1478,"start_character":4,"end_line":1478,"end_character":25},"updated":"2016-03-02 19:24:26.000000000","message":"this should be tested with a template","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"f99e7aaa87b6e09771b30b64846164a45b1c71af","unresolved":false,"context_lines":[{"line_number":1402,"context_line":"    pass"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"class DPDKSerializerMixin90(object):"},{"line_number":1406,"context_line":"    @classmethod"},{"line_number":1407,"context_line":"    def generate_driver_information(cls, node, network_scheme, nm, networks):"},{"line_number":1408,"context_line":"        network_scheme \u003d super("}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_516bdf1d","line":1405,"range":{"start_line":1405,"start_character":6,"end_line":1405,"end_character":27},"updated":"2016-03-04 10:56:24.000000000","message":"From spec:\n\nOnly Private network with VLAN segmentation could be placed on DPDK enabled interface or bond.\nIf no networks is placed on DPDK interface, that means that no changes should be done in deployment.\nThese validations should be done both on UI and in API.\n\nwhere this will be checked? in another change request?","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8690e79890b37e6cf42053e2760d188ce0d04165","unresolved":false,"context_lines":[{"line_number":1402,"context_line":"    pass"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"class DPDKSerializerMixin90(object):"},{"line_number":1406,"context_line":"    @classmethod"},{"line_number":1407,"context_line":"    def generate_driver_information(cls, node, network_scheme, nm, networks):"},{"line_number":1408,"context_line":"        network_scheme \u003d super("}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_6728d99a","line":1405,"range":{"start_line":1405,"start_character":6,"end_line":1405,"end_character":27},"in_reply_to":"7af24918_516bdf1d","updated":"2016-03-09 09:48:03.000000000","message":"Yes. Patch with validations is in progress.","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":14167,"name":"Andriy Popovych","email":"apopovych@mirantis.com","username":"apopovych"},"change_message_id":"8983eba0b36cfa6d53129a1ed4e62b15b01f4331","unresolved":false,"context_lines":[{"line_number":1501,"context_line":""},{"line_number":1502,"context_line":"        for iface in node.nic_interfaces:"},{"line_number":1503,"context_line":"            dpdk \u003d iface.interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":1504,"context_line":"            if dpdk.get(\u0027enabled\u0027) and not iface.bond:"},{"line_number":1505,"context_line":"                transformations.append(cls.add_port("},{"line_number":1506,"context_line":"                    name\u003diface.name,"},{"line_number":1507,"context_line":"                    bridge\u003dconsts.DEFAULT_BRIDGES_NAMES.br_prv,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_35056d10","line":1504,"updated":"2016-03-10 14:24:11.000000000","message":"can be wrapped into method like https://github.com/openstack/fuel-web/blob/master/nailgun/nailgun/objects/interface.py#L46-L48 and use here and https://review.openstack.org/#/c/284283/20/nailgun/nailgun/objects/node.py","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"1ad8944454d5100b7e26b9413337580acf098ea0","unresolved":false,"context_lines":[{"line_number":1501,"context_line":""},{"line_number":1502,"context_line":"        for iface in node.nic_interfaces:"},{"line_number":1503,"context_line":"            dpdk \u003d iface.interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":1504,"context_line":"            if dpdk.get(\u0027enabled\u0027) and not iface.bond:"},{"line_number":1505,"context_line":"                transformations.append(cls.add_port("},{"line_number":1506,"context_line":"                    name\u003diface.name,"},{"line_number":1507,"context_line":"                    bridge\u003dconsts.DEFAULT_BRIDGES_NAMES.br_prv,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_57c3b48a","line":1504,"in_reply_to":"5aef4532_35056d10","updated":"2016-03-11 08:54:32.000000000","message":"Done","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":14167,"name":"Andriy Popovych","email":"apopovych@mirantis.com","username":"apopovych"},"change_message_id":"8983eba0b36cfa6d53129a1ed4e62b15b01f4331","unresolved":false,"context_lines":[{"line_number":1508,"context_line":"                    provider\u003d\u0027dpdkovs\u0027"},{"line_number":1509,"context_line":"                ))"},{"line_number":1510,"context_line":"        for iface in node.bond_interfaces:"},{"line_number":1511,"context_line":"            dpdk \u003d iface.interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":1512,"context_line":"            if dpdk.get(\u0027enabled\u0027):"},{"line_number":1513,"context_line":"                nets_by_ifaces.pop(iface.name, {})"},{"line_number":1514,"context_line":"                bond_params \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_151dd165","line":1511,"updated":"2016-03-10 14:24:11.000000000","message":"ditto","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"1ad8944454d5100b7e26b9413337580acf098ea0","unresolved":false,"context_lines":[{"line_number":1508,"context_line":"                    provider\u003d\u0027dpdkovs\u0027"},{"line_number":1509,"context_line":"                ))"},{"line_number":1510,"context_line":"        for iface in node.bond_interfaces:"},{"line_number":1511,"context_line":"            dpdk \u003d iface.interface_properties.get(\u0027dpdk\u0027, {})"},{"line_number":1512,"context_line":"            if dpdk.get(\u0027enabled\u0027):"},{"line_number":1513,"context_line":"                nets_by_ifaces.pop(iface.name, {})"},{"line_number":1514,"context_line":"                bond_params \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"5aef4532_97bd3c05","line":1511,"in_reply_to":"5aef4532_151dd165","updated":"2016-03-11 08:54:32.000000000","message":"Done","commit_id":"aa9a90d4440eb5491f0b976d36db0751d4c690b7"},{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"cc5ebbbe7a9cef56985712e28394905c6d16f546","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        It is used for VLAN segmentation type only."},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"        transformations.append(cls.add_bridge(\u0027br-prv\u0027, provider\u003d\u0027ovs\u0027))"},{"line_number":782,"context_line":"        if not prv_base_ep:"},{"line_number":783,"context_line":"            prv_base_ep \u003d \u0027br-aux\u0027"},{"line_number":784,"context_line":"            transformations.append(cls.add_bridge(prv_base_ep))"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_9c3ba59c","line":781,"range":{"start_line":781,"start_character":46,"end_line":781,"end_character":54},"updated":"2016-03-11 11:00:36.000000000","message":"consts.DEFAULT_BRIDGES_NAMES.br_prv","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"00a84850895218aa07261c8106dfab812a2eb41e","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        It is used for VLAN segmentation type only."},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"        transformations.append(cls.add_bridge(\u0027br-prv\u0027, provider\u003d\u0027ovs\u0027))"},{"line_number":782,"context_line":"        if not prv_base_ep:"},{"line_number":783,"context_line":"            prv_base_ep \u003d \u0027br-aux\u0027"},{"line_number":784,"context_line":"            transformations.append(cls.add_bridge(prv_base_ep))"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_65aa7c72","line":781,"range":{"start_line":781,"start_character":46,"end_line":781,"end_character":54},"in_reply_to":"3afc51ec_9c3ba59c","updated":"2016-03-11 12:01:11.000000000","message":"Done","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10488,"name":"Artur Svechnikov","email":"asvechnikov@mirantis.com","username":"asvechnikov"},"change_message_id":"cc5ebbbe7a9cef56985712e28394905c6d16f546","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"            return"},{"line_number":1497,"context_line":""},{"line_number":1498,"context_line":"        transformations.append(cls.add_bridge("},{"line_number":1499,"context_line":"            \u0027br-prv\u0027, provider\u003d\u0027ovs\u0027,"},{"line_number":1500,"context_line":"            vendor_specific\u003d{\u0027datapath_type\u0027: \u0027netdev\u0027}))"},{"line_number":1501,"context_line":""},{"line_number":1502,"context_line":"        for iface in node.nic_interfaces:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_5ce47d3a","line":1499,"range":{"start_line":1499,"start_character":12,"end_line":1499,"end_character":20},"updated":"2016-03-11 11:00:36.000000000","message":"consts.DEFAULT_BRIDGES_NAMES.br_prv","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"00a84850895218aa07261c8106dfab812a2eb41e","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"            return"},{"line_number":1497,"context_line":""},{"line_number":1498,"context_line":"        transformations.append(cls.add_bridge("},{"line_number":1499,"context_line":"            \u0027br-prv\u0027, provider\u003d\u0027ovs\u0027,"},{"line_number":1500,"context_line":"            vendor_specific\u003d{\u0027datapath_type\u0027: \u0027netdev\u0027}))"},{"line_number":1501,"context_line":""},{"line_number":1502,"context_line":"        for iface in node.nic_interfaces:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afc51ec_25d874ef","line":1499,"range":{"start_line":1499,"start_character":12,"end_line":1499,"end_character":20},"in_reply_to":"3afc51ec_5ce47d3a","updated":"2016-03-11 12:01:11.000000000","message":"Done","commit_id":"6a2fe41ec15c8abb192fa6e66e64f26061b5b6a8"}],"nailgun/nailgun/test/integration/test_node_nic_handler.py":[{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"8e2c79f51f27d6f717c45edf67a92a362b6883ee","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            resp_nic[\u0027interface_properties\u0027][\u0027dpdk\u0027],"},{"line_number":294,"context_line":"            {"},{"line_number":295,"context_line":"                \u0027enabled\u0027: False,"},{"line_number":296,"context_line":"                \u0027available\u0027: False"},{"line_number":297,"context_line":"            })"},{"line_number":298,"context_line":"        for conn in (\u0027assigned_networks\u0027, ):"},{"line_number":299,"context_line":"            self.assertEqual(resp_nic[conn], [])"}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_922157a2","line":296,"range":{"start_line":296,"start_character":17,"end_line":296,"end_character":26},"updated":"2016-03-02 19:24:26.000000000","message":"let\u0027s check how this becomes \"True\"","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"c576aee9e5ba5ead1fa44d71c5237732fd461b0a","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            resp_nic[\u0027interface_properties\u0027][\u0027dpdk\u0027],"},{"line_number":294,"context_line":"            {"},{"line_number":295,"context_line":"                \u0027enabled\u0027: False,"},{"line_number":296,"context_line":"                \u0027available\u0027: False"},{"line_number":297,"context_line":"            })"},{"line_number":298,"context_line":"        for conn in (\u0027assigned_networks\u0027, ):"},{"line_number":299,"context_line":"            self.assertEqual(resp_nic[conn], [])"}],"source_content_type":"text/x-python","patch_set":13,"id":"7af24918_deb8a12c","line":296,"range":{"start_line":296,"start_character":17,"end_line":296,"end_character":26},"in_reply_to":"7af24918_922157a2","updated":"2016-03-04 09:21:18.000000000","message":"Done","commit_id":"2c0fd9ac6e7f2aa2defce5f8042440721397a44d"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"f99e7aaa87b6e09771b30b64846164a45b1c71af","unresolved":false,"context_lines":[{"line_number":319,"context_line":"             \u0027state\u0027: \u0027up\u0027,"},{"line_number":320,"context_line":"             \u0027interface_properties\u0027: {"},{"line_number":321,"context_line":"                 \u0027pci_id\u0027: \u00278765:4321\u0027"},{"line_number":322,"context_line":"             }}]"},{"line_number":323,"context_line":"        )"},{"line_number":324,"context_line":"        node_data \u003d {\u0027mac\u0027: node[\u0027mac\u0027], \u0027meta\u0027: new_meta, \u0027is_agent\u0027: True}"},{"line_number":325,"context_line":"        resp \u003d self.app.put("}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_54662ded","line":322,"range":{"start_line":322,"start_character":13,"end_line":322,"end_character":16},"updated":"2016-03-04 10:56:24.000000000","message":"\"numa_node\" should come from agent as well.","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8690e79890b37e6cf42053e2760d188ce0d04165","unresolved":false,"context_lines":[{"line_number":319,"context_line":"             \u0027state\u0027: \u0027up\u0027,"},{"line_number":320,"context_line":"             \u0027interface_properties\u0027: {"},{"line_number":321,"context_line":"                 \u0027pci_id\u0027: \u00278765:4321\u0027"},{"line_number":322,"context_line":"             }}]"},{"line_number":323,"context_line":"        )"},{"line_number":324,"context_line":"        node_data \u003d {\u0027mac\u0027: node[\u0027mac\u0027], \u0027meta\u0027: new_meta, \u0027is_agent\u0027: True}"},{"line_number":325,"context_line":"        resp \u003d self.app.put("}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_8ac24c51","line":322,"range":{"start_line":322,"start_character":13,"end_line":322,"end_character":16},"in_reply_to":"7af24918_54662ded","updated":"2016-03-09 09:48:03.000000000","message":"Done","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":10391,"name":"Ihor Kalnytskyi","email":"ihor@kalnytskyi.com","username":"ikalnitsky"},"change_message_id":"126b0daf6b246979f64edf4ee79cb64a846e6239","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                 \u0027sriov\u0027: {"},{"line_number":258,"context_line":"                     \u0027sriov_totalvfs\u0027: 8,"},{"line_number":259,"context_line":"                     \u0027available\u0027: True,"},{"line_number":260,"context_line":"                     \u0027pci_id\u0027: \u00271234:5678\u0027"},{"line_number":261,"context_line":"                 },"},{"line_number":262,"context_line":"                 \u0027pci_id\u0027: \u00278765:4321\u0027,"},{"line_number":263,"context_line":"                 \u0027numa_node\u0027: 1"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_024d5c72","line":260,"updated":"2016-03-21 10:35:19.000000000","message":"Why do we have duplicated \"pci_id\" entry?","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"},{"author":{"_account_id":11708,"name":"Atsuko Ito","email":"me@yottatsa.name","username":"yottatsa"},"change_message_id":"141dd4cb17a648808f6a76f9272ed9ee86167bba","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                 \u0027sriov\u0027: {"},{"line_number":258,"context_line":"                     \u0027sriov_totalvfs\u0027: 8,"},{"line_number":259,"context_line":"                     \u0027available\u0027: True,"},{"line_number":260,"context_line":"                     \u0027pci_id\u0027: \u00271234:5678\u0027"},{"line_number":261,"context_line":"                 },"},{"line_number":262,"context_line":"                 \u0027pci_id\u0027: \u00278765:4321\u0027,"},{"line_number":263,"context_line":"                 \u0027numa_node\u0027: 1"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa0719c6_d2e4d33c","line":260,"in_reply_to":"fa0719c6_024d5c72","updated":"2016-03-21 11:32:24.000000000","message":"SR-IOVpci_id doesn\u0027t match with NICs pci_id. PCI-ID of NIC is a id of NIC itself, and SR-IOV one is a id of VF NIC (virtual NIC).","commit_id":"2b3ecb7e5a59f68cd7810b1074a3db985bb75ab6"}],"nailgun/nailgun/test/integration/test_orchestrator_serializer.py":[{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"7e0058fb424fbc667a97f091538b2d4cddd86bed","unresolved":false,"context_lines":[{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    @mock.patch(\u0027nailgun.network.manager.NetworkManager.\u0027"},{"line_number":1001,"context_line":"                \u0027get_supported_dpdk_drivers\u0027)"},{"line_number":1002,"context_line":"    def test_vlan_schema_with_dpdk(self, drivers_mock):"},{"line_number":1003,"context_line":"        drivers_mock.return_value \u003d {"},{"line_number":1004,"context_line":"            \u0027driver_1\u0027: [\u0027test_id:1\u0027, \u0027test_id:2\u0027]"},{"line_number":1005,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_d9ab2e1c","line":1002,"range":{"start_line":1002,"start_character":0,"end_line":1002,"end_character":4},"updated":"2016-02-26 17:20:39.000000000","message":"let\u0027s move this into test_orchestrator_serializer_90.py","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"7e0058fb424fbc667a97f091538b2d4cddd86bed","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"                 {\u0027datapath_type\u0027: \u0027netdev\u0027}},"},{"line_number":1040,"context_line":"            {\u0027action\u0027: \u0027add-patch\u0027,"},{"line_number":1041,"context_line":"             \u0027mtu\u0027: 65000,"},{"line_number":1042,"context_line":"             \u0027bridges\u0027: [\u0027br-prv\u0027, \u0027br-fw-admin\u0027],"},{"line_number":1043,"context_line":"             \u0027provider\u0027: \u0027ovs\u0027},"},{"line_number":1044,"context_line":"            {\u0027action\u0027: \u0027add-port\u0027,"},{"line_number":1045,"context_line":"             \u0027bridge\u0027: \u0027br-prv\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_b4211150","line":1042,"range":{"start_line":1042,"start_character":24,"end_line":1042,"end_character":49},"updated":"2016-02-26 17:20:39.000000000","message":"this looks suspicious","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"7e0058fb424fbc667a97f091538b2d4cddd86bed","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"             \u0027mtu\u0027: 65000,"},{"line_number":1042,"context_line":"             \u0027bridges\u0027: [\u0027br-prv\u0027, \u0027br-fw-admin\u0027],"},{"line_number":1043,"context_line":"             \u0027provider\u0027: \u0027ovs\u0027},"},{"line_number":1044,"context_line":"            {\u0027action\u0027: \u0027add-port\u0027,"},{"line_number":1045,"context_line":"             \u0027bridge\u0027: \u0027br-prv\u0027,"},{"line_number":1046,"context_line":"             \u0027provider\u0027: \u0027dpdkovs\u0027,"},{"line_number":1047,"context_line":"             \u0027name\u0027: \u0027eth0\u0027,"},{"line_number":1048,"context_line":"             \u0027vendor_specific\u0027:"},{"line_number":1049,"context_line":"                 {\u0027dpdk_driver\u0027: \u0027driver_1\u0027}},"},{"line_number":1050,"context_line":"            {\u0027action\u0027: \u0027add-port\u0027,"},{"line_number":1051,"context_line":"             \u0027bridge\u0027: \u0027br-fw-admin\u0027,"},{"line_number":1052,"context_line":"             \u0027name\u0027: \u0027eth0\u0027},"},{"line_number":1053,"context_line":"            {\u0027action\u0027: \u0027add-port\u0027,"},{"line_number":1054,"context_line":"             \u0027bridge\u0027: \u0027br-storage\u0027,"},{"line_number":1055,"context_line":"             \u0027name\u0027: \u0027eth0.102\u0027},"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_b4147144","line":1052,"range":{"start_line":1044,"start_character":0,"end_line":1052,"end_character":29},"updated":"2016-02-26 17:20:39.000000000","message":"afaic, we should not have anything besides Private on interface with DPDK switched on.","commit_id":"46bce134499b6093453b6e03894a90d06c7e6152"}],"nailgun/nailgun/test/integration/test_orchestrator_serializer_90.py":[{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"f99e7aaa87b6e09771b30b64846164a45b1c71af","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        vendor_specific \u003d dpdk_interface.get(\u0027vendor_specific\u0027, {})"},{"line_number":111,"context_line":"        self.assertEqual(vendor_specific.get(\u0027dpdk_driver\u0027), \u0027driver_1\u0027)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class TestDeploymentHASerializer90("},{"line_number":115,"context_line":"    TestSerializer90Mixin,"},{"line_number":116,"context_line":"    TestDeploymentHASerializer80"}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_54ad8de7","line":113,"updated":"2016-03-04 10:56:24.000000000","message":"let\u0027s add test for bond","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":10443,"name":"Fedor Zhadaev","email":"fzhadaev@mirantis.com","username":"fzhadaev"},"change_message_id":"8690e79890b37e6cf42053e2760d188ce0d04165","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        vendor_specific \u003d dpdk_interface.get(\u0027vendor_specific\u0027, {})"},{"line_number":111,"context_line":"        self.assertEqual(vendor_specific.get(\u0027dpdk_driver\u0027), \u0027driver_1\u0027)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class TestDeploymentHASerializer90("},{"line_number":115,"context_line":"    TestSerializer90Mixin,"},{"line_number":116,"context_line":"    TestDeploymentHASerializer80"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_2dd29d5c","line":113,"in_reply_to":"7af24918_54ad8de7","updated":"2016-03-09 09:48:03.000000000","message":"Done","commit_id":"922973508da77e83c6cb5ea7c0fdb32aa2310cfe"},{"author":{"_account_id":8392,"name":"Aleksey Kasatkin","email":"akasatkin@mirantis.com","username":"aleksey"},"change_message_id":"b6b1998bc05e07fab5408c5b98f0b03d83430ac1","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        private_br \u003d filter(lambda t: t.get(\u0027name\u0027) \u003d\u003d"},{"line_number":166,"context_line":"                            consts.DEFAULT_BRIDGES_NAMES.br_prv,"},{"line_number":167,"context_line":"                            transformations)[0]"},{"line_number":168,"context_line":"        dpdk_port \u003d filter(lambda t: t.get(\u0027bridge\u0027) \u003d\u003d"},{"line_number":169,"context_line":"                           consts.DEFAULT_BRIDGES_NAMES.br_prv,"},{"line_number":170,"context_line":"                           transformations)[0]"},{"line_number":171,"context_line":"        self.assertEqual(private_br.get(\u0027vendor_specific\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"5aef4532_5a46984f","line":168,"range":{"start_line":168,"start_character":8,"end_line":168,"end_character":17},"updated":"2016-03-09 18:07:32.000000000","message":"dpdk_bond is more precise","commit_id":"92c79a07727608e077d7c53a4bd91c56e37fe7e5"}]}
