)]}'
{"cni.Dockerfile":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs python-pip iproute bridge-utils openvswitch sudo libstdc++ pciutils kmod-libs wget \\"},{"line_number":15,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs gcc python-devel git"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"RUN wget https://raw.githubusercontent.com/ceph/dpdk/master/tools/dpdk-devbind.py \\"},{"line_number":18,"context_line":"    \u0026\u0026 mv dpdk-devbind.py /sbin/dpdk-devbind.py \u0026\u0026 chmod 755 /sbin/dpdk-devbind.py"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"COPY . /opt/kuryr-kubernetes"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":23,"id":"3fa7e38b_3369fd25","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":82},"updated":"2019-11-07 08:14:19.000000000","message":"I don\u0027t like having an unversioned external dependency. Any way to remove it?","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"3ac85babca863b7690b655bcf93e91034af478e9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs python-pip iproute bridge-utils openvswitch sudo libstdc++ pciutils kmod-libs wget \\"},{"line_number":15,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs gcc python-devel git"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"RUN wget https://raw.githubusercontent.com/ceph/dpdk/master/tools/dpdk-devbind.py \\"},{"line_number":18,"context_line":"    \u0026\u0026 mv dpdk-devbind.py /sbin/dpdk-devbind.py \u0026\u0026 chmod 755 /sbin/dpdk-devbind.py"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"COPY . /opt/kuryr-kubernetes"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":23,"id":"3fa7e38b_d185015b","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":82},"in_reply_to":"3fa7e38b_3369fd25","updated":"2019-11-07 10:22:53.000000000","message":"+1","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97c98d7efb9c6b18f07d9ddb0359fc5e7efbd54c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs python-pip iproute bridge-utils openvswitch sudo libstdc++ pciutils kmod-libs wget \\"},{"line_number":15,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs gcc python-devel git"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"RUN wget https://raw.githubusercontent.com/ceph/dpdk/master/tools/dpdk-devbind.py \\"},{"line_number":18,"context_line":"    \u0026\u0026 mv dpdk-devbind.py /sbin/dpdk-devbind.py \u0026\u0026 chmod 755 /sbin/dpdk-devbind.py"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"COPY . /opt/kuryr-kubernetes"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":23,"id":"3fa7e38b_ac97ce9c","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":82},"in_reply_to":"3fa7e38b_d185015b","updated":"2019-11-07 11:33:03.000000000","message":"i wrote a replacement for dpdk-devbind for kolla ansible a few years ago to avoid the same issue.\n\nhttps://github.com/openstack/kolla-ansible/blob/master/tools/ovs-dpdkctl.sh\n\nthe api to use it is different but it can be used to bind nics ectra \n\nits intened to be executed on the host primarly and will create a systemd unit file to manage the nics if you want it too by invoking it with install\n\n\nstarngly for me i even put docs in it :) \n\nhttps://github.com/openstack/kolla-ansible/blob/master/tools/ovs-dpdkctl.sh#L384-L487\n\n\nthe actual function to bind the nics are pretty trivial\n\nhttps://github.com/openstack/kolla-ansible/blob/master/tools/ovs-dpdkctl.sh#L100-L142\n\n\nso im sure you could eaisly adapt it to your needs.\n\nnetworking-ovs-dpdk is till using dpdk-devbind since i have been to lazy to update it and it has not broken in multiple years but i will eventrually get arround to replacing it with the kolla tool/script i wrote.\n\nthe script also has logic for iniallining ovs dpdk which you proably dont need for kuryr kubernets but i just wanted to illistrate that replacing dpdk devbind is generally not hard to do even with just bash. you can obvirously do it with python or go too.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"de562a322d033136c6d90d0aedecc5ad6cc8e7ee","unresolved":false,"context_lines":[{"line_number":11,"context_line":"ARG OSLO_LOCK_PATH\u003d/var/kuryr-lock"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"RUN yum install -y epel-release https://rdoproject.org/repos/rdo-release.rpm \\"},{"line_number":14,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs python3-pip openvswitch sudo iproute bridge-utils libstdc++ pciutils kmod-libs \\"},{"line_number":15,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs gcc python3-devel git"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"COPY . /opt/kuryr-kubernetes"}],"source_content_type":"text/x-dockerfile","patch_set":37,"id":"3fa7e38b_fce2a6d3","line":14,"range":{"start_line":14,"start_character":83,"end_line":14,"end_character":95},"updated":"2019-11-21 17:37:59.000000000","message":"bridge-utils are not there in centos:8. Any specific reason to install them? Note that this causes containerized builds to fail.\n\nAlso iproute is already there along with  libstdc++ and kmod-libs.","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":11,"context_line":"ARG OSLO_LOCK_PATH\u003d/var/kuryr-lock"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"RUN yum install -y epel-release https://rdoproject.org/repos/rdo-release.rpm \\"},{"line_number":14,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs python3-pip openvswitch sudo iproute bridge-utils libstdc++ pciutils kmod-libs \\"},{"line_number":15,"context_line":"    \u0026\u0026 yum install -y --setopt\u003dtsflags\u003dnodocs gcc python3-devel git"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"COPY . /opt/kuryr-kubernetes"}],"source_content_type":"text/x-dockerfile","patch_set":37,"id":"3fa7e38b_cfc23203","line":14,"range":{"start_line":14,"start_character":83,"end_line":14,"end_character":95},"in_reply_to":"3fa7e38b_fce2a6d3","updated":"2019-11-29 10:54:27.000000000","message":"yes, it seems  be an incorrect conflict resolution. Actually \"bridge-utils\" is not needed by this patch.\nThanks a lot","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"}],"cni_py3.Dockerfile":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \u0026\u0026 dnf install -y --setopt\u003dtsflags\u003dnodocs python36 iproute bridge-utils openvswitch sudo libstdc++ pciutils kmod-libs wget \\"},{"line_number":15,"context_line":"    \u0026\u0026 dnf install -y --setopt\u003dtsflags\u003dnodocs gcc git"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"RUN wget https://raw.githubusercontent.com/ceph/dpdk/master/tools/dpdk-devbind.py \\"},{"line_number":18,"context_line":"    \u0026\u0026 mv dpdk-devbind.py /sbin/dpdk-devbind.py \u0026\u0026 chmod 755 /sbin/dpdk-devbind.py"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"COPY . /opt/kuryr-kubernetes"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":23,"id":"3fa7e38b_5366f957","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":82},"updated":"2019-11-07 08:14:19.000000000","message":"Same here.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"}],"devstack/lib/kuryr_kubernetes":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"de562a322d033136c6d90d0aedecc5ad6cc8e7ee","unresolved":false,"context_lines":[{"line_number":671,"context_line":"            path: /proc"},{"line_number":672,"context_line":"        - name: var-pci"},{"line_number":673,"context_line":"          hostPath:"},{"line_number":674,"context_line":"            path: /var/pci_address"},{"line_number":675,"context_line":"EOF"},{"line_number":676,"context_line":"    if [[ -n \"$VAR_RUN_PATH\" ]]; then"},{"line_number":677,"context_line":"        cat \u003e\u003e \"${output_dir}/cni_ds.yml\" \u003c\u003c EOF"}],"source_content_type":"application/x-shellscript","patch_set":37,"id":"3fa7e38b_fc7e26e1","line":674,"range":{"start_line":674,"start_character":0,"end_line":674,"end_character":34},"updated":"2019-11-21 17:37:59.000000000","message":"Just a thought - what happens if this doesn\u0027t exist?","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":671,"context_line":"            path: /proc"},{"line_number":672,"context_line":"        - name: var-pci"},{"line_number":673,"context_line":"          hostPath:"},{"line_number":674,"context_line":"            path: /var/pci_address"},{"line_number":675,"context_line":"EOF"},{"line_number":676,"context_line":"    if [[ -n \"$VAR_RUN_PATH\" ]]; then"},{"line_number":677,"context_line":"        cat \u003e\u003e \"${output_dir}/cni_ds.yml\" \u003c\u003c EOF"}],"source_content_type":"application/x-shellscript","patch_set":37,"id":"3fa7e38b_52c7c547","line":674,"range":{"start_line":674,"start_character":0,"end_line":674,"end_character":34},"in_reply_to":"3fa7e38b_fc7e26e1","updated":"2019-11-29 10:54:27.000000000","message":"if \"/var/pci_address\" doesn\u0027t exist on host, pod will now start with error: \"MountVolume.SetUp failed for volume \"var-pci\" : hostPath type check failed: /var/pci_address is not a directory\"","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"}],"doc/source/installation/devstack/nested-dpdk.rst":[{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"87b6db3966bf74d5b16a684e7a755cc7db1d8009","unresolved":false,"context_lines":[{"line_number":85,"context_line":"- Install Multus CNI using this guide: https://github.com/intel/multus-cni#build"},{"line_number":86,"context_line":"    - *Note: Temporarily using Multus CNI as a solution until Kuryr natively supports multiple VIFs*"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"- Create Multus CNI configuration file ~/cni/conf/multus-cni.conf::"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    {"},{"line_number":91,"context_line":"       \"name\":\"multus-demo-network\","}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_0f90ab4b","line":88,"range":{"start_line":88,"start_character":2,"end_line":88,"end_character":38},"updated":"2018-12-07 15:19:16.000000000","message":"I didn\u0027t check, but probably now it\u0027s possible to do just by kuryr-kubernetes with npwg multi-vif.","commit_id":"4ac871694fb516ebcbef68cde75f9a04a6ae1761"}],"kuryr_kubernetes/clients.py":[{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ea0d2da9910233d4ee418373964d3f7ad9fa1c05","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from kuryr_kubernetes import config"},{"line_number":26,"context_line":"from kuryr_kubernetes import k8s_client"},{"line_number":27,"context_line":"from kuryr_kubernetes.pod_resources import client as pr_client"},{"line_number":28,"context_line":"from novaclient import client as nova_client"},{"line_number":29,"context_line":"from oslo_config import cfg"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_clients \u003d {}"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_73cd352f","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":44},"updated":"2019-11-07 08:18:46.000000000","message":"Probably use of openstacksdk would be better.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    return _clients[_POD_RESOURCES_CLIENT]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def get_nova_client():"},{"line_number":64,"context_line":"    return _clients[_NOVA_CLIENT]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def setup_clients():"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_b35e4d77","line":64,"range":{"start_line":63,"start_character":0,"end_line":64,"end_character":33},"updated":"2019-11-07 08:14:19.000000000","message":"This should be done through openstacksdk, we aim to remove python-*clients as they make it harder to support multiple OpenStack versions.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"82799dfd81755e4c922b534da88782707e711e5e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"def get_pod_resources_client():"},{"line_number":56,"context_line":"    return _clients[_POD_RESOURCES_CLIENT]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_clients():"},{"line_number":60,"context_line":"    setup_neutron_client()"},{"line_number":61,"context_line":"    setup_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":27,"id":"3fa7e38b_dfbb6e72","line":58,"updated":"2019-11-15 07:34:45.000000000","message":"I see, that you\u0027ve removed method, and used openstacksdk directly.\n\nHow about making explicit function for interacting with compute related resources? I.e:\n\n  def get_compute_client():\n      return _clients[_OPENSTACKSDK].compute\n\njust like we have already for Octavia and Neutron above?","commit_id":"6149e83589212b71c0a4d7672ad90ace22b38976"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"47eaaa7c3d33f52c5c46dcb98bb56af2d9c18ad6","unresolved":false,"context_lines":[{"line_number":55,"context_line":"def get_pod_resources_client():"},{"line_number":56,"context_line":"    return _clients[_POD_RESOURCES_CLIENT]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_clients():"},{"line_number":60,"context_line":"    setup_neutron_client()"},{"line_number":61,"context_line":"    setup_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":27,"id":"3fa7e38b_f3c78110","line":58,"in_reply_to":"3fa7e38b_dfbb6e72","updated":"2019-11-15 13:43:21.000000000","message":"Roman, good idea\nThanks a lot","commit_id":"6149e83589212b71c0a4d7672ad90ace22b38976"}],"kuryr_kubernetes/cni/binding/base.py":[{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"68f168db6aaad56a46f20ac460c670d88b4b60a6","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    try:"},{"line_number":89,"context_line":"        if hasattr(vif, \u0027l3_setup\u0027) and vif.obj_attr_is_set(\u0027l3_setup\u0027) \\"},{"line_number":90,"context_line":"                and vif.l3_setup:"},{"line_number":91,"context_line":"            _configure_l3(vif, ifname, netns)"},{"line_number":92,"context_line":"    except AttributeError:"},{"line_number":93,"context_line":"        raise"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_f9bf38c7","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":25},"updated":"2018-07-06 13:27:28.000000000","message":"_configure_l3 will be called twice, and ip address will be set to iface twice too, but not defaut gw, is it desired behaviour?","commit_id":"93bcfe0137b1bee138a69d461eb3d1ea7071aae8"},{"author":{"_account_id":24127,"name":"Gary Loughnane","email":"gary.loughnane@intel.com","username":"garyloug"},"change_message_id":"ba393efa0844ee6131579c7438d2b58472ad4af0","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    try:"},{"line_number":89,"context_line":"        if hasattr(vif, \u0027l3_setup\u0027) and vif.obj_attr_is_set(\u0027l3_setup\u0027) \\"},{"line_number":90,"context_line":"                and vif.l3_setup:"},{"line_number":91,"context_line":"            _configure_l3(vif, ifname, netns)"},{"line_number":92,"context_line":"    except AttributeError:"},{"line_number":93,"context_line":"        raise"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_d96fdc26","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":25},"in_reply_to":"5f7c97a3_f9bf38c7","updated":"2018-07-06 13:33:53.000000000","message":"Good catch, this is not desired. I think this got by me during a rebase. I will fix it. Thanks.","commit_id":"93bcfe0137b1bee138a69d461eb3d1ea7071aae8"},{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"5c7d0024959ddcd91153d4d8a5e064575cde3a33","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        if hasattr(vif, \u0027l3_setup\u0027):"},{"line_number":89,"context_line":"            if vif.obj_attr_is_set(\u0027l3_setup\u0027) and vif.l3_setup:"},{"line_number":90,"context_line":"                _configure_l3(vif, ifname, netns, is_default_gateway)"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            _configure_l3(vif, ifname, netns, is_default_gateway)"},{"line_number":93,"context_line":"    except AttributeError:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_3aa2b598","line":90,"range":{"start_line":90,"start_character":50,"end_line":90,"end_character":68},"updated":"2018-07-17 06:49:39.000000000","message":"I guess, no need to pass is_default_gateway in this case.\nor maybe, for the sake for readability reduce to one _configure_l3 call, by doing it like that:\n\ntry:\ndefault_gateway \u003d False if hasattr(vif, \u0027l3_setup\u0027) and vif.obj_attr_is_set(\u0027l3_setup\u0027) and vif.l3_setup else is_default_gateway\n_configure_l3(vif, ifname, netns, default_gateway)\nexcept AttributeError:\n    raise","commit_id":"5fba487a0394b362f2238c7d771b182ae1705f38"},{"author":{"_account_id":24127,"name":"Gary Loughnane","email":"gary.loughnane@intel.com","username":"garyloug"},"change_message_id":"72888cf617dfcada8352fc09c047fdcf7b8af200","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        if hasattr(vif, \u0027l3_setup\u0027):"},{"line_number":89,"context_line":"            if vif.obj_attr_is_set(\u0027l3_setup\u0027) and vif.l3_setup:"},{"line_number":90,"context_line":"                _configure_l3(vif, ifname, netns, is_default_gateway)"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            _configure_l3(vif, ifname, netns, is_default_gateway)"},{"line_number":93,"context_line":"    except AttributeError:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_07be7dd3","line":90,"range":{"start_line":90,"start_character":50,"end_line":90,"end_character":68},"in_reply_to":"5f7c97a3_3aa2b598","updated":"2018-07-17 09:05:03.000000000","message":"ok, I\u0027ll change this.","commit_id":"5fba487a0394b362f2238c7d771b182ae1705f38"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"de562a322d033136c6d90d0aedecc5ad6cc8e7ee","unresolved":false,"context_lines":[{"line_number":121,"context_line":"def _need_l3_setup(vif):"},{"line_number":122,"context_line":"    \"\"\"Check wether l3 configuration is necessary\"\"\""},{"line_number":123,"context_line":"    if hasattr(vif, \u0027port_profile\u0027) and hasattr(vif.port_profile, \u0027l3_setup\u0027):"},{"line_number":124,"context_line":"        if (vif.port_profile.obj_attr_is_set(\u0027l3_setup\u0027) and"},{"line_number":125,"context_line":"                vif.port_profile.l3_setup):"},{"line_number":126,"context_line":"            return True"},{"line_number":127,"context_line":"        else:"},{"line_number":128,"context_line":"            return False"},{"line_number":129,"context_line":"    # by default kuryr-kubernetes has to setup l3"},{"line_number":130,"context_line":"    return True"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_8dd6def1","line":128,"range":{"start_line":124,"start_character":0,"end_line":128,"end_character":24},"updated":"2019-11-21 17:37:59.000000000","message":"return (vif.port_profile.obj_attr_is_set(\u0027l3_setup\u0027) and \n        vif.port_profile.l3_setup)","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":121,"context_line":"def _need_l3_setup(vif):"},{"line_number":122,"context_line":"    \"\"\"Check wether l3 configuration is necessary\"\"\""},{"line_number":123,"context_line":"    if hasattr(vif, \u0027port_profile\u0027) and hasattr(vif.port_profile, \u0027l3_setup\u0027):"},{"line_number":124,"context_line":"        if (vif.port_profile.obj_attr_is_set(\u0027l3_setup\u0027) and"},{"line_number":125,"context_line":"                vif.port_profile.l3_setup):"},{"line_number":126,"context_line":"            return True"},{"line_number":127,"context_line":"        else:"},{"line_number":128,"context_line":"            return False"},{"line_number":129,"context_line":"    # by default kuryr-kubernetes has to setup l3"},{"line_number":130,"context_line":"    return True"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_f214b1a1","line":128,"range":{"start_line":124,"start_character":0,"end_line":128,"end_character":24},"in_reply_to":"3fa7e38b_8dd6def1","updated":"2019-11-29 10:54:27.000000000","message":"perfect , agree\nthanks","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"8d5d3ba48d41564470c266d8fe5fa64e90d12b8d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"def _need_l3_setup(vif):"},{"line_number":130,"context_line":"    \"\"\"Check wether l3 configuration is necessary\"\"\""},{"line_number":131,"context_line":"    try:"},{"line_number":132,"context_line":"        return (vif.obj_attr_is_set(\u0027port_profile\u0027) and"},{"line_number":133,"context_line":"                vif.port_profile.obj_attr_is_set(\u0027l3_setup\u0027) and"},{"line_number":134,"context_line":"                vif.port_profile.l3_setup)"},{"line_number":135,"context_line":"    except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"3fa7e38b_ac91e0f9","line":132,"updated":"2019-12-02 16:48:12.000000000","message":"I thought error was neither in VIFNestedDPDK nor in VIFDPDKNested. It was with VIFVlanNested and probably with any other VIFBase derived classes initialized port_profile. If so, it\u0027s another issue and another patch.\nI also wander how _need_configure_l3 works, because it also use hasattr of VersionedObject.\n\nShort story, our VIFBase it\u0027s oslo.VersionedObject - every time we call hasattr when field is declared, but not initialized, obj_load_attr is called, by default it raises NotImplementedError. Usually in nova it overwrites by setattr(...). Hmm, but it\u0027s true only if oslo_messaging is working through VersionedObjectRegistry...","commit_id":"3d9eef13def0c9fe2e326c8b6b1588e19d77ec58"},{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"67b0ce54202312c9e98e725e82e8c32c717cd878","unresolved":false,"context_lines":[{"line_number":129,"context_line":"def _need_l3_setup(vif):"},{"line_number":130,"context_line":"    \"\"\"Check wether l3 configuration is necessary\"\"\""},{"line_number":131,"context_line":"    try:"},{"line_number":132,"context_line":"        return (vif.obj_attr_is_set(\u0027port_profile\u0027) and"},{"line_number":133,"context_line":"                vif.port_profile.obj_attr_is_set(\u0027l3_setup\u0027) and"},{"line_number":134,"context_line":"                vif.port_profile.l3_setup)"},{"line_number":135,"context_line":"    except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"3fa7e38b_ed37cbda","line":132,"in_reply_to":"3fa7e38b_87a15dfa","updated":"2019-12-03 06:59:25.000000000","message":"Also I don\u0027t like the fact what 2 different function exists with the same purpose.","commit_id":"3d9eef13def0c9fe2e326c8b6b1588e19d77ec58"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e9be8445f47115bee170f95ec76fd4aa25efdea7","unresolved":false,"context_lines":[{"line_number":129,"context_line":"def _need_l3_setup(vif):"},{"line_number":130,"context_line":"    \"\"\"Check wether l3 configuration is necessary\"\"\""},{"line_number":131,"context_line":"    try:"},{"line_number":132,"context_line":"        return (vif.obj_attr_is_set(\u0027port_profile\u0027) and"},{"line_number":133,"context_line":"                vif.port_profile.obj_attr_is_set(\u0027l3_setup\u0027) and"},{"line_number":134,"context_line":"                vif.port_profile.l3_setup)"},{"line_number":135,"context_line":"    except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"3fa7e38b_555f2f74","line":132,"in_reply_to":"3fa7e38b_87a15dfa","updated":"2019-12-10 10:03:44.000000000","message":"Looks like \"physnet\" field could not be not-declared, just because it is used only in Sriov Vif and it is declared there always. Thus in \"_need_configure_l3\" there NotImplementedError could not be raised.","commit_id":"3d9eef13def0c9fe2e326c8b6b1588e19d77ec58"},{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"766c147b5b67a737f0b8e7a7ba34ef1e403e50aa","unresolved":false,"context_lines":[{"line_number":129,"context_line":"def _need_l3_setup(vif):"},{"line_number":130,"context_line":"    \"\"\"Check wether l3 configuration is necessary\"\"\""},{"line_number":131,"context_line":"    try:"},{"line_number":132,"context_line":"        return (vif.obj_attr_is_set(\u0027port_profile\u0027) and"},{"line_number":133,"context_line":"                vif.port_profile.obj_attr_is_set(\u0027l3_setup\u0027) and"},{"line_number":134,"context_line":"                vif.port_profile.l3_setup)"},{"line_number":135,"context_line":"    except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"3fa7e38b_87a15dfa","line":132,"in_reply_to":"3fa7e38b_ac91e0f9","updated":"2019-12-02 17:00:44.000000000","message":"Ok, I was hurry with \"another issue\", but how did _need_configure_l3 worked?","commit_id":"3d9eef13def0c9fe2e326c8b6b1588e19d77ec58"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"24d549a1618b7658e121f145177c3488bee5ee8a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    return True"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def _need_l3_setup(vif):"},{"line_number":146,"context_line":"    \"\"\"Check whether l3 configuration is necessary\"\"\""},{"line_number":147,"context_line":"    if vif.obj_attr_is_set(\u0027port_profile\u0027) and hasattr(vif.port_profile,"},{"line_number":148,"context_line":"                                                       \u0027l3_setup\u0027):"},{"line_number":149,"context_line":"        return vif.port_profile.l3_setup"},{"line_number":150,"context_line":"    # by default kuryr-kubernetes has to setup l3"},{"line_number":151,"context_line":"    return True"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"def connect(vif, instance_info, ifname, netns\u003dNone, report_health\u003dNone,"}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_9e588a57","line":151,"range":{"start_line":145,"start_character":24,"end_line":151,"end_character":15},"updated":"2020-01-21 16:00:00.000000000","message":"Can\u0027t it be included in _need_configure_l3? Why is it separate?","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b3a174d77dbcb9a6dad98ac8f470375600a340b6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    return True"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def _need_l3_setup(vif):"},{"line_number":146,"context_line":"    \"\"\"Check whether l3 configuration is necessary\"\"\""},{"line_number":147,"context_line":"    if vif.obj_attr_is_set(\u0027port_profile\u0027) and hasattr(vif.port_profile,"},{"line_number":148,"context_line":"                                                       \u0027l3_setup\u0027):"},{"line_number":149,"context_line":"        return vif.port_profile.l3_setup"},{"line_number":150,"context_line":"    # by default kuryr-kubernetes has to setup l3"},{"line_number":151,"context_line":"    return True"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"def connect(vif, instance_info, ifname, netns\u003dNone, report_health\u003dNone,"}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_d961fcd5","line":151,"range":{"start_line":145,"start_character":24,"end_line":151,"end_character":15},"in_reply_to":"3fa7e38b_9e588a57","updated":"2020-01-28 11:45:10.000000000","message":"the things done with these methods are similar, but it relays on different parts of vif. This method describes nested dpdk related things. And _need_configure_l3 describes sriov related things. However, I think we can union these methods.\nThanks","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"76c6d8919171c41c04cd810e2029b469a4a87275","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def _need_configure_l3(vif):"},{"line_number":123,"context_line":"    if not hasattr(vif, \u0027physnet\u0027):"},{"line_number":124,"context_line":"        # NOTE(danil): non-sriov vif. Fugure out if it is nested-dpdk"},{"line_number":125,"context_line":"        if vif.obj_attr_is_set(\u0027port_profile\u0027) and hasattr(vif.port_profile,"},{"line_number":126,"context_line":"                                                           \u0027l3_setup\u0027):"},{"line_number":127,"context_line":"            return vif.port_profile.l3_setup"}],"source_content_type":"text/x-python","patch_set":47,"id":"3fa7e38b_7ea72a53","line":124,"range":{"start_line":124,"start_character":38,"end_line":124,"end_character":44},"updated":"2020-02-03 11:29:23.000000000","message":"Figure","commit_id":"14d92455f7a41a4a29ba686f087ea18b15453822"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"266e4e290679f127563585a2dbb5ba53d142a7ac","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def _need_configure_l3(vif):"},{"line_number":123,"context_line":"    if not hasattr(vif, \u0027physnet\u0027):"},{"line_number":124,"context_line":"        # NOTE(danil): non-sriov vif. Fugure out if it is nested-dpdk"},{"line_number":125,"context_line":"        if vif.obj_attr_is_set(\u0027port_profile\u0027) and hasattr(vif.port_profile,"},{"line_number":126,"context_line":"                                                           \u0027l3_setup\u0027):"},{"line_number":127,"context_line":"            return vif.port_profile.l3_setup"}],"source_content_type":"text/x-python","patch_set":47,"id":"3fa7e38b_b9a85c8b","line":124,"range":{"start_line":124,"start_character":38,"end_line":124,"end_character":44},"in_reply_to":"3fa7e38b_7ea72a53","updated":"2020-02-04 08:01:37.000000000","message":"Done","commit_id":"14d92455f7a41a4a29ba686f087ea18b15453822"}],"kuryr_kubernetes/cni/binding/dpdk.py":[{"author":{"_account_id":24127,"name":"Gary Loughnane","email":"gary.loughnane@intel.com","username":"garyloug"},"change_message_id":"d040a66bd64fe89293e436ea9f4121931bd69cca","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(garyloug): let driver be configurable"},{"line_number":41,"context_line":"        vif.dev_driver \u003d driver"},{"line_number":42,"context_line":"        vif.pci_address \u003d pci_addr"},{"line_number":43,"context_line":"        self._change_driver_binding(pci_addr, \"uio_pci_generic\")"},{"line_number":44,"context_line":"        self._set_vif(vif)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def disconnect(self, vif, ifname, netns):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_8a84a9d4","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":64},"updated":"2018-04-12 12:42:57.000000000","message":"I’d like some input on this also. Right now the dpdk driver is hardcoded to uio_pci_generic, which is fine since it’s the one you need for virtio devices. It should be configurable, for example, if binding to an SRIOV device then it’ll need to be bound to a different dpdk driver. My first thought was to again make this a configuration in kuryr.conf. However my understanding is that configurations in kuryr.conf tend to be static, the dpdk-driver would always be the same for that VM. Do we want to cater for a scenario, for example, where a user may want one pod in the VM bound to a virtio device and you may want another pod bound to a SRIOV VF that has been attached to the VM?\n\nA method of setting the driver dynamically could be to set the DPDK driver as one of the ARGS in cni.conf rather than setting it in kuryr.conf. Please let me know your thoughts.","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":24127,"name":"Gary Loughnane","email":"gary.loughnane@intel.com","username":"garyloug"},"change_message_id":"a3b9a16a31b7a504453be45341ff1e099c077279","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(garyloug): let driver be configurable"},{"line_number":41,"context_line":"        vif.dev_driver \u003d driver"},{"line_number":42,"context_line":"        vif.pci_address \u003d pci_addr"},{"line_number":43,"context_line":"        self._change_driver_binding(pci_addr, \"uio_pci_generic\")"},{"line_number":44,"context_line":"        self._set_vif(vif)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def disconnect(self, vif, ifname, netns):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_79f4d686","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":64},"in_reply_to":"9f6a8fd7_6cb79588","updated":"2018-05-09 13:24:49.000000000","message":"Hi folks, so I\u0027ve been playing around with configuring the DPDK driver dynamically. Using the CNI args from the cni/conf/10-kuryr.conf file is more difficult than I presumed, but I think it is doable. The CNI args are loaded within kuryr_kubernetes/cni/main.py and from here I found it difficult to make them available elsewhere in Kuryr without it becoming very \"hacky\".\n\nI think a solution might be to register the CNI args from 10-kuryr.conf as options under the oslo_config, likely under their own group. This group could be made mutable, which should mean the opts can be reloaded without restarting Kuryr.\n\nSo, for example, if \"dpdk_driver\" is updated in 10-kuryr.conf then something like CONF.cni_args.dpdk_driver will be updated with the new value.\n\nIf we go with this then I think making the CNI args available via oslo_config should be a feature of it\u0027s own, certainly a separate commit.\n\nWhat do you guys think? Am I on the right track? Am I over complicating it? Would having the CNI args available via oslo_config be useful elsewhere?","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":21041,"name":"Yossi Boaron","email":"yossi.boaron.dev@gmail.com","username":"yboaron"},"change_message_id":"5ac27217c7158fcdb68ce081e25a381182da32b3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(garyloug): let driver be configurable"},{"line_number":41,"context_line":"        vif.dev_driver \u003d driver"},{"line_number":42,"context_line":"        vif.pci_address \u003d pci_addr"},{"line_number":43,"context_line":"        self._change_driver_binding(pci_addr, \"uio_pci_generic\")"},{"line_number":44,"context_line":"        self._set_vif(vif)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def disconnect(self, vif, ifname, netns):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_6cb79588","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":64},"in_reply_to":"bf659307_8a84a9d4","updated":"2018-04-16 14:00:33.000000000","message":"+1 for the second option.","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"dd2c3b3f7603e100399f891219b20c98c7cacbf2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(garyloug): let driver be configurable"},{"line_number":41,"context_line":"        vif.dev_driver \u003d driver"},{"line_number":42,"context_line":"        vif.pci_address \u003d pci_addr"},{"line_number":43,"context_line":"        self._change_driver_binding(pci_addr, \"uio_pci_generic\")"},{"line_number":44,"context_line":"        self._set_vif(vif)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def disconnect(self, vif, ifname, netns):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_e58eb6cf","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":64},"in_reply_to":"bf659307_8a84a9d4","updated":"2018-04-12 13:29:13.000000000","message":"I would vote for the second choice, to make it dynamic. It is also aligned with the discussions in k8s-net-sig regarding multiple networks support","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":21041,"name":"Yossi Boaron","email":"yossi.boaron.dev@gmail.com","username":"yboaron"},"change_message_id":"5ac27217c7158fcdb68ce081e25a381182da32b3","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return devbind"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _change_driver_binding(self, pci_addr, uio_driver):"},{"line_number":103,"context_line":"        # NOTE: using the force flag shouldn\u0027t be needed as the interface"},{"line_number":104,"context_line":"        #       should be in the down state"},{"line_number":105,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_4ff5e3ca","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":30},"updated":"2018-04-16 14:00:33.000000000","message":"This function switches the interface from VM\u0027s IP stack to DPDK, the device name should be \u0027dpdkx\u0027 where x is 0,1 .\n\nWhere/when this dpdk interface is attached to the relevant POD\u0027s application?","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":24127,"name":"Gary Loughnane","email":"gary.loughnane@intel.com","username":"garyloug"},"change_message_id":"d040a66bd64fe89293e436ea9f4121931bd69cca","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        try:"},{"line_number":106,"context_line":"            # TODO(garyloug): load the python module and invoke functions"},{"line_number":107,"context_line":"            # directly"},{"line_number":108,"context_line":"            subprocess.check_call([\"dpdk-devbind\", \"-b\", uio_driver, pci_addr])"},{"line_number":109,"context_line":"        except subprocess.CalledProcessError as err:"},{"line_number":110,"context_line":"            # TODO(garyloug): better handling, at least convert"},{"line_number":111,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_ea4445ba","line":108,"range":{"start_line":108,"start_character":12,"end_line":108,"end_character":79},"updated":"2018-04-12 12:42:57.000000000","message":"I’d like some input on how to best implement this section of code. dpdk-devbind is what I’m using to unbind the virtio device from the kernel driver and bind it to the dpdk driver. It’s a python script usually located under /sbin/ on Ubuntu. I think it comes by default with Ubuntu images. The script is here: https://github.com/ceph/dpdk/blob/master/tools/dpdk-devbind.py\n\nThe issue is what if this script is not present on the users VM? They could be using a different distro, the script could be in a different location, etc. So I see a few options here.\n\nOPTION 1 - Make the location of the script configurable in kuryr.conf so it’s up to the user to ensure the script is installed and to point kuryr to the script location. Additional option to include a bash script with Kuryr that downloads and installs devbind. Or maybe we just include instructions as part of Kuryr docs.\n\nOPTION2 - Do we want to copy the necessary functions from dpdk-devbind script into this Kuryr binding driver? Then Kuryr will not depend on dpdk-devbind at all, it will be able to do the (un)binding itself.","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":21041,"name":"Yossi Boaron","email":"yossi.boaron.dev@gmail.com","username":"yboaron"},"change_message_id":"f48a2a938a1b45478441f3e8c419ccb2abadf6d6","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        try:"},{"line_number":106,"context_line":"            # TODO(garyloug): load the python module and invoke functions"},{"line_number":107,"context_line":"            # directly"},{"line_number":108,"context_line":"            subprocess.check_call([\"dpdk-devbind\", \"-b\", uio_driver, pci_addr])"},{"line_number":109,"context_line":"        except subprocess.CalledProcessError as err:"},{"line_number":110,"context_line":"            # TODO(garyloug): better handling, at least convert"},{"line_number":111,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_538f1e74","line":108,"range":{"start_line":108,"start_character":12,"end_line":108,"end_character":79},"in_reply_to":"bf659307_7005820f","updated":"2018-04-12 20:58:59.000000000","message":"+1 for Option#1, \nIt should be the user responsibility to install DPDK (pmd drivers and rest of DPDK libs) in the VM, right?\nI think it\u0027s reasonable to expect that the user will take care also of the bind/unbind scripts.","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"dd2c3b3f7603e100399f891219b20c98c7cacbf2","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        try:"},{"line_number":106,"context_line":"            # TODO(garyloug): load the python module and invoke functions"},{"line_number":107,"context_line":"            # directly"},{"line_number":108,"context_line":"            subprocess.check_call([\"dpdk-devbind\", \"-b\", uio_driver, pci_addr])"},{"line_number":109,"context_line":"        except subprocess.CalledProcessError as err:"},{"line_number":110,"context_line":"            # TODO(garyloug): better handling, at least convert"},{"line_number":111,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_7005820f","line":108,"range":{"start_line":108,"start_character":12,"end_line":108,"end_character":79},"in_reply_to":"bf659307_ea4445ba","updated":"2018-04-12 13:29:13.000000000","message":"Option 2 looks appealing but this means that any change done for the original script should be copied to the kuryr and this can be forgotten.I would go with the option 1. Better to have this automated and have as minimal as possible manual steps","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"8451777d1951af714361bf80e771849bf7528f35","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self._set_vif(vif)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def disconnect(self, vif, ifname, netns, container_id):"},{"line_number":73,"context_line":"        #self._change_driver_binding(vif.pci_address, vif.dev_driver)"},{"line_number":74,"context_line":"        self._remove_pci_file(container_id, ifname)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _get_iface_name_by_mac(self, mac_address):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7faddb67_693b7de9","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":69},"updated":"2019-08-16 13:05:41.000000000","message":"I\u0027m not sure if it is needed here, just because virtio device will be removed by kuryr-k8s-controller. Also some actions with it here may cause race conditions","commit_id":"6ae08e0b1c8329069dd5ac1c0f14a491c5d5b80f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# TODO(garyloug) These should probably eventually move to config.py"},{"line_number":37,"context_line":"# TODO(garyloug) Would be nice if dpdk_driver is set as CNI arg"},{"line_number":38,"context_line":"nested_dpdk_opts \u003d ["},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027dpdk_devbind\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\u0027Absolute path to DPDK devbind script used for binding \u0027"},{"line_number":41,"context_line":"                      \u0027and unbinding devices to kernel and userspace drivers\u0027),"},{"line_number":42,"context_line":"               default\u003d\u0027/sbin/dpdk-devbind.py\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027dpdk_driver\u0027,"},{"line_number":44,"context_line":"               help\u003d_(\u0027The DPDK driver that the device will be bound to after \u0027"},{"line_number":45,"context_line":"                      \u0027it is unbound from the kernel driver\u0027),"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_33525d6a","line":42,"range":{"start_line":39,"start_character":0,"end_line":42,"end_character":48},"updated":"2019-11-07 08:14:19.000000000","message":"Yeah, would be better to implement it inside instead of using script.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self._remove_pci_file(container_id, ifname)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _get_iface_name_by_mac(self, mac_address):"},{"line_number":76,"context_line":"        ipdb \u003d b_base.get_ipdb()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        for name, data in ipdb.interfaces.items():"},{"line_number":79,"context_line":"            if data[\u0027address\u0027] \u003d\u003d mac_address:"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_534fd9bd","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":32},"updated":"2019-11-07 08:14:19.000000000","message":"Needs to be closed or will leak.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ea0d2da9910233d4ee418373964d3f7ad9fa1c05","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _get_device_info(self, ifname):"},{"line_number":83,"context_line":"        \"\"\"Get driver and PCI addr by using sysfs\"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        NET_DEV_PATH \u003d \"/sys/class/net/{}/device\""},{"line_number":86,"context_line":"        VIRTIO_DEVS_PATH \u003d \"/sys/bus/virtio/devices/\""},{"line_number":87,"context_line":"        VIRTIO_PCI_PATH \u003d \"/sys/bus/pci/devices/\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # TODO(garyloug): check the type (virtio)"},{"line_number":90,"context_line":"        dev \u003d os.path.basename(os.readlink(NET_DEV_PATH.format(ifname)))"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_d3f1896c","line":87,"range":{"start_line":85,"start_character":0,"end_line":87,"end_character":49},"updated":"2019-11-07 08:18:46.000000000","message":"I\u0027d move them to the module level, or even to CONF, since the paths might change in the future.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"82799dfd81755e4c922b534da88782707e711e5e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _get_device_info(self, ifname):"},{"line_number":83,"context_line":"        \"\"\"Get driver and PCI addr by using sysfs\"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        NET_DEV_PATH \u003d \"/sys/class/net/{}/device\""},{"line_number":86,"context_line":"        VIRTIO_DEVS_PATH \u003d \"/sys/bus/virtio/devices/\""},{"line_number":87,"context_line":"        VIRTIO_PCI_PATH \u003d \"/sys/bus/pci/devices/\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # TODO(garyloug): check the type (virtio)"},{"line_number":90,"context_line":"        dev \u003d os.path.basename(os.readlink(NET_DEV_PATH.format(ifname)))"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_5f5d3e46","line":87,"range":{"start_line":85,"start_character":0,"end_line":87,"end_character":49},"in_reply_to":"3fa7e38b_38a51f04","updated":"2019-11-15 07:34:45.000000000","message":"module level \u003d\u003d out of this function, just below imports at the top of this… module (file). In python files with the code are often called modules, and directories with modules packages.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"47eaaa7c3d33f52c5c46dcb98bb56af2d9c18ad6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _get_device_info(self, ifname):"},{"line_number":83,"context_line":"        \"\"\"Get driver and PCI addr by using sysfs\"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        NET_DEV_PATH \u003d \"/sys/class/net/{}/device\""},{"line_number":86,"context_line":"        VIRTIO_DEVS_PATH \u003d \"/sys/bus/virtio/devices/\""},{"line_number":87,"context_line":"        VIRTIO_PCI_PATH \u003d \"/sys/bus/pci/devices/\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # TODO(garyloug): check the type (virtio)"},{"line_number":90,"context_line":"        dev \u003d os.path.basename(os.readlink(NET_DEV_PATH.format(ifname)))"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_ceb97eec","line":87,"range":{"start_line":85,"start_character":0,"end_line":87,"end_character":49},"in_reply_to":"3fa7e38b_5f5d3e46","updated":"2019-11-15 13:43:21.000000000","message":"sure, I see now\nthanks","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"0b09389b19265be95c5813254cbb88af997e81e0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _get_device_info(self, ifname):"},{"line_number":83,"context_line":"        \"\"\"Get driver and PCI addr by using sysfs\"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        NET_DEV_PATH \u003d \"/sys/class/net/{}/device\""},{"line_number":86,"context_line":"        VIRTIO_DEVS_PATH \u003d \"/sys/bus/virtio/devices/\""},{"line_number":87,"context_line":"        VIRTIO_PCI_PATH \u003d \"/sys/bus/pci/devices/\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # TODO(garyloug): check the type (virtio)"},{"line_number":90,"context_line":"        dev \u003d os.path.basename(os.readlink(NET_DEV_PATH.format(ifname)))"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_38a51f04","line":87,"range":{"start_line":85,"start_character":0,"end_line":87,"end_character":49},"in_reply_to":"3fa7e38b_d3f1896c","updated":"2019-11-13 10:47:06.000000000","message":"thanks, I see\nwhat do you mean when say \"module level\" ?\nbtw I\u0027m not sure if we should move these statements into optional (CONF) place just because for sure \"/sys/bus/...\" will not be changed ever","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ea0d2da9910233d4ee418373964d3f7ad9fa1c05","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def _set_pci_file(self, pci_addr, container_id, ifname):"},{"line_number":116,"context_line":"        if not os.path.exists(CONF.nested_dpdk.pci_mount_point):"},{"line_number":117,"context_line":"            os.mkdir(CONF.nested_dpdk.pci_mount_point)"},{"line_number":118,"context_line":"        file_path \u003d \u0027{}/{}-{}\u0027.format(CONF.nested_dpdk.pci_mount_point,"},{"line_number":119,"context_line":"                                      container_id,"},{"line_number":120,"context_line":"                                      ifname)"},{"line_number":121,"context_line":"        with open(file_path, \u0027w\u0027) as fd:"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_13f7215c","line":118,"range":{"start_line":118,"start_character":21,"end_line":118,"end_character":26},"updated":"2019-11-07 08:18:46.000000000","message":"\u0027{}-{}\u0027.format(os.path.join(…), ifname))","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ea0d2da9910233d4ee418373964d3f7ad9fa1c05","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            fd.write(pci_addr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _remove_pci_file(self, container_id, ifname):"},{"line_number":125,"context_line":"        file_path \u003d \u0027{}/{}-{}\u0027.format(CONF.nested_dpdk.pci_mount_point,"},{"line_number":126,"context_line":"                                      container_id,"},{"line_number":127,"context_line":"                                      ifname)"},{"line_number":128,"context_line":"        try:"},{"line_number":129,"context_line":"            os.remove(file_path)"},{"line_number":130,"context_line":"        except OSError:"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_739bf516","line":127,"range":{"start_line":125,"start_character":20,"end_line":127,"end_character":45},"updated":"2019-11-07 08:18:46.000000000","message":"ditto","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ea0d2da9910233d4ee418373964d3f7ad9fa1c05","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except KeyError:"},{"line_number":153,"context_line":"            LOG.error(\"NO ANNOTATIONS\")"},{"line_number":154,"context_line":"        except Exception:"},{"line_number":155,"context_line":"            import traceback"},{"line_number":156,"context_line":"            traceback.print_exc()"},{"line_number":157,"context_line":"        state \u003d utils.extract_pod_annotation(state_annotation)"},{"line_number":158,"context_line":"        LOG.info(\"Got VIFs from annotation: %s\", state.vifs)"},{"line_number":159,"context_line":"        return state, labels"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_13de41da","line":156,"range":{"start_line":155,"start_character":12,"end_line":156,"end_character":33},"updated":"2019-11-07 08:18:46.000000000","message":"LOG.critical?","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            state_annotation \u003d jsonutils.loads(annotations)"},{"line_number":152,"context_line":"        except KeyError:"},{"line_number":153,"context_line":"            LOG.error(\"NO ANNOTATIONS\")"},{"line_number":154,"context_line":"        except Exception:"},{"line_number":155,"context_line":"            import traceback"},{"line_number":156,"context_line":"            traceback.print_exc()"},{"line_number":157,"context_line":"        state \u003d utils.extract_pod_annotation(state_annotation)"},{"line_number":158,"context_line":"        LOG.info(\"Got VIFs from annotation: %s\", state.vifs)"},{"line_number":159,"context_line":"        return state, labels"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_d3c8a922","line":156,"range":{"start_line":154,"start_character":0,"end_line":156,"end_character":33},"updated":"2019-11-07 08:14:19.000000000","message":"LOG.exception","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2018 Intel Corporation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":29,"id":"3fa7e38b_20512f0f","line":1,"range":{"start_line":1,"start_character":19,"end_line":1,"end_character":20},"updated":"2020-01-02 09:31:59.000000000","message":"2019","commit_id":"be34fc94a19afd53796ad52df74bdb6b9fba60ed"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"NET_DEV_PATH \u003d \"/sys/class/net/{}/device\""},{"line_number":35,"context_line":"VIRTIO_DEVS_PATH \u003d \"/sys/bus/virtio/devices/\""},{"line_number":36,"context_line":"VIRTIO_PCI_PATH \u003d \"/sys/bus/pci/devices/\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# TODO(garyloug) These should probably eventually move to config.py"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_1cd4091f","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":15},"updated":"2019-11-28 08:02:12.000000000","message":"Just PCI_PATH?","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"NET_DEV_PATH \u003d \"/sys/class/net/{}/device\""},{"line_number":35,"context_line":"VIRTIO_DEVS_PATH \u003d \"/sys/bus/virtio/devices/\""},{"line_number":36,"context_line":"VIRTIO_PCI_PATH \u003d \"/sys/bus/pci/devices/\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# TODO(garyloug) These should probably eventually move to config.py"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_20d2ecd2","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":15},"in_reply_to":"3fa7e38b_1cd4091f","updated":"2019-11-29 10:54:27.000000000","message":"Done","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        return pci_driver, pci_addr"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _change_driver_binding(self, pci, driver):"},{"line_number":95,"context_line":"        old_driver_path \u003d \u0027/sys/bus/pci/devices/{}/driver\u0027.format(pci)"},{"line_number":96,"context_line":"        old_driver_link \u003d os.readlink(old_driver_path)"},{"line_number":97,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_3cec65f3","line":95,"range":{"start_line":95,"start_character":27,"end_line":95,"end_character":48},"updated":"2019-11-28 08:02:12.000000000","message":"You already created a constant for the path. Any reason why not use it here? I.e.\n\n  old_driver_path \u003d \u0027{}{}/driver\u0027.format(VIRTIO_PCI_PATH, pci)\n\nAlthough I\u0027d prefer to have VIRTIO_PCI_PATH not ended with \u0027/\u0027.\n\n(same for all hardcoded paths below)","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        return pci_driver, pci_addr"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _change_driver_binding(self, pci, driver):"},{"line_number":95,"context_line":"        old_driver_path \u003d \u0027/sys/bus/pci/devices/{}/driver\u0027.format(pci)"},{"line_number":96,"context_line":"        old_driver_link \u003d os.readlink(old_driver_path)"},{"line_number":97,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_20474c7a","line":95,"range":{"start_line":95,"start_character":27,"end_line":95,"end_character":48},"in_reply_to":"3fa7e38b_3cec65f3","updated":"2019-11-29 10:54:27.000000000","message":"thanks\nI\u0027ve fixed everything","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"},{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        owerride \u003d \"/sys/bus/pci/devices/{}/driver_override\".format(pci)"},{"line_number":106,"context_line":"        with open(owerride, \u0027w\u0027) as owerride_fd:"},{"line_number":107,"context_line":"            owerride_fd.write(\"\\00\")"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_bcb13504","line":105,"range":{"start_line":105,"start_character":8,"end_line":105,"end_character":16},"updated":"2019-11-28 08:02:12.000000000","message":"override?","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"},{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        owerride \u003d \"/sys/bus/pci/devices/{}/driver_override\".format(pci)"},{"line_number":106,"context_line":"        with open(owerride, \u0027w\u0027) as owerride_fd:"},{"line_number":107,"context_line":"            owerride_fd.write(\"\\00\")"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_65d31dd5","line":105,"range":{"start_line":105,"start_character":8,"end_line":105,"end_character":16},"in_reply_to":"3fa7e38b_bcb13504","updated":"2019-11-29 10:54:27.000000000","message":"thanks, I\u0027ve fixed it","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        file_path \u003d \u0027{}-{}\u0027.format(os.path.join("},{"line_number":122,"context_line":"            CONF.nested_dpdk.pci_mount_point,"},{"line_number":123,"context_line":"            container_id), ifname)"},{"line_number":124,"context_line":"        with open(file_path, \u0027w\u0027) as fd:"},{"line_number":125,"context_line":"            fd.write(pci_addr)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _remove_pci_file(self, container_id, ifname):"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_7c909d50","line":124,"range":{"start_line":124,"start_character":37,"end_line":124,"end_character":39},"updated":"2019-11-28 08:02:12.000000000","message":"super nit: it\u0027s a file object, not the file descriptor :) I\u0027m okay for leaving it just like that though.","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        try:"},{"line_number":132,"context_line":"            os.remove(file_path)"},{"line_number":133,"context_line":"        except OSError:"},{"line_number":134,"context_line":"            LOG.warning(\"Pci file: %s doesn\u0027t exists!\", file_path)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _set_vif(self, vif):"},{"line_number":137,"context_line":"        # TODO(ivc): extract annotation interactions"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_9c9b1963","line":134,"range":{"start_line":134,"start_character":12,"end_line":134,"end_character":66},"updated":"2019-11-28 08:02:12.000000000","message":"There might be several reasons besides file existence, why we cannot remove file_path:\n\n- it might be directory\n- file might be in use (locked)\n- there are insufficient permissions to do so\n- and more :)\n\nSo, the warning is not accurate. You can check the corresponding number and/or errno for exact reason.\n\nFinally, please use os.error instead OSError for compatibility with python3.","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        try:"},{"line_number":132,"context_line":"            os.remove(file_path)"},{"line_number":133,"context_line":"        except OSError:"},{"line_number":134,"context_line":"            LOG.warning(\"Pci file: %s doesn\u0027t exists!\", file_path)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _set_vif(self, vif):"},{"line_number":137,"context_line":"        # TODO(ivc): extract annotation interactions"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_03cd7a2f","line":134,"range":{"start_line":134,"start_character":12,"end_line":134,"end_character":66},"in_reply_to":"3fa7e38b_9c9b1963","updated":"2019-11-29 10:54:27.000000000","message":"fixed everything\nadded some different exceptions\nbtw, as I know OSError is compatible with python3 (https://docs.python.org/3/library/os.html). \"exception os.error -\u003e An alias for the built-in OSError exception.\n\"","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"de562a322d033136c6d90d0aedecc5ad6cc8e7ee","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _set_vif(self, vif):"},{"line_number":137,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":138,"context_line":"        state, labels \u003d self._get_pod_state(vif.port_profile.selflink)"},{"line_number":139,"context_line":"        for ifname, vif_ex in state.vifs.items():"},{"line_number":140,"context_line":"            if vif.id !\u003d vif_ex.id:"},{"line_number":141,"context_line":"                continue"},{"line_number":142,"context_line":"            state.vifs[ifname] \u003d vif"},{"line_number":143,"context_line":"        resource_version \u003d vif.port_profile.resourceversion"},{"line_number":144,"context_line":"        self._set_pod_state(state, vif.port_profile.selflink, labels,"},{"line_number":145,"context_line":"                            resource_version)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_48d2145e","line":142,"range":{"start_line":139,"start_character":0,"end_line":142,"end_character":36},"updated":"2019-11-21 17:37:59.000000000","message":"Shoudn\u0027t we break when vif is found? Doesn\u0027t really matter too much as I don\u0027t think we\u0027ll have hundreds of VIFs.","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _set_vif(self, vif):"},{"line_number":137,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":138,"context_line":"        state, labels \u003d self._get_pod_state(vif.port_profile.selflink)"},{"line_number":139,"context_line":"        for ifname, vif_ex in state.vifs.items():"},{"line_number":140,"context_line":"            if vif.id !\u003d vif_ex.id:"},{"line_number":141,"context_line":"                continue"},{"line_number":142,"context_line":"            state.vifs[ifname] \u003d vif"},{"line_number":143,"context_line":"        resource_version \u003d vif.port_profile.resourceversion"},{"line_number":144,"context_line":"        self._set_pod_state(state, vif.port_profile.selflink, labels,"},{"line_number":145,"context_line":"                            resource_version)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_055029d5","line":142,"range":{"start_line":139,"start_character":0,"end_line":142,"end_character":36},"in_reply_to":"3fa7e38b_3cc1c530","updated":"2019-11-29 10:54:27.000000000","message":"thank you\nI\u0027ve fixed","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _set_vif(self, vif):"},{"line_number":137,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":138,"context_line":"        state, labels \u003d self._get_pod_state(vif.port_profile.selflink)"},{"line_number":139,"context_line":"        for ifname, vif_ex in state.vifs.items():"},{"line_number":140,"context_line":"            if vif.id !\u003d vif_ex.id:"},{"line_number":141,"context_line":"                continue"},{"line_number":142,"context_line":"            state.vifs[ifname] \u003d vif"},{"line_number":143,"context_line":"        resource_version \u003d vif.port_profile.resourceversion"},{"line_number":144,"context_line":"        self._set_pod_state(state, vif.port_profile.selflink, labels,"},{"line_number":145,"context_line":"                            resource_version)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_3cc1c530","line":142,"range":{"start_line":139,"start_character":0,"end_line":142,"end_character":36},"in_reply_to":"3fa7e38b_48d2145e","updated":"2019-11-28 08:02:12.000000000","message":"I second for early loop leave :)","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _set_vif(self, vif):"},{"line_number":137,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":138,"context_line":"        state, labels \u003d self._get_pod_state(vif.port_profile.selflink)"},{"line_number":139,"context_line":"        for ifname, vif_ex in state.vifs.items():"},{"line_number":140,"context_line":"            if vif.id !\u003d vif_ex.id:"},{"line_number":141,"context_line":"                continue"},{"line_number":142,"context_line":"            state.vifs[ifname] \u003d vif"},{"line_number":143,"context_line":"        resource_version \u003d vif.port_profile.resourceversion"},{"line_number":144,"context_line":"        self._set_pod_state(state, vif.port_profile.selflink, labels,"},{"line_number":145,"context_line":"                            resource_version)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_45462125","line":142,"range":{"start_line":139,"start_character":0,"end_line":142,"end_character":36},"in_reply_to":"3fa7e38b_48d2145e","updated":"2019-11-29 10:54:27.000000000","message":"agree, thanks","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            state_annotation \u003d jsonutils.loads(annotations)"},{"line_number":155,"context_line":"        except KeyError:"},{"line_number":156,"context_line":"            LOG.error(\"No annotations %s\", constants.K8S_ANNOTATION_VIF)"},{"line_number":157,"context_line":"        except Exception:"},{"line_number":158,"context_line":"            LOG.exception(\"Unable to get pod state from annotations\")"},{"line_number":159,"context_line":"            raise"},{"line_number":160,"context_line":"        state \u003d utils.extract_pod_annotation(state_annotation)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_3c722514","line":157,"range":{"start_line":157,"start_character":15,"end_line":157,"end_character":24},"updated":"2019-11-28 08:02:12.000000000","message":"Can we narrow down the exception thrown here? What besides ValueError from json decoding can be raised here?","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            state_annotation \u003d jsonutils.loads(annotations)"},{"line_number":155,"context_line":"        except KeyError:"},{"line_number":156,"context_line":"            LOG.error(\"No annotations %s\", constants.K8S_ANNOTATION_VIF)"},{"line_number":157,"context_line":"        except Exception:"},{"line_number":158,"context_line":"            LOG.exception(\"Unable to get pod state from annotations\")"},{"line_number":159,"context_line":"            raise"},{"line_number":160,"context_line":"        state \u003d utils.extract_pod_annotation(state_annotation)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_e3d37ed2","line":157,"range":{"start_line":157,"start_character":15,"end_line":157,"end_character":24},"in_reply_to":"3fa7e38b_3c722514","updated":"2019-11-29 10:54:27.000000000","message":"agree\nthanks a lot","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0869386d780e63793dfe6a27b47cc1b777ac0cc5","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        except Exception:"},{"line_number":158,"context_line":"            LOG.exception(\"Unable to get pod state from annotations\")"},{"line_number":159,"context_line":"            raise"},{"line_number":160,"context_line":"        state \u003d utils.extract_pod_annotation(state_annotation)"},{"line_number":161,"context_line":"        LOG.info(\"Got VIFs from annotation: %s\", state.vifs)"},{"line_number":162,"context_line":"        return state, labels"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_1c63a943","line":160,"range":{"start_line":160,"start_character":8,"end_line":160,"end_character":62},"updated":"2019-11-28 08:02:12.000000000","message":"In case of no annotations found (KeyError exception), this will end up on NameError exception.","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        except Exception:"},{"line_number":158,"context_line":"            LOG.exception(\"Unable to get pod state from annotations\")"},{"line_number":159,"context_line":"            raise"},{"line_number":160,"context_line":"        state \u003d utils.extract_pod_annotation(state_annotation)"},{"line_number":161,"context_line":"        LOG.info(\"Got VIFs from annotation: %s\", state.vifs)"},{"line_number":162,"context_line":"        return state, labels"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_4e4dd997","line":160,"range":{"start_line":160,"start_character":8,"end_line":160,"end_character":62},"in_reply_to":"3fa7e38b_1c63a943","updated":"2019-11-29 10:54:27.000000000","message":"Done","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e4823ca924c5981c43095d96ec7659184acfb2be","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # TODO(garyloug): check the type (virtio)"},{"line_number":85,"context_line":"        dev \u003d os.path.basename(os.readlink(NET_DEV_PATH.format(ifname)))"},{"line_number":86,"context_line":"        pci_link \u003d os.readlink(VIRTIO_DEVS_PATH + \"/\" + dev)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        pci_addr \u003d os.path.basename(os.path.dirname(pci_link))"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_7438f439","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":60},"updated":"2019-12-12 12:57:32.000000000","message":"Now that hit me :) it\u0027s a path, right? Why not use os.path.join instead of joining strings/using format function?\n\n  pci_link \u003d os.readlink(os.path.join(VIRTIO_DEVS_PATH, dev))","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e48034530901186c5f6e31979ee0abddd2e190f2","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # TODO(garyloug): check the type (virtio)"},{"line_number":85,"context_line":"        dev \u003d os.path.basename(os.readlink(NET_DEV_PATH.format(ifname)))"},{"line_number":86,"context_line":"        pci_link \u003d os.readlink(VIRTIO_DEVS_PATH + \"/\" + dev)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        pci_addr \u003d os.path.basename(os.path.dirname(pci_link))"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_acde150d","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":60},"in_reply_to":"3fa7e38b_7438f439","updated":"2019-12-13 11:37:18.000000000","message":"thanks Roman\nI agree\nfixed everything","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e4823ca924c5981c43095d96ec7659184acfb2be","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return pci_driver, pci_addr"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _change_driver_binding(self, pci, driver):"},{"line_number":96,"context_line":"        old_driver_path \u003d \u0027{}/{}/driver\u0027.format(PCI_PATH, pci)"},{"line_number":97,"context_line":"        old_driver_link \u003d os.readlink(old_driver_path)"},{"line_number":98,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_d41208b4","line":96,"range":{"start_line":96,"start_character":8,"end_line":96,"end_character":62},"updated":"2019-12-12 12:57:32.000000000","message":"Here it will be even better example of usage for os.path.join:\n\n  old_driver_path \u003d os.path.join(PCI_PATH, pci, \u0027driver\u0027)","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e48034530901186c5f6e31979ee0abddd2e190f2","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return pci_driver, pci_addr"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _change_driver_binding(self, pci, driver):"},{"line_number":96,"context_line":"        old_driver_path \u003d \u0027{}/{}/driver\u0027.format(PCI_PATH, pci)"},{"line_number":97,"context_line":"        old_driver_link \u003d os.readlink(old_driver_path)"},{"line_number":98,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_cc4271ac","line":96,"range":{"start_line":96,"start_character":8,"end_line":96,"end_character":62},"in_reply_to":"3fa7e38b_d41208b4","updated":"2019-12-13 11:37:18.000000000","message":"I agree\ndone","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e4823ca924c5981c43095d96ec7659184acfb2be","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        LOG.info(\"Device %s was binded on driver %s. Old driver is %s\", pci,"},{"line_number":117,"context_line":"                 driver, old_driver)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _set_pci_file(self, pci_addr, container_id, ifname):"},{"line_number":120,"context_line":"        # NOTE(danil): writing used pci addresses is necessary to know what"},{"line_number":121,"context_line":"        # device to use by dpdk applications inside containers"},{"line_number":122,"context_line":"        if not os.path.exists(CONF.nested_dpdk.pci_mount_point):"}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_b4e74cab","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":21},"updated":"2019-12-12 12:57:32.000000000","message":"_create_pci_file? Since all this method does, is:\n\n- create mount point directory, if doesn\u0027t exists\n- assemble filename\n- write provided pic_addr to it\n\nI guess, that method is even more important, than `_remove_pic_file`, since if there would be an exception (like we are unable to create mount dir or open/write to pci file for some reason) than driver will crash.\n\nI\u0027d suggest to wrap file operations with try:except clause, or even entire method.","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e48034530901186c5f6e31979ee0abddd2e190f2","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        LOG.info(\"Device %s was binded on driver %s. Old driver is %s\", pci,"},{"line_number":117,"context_line":"                 driver, old_driver)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _set_pci_file(self, pci_addr, container_id, ifname):"},{"line_number":120,"context_line":"        # NOTE(danil): writing used pci addresses is necessary to know what"},{"line_number":121,"context_line":"        # device to use by dpdk applications inside containers"},{"line_number":122,"context_line":"        if not os.path.exists(CONF.nested_dpdk.pci_mount_point):"}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_cc535139","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":21},"in_reply_to":"3fa7e38b_b4e74cab","updated":"2019-12-13 11:37:18.000000000","message":"Agree with name changing.\nAdded try:except clause for file operations","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e4823ca924c5981c43095d96ec7659184acfb2be","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def _set_pci_file(self, pci_addr, container_id, ifname):"},{"line_number":120,"context_line":"        # NOTE(danil): writing used pci addresses is necessary to know what"},{"line_number":121,"context_line":"        # device to use by dpdk applications inside containers"},{"line_number":122,"context_line":"        if not os.path.exists(CONF.nested_dpdk.pci_mount_point):"},{"line_number":123,"context_line":"            os.mkdir(CONF.nested_dpdk.pci_mount_point)"},{"line_number":124,"context_line":"        file_path \u003d \u0027{}-{}\u0027.format(os.path.join("},{"line_number":125,"context_line":"            CONF.nested_dpdk.pci_mount_point,"},{"line_number":126,"context_line":"            container_id), ifname)"}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_1402e00c","line":123,"range":{"start_line":122,"start_character":0,"end_line":123,"end_character":54},"updated":"2019-12-12 12:57:32.000000000","message":"simple as:\n\n    os.makedirs(CONF.nested_dpdk.pci_mount_point, exists_ok\u003dTrue)","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e48034530901186c5f6e31979ee0abddd2e190f2","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def _set_pci_file(self, pci_addr, container_id, ifname):"},{"line_number":120,"context_line":"        # NOTE(danil): writing used pci addresses is necessary to know what"},{"line_number":121,"context_line":"        # device to use by dpdk applications inside containers"},{"line_number":122,"context_line":"        if not os.path.exists(CONF.nested_dpdk.pci_mount_point):"},{"line_number":123,"context_line":"            os.mkdir(CONF.nested_dpdk.pci_mount_point)"},{"line_number":124,"context_line":"        file_path \u003d \u0027{}-{}\u0027.format(os.path.join("},{"line_number":125,"context_line":"            CONF.nested_dpdk.pci_mount_point,"},{"line_number":126,"context_line":"            container_id), ifname)"}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_0c5e4944","line":123,"range":{"start_line":122,"start_character":0,"end_line":123,"end_character":54},"in_reply_to":"3fa7e38b_1402e00c","updated":"2019-12-13 11:37:18.000000000","message":"Done","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e4823ca924c5981c43095d96ec7659184acfb2be","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # device to use by dpdk applications inside containers"},{"line_number":122,"context_line":"        if not os.path.exists(CONF.nested_dpdk.pci_mount_point):"},{"line_number":123,"context_line":"            os.mkdir(CONF.nested_dpdk.pci_mount_point)"},{"line_number":124,"context_line":"        file_path \u003d \u0027{}-{}\u0027.format(os.path.join("},{"line_number":125,"context_line":"            CONF.nested_dpdk.pci_mount_point,"},{"line_number":126,"context_line":"            container_id), ifname)"},{"line_number":127,"context_line":"        with open(file_path, \u0027w\u0027) as fd:"},{"line_number":128,"context_line":"            fd.write(pci_addr)"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_94e490a9","line":126,"range":{"start_line":124,"start_character":8,"end_line":126,"end_character":34},"updated":"2019-12-12 12:57:32.000000000","message":"and here:\n\n        file_path \u003d os.path.join(CONF.nested_dpdk.pci_mount_point,\n                                 container_id + \u0027-\u0027 + ifname)","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e48034530901186c5f6e31979ee0abddd2e190f2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # device to use by dpdk applications inside containers"},{"line_number":122,"context_line":"        if not os.path.exists(CONF.nested_dpdk.pci_mount_point):"},{"line_number":123,"context_line":"            os.mkdir(CONF.nested_dpdk.pci_mount_point)"},{"line_number":124,"context_line":"        file_path \u003d \u0027{}-{}\u0027.format(os.path.join("},{"line_number":125,"context_line":"            CONF.nested_dpdk.pci_mount_point,"},{"line_number":126,"context_line":"            container_id), ifname)"},{"line_number":127,"context_line":"        with open(file_path, \u0027w\u0027) as fd:"},{"line_number":128,"context_line":"            fd.write(pci_addr)"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_e786665f","line":126,"range":{"start_line":124,"start_character":8,"end_line":126,"end_character":34},"in_reply_to":"3fa7e38b_94e490a9","updated":"2019-12-13 11:37:18.000000000","message":"Done","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e4823ca924c5981c43095d96ec7659184acfb2be","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                                      ifname)"},{"line_number":134,"context_line":"        try:"},{"line_number":135,"context_line":"            os.remove(file_path)"},{"line_number":136,"context_line":"        except IsADirectoryError:"},{"line_number":137,"context_line":"            LOG.warning(\"File %s is a directory. Could not be deleted\","},{"line_number":138,"context_line":"                        file_path)"},{"line_number":139,"context_line":"        except FileNotFoundError:"},{"line_number":140,"context_line":"            LOG.warning(\"Pci file: %s doesn\u0027t exists!\", file_path)"},{"line_number":141,"context_line":"        except OSError:"},{"line_number":142,"context_line":"            LOG.warning(\"File: %s could not be deleted\", file_path)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _set_vif(self, vif):"},{"line_number":145,"context_line":"        # TODO(ivc): extract annotation interactions"}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_2f2b097c","line":142,"range":{"start_line":136,"start_character":0,"end_line":142,"end_character":67},"updated":"2019-12-12 12:57:32.000000000","message":"I\u0027m okay for catching only one, general exception here. What\u0027s more important, I\u0027d like to have a clear information why we cannot remove the file (especially, that it\u0027s probably us, who created it).\n\nAnd because we are not re-raise this exception, it might be better to do just his:\n\n\n        try:\n            os.remove(file_path)\n        except OSError as err:\n            LOG.warning(\u0027Cannot remove file %s. Error message: (%d) %s\u0027,\n                        file_path, err.errno, err.strerror)","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e48034530901186c5f6e31979ee0abddd2e190f2","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                                      ifname)"},{"line_number":134,"context_line":"        try:"},{"line_number":135,"context_line":"            os.remove(file_path)"},{"line_number":136,"context_line":"        except IsADirectoryError:"},{"line_number":137,"context_line":"            LOG.warning(\"File %s is a directory. Could not be deleted\","},{"line_number":138,"context_line":"                        file_path)"},{"line_number":139,"context_line":"        except FileNotFoundError:"},{"line_number":140,"context_line":"            LOG.warning(\"Pci file: %s doesn\u0027t exists!\", file_path)"},{"line_number":141,"context_line":"        except OSError:"},{"line_number":142,"context_line":"            LOG.warning(\"File: %s could not be deleted\", file_path)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _set_vif(self, vif):"},{"line_number":145,"context_line":"        # TODO(ivc): extract annotation interactions"}],"source_content_type":"text/x-python","patch_set":40,"id":"3fa7e38b_e762e6a6","line":142,"range":{"start_line":136,"start_character":0,"end_line":142,"end_character":67},"in_reply_to":"3fa7e38b_2f2b097c","updated":"2019-12-13 11:37:18.000000000","message":"yes, I agree\nIt would be more informative","commit_id":"e83df9727abe7f5eb3c09e3b5dc92d9e848f0048"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b71fc2960bb2cb61e92b9aacba499b30c9f6eadd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        old_driver_link \u003d os.readlink(old_driver_path)"},{"line_number":97,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        unbind_path \u003d \u0027{}/{}/unbind\u0027.format(PCI_DRVS_PATH, old_driver)"},{"line_number":100,"context_line":"        bind_path \u003d \u0027{}/{}/bind\u0027.format(PCI_DRVS_PATH, driver)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_b9fe3902","line":99,"range":{"start_line":99,"start_character":22,"end_line":99,"end_character":36},"updated":"2019-12-16 12:00:03.000000000","message":"os.path.join?","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c28955a7a2948abea0586491cbbc414eea8f032f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        old_driver_link \u003d os.readlink(old_driver_path)"},{"line_number":97,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        unbind_path \u003d \u0027{}/{}/unbind\u0027.format(PCI_DRVS_PATH, old_driver)"},{"line_number":100,"context_line":"        bind_path \u003d \u0027{}/{}/bind\u0027.format(PCI_DRVS_PATH, driver)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_5c54d3c6","line":99,"range":{"start_line":99,"start_character":22,"end_line":99,"end_character":36},"in_reply_to":"3fa7e38b_b9fe3902","updated":"2019-12-16 13:02:58.000000000","message":"Done","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b71fc2960bb2cb61e92b9aacba499b30c9f6eadd","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        unbind_path \u003d \u0027{}/{}/unbind\u0027.format(PCI_DRVS_PATH, old_driver)"},{"line_number":100,"context_line":"        bind_path \u003d \u0027{}/{}/bind\u0027.format(PCI_DRVS_PATH, driver)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"},{"line_number":103,"context_line":"            unbind_fd.write(pci)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_5903850d","line":100,"range":{"start_line":100,"start_character":20,"end_line":100,"end_character":32},"updated":"2019-12-16 12:00:03.000000000","message":"ditto","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c28955a7a2948abea0586491cbbc414eea8f032f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        old_driver \u003d os.path.basename(old_driver_link)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        unbind_path \u003d \u0027{}/{}/unbind\u0027.format(PCI_DRVS_PATH, old_driver)"},{"line_number":100,"context_line":"        bind_path \u003d \u0027{}/{}/bind\u0027.format(PCI_DRVS_PATH, driver)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"},{"line_number":103,"context_line":"            unbind_fd.write(pci)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_7c598ffb","line":100,"range":{"start_line":100,"start_character":20,"end_line":100,"end_character":32},"in_reply_to":"3fa7e38b_5903850d","updated":"2019-12-16 13:02:58.000000000","message":"Done","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b71fc2960bb2cb61e92b9aacba499b30c9f6eadd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"},{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        override \u003d \"{}/{}/driver_override\".format(PCI_PATH, pci)"},{"line_number":106,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":107,"context_line":"            override_fd.write(\"\\00\")"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_7908c126","line":105,"range":{"start_line":105,"start_character":19,"end_line":105,"end_character":42},"updated":"2019-12-16 12:00:03.000000000","message":"ditto","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c28955a7a2948abea0586491cbbc414eea8f032f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with open(unbind_path, \u0027w\u0027) as unbind_fd:"},{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        override \u003d \"{}/{}/driver_override\".format(PCI_PATH, pci)"},{"line_number":106,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":107,"context_line":"            override_fd.write(\"\\00\")"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_1c6e5b97","line":105,"range":{"start_line":105,"start_character":19,"end_line":105,"end_character":42},"in_reply_to":"3fa7e38b_7908c126","updated":"2019-12-16 13:02:58.000000000","message":"Done","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b71fc2960bb2cb61e92b9aacba499b30c9f6eadd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        override \u003d \"{}/{}/driver_override\".format(PCI_PATH, pci)"},{"line_number":106,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":107,"context_line":"            override_fd.write(\"\\00\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":110,"context_line":"            override_fd.write(driver)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        with open(bind_path, \u0027w\u0027) as bind_fd:"},{"line_number":113,"context_line":"            bind_fd.write(pci)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_7921a19e","line":110,"range":{"start_line":106,"start_character":0,"end_line":110,"end_character":37},"updated":"2019-12-16 12:00:03.000000000","message":"Could you explain, why you overwrite file contents with null, and right after that overwrite it again with driver contents?","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"e5abfef9fb1343a4f457eab6977789784ac1eed3","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        override \u003d \"{}/{}/driver_override\".format(PCI_PATH, pci)"},{"line_number":106,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":107,"context_line":"            override_fd.write(\"\\00\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":110,"context_line":"            override_fd.write(driver)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        with open(bind_path, \u0027w\u0027) as bind_fd:"},{"line_number":113,"context_line":"            bind_fd.write(pci)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_6ea9c7dc","line":110,"range":{"start_line":106,"start_character":0,"end_line":110,"end_character":37},"in_reply_to":"3fa7e38b_0b4da570","updated":"2019-12-17 09:12:36.000000000","message":"Sure, thanks\nI will add it","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c28955a7a2948abea0586491cbbc414eea8f032f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        override \u003d \"{}/{}/driver_override\".format(PCI_PATH, pci)"},{"line_number":106,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":107,"context_line":"            override_fd.write(\"\\00\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":110,"context_line":"            override_fd.write(driver)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        with open(bind_path, \u0027w\u0027) as bind_fd:"},{"line_number":113,"context_line":"            bind_fd.write(pci)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_9c280b37","line":110,"range":{"start_line":106,"start_character":0,"end_line":110,"end_character":37},"in_reply_to":"3fa7e38b_7921a19e","updated":"2019-12-16 13:02:58.000000000","message":"Yes, it is a copy from dpdk-devbind.py script by DPDK.\nThe problem is that this special expects that value will be set to null before setting to other value.\nOtherwise we will get \"device is busy\" error","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"3cb89e037ba0262b83c784442abb965090fad516","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            unbind_fd.write(pci)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        override \u003d \"{}/{}/driver_override\".format(PCI_PATH, pci)"},{"line_number":106,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":107,"context_line":"            override_fd.write(\"\\00\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        with open(override, \u0027w\u0027) as override_fd:"},{"line_number":110,"context_line":"            override_fd.write(driver)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        with open(bind_path, \u0027w\u0027) as bind_fd:"},{"line_number":113,"context_line":"            bind_fd.write(pci)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_0b4da570","line":110,"range":{"start_line":106,"start_character":0,"end_line":110,"end_character":37},"in_reply_to":"3fa7e38b_9c280b37","updated":"2019-12-17 07:31:13.000000000","message":"Than, I guess, it deserves a comment :)","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b71fc2960bb2cb61e92b9aacba499b30c9f6eadd","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                     container_id + \u0027-\u0027 + ifname)"},{"line_number":125,"context_line":"            with open(file_path, \u0027w\u0027) as fd:"},{"line_number":126,"context_line":"                fd.write(pci_addr)"},{"line_number":127,"context_line":"        except OSError:"},{"line_number":128,"context_line":"            LOG.exception(\"File for pci device %s colud not be created\","},{"line_number":129,"context_line":"                          pci_addr)"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_393329fa","line":127,"range":{"start_line":127,"start_character":8,"end_line":127,"end_character":23},"updated":"2019-12-16 12:00:03.000000000","message":"Could you please log also errno and error message, just like in _remove_pci_file method?","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c28955a7a2948abea0586491cbbc414eea8f032f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                     container_id + \u0027-\u0027 + ifname)"},{"line_number":125,"context_line":"            with open(file_path, \u0027w\u0027) as fd:"},{"line_number":126,"context_line":"                fd.write(pci_addr)"},{"line_number":127,"context_line":"        except OSError:"},{"line_number":128,"context_line":"            LOG.exception(\"File for pci device %s colud not be created\","},{"line_number":129,"context_line":"                          pci_addr)"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_9cb6cbfc","line":127,"range":{"start_line":127,"start_character":8,"end_line":127,"end_character":23},"in_reply_to":"3fa7e38b_393329fa","updated":"2019-12-16 13:02:58.000000000","message":"Done","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b71fc2960bb2cb61e92b9aacba499b30c9f6eadd","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                          pci_addr)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _remove_pci_file(self, container_id, ifname):"},{"line_number":132,"context_line":"        file_path \u003d \u0027{}/{}-{}\u0027.format(CONF.nested_dpdk.pci_mount_point,"},{"line_number":133,"context_line":"                                      container_id,"},{"line_number":134,"context_line":"                                      ifname)"},{"line_number":135,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_b94cf975","line":132,"range":{"start_line":132,"start_character":20,"end_line":132,"end_character":30},"updated":"2019-12-16 12:00:03.000000000","message":"os.path.join","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c28955a7a2948abea0586491cbbc414eea8f032f","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                          pci_addr)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _remove_pci_file(self, container_id, ifname):"},{"line_number":132,"context_line":"        file_path \u003d \u0027{}/{}-{}\u0027.format(CONF.nested_dpdk.pci_mount_point,"},{"line_number":133,"context_line":"                                      container_id,"},{"line_number":134,"context_line":"                                      ifname)"},{"line_number":135,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_dc1523e8","line":132,"range":{"start_line":132,"start_character":20,"end_line":132,"end_character":30},"in_reply_to":"3fa7e38b_b94cf975","updated":"2019-12-16 13:02:58.000000000","message":"Done","commit_id":"ef1cbe66481b769a830313b00b16026db7846845"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2018 Intel Corporation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_0f9d3f08","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2020-01-02 09:31:59.000000000","message":"2020! :)","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b1cf5a117f8be18e952fce613c40b4dbd02e91fe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2018 Intel Corporation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_54da9878","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"3fa7e38b_0f9d3f08","updated":"2020-01-09 13:56:12.000000000","message":"Done","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"2ba658f6ec5809738fea8fcfb77a9371dd6f0dca","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self._set_pod_state(state, vif.port_profile.selflink, labels,"},{"line_number":153,"context_line":"                            resource_version)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _get_pod_state(self, selflink):"},{"line_number":156,"context_line":"        k8s \u003d clients.get_kubernetes_client()"},{"line_number":157,"context_line":"        pod \u003d k8s.get(selflink)"},{"line_number":158,"context_line":"        annotations \u003d pod[\u0027metadata\u0027][\u0027annotations\u0027]"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_aeb83812","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":22},"updated":"2020-01-13 11:06:11.000000000","message":"method name is a bit misleading, it is returning both the state (from annotations) as well as the labels","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b199be14d8b19af85c8e2427e745a548eb7bd1c8","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self._set_pod_state(state, vif.port_profile.selflink, labels,"},{"line_number":153,"context_line":"                            resource_version)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _get_pod_state(self, selflink):"},{"line_number":156,"context_line":"        k8s \u003d clients.get_kubernetes_client()"},{"line_number":157,"context_line":"        pod \u003d k8s.get(selflink)"},{"line_number":158,"context_line":"        annotations \u003d pod[\u0027metadata\u0027][\u0027annotations\u0027]"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_e1f161e1","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":22},"in_reply_to":"3fa7e38b_aeb83812","updated":"2020-01-13 13:26:31.000000000","message":"you are right , thanks\nDone","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"2ba658f6ec5809738fea8fcfb77a9371dd6f0dca","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        LOG.info(\"Got VIFs from annotation: %s\", state.vifs)"},{"line_number":171,"context_line":"        return state, labels"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _set_pod_state(self, state, selflink, labels, resource_version):"},{"line_number":174,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":175,"context_line":"        if not state:"},{"line_number":176,"context_line":"            LOG.info(\"Removing VIFs annotation: %r\", state)"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_ee439011","line":173,"range":{"start_line":173,"start_character":7,"end_line":173,"end_character":22},"updated":"2020-01-13 11:06:11.000000000","message":"and labels, right?","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b199be14d8b19af85c8e2427e745a548eb7bd1c8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        LOG.info(\"Got VIFs from annotation: %s\", state.vifs)"},{"line_number":171,"context_line":"        return state, labels"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _set_pod_state(self, state, selflink, labels, resource_version):"},{"line_number":174,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":175,"context_line":"        if not state:"},{"line_number":176,"context_line":"            LOG.info(\"Removing VIFs annotation: %r\", state)"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_01efddfa","line":173,"range":{"start_line":173,"start_character":7,"end_line":173,"end_character":22},"in_reply_to":"3fa7e38b_ee439011","updated":"2020-01-13 13:26:31.000000000","message":"Done","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"2ba658f6ec5809738fea8fcfb77a9371dd6f0dca","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        return state, labels"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _set_pod_state(self, state, selflink, labels, resource_version):"},{"line_number":174,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":175,"context_line":"        if not state:"},{"line_number":176,"context_line":"            LOG.info(\"Removing VIFs annotation: %r\", state)"},{"line_number":177,"context_line":"            annotation \u003d None"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_4e3f4486","line":174,"range":{"start_line":174,"start_character":7,"end_line":174,"end_character":52},"updated":"2020-01-13 11:06:11.000000000","message":"??","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b199be14d8b19af85c8e2427e745a548eb7bd1c8","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        return state, labels"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _set_pod_state(self, state, selflink, labels, resource_version):"},{"line_number":174,"context_line":"        # TODO(ivc): extract annotation interactions"},{"line_number":175,"context_line":"        if not state:"},{"line_number":176,"context_line":"            LOG.info(\"Removing VIFs annotation: %r\", state)"},{"line_number":177,"context_line":"            annotation \u003d None"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_2108d9d6","line":174,"range":{"start_line":174,"start_character":7,"end_line":174,"end_character":52},"in_reply_to":"3fa7e38b_4e3f4486","updated":"2020-01-13 13:26:31.000000000","message":"hm, I do not know how this occurs here)","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"24d549a1618b7658e121f145177c3488bee5ee8a","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            if vif.id \u003d\u003d vif_ex.id:"},{"line_number":150,"context_line":"                state.vifs[ifname] \u003d vif"},{"line_number":151,"context_line":"                break"},{"line_number":152,"context_line":"        resource_version \u003d vif.port_profile.resourceversion"},{"line_number":153,"context_line":"        self._set_pod_state_and_labels(state, vif.port_profile.selflink,"},{"line_number":154,"context_line":"                                       labels, resource_version)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_d17a7374","line":152,"range":{"start_line":152,"start_character":0,"end_line":152,"end_character":59},"updated":"2020-01-21 16:00:00.000000000","message":"This seems reaaaaly odd here. Like why won\u0027t you use the version from _get_pod_state_and_labels? What\u0027s the purpose of this field? It\u0027s almost guaranteed to be outdated, isn\u0027t it?","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b3a174d77dbcb9a6dad98ac8f470375600a340b6","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            if vif.id \u003d\u003d vif_ex.id:"},{"line_number":150,"context_line":"                state.vifs[ifname] \u003d vif"},{"line_number":151,"context_line":"                break"},{"line_number":152,"context_line":"        resource_version \u003d vif.port_profile.resourceversion"},{"line_number":153,"context_line":"        self._set_pod_state_and_labels(state, vif.port_profile.selflink,"},{"line_number":154,"context_line":"                                       labels, resource_version)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_d9a6dc0d","line":152,"range":{"start_line":152,"start_character":0,"end_line":152,"end_character":59},"in_reply_to":"3fa7e38b_d17a7374","updated":"2020-01-28 11:45:10.000000000","message":"I agree, thanks","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"}],"kuryr_kubernetes/controller/drivers/nested_dpdk_vif.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def request_vifs(self, pod, project_id, subnets, security_groups,"},{"line_number":40,"context_line":"                     num_ports):"},{"line_number":41,"context_line":"        # TODO(garyloug): provide an implementation"},{"line_number":42,"context_line":"        raise NotImplementedError()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def release_vif(self, pod, vif, project_id\u003dNone, security_groups\u003dNone):"},{"line_number":45,"context_line":"        neutron \u003d clients.get_neutron_client()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_33d7bdc3","line":42,"range":{"start_line":39,"start_character":0,"end_line":42,"end_character":35},"updated":"2019-11-07 08:14:19.000000000","message":"This will fail with pool driver. I\u0027m fine if that configuration doesn\u0027t make sense, but I\u0027m not sure.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"735d519cdf08b274ab8dbbfe00f9518755da7fbd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def request_vifs(self, pod, project_id, subnets, security_groups,"},{"line_number":40,"context_line":"                     num_ports):"},{"line_number":41,"context_line":"        # TODO(garyloug): provide an implementation"},{"line_number":42,"context_line":"        raise NotImplementedError()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def release_vif(self, pod, vif, project_id\u003dNone, security_groups\u003dNone):"},{"line_number":45,"context_line":"        neutron \u003d clients.get_neutron_client()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_c66f37f8","line":42,"range":{"start_line":39,"start_character":0,"end_line":42,"end_character":35},"in_reply_to":"3fa7e38b_0d6a67ec","updated":"2019-11-14 13:27:32.000000000","message":"Hm… Host is one of the pool keys, so that could work, but does it even have any sense? I guess for virtio devices we can assume pools should be disabled? Not sure here.\n\nIf we\u0027ll go with that assumption we should probably detect a configuration enabling pools on NestedDpdkPodVIFDriver on kuryr-controller startup.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"0b09389b19265be95c5813254cbb88af997e81e0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def request_vifs(self, pod, project_id, subnets, security_groups,"},{"line_number":40,"context_line":"                     num_ports):"},{"line_number":41,"context_line":"        # TODO(garyloug): provide an implementation"},{"line_number":42,"context_line":"        raise NotImplementedError()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def release_vif(self, pod, vif, project_id\u003dNone, security_groups\u003dNone):"},{"line_number":45,"context_line":"        neutron \u003d clients.get_neutron_client()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_0d6a67ec","line":42,"range":{"start_line":39,"start_character":0,"end_line":42,"end_character":35},"in_reply_to":"3fa7e38b_33d7bdc3","updated":"2019-11-13 10:47:06.000000000","message":"yes, I see\nso I have a question, how would we like it to be?\nI have only one choice:\nwhen request_vifs is called, we should create a pool of ports and related VIFs, but what about virtio devices that are created in nova instance for related ports (like here in line 76) ? should we create the same bunch of virtio devices on this nova instance too?","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"9cf9d9a157977f5974a89cfff7f6b7c311166ea7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def request_vifs(self, pod, project_id, subnets, security_groups,"},{"line_number":40,"context_line":"                     num_ports):"},{"line_number":41,"context_line":"        # TODO(garyloug): provide an implementation"},{"line_number":42,"context_line":"        raise NotImplementedError()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def release_vif(self, pod, vif, project_id\u003dNone, security_groups\u003dNone):"},{"line_number":45,"context_line":"        neutron \u003d clients.get_neutron_client()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa7e38b_fc5a5f1c","line":42,"range":{"start_line":39,"start_character":0,"end_line":42,"end_character":35},"in_reply_to":"3fa7e38b_c66f37f8","updated":"2019-12-16 12:39:43.000000000","message":"I checked one more time and figured out that this driver can not be initialized because of check in kuryr_kubernetes/utils.py\nThere is a VALID_MULTI_POD_POOLS_OPTS that contains allowed mapping between vif driver and pool driver.\nSo there will be an exception in if we try to use nested-dpdk with pools \"def check_suitable_multi_pool_driver_opt\"","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"82799dfd81755e4c922b534da88782707e711e5e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        LOG.debug(\"release_vif for vm_id %s %s\", vm_id, vif.id)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            # TODO(garyloug): check which exceptions can be raised by sdk"},{"line_number":53,"context_line":"            sdk.compute.delete_server_interface(vif.id, server\u003dvm_id)"},{"line_number":54,"context_line":"        except o_exc.ResourceFailure:"},{"line_number":55,"context_line":"            LOG.warning(\"Unable to delete interface %s for server %s.\","},{"line_number":56,"context_line":"                        vif.id, vm_id)"},{"line_number":57,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":27,"id":"3fa7e38b_bfd1d2ce","line":54,"range":{"start_line":52,"start_character":0,"end_line":54,"end_character":37},"updated":"2019-11-15 07:34:45.000000000","message":"Most of the time, deleting non existing resources are silent in openstacksdk (at least it\u0027s what I\u0027ve observed). You probably can get o_exc.SDKException at most, if there is some issues with connectivity/OS api access/whatever. In your case it might be different though.","commit_id":"6149e83589212b71c0a4d7672ad90ace22b38976"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"47eaaa7c3d33f52c5c46dcb98bb56af2d9c18ad6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        LOG.debug(\"release_vif for vm_id %s %s\", vm_id, vif.id)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            # TODO(garyloug): check which exceptions can be raised by sdk"},{"line_number":53,"context_line":"            sdk.compute.delete_server_interface(vif.id, server\u003dvm_id)"},{"line_number":54,"context_line":"        except o_exc.ResourceFailure:"},{"line_number":55,"context_line":"            LOG.warning(\"Unable to delete interface %s for server %s.\","},{"line_number":56,"context_line":"                        vif.id, vm_id)"},{"line_number":57,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":27,"id":"3fa7e38b_6ef2ca9d","line":54,"range":{"start_line":52,"start_character":0,"end_line":54,"end_character":37},"in_reply_to":"3fa7e38b_bfd1d2ce","updated":"2019-11-15 13:43:21.000000000","message":"I agree, Roman\no_exc.SDKException catch would be better here\nthanks","commit_id":"6149e83589212b71c0a4d7672ad90ace22b38976"},{"author":{"_account_id":25900,"name":"Vladimir Kuramshin","email":"vladimir@kuramsh.in","username":"vkuramshin"},"change_message_id":"d495bc0b07f07219a52d3cbd4dd9ad4509ada037","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        # TODO(garyloug): check which exceptions can be raised by sdk"},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            result \u003d compute.create_server_interface(vm_id, net_id\u003dnet_id)"},{"line_number":75,"context_line":"        except o_exc.ResourceFailure:"},{"line_number":76,"context_line":"            LOG.warning(\"Unable to create interface for server %s.\","},{"line_number":77,"context_line":"                        vm_id)"},{"line_number":78,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":28,"id":"3fa7e38b_1df82748","line":75,"range":{"start_line":75,"start_character":15,"end_line":75,"end_character":36},"updated":"2019-11-15 16:56:25.000000000","message":"I think you should use o_exc.SDKException here as well","commit_id":"7a5a5807b17471c96d9ee926fc0fb81d44e09df7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"de562a322d033136c6d90d0aedecc5ad6cc8e7ee","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        LOG.debug(\"release_vif for vm_id %s %s\", vm_id, vif.id)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            # TODO(garyloug): check which exceptions can be raised by sdk"},{"line_number":53,"context_line":"            compute.delete_server_interface(vif.id, server\u003dvm_id)"},{"line_number":54,"context_line":"        except o_exc.SDKException:"},{"line_number":55,"context_line":"            LOG.warning(\"Unable to delete interface %s for server %s.\","}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_a82ce892","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":73},"updated":"2019-11-21 17:37:59.000000000","message":"This can be removed, SDKException is the top one. :D","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        LOG.debug(\"release_vif for vm_id %s %s\", vm_id, vif.id)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            # TODO(garyloug): check which exceptions can be raised by sdk"},{"line_number":53,"context_line":"            compute.delete_server_interface(vif.id, server\u003dvm_id)"},{"line_number":54,"context_line":"        except o_exc.SDKException:"},{"line_number":55,"context_line":"            LOG.warning(\"Unable to delete interface %s for server %s.\","}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_2515253e","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":73},"in_reply_to":"3fa7e38b_a82ce892","updated":"2019-11-29 10:54:27.000000000","message":"agree, we can remove it\nI even changed this comment by Garry from \"noca exceptions\" to \"SDK exceptions\" )","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"de562a322d033136c6d90d0aedecc5ad6cc8e7ee","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        vm_id \u003d self._get_parent_port(neutron, pod)[\u0027device_id\u0027]"},{"line_number":70,"context_line":"        net_id \u003d utils.get_network_id(subnets)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # TODO(garyloug): check which exceptions can be raised by sdk"},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            result \u003d compute.create_server_interface(vm_id, net_id\u003dnet_id)"},{"line_number":75,"context_line":"        except o_exc.SDKException:"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_0853bc17","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":69},"updated":"2019-11-21 17:37:59.000000000","message":"Same here.","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"146ec689aa95f56abb9185261ae97384e6dae248","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        vm_id \u003d self._get_parent_port(neutron, pod)[\u0027device_id\u0027]"},{"line_number":70,"context_line":"        net_id \u003d utils.get_network_id(subnets)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # TODO(garyloug): check which exceptions can be raised by sdk"},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            result \u003d compute.create_server_interface(vm_id, net_id\u003dnet_id)"},{"line_number":75,"context_line":"        except o_exc.SDKException:"}],"source_content_type":"text/x-python","patch_set":37,"id":"3fa7e38b_e5286d86","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":69},"in_reply_to":"3fa7e38b_0853bc17","updated":"2019-11-29 10:54:27.000000000","message":"Done","commit_id":"ba0b02d93d32645e36461566dd25e8ac25054514"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # TODO(garyloug): maybe log a warning if the vswitch is not ovs-dpdk?"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        pass"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_4fc9f722","line":34,"range":{"start_line":33,"start_character":0,"end_line":34,"end_character":12},"updated":"2020-01-02 09:31:59.000000000","message":"is this needed?","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b1cf5a117f8be18e952fce613c40b4dbd02e91fe","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # TODO(garyloug): maybe log a warning if the vswitch is not ovs-dpdk?"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        pass"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_943a5094","line":34,"range":{"start_line":33,"start_character":0,"end_line":34,"end_character":12},"in_reply_to":"3fa7e38b_4fc9f722","updated":"2020-01-09 13:56:12.000000000","message":"looks like it not needed\nthanks","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        pass"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def request_vifs(self, pod, project_id, subnets, security_groups,"},{"line_number":40,"context_line":"                     num_ports):"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_afd74bc0","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":75},"updated":"2020-01-02 09:31:59.000000000","message":"why not having the _request_vif function here directly?","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b1cf5a117f8be18e952fce613c40b4dbd02e91fe","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        pass"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":37,"context_line":"        return self._request_vif(pod, project_id, subnets, security_groups)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def request_vifs(self, pod, project_id, subnets, security_groups,"},{"line_number":40,"context_line":"                     num_ports):"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_34b4bc1c","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":75},"in_reply_to":"3fa7e38b_afd74bc0","updated":"2020-01-09 13:56:12.000000000","message":"yes, the same question I had when I first met this patch)\nreally, it worth to fix it\nthanks","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            raise"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def activate_vif(self, pod, vif):"},{"line_number":59,"context_line":"        if vif.active:"},{"line_number":60,"context_line":"            return"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        vif.active \u003d True"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":65,"context_line":"        neutron \u003d clients.get_neutron_client()"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_ce0d5b90","line":62,"range":{"start_line":59,"start_character":0,"end_line":62,"end_character":25},"updated":"2020-01-02 09:31:59.000000000","message":"this could probably just be:\nvif.active \u003d True","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b1cf5a117f8be18e952fce613c40b4dbd02e91fe","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            raise"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def activate_vif(self, pod, vif):"},{"line_number":59,"context_line":"        if vif.active:"},{"line_number":60,"context_line":"            return"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        vif.active \u003d True"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _request_vif(self, pod, project_id, subnets, security_groups):"},{"line_number":65,"context_line":"        neutron \u003d clients.get_neutron_client()"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_14fc20b4","line":62,"range":{"start_line":59,"start_character":0,"end_line":62,"end_character":25},"in_reply_to":"3fa7e38b_ce0d5b90","updated":"2020-01-09 13:56:12.000000000","message":"agree\nthanks","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"2ba658f6ec5809738fea8fcfb77a9371dd6f0dca","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2018 Intel Corporation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_8e5e9ce6","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2020-01-13 11:06:11.000000000","message":"2020","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b199be14d8b19af85c8e2427e745a548eb7bd1c8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2018 Intel Corporation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_e1c88177","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"3fa7e38b_8e5e9ce6","updated":"2020-01-13 13:26:31.000000000","message":"Done","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"2ba658f6ec5809738fea8fcfb77a9371dd6f0dca","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NestedDpdkPodVIFDriver(nested_vif.NestedPodVIFDriver):"},{"line_number":29,"context_line":"    \"\"\"Manages ports for DPDK based nested-containers to provide VIFs.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # TODO(garyloug): maybe log a warning if the vswitch is not ovs-dpdk?"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_8e03fcbd","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":28},"updated":"2020-01-13 11:06:11.000000000","message":"nice driver! short and easy to read! thanks!","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b199be14d8b19af85c8e2427e745a548eb7bd1c8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NestedDpdkPodVIFDriver(nested_vif.NestedPodVIFDriver):"},{"line_number":29,"context_line":"    \"\"\"Manages ports for DPDK based nested-containers to provide VIFs.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # TODO(garyloug): maybe log a warning if the vswitch is not ovs-dpdk?"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_a197e946","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":28},"in_reply_to":"3fa7e38b_8e03fcbd","updated":"2020-01-13 13:26:31.000000000","message":"yes, I like it too)\nbut it is inherited by NestedPodVIFDriver, so here (NestedDpdkPodVIFDriver) only one little word Dpdk is added, and this word is the main word here","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"76c6d8919171c41c04cd810e2029b469a4a87275","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                        vif.id, vm_id)"},{"line_number":66,"context_line":"            raise"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def activate_vif(self, pod, vif):"},{"line_number":69,"context_line":"        vif.active \u003d True"}],"source_content_type":"text/x-python","patch_set":47,"id":"3fa7e38b_be6a82e9","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":25},"updated":"2020-02-03 11:29:23.000000000","message":"Adding a note here about why simply setting it to active could be useful","commit_id":"14d92455f7a41a4a29ba686f087ea18b15453822"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"266e4e290679f127563585a2dbb5ba53d142a7ac","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                        vif.id, vm_id)"},{"line_number":66,"context_line":"            raise"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def activate_vif(self, pod, vif):"},{"line_number":69,"context_line":"        vif.active \u003d True"}],"source_content_type":"text/x-python","patch_set":47,"id":"3fa7e38b_c65205db","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":25},"in_reply_to":"3fa7e38b_be6a82e9","updated":"2020-02-04 08:01:37.000000000","message":"Done","commit_id":"14d92455f7a41a4a29ba686f087ea18b15453822"}],"kuryr_kubernetes/controller/drivers/vif_pool.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"24d549a1618b7658e121f145177c3488bee5ee8a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    \u0027VIFVlanNested\u0027: \u0027nested-vlan\u0027,"},{"line_number":101,"context_line":"    \u0027VIFMacvlanNested\u0027: \u0027nested-macvlan\u0027,"},{"line_number":102,"context_line":"    \u0027VIFSriov\u0027: \u0027sriov\u0027,"},{"line_number":103,"context_line":"    \u0027VIFDPDKNested\u0027: \u0027nested-dpdk\u0027"},{"line_number":104,"context_line":"}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_71c13f81","line":103,"updated":"2020-01-21 16:00:00.000000000","message":"Would be nice to have comma at the end.","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d63e9c203b386eb83892b57ff24d5d14ae74739d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    \u0027VIFVlanNested\u0027: \u0027nested-vlan\u0027,"},{"line_number":101,"context_line":"    \u0027VIFMacvlanNested\u0027: \u0027nested-macvlan\u0027,"},{"line_number":102,"context_line":"    \u0027VIFSriov\u0027: \u0027sriov\u0027,"},{"line_number":103,"context_line":"    \u0027VIFDPDKNested\u0027: \u0027nested-dpdk\u0027"},{"line_number":104,"context_line":"}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_e9d17157","line":103,"in_reply_to":"3fa7e38b_71c13f81","updated":"2020-01-28 13:36:06.000000000","message":"\u003e Would be nice to have comma at the end.\n\nNote, comma at the end is not very pythonic, it\u0027s not the flaw either, although IMHO it\u0027s totally needless. Probably that habit came from other languages, where hanging commas are \"cool\". Even json doesn\u0027t allow hanging commas.","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b3a174d77dbcb9a6dad98ac8f470375600a340b6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    \u0027VIFVlanNested\u0027: \u0027nested-vlan\u0027,"},{"line_number":101,"context_line":"    \u0027VIFMacvlanNested\u0027: \u0027nested-macvlan\u0027,"},{"line_number":102,"context_line":"    \u0027VIFSriov\u0027: \u0027sriov\u0027,"},{"line_number":103,"context_line":"    \u0027VIFDPDKNested\u0027: \u0027nested-dpdk\u0027"},{"line_number":104,"context_line":"}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_995704f6","line":103,"in_reply_to":"3fa7e38b_71c13f81","updated":"2020-01-28 11:45:10.000000000","message":"Done","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"d79d741c9a3b09b2f38614e505d650a1d2c58b88","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    \u0027VIFVlanNested\u0027: \u0027nested-vlan\u0027,"},{"line_number":101,"context_line":"    \u0027VIFMacvlanNested\u0027: \u0027nested-macvlan\u0027,"},{"line_number":102,"context_line":"    \u0027VIFSriov\u0027: \u0027sriov\u0027,"},{"line_number":103,"context_line":"    \u0027VIFDPDKNested\u0027: \u0027nested-dpdk\u0027"},{"line_number":104,"context_line":"}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_d47208b0","line":103,"in_reply_to":"3fa7e38b_e9d17157","updated":"2020-01-31 15:29:31.000000000","message":"It\u0027s part of OpenStack coding guidelines [1] and reduces diffs size. Personally I totally support the idea and yeah, in e.g. golang no comma would get linted.\n\n[1] https://docs.openstack.org/hacking/latest/user/hacking.html#dictionaries-lists","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"}],"kuryr_kubernetes/objects/vif.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b69763a9d03adbc03342a9be6795627c98c8791d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    }"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":46,"context_line":"class VIFDpdk(obj_osvif.VIFBase):"},{"line_number":47,"context_line":"    # DPDK"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    fields \u003d {"},{"line_number":52,"context_line":"        # Specify whether this vif requires L3 setup"},{"line_number":53,"context_line":"        \u0027l3_setup\u0027: obj_fields.BooleanField(),"},{"line_number":54,"context_line":"        # PCI info of the device"},{"line_number":55,"context_line":"        \u0027pci_address\u0027: obj_fields.StringField(),"},{"line_number":56,"context_line":"        # Name of the driver the device was previously bound to; it makes"},{"line_number":57,"context_line":"        # the controller driver agnostic (virtio, sr-iov, etc.)"},{"line_number":58,"context_line":"        \u0027dev_driver\u0027: obj_fields.StringField(),"},{"line_number":59,"context_line":"        \u0027selflink\u0027: obj_fields.StringField(),"},{"line_number":60,"context_line":"        \u0027resourceversion\u0027: obj_fields.StringField()"},{"line_number":61,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_cf28b735","line":61,"range":{"start_line":45,"start_character":0,"end_line":61,"end_character":5},"updated":"2018-05-09 14:55:35.000000000","message":"defining VIF types in external repos is expcitly not supported by os-vif. we had discussed the need to remove the current ones previously as it is breaking the api contract we provide\nso i would prefer if we did not add addtional technical debt.","commit_id":"174c5cceec9ac28713d109127a8ae07ae7f7cbb0"},{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"5c7d0024959ddcd91153d4d8a5e064575cde3a33","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # Specify whether this vif requires L3 setup"},{"line_number":53,"context_line":"        \u0027l3_setup\u0027: obj_fields.BooleanField(),"},{"line_number":54,"context_line":"        # PCI info of the device"},{"line_number":55,"context_line":"        \u0027pci_address\u0027: obj_fields.StringField(),"},{"line_number":56,"context_line":"        # Name of the driver the device was previously bound to; it makes"},{"line_number":57,"context_line":"        # the controller driver agnostic (virtio, sr-iov, etc.)"},{"line_number":58,"context_line":"        \u0027dev_driver\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_ae39a6a2","line":55,"range":{"start_line":55,"start_character":9,"end_line":55,"end_character":20},"updated":"2018-07-17 06:49:39.000000000","message":"It looks like port profile\u0027s attribute,\nin any case why are you don\u0027t use predefined VIF types like VIFOpenVSwitch or VIFVhostUser, and setattr for additional field, it looks like hack too, but in this case no need to extend inheritance hierarchy .","commit_id":"5fba487a0394b362f2238c7d771b182ae1705f38"},{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"ef2703a0b50472a27a7699f89a4c15b510634743","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # Specify whether this vif requires L3 setup"},{"line_number":53,"context_line":"        \u0027l3_setup\u0027: obj_fields.BooleanField(),"},{"line_number":54,"context_line":"        # PCI info of the device"},{"line_number":55,"context_line":"        \u0027pci_address\u0027: obj_fields.StringField(),"},{"line_number":56,"context_line":"        # Name of the driver the device was previously bound to; it makes"},{"line_number":57,"context_line":"        # the controller driver agnostic (virtio, sr-iov, etc.)"},{"line_number":58,"context_line":"        \u0027dev_driver\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_ee023e72","line":55,"range":{"start_line":55,"start_character":9,"end_line":55,"end_character":20},"updated":"2018-07-17 07:03:57.000000000","message":"there is a type PCIAddress in oslo_versionedobjects/fields.py \nos-vif uses it in VIFDirect","commit_id":"5fba487a0394b362f2238c7d771b182ae1705f38"},{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"5afb1522f65f00801acdd6142d10812e0dd64fb5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # Specify whether this vif requires L3 setup"},{"line_number":53,"context_line":"        \u0027l3_setup\u0027: obj_fields.BooleanField(),"},{"line_number":54,"context_line":"        # PCI info of the device"},{"line_number":55,"context_line":"        \u0027pci_address\u0027: obj_fields.StringField(),"},{"line_number":56,"context_line":"        # Name of the driver the device was previously bound to; it makes"},{"line_number":57,"context_line":"        # the controller driver agnostic (virtio, sr-iov, etc.)"},{"line_number":58,"context_line":"        \u0027dev_driver\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_99850db1","line":55,"range":{"start_line":55,"start_character":9,"end_line":55,"end_character":20},"in_reply_to":"5f7c97a3_a7d5491c","updated":"2018-07-17 13:47:41.000000000","message":"it\u0027s ok, I have no objections )","commit_id":"5fba487a0394b362f2238c7d771b182ae1705f38"},{"author":{"_account_id":24127,"name":"Gary Loughnane","email":"gary.loughnane@intel.com","username":"garyloug"},"change_message_id":"72888cf617dfcada8352fc09c047fdcf7b8af200","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # Specify whether this vif requires L3 setup"},{"line_number":53,"context_line":"        \u0027l3_setup\u0027: obj_fields.BooleanField(),"},{"line_number":54,"context_line":"        # PCI info of the device"},{"line_number":55,"context_line":"        \u0027pci_address\u0027: obj_fields.StringField(),"},{"line_number":56,"context_line":"        # Name of the driver the device was previously bound to; it makes"},{"line_number":57,"context_line":"        # the controller driver agnostic (virtio, sr-iov, etc.)"},{"line_number":58,"context_line":"        \u0027dev_driver\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_a7d5491c","line":55,"range":{"start_line":55,"start_character":9,"end_line":55,"end_character":20},"in_reply_to":"5f7c97a3_ae39a6a2","updated":"2018-07-17 09:05:03.000000000","message":"I agree. This has been highlighted already by Sean Mooney from os-vif project, see comment on May 9th. Correct solution is to make a new type in os-vif. We created a patch for os-vif (for all nested types), working and tested. We have not pushed yet as Sean advised that it was too close to the Rocky freeze, but he is happy to see we have a solution in the pipeline and happy to leave this hack here for now, until new types becomes part of os-vif. Is this agreeable to you also?","commit_id":"5fba487a0394b362f2238c7d771b182ae1705f38"}],"kuryr_kubernetes/os_vif_util.py":[{"author":{"_account_id":21041,"name":"Yossi Boaron","email":"yossi.boaron.dev@gmail.com","username":"yboaron"},"change_message_id":"5ac27217c7158fcdb68ce081e25a381182da32b3","unresolved":false,"context_lines":[{"line_number":298,"context_line":"def neutron_to_osvif_vif_dpdk(neutron_port, subnets, pod):"},{"line_number":299,"context_line":"    \"\"\"Converts Neutron port to VIF object for os-vif \u0027ovs\u0027 plugin."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    :param vif_plugin: name of the os-vif plugin to use (i.e. \u0027ovs\u0027)"},{"line_number":302,"context_line":"    :param neutron_port: dict containing port information as returned by"},{"line_number":303,"context_line":"                         neutron client\u0027s \u0027show_port\u0027"},{"line_number":304,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_29698fbd","line":301,"range":{"start_line":301,"start_character":5,"end_line":301,"end_character":21},"updated":"2018-04-16 14:00:33.000000000","message":"?","commit_id":"a768fb09ebc5813aaf571b565444f1e375b3fcf3"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"def neutron_to_osvif_vif_dpdk(neutron_port, subnets, pod):"},{"line_number":333,"context_line":"    \"\"\"Converts Neutron port to VIF object for os-vif \u0027ovs\u0027 plugin."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    :param vif_plugin: name of the os-vif plugin to use (i.e. \u0027ovs\u0027)"},{"line_number":336,"context_line":"    :param neutron_port: dict containing port information as returned by"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_6f4873b3","line":333,"range":{"start_line":333,"start_character":0,"end_line":333,"end_character":67},"updated":"2020-01-02 09:31:59.000000000","message":"I think docstring needs update","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b1cf5a117f8be18e952fce613c40b4dbd02e91fe","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"def neutron_to_osvif_vif_dpdk(neutron_port, subnets, pod):"},{"line_number":333,"context_line":"    \"\"\"Converts Neutron port to VIF object for os-vif \u0027ovs\u0027 plugin."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    :param vif_plugin: name of the os-vif plugin to use (i.e. \u0027ovs\u0027)"},{"line_number":336,"context_line":"    :param neutron_port: dict containing port information as returned by"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_af8059f7","line":333,"range":{"start_line":333,"start_character":0,"end_line":333,"end_character":67},"in_reply_to":"3fa7e38b_6f4873b3","updated":"2020-01-09 13:56:12.000000000","message":"Done","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":332,"context_line":"def neutron_to_osvif_vif_dpdk(neutron_port, subnets, pod):"},{"line_number":333,"context_line":"    \"\"\"Converts Neutron port to VIF object for os-vif \u0027ovs\u0027 plugin."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    :param vif_plugin: name of the os-vif plugin to use (i.e. \u0027ovs\u0027)"},{"line_number":336,"context_line":"    :param neutron_port: dict containing port information as returned by"},{"line_number":337,"context_line":"                         neutron client\u0027s \u0027show_port\u0027"},{"line_number":338,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_af52eb66","line":335,"range":{"start_line":335,"start_character":0,"end_line":335,"end_character":68},"updated":"2020-01-02 09:31:59.000000000","message":"there is no VIF plugin being passed","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b1cf5a117f8be18e952fce613c40b4dbd02e91fe","unresolved":false,"context_lines":[{"line_number":332,"context_line":"def neutron_to_osvif_vif_dpdk(neutron_port, subnets, pod):"},{"line_number":333,"context_line":"    \"\"\"Converts Neutron port to VIF object for os-vif \u0027ovs\u0027 plugin."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    :param vif_plugin: name of the os-vif plugin to use (i.e. \u0027ovs\u0027)"},{"line_number":336,"context_line":"    :param neutron_port: dict containing port information as returned by"},{"line_number":337,"context_line":"                         neutron client\u0027s \u0027show_port\u0027"},{"line_number":338,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_4f7be527","line":335,"range":{"start_line":335,"start_character":0,"end_line":335,"end_character":68},"in_reply_to":"3fa7e38b_af52eb66","updated":"2020-01-09 13:56:12.000000000","message":"Done","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"308f1af4ff967e0ade90dddff9737406aebd2617","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    :param vif_plugin: name of the os-vif plugin to use (i.e. \u0027ovs\u0027)"},{"line_number":336,"context_line":"    :param neutron_port: dict containing port information as returned by"},{"line_number":337,"context_line":"                         neutron client\u0027s \u0027show_port\u0027"},{"line_number":338,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"},{"line_number":339,"context_line":"    :return: os-vif VIF object"},{"line_number":340,"context_line":"    \"\"\""},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_cf4f27bc","line":338,"range":{"start_line":338,"start_character":0,"end_line":338,"end_character":78},"updated":"2020-01-02 09:31:59.000000000","message":"missing pod param","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b1cf5a117f8be18e952fce613c40b4dbd02e91fe","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    :param vif_plugin: name of the os-vif plugin to use (i.e. \u0027ovs\u0027)"},{"line_number":336,"context_line":"    :param neutron_port: dict containing port information as returned by"},{"line_number":337,"context_line":"                         neutron client\u0027s \u0027show_port\u0027"},{"line_number":338,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"},{"line_number":339,"context_line":"    :return: os-vif VIF object"},{"line_number":340,"context_line":"    \"\"\""},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"3fa7e38b_6f76e141","line":338,"range":{"start_line":338,"start_character":0,"end_line":338,"end_character":78},"in_reply_to":"3fa7e38b_cf4f27bc","updated":"2020-01-09 13:56:12.000000000","message":"Done","commit_id":"ae08ec77c5f304a3526c7d4367a7f0d4bf06b272"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"2ba658f6ec5809738fea8fcfb77a9371dd6f0dca","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    :return: os-vif VIF object"},{"line_number":340,"context_line":"    \"\"\""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    details \u003d neutron_port.get(\u0027binding:vif_details\u0027, {})"},{"line_number":343,"context_line":"    profile \u003d osv_vif.VIFPortProfileK8sDPDK("},{"line_number":344,"context_line":"        l3_setup\u003dFalse,"},{"line_number":345,"context_line":"        selflink\u003dpod[\u0027metadata\u0027][\u0027selfLink\u0027],"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_ce87b45b","line":342,"range":{"start_line":342,"start_character":3,"end_line":342,"end_character":57},"updated":"2020-01-13 11:06:11.000000000","message":"this information cannot be retried as a normal tenant, right?","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b199be14d8b19af85c8e2427e745a548eb7bd1c8","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    :return: os-vif VIF object"},{"line_number":340,"context_line":"    \"\"\""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    details \u003d neutron_port.get(\u0027binding:vif_details\u0027, {})"},{"line_number":343,"context_line":"    profile \u003d osv_vif.VIFPortProfileK8sDPDK("},{"line_number":344,"context_line":"        l3_setup\u003dFalse,"},{"line_number":345,"context_line":"        selflink\u003dpod[\u0027metadata\u0027][\u0027selfLink\u0027],"}],"source_content_type":"text/x-python","patch_set":44,"id":"3fa7e38b_84267bb9","line":342,"range":{"start_line":342,"start_character":3,"end_line":342,"end_character":57},"in_reply_to":"3fa7e38b_ce87b45b","updated":"2020-01-13 13:26:31.000000000","message":"right, it should have admin rights","commit_id":"335c2c0a1ec1c309b63c4bff2f47bfdc4f9dc854"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"aa26b164cb4efa952f23a62f9f818ba913a5e722","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    details \u003d neutron_port.get(\u0027binding:vif_details\u0027, {})"},{"line_number":343,"context_line":"    profile \u003d osv_vif.VIFPortProfileK8sDPDK("},{"line_number":344,"context_line":"        l3_setup\u003dFalse,"},{"line_number":345,"context_line":"        selflink\u003dpod[\u0027metadata\u0027][\u0027selfLink\u0027],"},{"line_number":346,"context_line":"        resourceversion\u003dpod[\u0027metadata\u0027][\u0027resourceVersion\u0027])"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    return k_vif.VIFDPDKNested("}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_d19b5313","line":345,"range":{"start_line":345,"start_character":8,"end_line":345,"end_character":45},"updated":"2020-01-21 16:19:53.000000000","message":"The selfLink is going to be deprecated[1], it is good to construct this link in another way.\n\n[1] https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#objectmeta-v1-meta","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"24d549a1618b7658e121f145177c3488bee5ee8a","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    profile \u003d osv_vif.VIFPortProfileK8sDPDK("},{"line_number":344,"context_line":"        l3_setup\u003dFalse,"},{"line_number":345,"context_line":"        selflink\u003dpod[\u0027metadata\u0027][\u0027selfLink\u0027],"},{"line_number":346,"context_line":"        resourceversion\u003dpod[\u0027metadata\u0027][\u0027resourceVersion\u0027])"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    return k_vif.VIFDPDKNested("},{"line_number":349,"context_line":"        id\u003dneutron_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_1161eba8","line":346,"range":{"start_line":346,"start_character":8,"end_line":346,"end_character":58},"updated":"2020-01-21 16:00:00.000000000","message":"You\u0027re aware that this changes really often? Like every time kubelet adds some information about the pod?\n\nWhy is it needed here?","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"b3a174d77dbcb9a6dad98ac8f470375600a340b6","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    profile \u003d osv_vif.VIFPortProfileK8sDPDK("},{"line_number":344,"context_line":"        l3_setup\u003dFalse,"},{"line_number":345,"context_line":"        selflink\u003dpod[\u0027metadata\u0027][\u0027selfLink\u0027],"},{"line_number":346,"context_line":"        resourceversion\u003dpod[\u0027metadata\u0027][\u0027resourceVersion\u0027])"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    return k_vif.VIFDPDKNested("},{"line_number":349,"context_line":"        id\u003dneutron_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":46,"id":"3fa7e38b_798a4865","line":346,"range":{"start_line":346,"start_character":8,"end_line":346,"end_character":58},"in_reply_to":"3fa7e38b_1161eba8","updated":"2020-01-28 11:45:10.000000000","message":"I see. Agree, this is not needed here, we do not have to store it. We can get a resourceVersion in binding driver right from pod object there","commit_id":"032d77e4774ce1edb6ed2d46845b726f8f97dcf2"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"912022ebb4cf8eb282bdcaff16704e56c98b5d7b","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    details \u003d os_port.get(\u0027binding:vif_details\u0027, {})"},{"line_number":363,"context_line":"    profile \u003d osv_vif.VIFPortProfileK8sDPDK("},{"line_number":364,"context_line":"        l3_setup\u003dFalse,"},{"line_number":365,"context_line":"        selflink\u003dpod[\u0027metadata\u0027][\u0027selfLink\u0027])"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    return k_vif.VIFDPDKNested("},{"line_number":368,"context_line":"        id\u003dos_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":47,"id":"3fa7e38b_71976dec","line":365,"range":{"start_line":365,"start_character":8,"end_line":365,"end_character":44},"updated":"2020-01-31 15:45:57.000000000","message":"The remark about this API field being deprecated still holds.\n\nI won\u0027t block the patch because of that as we\u0027ll need to audit usage of that anyway.","commit_id":"14d92455f7a41a4a29ba686f087ea18b15453822"}],"lower-constraints.txt":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"db31ecb674039c8fc5ca012229b56ba3e4e86bc9","unresolved":false,"context_lines":[{"line_number":101,"context_line":"python-keystoneclient\u003d\u003d3.15.0"},{"line_number":102,"context_line":"python-mimeparse\u003d\u003d1.6.0"},{"line_number":103,"context_line":"python-neutronclient\u003d\u003d6.7.0"},{"line_number":104,"context_line":"python-novaclient\u003d\u003d9.0.0"},{"line_number":105,"context_line":"python-subunit\u003d\u003d1.0.0"},{"line_number":106,"context_line":"pytz\u003d\u003d2018.3"},{"line_number":107,"context_line":"PyYAML\u003d\u003d3.12"}],"source_content_type":"text/plain","patch_set":23,"id":"3fa7e38b_73e695b3","line":104,"range":{"start_line":104,"start_character":0,"end_line":104,"end_character":24},"updated":"2019-11-07 08:14:19.000000000","message":"Should not be needed with openstacksdk.","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"}],"requirements.txt":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"3ac85babca863b7690b655bcf93e91034af478e9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"stevedore\u003e\u003d1.20.0 # Apache-2.0"},{"line_number":26,"context_line":"grpcio\u003e\u003d1.12.0 # Apache-2.0"},{"line_number":27,"context_line":"protobuf\u003e\u003d3.6.0 # 3-Clause BSD"},{"line_number":28,"context_line":"python-novaclient\u003e\u003d9.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":23,"id":"3fa7e38b_b1e5e540","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":37},"updated":"2019-11-07 10:22:53.000000000","message":"no support for this on openstacksdk?","commit_id":"f3d30317d6ab6e0c1b1ef87ed00f07472e881959"}]}
