)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2bb36c46c1d80151b64b200ee40b09bf032c1e40","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Igor Malinovskiy \u003cimalinovskiy@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-16 14:59:27 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP][POC] LXC/LXD driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Iea73bd34b94919d77ebe17cf054dde1f580384be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba8a016a_791102ac","line":7,"updated":"2015-11-17 08:38:25.000000000","message":"It is better to add more description. eg: What API can support in this driver. etc.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-11-16 14:59:27 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP][POC] LXC/LXD driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Iea73bd34b94919d77ebe17cf054dde1f580384be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba8a016a_1359c78e","line":8,"updated":"2015-11-21 02:39:22.000000000","message":"Please add a description and reference the blueprint.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d5779d3faefba2c4a8f6c6af651e2c461c4c81bb","unresolved":false,"context_lines":[{"line_number":13,"context_line":"specified by the user. Currently NFS is limited to v3 since the"},{"line_number":14,"context_line":"only userspace NFS server that works in a container out of the box"},{"line_number":15,"context_line":"seems to be unfs3. Later it will  be replaced with nfs-ganesha."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Iea73bd34b94919d77ebe17cf054dde1f580384be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"5a5ae5dd_c024ff0d","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":0},"updated":"2016-02-08 15:46:09.000000000","message":"Please add:\n\nImplements: blueprint lxc-driver\n\n\nso that reviewers can check out the design document.","commit_id":"2f0d2e1c1c48b47bff888249fb579fc5a0229af4"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":12,"context_line":"simultaneously to the container  on a host in a volume group"},{"line_number":13,"context_line":"specified by the user. Currently NFS is limited to v3 since the"},{"line_number":14,"context_line":"only userspace NFS server that works in a container out of the box"},{"line_number":15,"context_line":"seems to be unfs3. Later it will  be replaced with nfs-ganesha."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Co-Authored-By: Alexey Ovchinnikov \u003caovchinnikov@mirantis.com\u003e"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"bae84128_613c90c8","line":15,"range":{"start_line":15,"start_character":32,"end_line":15,"end_character":34},"updated":"2016-02-23 14:32:30.000000000","message":"2 spaces, please remove if you upload another patch.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"simultaneously to the container  on a host in a volume group"},{"line_number":13,"context_line":"specified by the user. Currently NFS is limited to v3 since the"},{"line_number":14,"context_line":"only userspace NFS server that works in a container out of the box"},{"line_number":15,"context_line":"seems to be unfs3. Later it will  be replaced with nfs-ganesha."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Co-Authored-By: Alexey Ovchinnikov \u003caovchinnikov@mirantis.com\u003e"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"bae84128_af23f354","line":15,"range":{"start_line":15,"start_character":32,"end_line":15,"end_character":34},"in_reply_to":"bae84128_613c90c8","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"}],"contrib/ci/post_test_hook.sh":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":160,"context_line":"fi"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"if [[ \"$DRIVER\" \u003d\u003d \"lxd\"  ]]; then"},{"line_number":163,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d1"},{"line_number":164,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":165,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":166,"context_line":"    iniset $TEMPEST_CONFIG share run_shrink_tests False"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_4167cce8","line":163,"range":{"start_line":163,"start_character":31,"end_line":163,"end_character":32},"updated":"2016-02-23 14:32:30.000000000","message":"does it really have to be concurrency\u003d1 to work?","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":160,"context_line":"fi"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"if [[ \"$DRIVER\" \u003d\u003d \"lxd\"  ]]; then"},{"line_number":163,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d1"},{"line_number":164,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":165,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":166,"context_line":"    iniset $TEMPEST_CONFIG share run_shrink_tests False"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_4fad079a","line":163,"range":{"start_line":163,"start_character":31,"end_line":163,"end_character":32},"in_reply_to":"bae84128_4167cce8","updated":"2016-02-24 10:43:58.000000000","message":"Yes. There is a race condition hiding somewhere and it is still waiting to be eliminated.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"294adfb9e08d7cd81d626eee3e2ac5341234289c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    iniset $TEMPEST_CONFIG share run_snapshot_tests False"},{"line_number":171,"context_line":"    iniset $TEMPEST_CONFIG share run_migration_tests False"},{"line_number":172,"context_line":"    iniset $TEMPEST_CONFIG share enable_ip_rules_for_protocols \u0027nfs\u0027"},{"line_number":173,"context_line":"    iniset $TEMPEST_CONFIG share enable_user_rules_for_protocols \u0027cifs\u0027"},{"line_number":174,"context_line":"    if ! grep $USERNAME_FOR_USER_RULES \"/etc/passwd\"; then"},{"line_number":175,"context_line":"        sudo useradd $USERNAME_FOR_USER_RULES"},{"line_number":176,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":44,"id":"9aed3d3a_dc94418c","line":173,"updated":"2016-03-01 03:39:42.000000000","message":"Read my comment in lxc.py first, because these settings are correct for the long term. However, in the short term you can get this driver to pass the tests unmodified by making a change right here.\n\n iniset $TEMPEST_CONFIG share enable_ip_rules_for_protocols nfs,cifs\n iniset $TEMPEST_CONFIG share enable_user_rules_for_protocols none","commit_id":"8f2835538b0379c89a965ceea6fd93b210e2749d"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c29a75539601821d9a816b82c2528cc1affcd6f1","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    iniset $TEMPEST_CONFIG share run_snapshot_tests False"},{"line_number":171,"context_line":"    iniset $TEMPEST_CONFIG share run_migration_tests False"},{"line_number":172,"context_line":"    iniset $TEMPEST_CONFIG share enable_ip_rules_for_protocols \u0027nfs\u0027"},{"line_number":173,"context_line":"    iniset $TEMPEST_CONFIG share enable_user_rules_for_protocols \u0027cifs\u0027"},{"line_number":174,"context_line":"    if ! grep $USERNAME_FOR_USER_RULES \"/etc/passwd\"; then"},{"line_number":175,"context_line":"        sudo useradd $USERNAME_FOR_USER_RULES"},{"line_number":176,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":44,"id":"9aed3d3a_e6cc138b","line":173,"in_reply_to":"9aed3d3a_dc94418c","updated":"2016-03-01 05:39:38.000000000","message":"I think I\u0027ll just add proper user handling, that should not be a big problem.","commit_id":"8f2835538b0379c89a965ceea6fd93b210e2749d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"89cfd0c8cdf10c27588e2d0b735d66d3180026ee","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    iniset $TEMPEST_CONFIG share backend_replication_type \u0027readable\u0027"},{"line_number":182,"context_line":"fi"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"if [[ \"$DRIVER\" \u003d\u003d \"lxd\"  ]]; then"},{"line_number":185,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d1"},{"line_number":186,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":187,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dFalse"}],"source_content_type":"text/x-sh","patch_set":51,"id":"7af24918_8a6305dc","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":2},"updated":"2016-03-02 11:28:42.000000000","message":"Should be \"elif\" for previous condition.\n\nAlso lines 194-203 duplicate LVM part. Better to move it to separate function.","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"15a8bb42d5a145018ae1e3fa2ce1a7aa47000d01","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    iniset $TEMPEST_CONFIG share backend_replication_type \u0027readable\u0027"},{"line_number":182,"context_line":"fi"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"if [[ \"$DRIVER\" \u003d\u003d \"lxd\"  ]]; then"},{"line_number":185,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d1"},{"line_number":186,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":187,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dFalse"}],"source_content_type":"text/x-sh","patch_set":51,"id":"7af24918_60316a05","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":2},"in_reply_to":"7af24918_8a6305dc","updated":"2016-03-02 15:52:27.000000000","message":"Done","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"}],"contrib/ci/pre_test_hook.sh":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":67,"context_line":"fi"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"if [[ \"$DRIVER\" \u003d\u003d \"lxd\" ]]; then"},{"line_number":70,"context_line":"    echo \"SHARE_DRIVER\u003dmanila.share.drivers.lxc.LXCDriver\" \u003e\u003e $localrc_path"},{"line_number":71,"context_line":"fi"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Enabling isolated metadata in Neutron is required because"}],"source_content_type":"text/x-sh","patch_set":46,"id":"7af24918_9be72440","line":70,"updated":"2016-03-01 13:43:26.000000000","message":"I guess you should define \"SHARE_BACKING_FILE_SIZE\" here too. As it is done for \"lvm\".","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"407008dc112f1d8db1c201d77c6709e4b94e5d5e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"fi"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"if [[ \"$DRIVER\" \u003d\u003d \"lxd\" ]]; then"},{"line_number":70,"context_line":"    echo \"SHARE_DRIVER\u003dmanila.share.drivers.lxc.LXCDriver\" \u003e\u003e $localrc_path"},{"line_number":71,"context_line":"fi"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Enabling isolated metadata in Neutron is required because"}],"source_content_type":"text/x-sh","patch_set":46,"id":"7af24918_34b41df1","line":70,"in_reply_to":"7af24918_9be72440","updated":"2016-03-01 14:51:43.000000000","message":"Done","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"}],"devstack/plugin.sh":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":571,"context_line":"}"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"function install_lxd {"},{"line_number":574,"context_line":"    PYLXD_REPO\u003d${LXC_REPO:-git://github.com/lxc/pylxd}"},{"line_number":575,"context_line":"    PYLXD_DIR\u003d$DEST/pylxd"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"\tinstall_package python-software-properties"}],"source_content_type":"text/x-sh","patch_set":1,"id":"ba8a016a_86f8337e","line":574,"updated":"2015-11-16 13:53:12.000000000","message":"In func \"download_image\" you use \"local\" definition, but not here. Is there a reason for it? I guess you may want to define these as \"local\"s too.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"1db69023e3361e5eb63efc9c58c839eec934b0f7","unresolved":false,"context_lines":[{"line_number":571,"context_line":"}"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"function install_lxd {"},{"line_number":574,"context_line":"    PYLXD_REPO\u003d${LXC_REPO:-git://github.com/lxc/pylxd}"},{"line_number":575,"context_line":"    PYLXD_DIR\u003d$DEST/pylxd"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"\tinstall_package python-software-properties"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a740942_a959515d","line":574,"in_reply_to":"ba8a016a_86f8337e","updated":"2015-12-14 18:06:47.000000000","message":"Done","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    PYLXD_REPO\u003d${LXC_REPO:-git://github.com/lxc/pylxd}"},{"line_number":575,"context_line":"    PYLXD_DIR\u003d$DEST/pylxd"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"\tinstall_package python-software-properties"},{"line_number":578,"context_line":"\tapt_get update"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"\tsudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"}],"source_content_type":"text/x-sh","patch_set":1,"id":"ba8a016a_934db7c6","line":577,"updated":"2015-11-21 02:39:22.000000000","message":"I think those tabs need to be removed.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"1db69023e3361e5eb63efc9c58c839eec934b0f7","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    PYLXD_REPO\u003d${LXC_REPO:-git://github.com/lxc/pylxd}"},{"line_number":575,"context_line":"    PYLXD_DIR\u003d$DEST/pylxd"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"\tinstall_package python-software-properties"},{"line_number":578,"context_line":"\tapt_get update"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"\tsudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a740942_6953693a","line":577,"in_reply_to":"ba8a016a_934db7c6","updated":"2015-12-14 18:06:47.000000000","message":"Done","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":620,"context_line":"}"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"function upload_lxd_service_image {"},{"line_number":623,"context_line":"    MANILA_LXD_META_URL\u003d\"https://github.com/uglide/manila-image-elements/releases/download/0.1.0/manila-lxd-meta_a1.tar\""},{"line_number":624,"context_line":"    MANILA_LXD_ROOTFS_URL\u003d\"https://github.com/uglide/manila-image-elements/releases/download/0.1.0/manila-lxd-service-image_a1.tar.xz\""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    download_image $MANILA_LXD_META_URL"}],"source_content_type":"text/x-sh","patch_set":1,"id":"ba8a016a_26bb87c6","line":623,"updated":"2015-11-16 13:53:12.000000000","message":"I can imagine case when one can want to test more than one image. And one will not be able just configure his localrc file to do it. So, please, read global env vars here keeping defined here as defaults.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"1db69023e3361e5eb63efc9c58c839eec934b0f7","unresolved":false,"context_lines":[{"line_number":620,"context_line":"}"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"function upload_lxd_service_image {"},{"line_number":623,"context_line":"    MANILA_LXD_META_URL\u003d\"https://github.com/uglide/manila-image-elements/releases/download/0.1.0/manila-lxd-meta_a1.tar\""},{"line_number":624,"context_line":"    MANILA_LXD_ROOTFS_URL\u003d\"https://github.com/uglide/manila-image-elements/releases/download/0.1.0/manila-lxd-service-image_a1.tar.xz\""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    download_image $MANILA_LXD_META_URL"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a740942_4c1d5b65","line":623,"in_reply_to":"ba8a016a_26bb87c6","updated":"2015-12-14 18:06:47.000000000","message":"Done","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":627,"context_line":"    download_image $MANILA_LXD_ROOTFS_URL"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    # Import image in LXD"},{"line_number":630,"context_line":"    lxc image import $FILES/`basename \"$MANILA_LXD_META_URL\"` $FILES/`basename \"$MANILA_LXD_ROOTFS_URL\"` --alias manila-lxd-image"},{"line_number":631,"context_line":"}"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"function remove_lxd_service_image {"}],"source_content_type":"text/x-sh","patch_set":1,"id":"ba8a016a_46becb00","line":630,"updated":"2015-11-16 13:53:12.000000000","message":"Name of image could be configurable.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"1db69023e3361e5eb63efc9c58c839eec934b0f7","unresolved":false,"context_lines":[{"line_number":627,"context_line":"    download_image $MANILA_LXD_ROOTFS_URL"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    # Import image in LXD"},{"line_number":630,"context_line":"    lxc image import $FILES/`basename \"$MANILA_LXD_META_URL\"` $FILES/`basename \"$MANILA_LXD_ROOTFS_URL\"` --alias manila-lxd-image"},{"line_number":631,"context_line":"}"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"function remove_lxd_service_image {"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a740942_8c41033c","line":630,"in_reply_to":"ba8a016a_46becb00","updated":"2015-12-14 18:06:47.000000000","message":"Done","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":631,"context_line":"}"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"function remove_lxd_service_image {"},{"line_number":634,"context_line":"    lxc image delete \"manila-lxd-image\" || echo \"LXD image not found\""},{"line_number":635,"context_line":"}"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"function install_libraries {"}],"source_content_type":"text/x-sh","patch_set":1,"id":"ba8a016a_06a1a3a9","line":634,"updated":"2015-11-16 13:53:12.000000000","message":"LXD image $LXD_IMAGE_NAME not found.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"1db69023e3361e5eb63efc9c58c839eec934b0f7","unresolved":false,"context_lines":[{"line_number":631,"context_line":"}"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"function remove_lxd_service_image {"},{"line_number":634,"context_line":"    lxc image delete \"manila-lxd-image\" || echo \"LXD image not found\""},{"line_number":635,"context_line":"}"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"function install_libraries {"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a740942_ac3cffbf","line":634,"in_reply_to":"ba8a016a_06a1a3a9","updated":"2015-12-14 18:06:47.000000000","message":"Done","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        fi"},{"line_number":646,"context_line":"    fi"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    if is_driver_enabled \"manila.share.drivers.lxc.LXCDriver\"; then"},{"line_number":649,"context_line":"        install_lxd"},{"line_number":650,"context_line":"    fi"},{"line_number":651,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":1,"id":"ba8a016a_66698f8b","line":648,"updated":"2015-11-16 13:53:12.000000000","message":"You refer to it three times in this file. So, to avoid possible nits in string and unexpected behaviour I propose to move it to separate env var.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"1db69023e3361e5eb63efc9c58c839eec934b0f7","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        fi"},{"line_number":646,"context_line":"    fi"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    if is_driver_enabled \"manila.share.drivers.lxc.LXCDriver\"; then"},{"line_number":649,"context_line":"        install_lxd"},{"line_number":650,"context_line":"    fi"},{"line_number":651,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a740942_c9593d90","line":648,"in_reply_to":"ba8a016a_66698f8b","updated":"2015-12-14 18:06:47.000000000","message":"Done","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":703,"context_line":"    cleanup_manila"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    if is_driver_enabled \"manila.share.drivers.lxc.LXCDriver\"; then"},{"line_number":706,"context_line":"        remove_lxd_service_image"},{"line_number":707,"context_line":"    fi"},{"line_number":708,"context_line":"fi"},{"line_number":709,"context_line":""}],"source_content_type":"text/x-sh","patch_set":1,"id":"ba8a016a_e6457f17","line":706,"updated":"2015-11-16 13:53:12.000000000","message":"Better to place it into \"cleanup_manila\" func. This func dedicated exactly for such things.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"1db69023e3361e5eb63efc9c58c839eec934b0f7","unresolved":false,"context_lines":[{"line_number":703,"context_line":"    cleanup_manila"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    if is_driver_enabled \"manila.share.drivers.lxc.LXCDriver\"; then"},{"line_number":706,"context_line":"        remove_lxd_service_image"},{"line_number":707,"context_line":"    fi"},{"line_number":708,"context_line":"fi"},{"line_number":709,"context_line":""}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a740942_e9eaf973","line":706,"in_reply_to":"ba8a016a_e6457f17","updated":"2015-12-14 18:06:47.000000000","message":"Done","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"564d544a255d0f512da774d9c543fbad1823b0f8","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                    SHARE_BACKING_FILE\u003d${SHARE_BACKING_FILE:-$DATA_DIR/${SHARE_GROUP}-backing-file}"},{"line_number":473,"context_line":"                    # Only create if the file doesn\u0027t already exists"},{"line_number":474,"context_line":"                    [[ -f $SHARE_BACKING_FILE ]] || truncate -s $SHARE_BACKING_FILE_SIZE $SHARE_BACKING_FILE"},{"line_number":475,"context_line":"\t\t    echo ATTACHING BACKING FILE...."},{"line_number":476,"context_line":"                    DEV\u003d`sudo losetup -f --show $SHARE_BACKING_FILE`"},{"line_number":477,"context_line":"\t\t    echo $DEV"},{"line_number":478,"context_line":"\t\t    sudo losetup --all"}],"source_content_type":"text/x-sh","patch_set":20,"id":"3a57f1b5_360d9290","line":475,"range":{"start_line":475,"start_character":0,"end_line":475,"end_character":6},"updated":"2016-02-11 13:40:09.000000000","message":"TABs should not be used.","commit_id":"a4fa862e4f734c86879333c3a72651fd73f682be"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"c00d0d6dadea6a0b2f45550c5412735f3e04a52c","unresolved":false,"context_lines":[{"line_number":578,"context_line":"function install_lxd {"},{"line_number":579,"context_line":"#    local pylxd_dir\u003d$DEST/pylxd"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"#    install_package python-software-properties"},{"line_number":582,"context_line":"    apt_get update"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_e5b40936","line":581,"updated":"2016-02-11 21:34:18.000000000","message":"sudo apt-get install -y software-properties-common","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d31009d00314cf6093086e1d2a9c3a7c18ad78bd","unresolved":false,"context_lines":[{"line_number":578,"context_line":"function install_lxd {"},{"line_number":579,"context_line":"#    local pylxd_dir\u003d$DEST/pylxd"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"#    install_package python-software-properties"},{"line_number":582,"context_line":"    apt_get update"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_5ba84b77","line":581,"in_reply_to":"3a57f1b5_e5b40936","updated":"2016-02-12 08:56:17.000000000","message":"Done","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"c00d0d6dadea6a0b2f45550c5412735f3e04a52c","unresolved":false,"context_lines":[{"line_number":579,"context_line":"#    local pylxd_dir\u003d$DEST/pylxd"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"#    install_package python-software-properties"},{"line_number":582,"context_line":"    apt_get update"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"},{"line_number":585,"context_line":"    apt_get update"}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_05b2854c","line":582,"updated":"2016-02-11 21:34:18.000000000","message":"not needed","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d31009d00314cf6093086e1d2a9c3a7c18ad78bd","unresolved":false,"context_lines":[{"line_number":579,"context_line":"#    local pylxd_dir\u003d$DEST/pylxd"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"#    install_package python-software-properties"},{"line_number":582,"context_line":"    apt_get update"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"},{"line_number":585,"context_line":"    apt_get update"}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_fbb7b7d5","line":582,"in_reply_to":"3a57f1b5_05b2854c","updated":"2016-02-12 08:56:17.000000000","message":"Done","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"c00d0d6dadea6a0b2f45550c5412735f3e04a52c","unresolved":false,"context_lines":[{"line_number":582,"context_line":"    apt_get update"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"},{"line_number":585,"context_line":"    apt_get update"},{"line_number":586,"context_line":"    install_package lxd"},{"line_number":587,"context_line":"    install_package lxd-client"},{"line_number":588,"context_line":""}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_457abd78","line":585,"updated":"2016-02-11 21:34:18.000000000","message":"sudo apt-get update","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d31009d00314cf6093086e1d2a9c3a7c18ad78bd","unresolved":false,"context_lines":[{"line_number":582,"context_line":"    apt_get update"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"},{"line_number":585,"context_line":"    apt_get update"},{"line_number":586,"context_line":"    install_package lxd"},{"line_number":587,"context_line":"    install_package lxd-client"},{"line_number":588,"context_line":""}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_3bab0f77","line":585,"in_reply_to":"3a57f1b5_457abd78","updated":"2016-02-12 08:56:17.000000000","message":"Done","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ba471346c7ef67068a41d09528060cc8154b009e","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    install_package lxd-client"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"#    git_clone $PYLXD_REPO $pylxd_dir"},{"line_number":590,"context_line":"#    setup_develop $pylxd_dir"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    # Wait for LXD service"},{"line_number":593,"context_line":"    sleep 15"}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_e5e2c92e","line":590,"updated":"2016-02-11 21:36:43.000000000","message":"Should remove all commented-out code in this function. Commented out code is only appropriate in a WIP patch which obviously should not be merged.","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d31009d00314cf6093086e1d2a9c3a7c18ad78bd","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    install_package lxd-client"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"#    git_clone $PYLXD_REPO $pylxd_dir"},{"line_number":590,"context_line":"#    setup_develop $pylxd_dir"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    # Wait for LXD service"},{"line_number":593,"context_line":"    sleep 15"}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a57f1b5_9ba24398","line":590,"in_reply_to":"3a57f1b5_e5e2c92e","updated":"2016-02-12 08:56:17.000000000","message":"Done","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        upload_image $MANILA_SERVICE_IMAGE_URL $TOKEN"},{"line_number":319,"context_line":"    fi"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    # Download LXD image"},{"line_number":322,"context_line":"    if is_driver_enabled $MANILA_LXD_DRIVER; then"},{"line_number":323,"context_line":"        upload_lxd_service_image"},{"line_number":324,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_e1d1c058","line":321,"range":{"start_line":321,"start_character":6,"end_line":321,"end_character":14},"updated":"2016-02-23 14:32:30.000000000","message":"s/Download/Upload","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        upload_image $MANILA_SERVICE_IMAGE_URL $TOKEN"},{"line_number":319,"context_line":"    fi"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    # Download LXD image"},{"line_number":322,"context_line":"    if is_driver_enabled $MANILA_LXD_DRIVER; then"},{"line_number":323,"context_line":"        upload_lxd_service_image"},{"line_number":324,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_cfec77bd","line":321,"range":{"start_line":321,"start_character":6,"end_line":321,"end_character":14},"in_reply_to":"bae84128_9343d841","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9170d7cb45f1173f6a23e4f43d6972b9b5e296b7","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        upload_image $MANILA_SERVICE_IMAGE_URL $TOKEN"},{"line_number":319,"context_line":"    fi"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    # Download LXD image"},{"line_number":322,"context_line":"    if is_driver_enabled $MANILA_LXD_DRIVER; then"},{"line_number":323,"context_line":"        upload_lxd_service_image"},{"line_number":324,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_9343d841","line":321,"range":{"start_line":321,"start_character":6,"end_line":321,"end_character":14},"in_reply_to":"bae84128_e1d1c058","updated":"2016-02-23 17:27:11.000000000","message":"Actually download is the correct term. The bash function should be renamed.\n\nI suggest download_lxd_service_image() or import_lxd_service_image()","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":401,"context_line":"    local command_args\u003d\"$MANILA_DEFAULT_SHARE_TYPE $driver_handles_share_servers\""},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    if is_driver_enabled $MANILA_LXD_DRIVER; then"},{"line_number":404,"context_line":"        # TODO(u_glide): Remove this condition when LXD driver will support"},{"line_number":405,"context_line":"        # snapshots"},{"line_number":406,"context_line":"        command_args\u003d\"$command_args --snapshot_support false\""},{"line_number":407,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_a1bcd806","line":404,"range":{"start_line":404,"start_character":63,"end_line":404,"end_character":75},"updated":"2016-02-23 14:32:30.000000000","message":"s/will support/supports","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":401,"context_line":"    local command_args\u003d\"$MANILA_DEFAULT_SHARE_TYPE $driver_handles_share_servers\""},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    if is_driver_enabled $MANILA_LXD_DRIVER; then"},{"line_number":404,"context_line":"        # TODO(u_glide): Remove this condition when LXD driver will support"},{"line_number":405,"context_line":"        # snapshots"},{"line_number":406,"context_line":"        command_args\u003d\"$command_args --snapshot_support false\""},{"line_number":407,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_0f313f5a","line":404,"range":{"start_line":404,"start_character":63,"end_line":404,"end_character":75},"in_reply_to":"bae84128_a1bcd806","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9170d7cb45f1173f6a23e4f43d6972b9b5e296b7","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    fi"},{"line_number":575,"context_line":"}"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"function install_lxd {"},{"line_number":578,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"},{"line_number":579,"context_line":"    sudo apt-get update"},{"line_number":580,"context_line":"    install_package lxd"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_73dc5473","line":577,"updated":"2016-02-23 17:27:11.000000000","message":"Before you can call apt-add-repository, you need this:\n\n sudo apt-get -y install software-properties-common\n\nThis package is installed on the gate, but devstack does not install it on my box so line 578 breaks.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    fi"},{"line_number":575,"context_line":"}"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"function install_lxd {"},{"line_number":578,"context_line":"    sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable"},{"line_number":579,"context_line":"    sudo apt-get update"},{"line_number":580,"context_line":"    install_package lxd"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_af2933e8","line":577,"in_reply_to":"bae84128_73dc5473","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":462,"context_line":"    if [ \"$SHARE_DRIVER\" \u003d\u003d \"manila.share.drivers.lxc.LXCDriver\" ]; then"},{"line_number":463,"context_line":"        # LV-backing part for LXD driver works similarly to LV-backing for LVM"},{"line_number":464,"context_line":"        # driver so it is mostly reused here. Variables and values are also"},{"line_number":465,"context_line":"        # reused."},{"line_number":466,"context_line":"        if is_service_enabled m-shr; then"},{"line_number":467,"context_line":"            SHARE_GROUP\u003d\"manila_lxd_volumes\""},{"line_number":468,"context_line":""}],"source_content_type":"text/x-sh","patch_set":46,"id":"7af24918_fb5e2875","line":465,"updated":"2016-03-01 13:43:26.000000000","message":"I asked some time ago. Asking again. Why this part not combined with LVM part? I don\u0027t see a reason to make it separate copy-paste.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"407008dc112f1d8db1c201d77c6709e4b94e5d5e","unresolved":false,"context_lines":[{"line_number":462,"context_line":"    if [ \"$SHARE_DRIVER\" \u003d\u003d \"manila.share.drivers.lxc.LXCDriver\" ]; then"},{"line_number":463,"context_line":"        # LV-backing part for LXD driver works similarly to LV-backing for LVM"},{"line_number":464,"context_line":"        # driver so it is mostly reused here. Variables and values are also"},{"line_number":465,"context_line":"        # reused."},{"line_number":466,"context_line":"        if is_service_enabled m-shr; then"},{"line_number":467,"context_line":"            SHARE_GROUP\u003d\"manila_lxd_volumes\""},{"line_number":468,"context_line":""}],"source_content_type":"text/x-sh","patch_set":46,"id":"7af24918_ecd4a948","line":465,"in_reply_to":"7af24918_fb5e2875","updated":"2016-03-01 14:51:43.000000000","message":"Sure, but previously it was not the time to clean up. Now the time has come to clean this up.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"734291728b053d2e5251c238634c6c088b10a52d","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        fi"},{"line_number":466,"context_line":"    fi"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    if [ \"$SHARE_DRIVER\" \u003d\u003d \"manila.share.drivers.lxc.LXCDriver\" ]; then"},{"line_number":469,"context_line":"        if is_service_enabled m-shr; then"},{"line_number":470,"context_line":"            SHARE_GROUP\u003d\"manila_lxd_volumes\""},{"line_number":471,"context_line":""}],"source_content_type":"text/x-sh","patch_set":47,"id":"7af24918_6086d8ba","line":468,"updated":"2016-03-01 15:28:37.000000000","message":"lxd.LXDDriver","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c5142e05b23234b6149b6322cbfc8a2d8498ebeb","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        fi"},{"line_number":466,"context_line":"    fi"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    if [ \"$SHARE_DRIVER\" \u003d\u003d \"manila.share.drivers.lxc.LXCDriver\" ]; then"},{"line_number":469,"context_line":"        if is_service_enabled m-shr; then"},{"line_number":470,"context_line":"            SHARE_GROUP\u003d\"manila_lxd_volumes\""},{"line_number":471,"context_line":""}],"source_content_type":"text/x-sh","patch_set":47,"id":"7af24918_b873f04c","line":468,"in_reply_to":"7af24918_6086d8ba","updated":"2016-03-01 17:53:44.000000000","message":"Done","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"89cfd0c8cdf10c27588e2d0b735d66d3180026ee","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        if is_service_enabled m-shr; then"},{"line_number":497,"context_line":"            SHARE_GROUP\u003d\"manila_lxd_volumes\""},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"            if ! sudo vgs $SHARE_GROUP; then"},{"line_number":500,"context_line":"                configure_backing_file"},{"line_number":501,"context_line":"            fi"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"            mkdir -p $MANILA_STATE_PATH/shares"},{"line_number":504,"context_line":"        fi"},{"line_number":505,"context_line":"    elif [ \"$SHARE_DRIVER\" \u003d\u003d \"manila.share.drivers.zfsonlinux.driver.ZFSonLinuxShareDriver\" ]; then"},{"line_number":506,"context_line":"        if is_service_enabled m-shr; then"}],"source_content_type":"text/x-sh","patch_set":51,"id":"7af24918_2ac0f17b","line":503,"range":{"start_line":499,"start_character":12,"end_line":503,"end_character":46},"updated":"2016-03-02 11:28:42.000000000","message":"These could be a part of function too. And this func could expect first arg as updated $SHARE_GROUP or use it there. Still duplication exist.","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"15a8bb42d5a145018ae1e3fa2ce1a7aa47000d01","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        if is_service_enabled m-shr; then"},{"line_number":497,"context_line":"            SHARE_GROUP\u003d\"manila_lxd_volumes\""},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"            if ! sudo vgs $SHARE_GROUP; then"},{"line_number":500,"context_line":"                configure_backing_file"},{"line_number":501,"context_line":"            fi"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"            mkdir -p $MANILA_STATE_PATH/shares"},{"line_number":504,"context_line":"        fi"},{"line_number":505,"context_line":"    elif [ \"$SHARE_DRIVER\" \u003d\u003d \"manila.share.drivers.zfsonlinux.driver.ZFSonLinuxShareDriver\" ]; then"},{"line_number":506,"context_line":"        if is_service_enabled m-shr; then"}],"source_content_type":"text/x-sh","patch_set":51,"id":"7af24918_a35ffce3","line":503,"range":{"start_line":499,"start_character":12,"end_line":503,"end_character":46},"in_reply_to":"7af24918_2ac0f17b","updated":"2016-03-02 15:52:27.000000000","message":"Done","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"}],"devstack/settings":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ba471346c7ef67068a41d09528060cc8154b009e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"# LXD Driver"},{"line_number":139,"context_line":"MANILA_LXD_DRIVER\u003d${MANILA_LXD_DRIVER:-\"manila.share.drivers.lxc.LXCDriver\"}"},{"line_number":140,"context_line":"MANILA_LXD_IMAGE_ALIAS\u003d${MANILA_LXD_IMAGE_ALIAS:-\"manila-lxd-image\"}"},{"line_number":141,"context_line":"MANILA_LXD_META_URL\u003d${MANILA_LXD_META_URL:-\"https://github.com/a-ovchinnikov/manila-image-elements-lxd-images/releases/download/0.1.0/manila-lxd-meta.tar\"}"},{"line_number":142,"context_line":"MANILA_LXD_ROOTFS_URL\u003d${MANILA_LXD_ROOTFS_URL:-\"https://github.com/a-ovchinnikov/manila-image-elements-lxd-images/releases/download/0.1.0/manila-service-image.tar.xz\"}"},{"line_number":143,"context_line":"PYLXD_REPO\u003d${PYLXD_REPO:-git://github.com/lxc/pylxd}"},{"line_number":144,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":21,"id":"3a57f1b5_e5b96916","line":141,"updated":"2016-02-11 21:36:43.000000000","message":"These URLs are obviously temporary. Please add a comment here explaining that they\u0027ll be changed to a more official location.","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d31009d00314cf6093086e1d2a9c3a7c18ad78bd","unresolved":false,"context_lines":[{"line_number":138,"context_line":"# LXD Driver"},{"line_number":139,"context_line":"MANILA_LXD_DRIVER\u003d${MANILA_LXD_DRIVER:-\"manila.share.drivers.lxc.LXCDriver\"}"},{"line_number":140,"context_line":"MANILA_LXD_IMAGE_ALIAS\u003d${MANILA_LXD_IMAGE_ALIAS:-\"manila-lxd-image\"}"},{"line_number":141,"context_line":"MANILA_LXD_META_URL\u003d${MANILA_LXD_META_URL:-\"https://github.com/a-ovchinnikov/manila-image-elements-lxd-images/releases/download/0.1.0/manila-lxd-meta.tar\"}"},{"line_number":142,"context_line":"MANILA_LXD_ROOTFS_URL\u003d${MANILA_LXD_ROOTFS_URL:-\"https://github.com/a-ovchinnikov/manila-image-elements-lxd-images/releases/download/0.1.0/manila-service-image.tar.xz\"}"},{"line_number":143,"context_line":"PYLXD_REPO\u003d${PYLXD_REPO:-git://github.com/lxc/pylxd}"},{"line_number":144,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":21,"id":"3a57f1b5_db119b05","line":141,"in_reply_to":"3a57f1b5_e5b96916","updated":"2016-02-12 08:56:17.000000000","message":"Done","commit_id":"da90494f9a37000fc6cb4fd5c9b390ff9f7501e2"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"89cfd0c8cdf10c27588e2d0b735d66d3180026ee","unresolved":false,"context_lines":[{"line_number":163,"context_line":"# (aovchinnikov): This location is temporary and will be changed to a"},{"line_number":164,"context_line":"# permanent one as soon as possible."},{"line_number":165,"context_line":"MANILA_LXD_ROOTFS_URL\u003d${MANILA_LXD_ROOTFS_URL:-\"https://github.com/a-ovchinnikov/manila-image-elements-lxd-images/releases/download/0.1.0/manila-service-image.tar.xz\"}"},{"line_number":166,"context_line":"PYLXD_REPO\u003d${PYLXD_REPO:-git://github.com/lxc/pylxd}"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"# Enable manila services"},{"line_number":169,"context_line":"# ----------------------"}],"source_content_type":"application/octet-stream","patch_set":51,"id":"7af24918_ea5ba9f4","line":166,"range":{"start_line":166,"start_character":0,"end_line":166,"end_character":52},"updated":"2016-03-02 11:28:42.000000000","message":"Is it really required? isn\u0027t it will be installed using \"requirements.txt\" file?","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"15a8bb42d5a145018ae1e3fa2ce1a7aa47000d01","unresolved":false,"context_lines":[{"line_number":163,"context_line":"# (aovchinnikov): This location is temporary and will be changed to a"},{"line_number":164,"context_line":"# permanent one as soon as possible."},{"line_number":165,"context_line":"MANILA_LXD_ROOTFS_URL\u003d${MANILA_LXD_ROOTFS_URL:-\"https://github.com/a-ovchinnikov/manila-image-elements-lxd-images/releases/download/0.1.0/manila-service-image.tar.xz\"}"},{"line_number":166,"context_line":"PYLXD_REPO\u003d${PYLXD_REPO:-git://github.com/lxc/pylxd}"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"# Enable manila services"},{"line_number":169,"context_line":"# ----------------------"}],"source_content_type":"application/octet-stream","patch_set":51,"id":"7af24918_4300b8aa","line":166,"range":{"start_line":166,"start_character":0,"end_line":166,"end_character":52},"in_reply_to":"7af24918_ea5ba9f4","updated":"2016-03-02 15:52:27.000000000","message":"Done","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"}],"doc/source/devref/share_back_ends_feature_support_mapping.rst":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d6896d1a7892e5241b56c60154bc0bc61d4c98c9","unresolved":false,"context_lines":[{"line_number":100,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":101,"context_line":"|                 LVM                    |    NFS (M)   |    CIFS (M)    |     \\-     |    NFS (M)   |    CIFS (M)    |     \\-     |"},{"line_number":102,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":103,"context_line":"|                 LXC                    | NFS,CIFS (M) |       \\-       |     \\-     | NFS,CIFS (M) |       \\-       |     \\-     |"},{"line_number":104,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":105,"context_line":"|                Quobyte                 |    NFS (K)   |       \\-       |     \\-     |    NFS (K)   |       \\-       |     \\-     |"},{"line_number":106,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"}],"source_content_type":"text/x-rst","patch_set":38,"id":"bae84128_a4dae314","line":103,"range":{"start_line":103,"start_character":92,"end_line":103,"end_character":96},"updated":"2016-02-24 13:13:28.000000000","message":"This is not true. You may allow to everybody through guest access, but it is not through access_rules.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0fbf32c3f080bd0b1807d8c6f8cd637ea94018c5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":101,"context_line":"|                 LVM                    |    NFS (M)   |    CIFS (M)    |     \\-     |    NFS (M)   |    CIFS (M)    |     \\-     |"},{"line_number":102,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":103,"context_line":"|                 LXC                    | NFS,CIFS (M) |       \\-       |     \\-     | NFS,CIFS (M) |       \\-       |     \\-     |"},{"line_number":104,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":105,"context_line":"|                Quobyte                 |    NFS (K)   |       \\-       |     \\-     |    NFS (K)   |       \\-       |     \\-     |"},{"line_number":106,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"}],"source_content_type":"text/x-rst","patch_set":38,"id":"bae84128_3adc2a45","line":103,"range":{"start_line":103,"start_character":92,"end_line":103,"end_character":96},"in_reply_to":"bae84128_a4dae314","updated":"2016-02-24 13:51:07.000000000","message":"Right, that\u0027s misleading. Thank you, will correct this.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":100,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":101,"context_line":"|                 LVM                    |    NFS (M)   |    CIFS (M)    |     \\-     |    NFS (M)   |    CIFS (M)    |     \\-     |"},{"line_number":102,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":103,"context_line":"|                 LXC                    | NFS,CIFS (M) |       \\-       |     \\-     |    NFS (M)   |       \\-       |     \\-     |"},{"line_number":104,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":105,"context_line":"|                Quobyte                 |    NFS (K)   |       \\-       |     \\-     |    NFS (K)   |       \\-       |     \\-     |"},{"line_number":106,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"}],"source_content_type":"text/x-rst","patch_set":46,"id":"7af24918_79cea084","line":103,"range":{"start_line":103,"start_character":41,"end_line":103,"end_character":132},"updated":"2016-03-01 13:43:26.000000000","message":"Information provided here is not true.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"407008dc112f1d8db1c201d77c6709e4b94e5d5e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":101,"context_line":"|                 LVM                    |    NFS (M)   |    CIFS (M)    |     \\-     |    NFS (M)   |    CIFS (M)    |     \\-     |"},{"line_number":102,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":103,"context_line":"|                 LXC                    | NFS,CIFS (M) |       \\-       |     \\-     |    NFS (M)   |       \\-       |     \\-     |"},{"line_number":104,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"},{"line_number":105,"context_line":"|                Quobyte                 |    NFS (K)   |       \\-       |     \\-     |    NFS (K)   |       \\-       |     \\-     |"},{"line_number":106,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+----------------+------------+"}],"source_content_type":"text/x-rst","patch_set":46,"id":"7af24918_6c3c1930","line":103,"range":{"start_line":103,"start_character":41,"end_line":103,"end_character":132},"in_reply_to":"7af24918_79cea084","updated":"2016-03-01 14:51:43.000000000","message":"Right, will fix it.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"89cfd0c8cdf10c27588e2d0b735d66d3180026ee","unresolved":false,"context_lines":[{"line_number":118,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+--------------+----------------+------------+------------+"},{"line_number":119,"context_line":"|              CephFS Native             |      \\-      |       \\-       |     \\-     |   CEPH(M)    |      \\-      |       \\-       |     \\-     |     \\-     |"},{"line_number":120,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+--------------+----------------+------------+------------+"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Mapping of share drivers and security services support"},{"line_number":124,"context_line":"------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":51,"id":"7af24918_aa0881da","line":121,"updated":"2016-03-02 11:28:42.000000000","message":"Why new line is added? Every table in this doc is separated exactly with one line.","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"15a8bb42d5a145018ae1e3fa2ce1a7aa47000d01","unresolved":false,"context_lines":[{"line_number":118,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+--------------+----------------+------------+------------+"},{"line_number":119,"context_line":"|              CephFS Native             |      \\-      |       \\-       |     \\-     |   CEPH(M)    |      \\-      |       \\-       |     \\-     |     \\-     |"},{"line_number":120,"context_line":"+----------------------------------------+--------------+----------------+------------+--------------+--------------+----------------+------------+------------+"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Mapping of share drivers and security services support"},{"line_number":124,"context_line":"------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":51,"id":"7af24918_0379902f","line":121,"in_reply_to":"7af24918_aa0881da","updated":"2016-03-02 15:52:27.000000000","message":"Done","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"}],"etc/manila/rootwrap.d/share.filters":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"a4ba40abc4f99770261c5c6087731b27696fec8b","unresolved":false,"context_lines":[{"line_number":138,"context_line":"rmconf: RegExpFilter, sh, root, sh, -c, rm -f /.*/\\*\\.conf$"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"# LXD driver commands"},{"line_number":141,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":142,"context_line":"lxc: CommandFilter, lxc, root"},{"line_number":143,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":144,"context_line":"brctl: CommandFilter, brctl, root"}],"source_content_type":"application/octet-stream","patch_set":47,"id":"7af24918_0018b483","line":141,"range":{"start_line":141,"start_character":23,"end_line":141,"end_character":29},"updated":"2016-03-01 15:30:42.000000000","message":"lxd.py.","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c5142e05b23234b6149b6322cbfc8a2d8498ebeb","unresolved":false,"context_lines":[{"line_number":138,"context_line":"rmconf: RegExpFilter, sh, root, sh, -c, rm -f /.*/\\*\\.conf$"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"# LXD driver commands"},{"line_number":141,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":142,"context_line":"lxc: CommandFilter, lxc, root"},{"line_number":143,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":144,"context_line":"brctl: CommandFilter, brctl, root"}],"source_content_type":"application/octet-stream","patch_set":47,"id":"7af24918_18a144aa","line":141,"range":{"start_line":141,"start_character":23,"end_line":141,"end_character":29},"in_reply_to":"7af24918_0018b483","updated":"2016-03-01 17:53:44.000000000","message":"Done","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"a4ba40abc4f99770261c5c6087731b27696fec8b","unresolved":false,"context_lines":[{"line_number":140,"context_line":"# LXD driver commands"},{"line_number":141,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":142,"context_line":"lxc: CommandFilter, lxc, root"},{"line_number":143,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":144,"context_line":"brctl: CommandFilter, brctl, root"}],"source_content_type":"application/octet-stream","patch_set":47,"id":"7af24918_800cc443","line":143,"range":{"start_line":143,"start_character":23,"end_line":143,"end_character":29},"updated":"2016-03-01 15:30:42.000000000","message":"lxd.py","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c5142e05b23234b6149b6322cbfc8a2d8498ebeb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"# LXD driver commands"},{"line_number":141,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":142,"context_line":"lxc: CommandFilter, lxc, root"},{"line_number":143,"context_line":"# manila/share/drivers/lxc.py"},{"line_number":144,"context_line":"brctl: CommandFilter, brctl, root"}],"source_content_type":"application/octet-stream","patch_set":47,"id":"7af24918_58abcc89","line":143,"range":{"start_line":143,"start_character":23,"end_line":143,"end_character":29},"in_reply_to":"7af24918_800cc443","updated":"2016-03-01 17:53:44.000000000","message":"Done","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"}],"manila/network/neutron/neutron_network_plugin.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"88718ad85e1475ba352d163e14e61ef700e5120c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\"),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_4cde5cde","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":19},"updated":"2016-02-05 13:14:26.000000000","message":"You do not use this empty string. Skip it on line 120. And default value is None already. So, this line should be removed as redundant.","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\"),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_6fdd4a6e","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":19},"in_reply_to":"5a5ae5dd_4cde5cde","updated":"2016-02-05 14:10:54.000000000","message":"Done","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bd6ecb50ec26a01e5b05c9a082391c959a4d8925","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\"),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_12e6b1e8","line":45,"range":{"start_line":45,"start_character":16,"end_line":45,"end_character":18},"updated":"2016-02-09 13:59:30.000000000","message":"This default value is ignored and set other value on line 120.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\"),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_01dad978","line":45,"range":{"start_line":45,"start_character":16,"end_line":45,"end_character":18},"in_reply_to":"5a5ae5dd_12e6b1e8","updated":"2016-02-09 15:55:47.000000000","message":"It is not ignored but used to set host_id to None.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78e91896024ffed5cdb2fc3327299aed9b1025a9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\"),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_429a976f","line":46,"range":{"start_line":43,"start_character":4,"end_line":46,"end_character":63},"updated":"2016-02-12 11:22:23.000000000","message":"Please, add arg \"deprecated_group\u003d\u0027DEFAULT\u0027\" as above. It will allow admin to set up this opt in DEFAULT group for all backends.","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"03570c7a0bdf00e931ca0447c8d27a9f0d0d0c59","unresolved":false,"context_lines":[{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\"),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_95b1a703","line":46,"range":{"start_line":43,"start_character":4,"end_line":46,"end_character":63},"in_reply_to":"3a57f1b5_429a976f","updated":"2016-02-12 13:59:58.000000000","message":"Done","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\","},{"line_number":47,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":48,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_de819a4f","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":19},"updated":"2016-03-01 13:43:26.000000000","message":"This default value is overridden on line 128. So, you never use this default value. Also, None is default value for each config option. So, this one can be just removed.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"407008dc112f1d8db1c201d77c6709e4b94e5d5e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        default\u003d\"\","},{"line_number":46,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\","},{"line_number":47,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":48,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_4c9f9d03","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":19},"in_reply_to":"7af24918_de819a4f","updated":"2016-03-01 14:51:43.000000000","message":"Done","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            self._delete_port(context, port)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _create_port(self, context, share_server, share_network, device_owner):"},{"line_number":128,"context_line":"        host_id \u003d self.neutron_api.configuration.host_id or None"},{"line_number":129,"context_line":"        port \u003d self.neutron_api.create_port("},{"line_number":130,"context_line":"            share_network[\u0027project_id\u0027],"},{"line_number":131,"context_line":"            network_id\u003dshare_network[\u0027neutron_net_id\u0027],"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_5e962a95","line":128,"range":{"start_line":128,"start_character":56,"end_line":128,"end_character":64},"updated":"2016-03-01 13:43:26.000000000","message":"and \"or None\" part can be removed too.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"407008dc112f1d8db1c201d77c6709e4b94e5d5e","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            self._delete_port(context, port)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _create_port(self, context, share_server, share_network, device_owner):"},{"line_number":128,"context_line":"        host_id \u003d self.neutron_api.configuration.host_id or None"},{"line_number":129,"context_line":"        port \u003d self.neutron_api.create_port("},{"line_number":130,"context_line":"            share_network[\u0027project_id\u0027],"},{"line_number":131,"context_line":"            network_id\u003dshare_network[\u0027neutron_net_id\u0027],"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_2ca4d155","line":128,"range":{"start_line":128,"start_character":56,"end_line":128,"end_character":64},"in_reply_to":"7af24918_5e962a95","updated":"2016-03-01 14:51:43.000000000","message":"Done","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7089e5030b2b6947325128db58eac597c31954f8","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\","},{"line_number":46,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":47,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_fbe8dd18","line":44,"range":{"start_line":44,"start_character":9,"end_line":44,"end_character":16},"updated":"2016-03-01 15:32:09.000000000","message":"Forgot to mention earlier. Need to add \"neutron_\" prefix. as it is done for options above.","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c5142e05b23234b6149b6322cbfc8a2d8498ebeb","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\","},{"line_number":46,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":47,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_9802743d","line":44,"range":{"start_line":44,"start_character":9,"end_line":44,"end_character":16},"in_reply_to":"7af24918_fbe8dd18","updated":"2016-03-01 17:53:44.000000000","message":"Done","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"41d981a83babb1b8f5faa6337e9a585517b68d2c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\","},{"line_number":46,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_3b26c568","line":45,"updated":"2016-03-01 15:33:50.000000000","message":"Also would be useful to say where to get such info.","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c5142e05b23234b6149b6322cbfc8a2d8498ebeb","unresolved":false,"context_lines":[{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"host_id\","},{"line_number":45,"context_line":"        help\u003d\"Host id to be used when creating neutron port.\","},{"line_number":46,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_78ffa834","line":45,"in_reply_to":"7af24918_3b26c568","updated":"2016-03-01 17:53:44.000000000","message":"Done","commit_id":"8a5c73255390423b07dc2f8889b4d7c8b066d477"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"89cfd0c8cdf10c27588e2d0b735d66d3180026ee","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"neutron_host_id\","},{"line_number":45,"context_line":"        help\u003d\"Host id to be used when creating neutron port. Hostname of \""},{"line_number":46,"context_line":"        \"a controller running Neutron should be used in a general case.\","},{"line_number":47,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"}],"source_content_type":"text/x-python","patch_set":51,"id":"7af24918_2a911153","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":26},"updated":"2016-03-02 11:28:42.000000000","message":"Case when this opt is defined not tested.","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"15a8bb42d5a145018ae1e3fa2ce1a7aa47000d01","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"neutron_network_plugin_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt("},{"line_number":44,"context_line":"        \"neutron_host_id\","},{"line_number":45,"context_line":"        help\u003d\"Host id to be used when creating neutron port. Hostname of \""},{"line_number":46,"context_line":"        \"a controller running Neutron should be used in a general case.\","},{"line_number":47,"context_line":"        deprecated_group\u003d\u0027DEFAULT\u0027),"}],"source_content_type":"text/x-python","patch_set":51,"id":"7af24918_8e64a749","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":26},"in_reply_to":"7af24918_2a911153","updated":"2016-03-02 15:52:27.000000000","message":"Done","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"}],"manila/share/drivers/lxc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return op[16:]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class LXDHelper(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, lxd_api, build_timeout, check_timeout):"},{"line_number":39,"context_line":"        super(LXDHelper, self).__init__()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_d3afbf29","line":36,"updated":"2015-11-21 02:39:22.000000000","message":"We probably should have a more general base helper class called ContainerHelper, LXDHelper just inherits from it.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class LXDHelper(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, lxd_api, build_timeout, check_timeout):"},{"line_number":39,"context_line":"        super(LXDHelper, self).__init__()"},{"line_number":40,"context_line":"        self.api \u003d lxd_api"},{"line_number":41,"context_line":"        self.build_timeout \u003d build_timeout"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_e65edf75","line":38,"updated":"2015-11-16 13:53:12.000000000","message":"Last two could have default values.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.api \u003d lxd_api"},{"line_number":41,"context_line":"        self.build_timeout \u003d build_timeout"},{"line_number":42,"context_line":"        self.check_timeout \u003d check_timeout"},{"line_number":43,"context_line":"        self.image_name \u003d \u0027manila-lxd-image\u0027  # TODO: move image name to config"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_container(self, name):"},{"line_number":46,"context_line":"        container_config \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_e6ec9f91","line":43,"updated":"2015-11-16 13:53:12.000000000","message":"http://docs.openstack.org/developer/hacking/#general\n\n\"\"\"\n\nTODO(john_doe): remove this comment \u003e.\u003c\n\n\"\"\"","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        LOG.debug(\"Container init result: %s, %s\", state, data)"},{"line_number":54,"context_line":"        LOG.debug(\"Containers list %s\", self.api.container_list())"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        def container_initialized():"},{"line_number":57,"context_line":"            try:"},{"line_number":58,"context_line":"                LOG.debug(\"Operation: %s\", data[\u0027operation\u0027])"},{"line_number":59,"context_line":"                operation \u003d get_operation_id(data[\u0027operation\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_81cedd81","line":56,"updated":"2015-11-16 13:53:12.000000000","message":"This one could be splitted to separate private method and be decorated with \"utils.retry\" func.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                return info[\u0027status\u0027].lower() \u003d\u003d \"success\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            except Exception as e:"},{"line_number":67,"context_line":"                LOG.debug(\"Check error \u0027%s\u0027\", e)"},{"line_number":68,"context_line":"                return False"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self._wait("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_f3d763bd","line":67,"updated":"2015-11-21 02:39:22.000000000","message":"Please log error here.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self._wait("},{"line_number":71,"context_line":"            container_initialized,"},{"line_number":72,"context_line":"            exception.ManilaException(\"Container creation error\")"},{"line_number":73,"context_line":"        )"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @utils.retry(exception.ManilaException, retries\u003d5)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_93e4d7ac","line":72,"updated":"2015-11-21 02:39:22.000000000","message":"Please define a specific exception for this.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        _, data \u003d self.api.container_start(name, -1)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        def container_running():"},{"line_number":82,"context_line":"            try:"},{"line_number":83,"context_line":"                LOG.debug(\"Start Operation: %s\", data[\u0027operation\u0027])"},{"line_number":84,"context_line":"                operation \u003d get_operation_id(data[\u0027operation\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_41c8f574","line":81,"updated":"2015-11-16 13:53:12.000000000","message":"same here.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                if operation_failed:"},{"line_number":97,"context_line":"                    err_info \u003d info[\u0027metadata\u0027][\u0027metadata\u0027]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"                    raise exception.ManilaException("},{"line_number":100,"context_line":"                        \"Cannot start container: %s\", err_info"},{"line_number":101,"context_line":"                    )"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_33ec0b8f","line":99,"updated":"2015-11-21 02:39:22.000000000","message":"A more specific exception, please.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            except exception.ManilaException:"},{"line_number":107,"context_line":"                raise"},{"line_number":108,"context_line":"            except Exception as e:"},{"line_number":109,"context_line":"                LOG.debug(\"Check error \u0027%s\u0027\", e)"},{"line_number":110,"context_line":"                return False"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        timeout_exc \u003d exception.ManilaException(\"Container startup error\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_93fb7747","line":109,"updated":"2015-11-21 02:39:22.000000000","message":"Log error here.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                return False"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        timeout_exc \u003d exception.ManilaException(\"Container startup error\")"},{"line_number":113,"context_line":"        utils.wait_until_true(container_running, timeout\u003dself.build_timeout,"},{"line_number":114,"context_line":"                              sleep\u003dself.check_timeout, exception\u003dtimeout_exc)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._wait("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_015e6de9","line":113,"updated":"2015-11-16 13:53:12.000000000","message":"You have defined method \"_wait\", why it is not used?","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except KeyError:"},{"line_number":141,"context_line":"            # NOTE(u_glide): Operation failed"},{"line_number":142,"context_line":"            LOG.debug(\u0027Socket secret not found!\u0027)"},{"line_number":143,"context_line":"            return \u0027\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        stream \u003d self.api.operation_stream(operation, socket_pass)"},{"line_number":146,"context_line":"        message \u003d stream.receive()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_7399331f","line":143,"updated":"2015-11-21 02:39:22.000000000","message":"Why returning an empty string?","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2bb36c46c1d80151b64b200ee40b09bf032c1e40","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.lxd.api.container_run_command("},{"line_number":178,"context_line":"            server_id,"},{"line_number":179,"context_line":"            [\"mkdir\", \"/shares/%s\" % share[\u0027name\u0027]]"},{"line_number":180,"context_line":"        )"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":183,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_7ed6c8c6","line":180,"updated":"2015-11-17 08:38:25.000000000","message":"Why don\u0027t you return share export path?","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"LXC/LXD Driver for shares.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_6f130a5c","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":32},"updated":"2016-02-05 13:23:03.000000000","message":"Any notes about bridges? What are expected? What are required? Why?","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"LXC/LXD Driver for shares.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_45fcefb7","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":32},"in_reply_to":"5a5ae5dd_6f130a5c","updated":"2016-02-05 14:10:54.000000000","message":"Added some notes.","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"lxd_opts \u003d ["},{"line_number":37,"context_line":"    cfg.StrOpt(\"network_name\","},{"line_number":38,"context_line":"               default\u003d\"private\","},{"line_number":39,"context_line":"               help\u003d\"Network to generate a port in.\"),"},{"line_number":40,"context_line":"    cfg.StrOpt(\"subnetwork_name\","},{"line_number":41,"context_line":"               default\u003d\"private-subnet\","},{"line_number":42,"context_line":"               help\u003d\"Network to generate a port in.\"),"},{"line_number":43,"context_line":"    # (aovchinnikov): this has to stay till we can produce images which"},{"line_number":44,"context_line":"    # can set up OVS correctly."},{"line_number":45,"context_line":"    cfg.StrOpt(\"linux_bridge_name\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_6cb0f88a","line":42,"range":{"start_line":37,"start_character":4,"end_line":42,"end_character":54},"updated":"2016-02-05 13:23:03.000000000","message":"these should be removed","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"lxd_opts \u003d ["},{"line_number":37,"context_line":"    cfg.StrOpt(\"network_name\","},{"line_number":38,"context_line":"               default\u003d\"private\","},{"line_number":39,"context_line":"               help\u003d\"Network to generate a port in.\"),"},{"line_number":40,"context_line":"    cfg.StrOpt(\"subnetwork_name\","},{"line_number":41,"context_line":"               default\u003d\"private-subnet\","},{"line_number":42,"context_line":"               help\u003d\"Network to generate a port in.\"),"},{"line_number":43,"context_line":"    # (aovchinnikov): this has to stay till we can produce images which"},{"line_number":44,"context_line":"    # can set up OVS correctly."},{"line_number":45,"context_line":"    cfg.StrOpt(\"linux_bridge_name\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_c20775c8","line":42,"range":{"start_line":37,"start_character":4,"end_line":42,"end_character":54},"in_reply_to":"5a5ae5dd_6cb0f88a","updated":"2016-02-05 14:10:54.000000000","message":"Done","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    # can set up OVS correctly."},{"line_number":45,"context_line":"    cfg.StrOpt(\"linux_bridge_name\","},{"line_number":46,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to.\"),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"ovs_bridge_name\","},{"line_number":49,"context_line":"               default\u003d\"br-int\","},{"line_number":50,"context_line":"               help\u003d\"OVS bridge used by Neutron.\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_0c2e24a5","line":47,"range":{"start_line":47,"start_character":21,"end_line":47,"end_character":72},"updated":"2016-02-05 13:23:03.000000000","message":"required or not?","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    # can set up OVS correctly."},{"line_number":45,"context_line":"    cfg.StrOpt(\"linux_bridge_name\","},{"line_number":46,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to.\"),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"ovs_bridge_name\","},{"line_number":49,"context_line":"               default\u003d\"br-int\","},{"line_number":50,"context_line":"               help\u003d\"OVS bridge used by Neutron.\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_e5f07b00","line":47,"range":{"start_line":47,"start_character":21,"end_line":47,"end_character":72},"in_reply_to":"5a5ae5dd_0c2e24a5","updated":"2016-02-05 14:10:54.000000000","message":"The answer is probably \"yes\".","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\"linux_bridge_name\","},{"line_number":46,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to.\"),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"ovs_bridge_name\","},{"line_number":49,"context_line":"               default\u003d\"br-int\","},{"line_number":50,"context_line":"               help\u003d\"OVS bridge used by Neutron.\"),"},{"line_number":51,"context_line":"    cfg.StrOpt(\"nfs_server\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_0c05c412","line":48,"range":{"start_line":48,"start_character":16,"end_line":48,"end_character":30},"updated":"2016-02-05 13:23:03.000000000","message":"required or not?","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\"linux_bridge_name\","},{"line_number":46,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to.\"),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"ovs_bridge_name\","},{"line_number":49,"context_line":"               default\u003d\"br-int\","},{"line_number":50,"context_line":"               help\u003d\"OVS bridge used by Neutron.\"),"},{"line_number":51,"context_line":"    cfg.StrOpt(\"nfs_server\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_a57fe364","line":48,"range":{"start_line":48,"start_character":16,"end_line":48,"end_character":30},"in_reply_to":"5a5ae5dd_0c05c412","updated":"2016-02-05 14:10:54.000000000","message":"The answer is probably \"yes\".","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to.\"),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"ovs_bridge_name\","},{"line_number":49,"context_line":"               default\u003d\"br-int\","},{"line_number":50,"context_line":"               help\u003d\"OVS bridge used by Neutron.\"),"},{"line_number":51,"context_line":"    cfg.StrOpt(\"nfs_server\","},{"line_number":52,"context_line":"               default\u003d\"unfs3\","},{"line_number":53,"context_line":"               help\u003d\"User space NFS server to be used. Currently the only \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_ac7030dd","line":50,"range":{"start_line":50,"start_character":40,"end_line":50,"end_character":47},"updated":"2016-02-05 13:23:03.000000000","message":"Why exactly Neutron?","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to.\"),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"ovs_bridge_name\","},{"line_number":49,"context_line":"               default\u003d\"br-int\","},{"line_number":50,"context_line":"               help\u003d\"OVS bridge used by Neutron.\"),"},{"line_number":51,"context_line":"    cfg.StrOpt(\"nfs_server\","},{"line_number":52,"context_line":"               default\u003d\"unfs3\","},{"line_number":53,"context_line":"               help\u003d\"User space NFS server to be used. Currently the only \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_a2291939","line":50,"range":{"start_line":50,"start_character":40,"end_line":50,"end_character":47},"in_reply_to":"5a5ae5dd_ac7030dd","updated":"2016-02-05 14:10:54.000000000","message":"Done","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"               default\u003d120,"},{"line_number":61,"context_line":"               help\u003d\"Time to wait till container is considered being unable \""},{"line_number":62,"context_line":"                    \"to start.\"),"},{"line_number":63,"context_line":"    cfg.IntOpt(\"check_timeout\","},{"line_number":64,"context_line":"               default\u003d1,"},{"line_number":65,"context_line":"               help\u003d\"Inter-check delay for container operations.\"),"},{"line_number":66,"context_line":"    cfg.StrOpt(\"lxd_image_name\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_ac47d075","line":63,"range":{"start_line":63,"start_character":15,"end_line":63,"end_character":29},"updated":"2016-02-05 13:23:03.000000000","message":"All config options should have prefix specific for this driver, for example: \"lxc_\" or \"lxd_\".","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":60,"context_line":"               default\u003d120,"},{"line_number":61,"context_line":"               help\u003d\"Time to wait till container is considered being unable \""},{"line_number":62,"context_line":"                    \"to start.\"),"},{"line_number":63,"context_line":"    cfg.IntOpt(\"check_timeout\","},{"line_number":64,"context_line":"               default\u003d1,"},{"line_number":65,"context_line":"               help\u003d\"Inter-check delay for container operations.\"),"},{"line_number":66,"context_line":"    cfg.StrOpt(\"lxd_image_name\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_820dfde9","line":63,"range":{"start_line":63,"start_character":15,"end_line":63,"end_character":29},"in_reply_to":"5a5ae5dd_ac47d075","updated":"2016-02-05 14:10:54.000000000","message":"Done","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        self.admin_context \u003d context.get_admin_context()"},{"line_number":422,"context_line":"        self.configuration.append_config_values(lxd_opts)"},{"line_number":423,"context_line":"        self.configuration.append_config_values(lv_opts)"},{"line_number":424,"context_line":"        self.neutron \u003d neutron_api.API(\"DEFAULT\")"},{"line_number":425,"context_line":"        self._helpers \u003d {}"},{"line_number":426,"context_line":"        self.backend_name \u003d self.configuration.safe_get("},{"line_number":427,"context_line":"            \"share_backend_name\") or \"LXC\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_6f96aa94","line":424,"range":{"start_line":424,"start_character":8,"end_line":424,"end_character":49},"updated":"2016-02-05 13:23:03.000000000","message":"Not used. Should not be used. Should be removed.","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        self.admin_context \u003d context.get_admin_context()"},{"line_number":422,"context_line":"        self.configuration.append_config_values(lxd_opts)"},{"line_number":423,"context_line":"        self.configuration.append_config_values(lv_opts)"},{"line_number":424,"context_line":"        self.neutron \u003d neutron_api.API(\"DEFAULT\")"},{"line_number":425,"context_line":"        self._helpers \u003d {}"},{"line_number":426,"context_line":"        self.backend_name \u003d self.configuration.safe_get("},{"line_number":427,"context_line":"            \"share_backend_name\") or \"LXC\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_62ca4150","line":424,"range":{"start_line":424,"start_character":8,"end_line":424,"end_character":49},"in_reply_to":"5a5ae5dd_6f96aa94","updated":"2016-02-05 14:10:54.000000000","message":"Done","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bdb8da3d920ff19b071f135b3672d99721d0281b","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        self._get_helper(share).create_share(server_id)"},{"line_number":495,"context_line":"        return \u0027/share/%s\u0027 % share_name"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _connect_to_neutron_network(self, server_id, network_info):"},{"line_number":498,"context_line":"        LOG.debug(\"Attempting to connect container to neutron network.\")"},{"line_number":499,"context_line":"        network_allocation \u003d network_info[\u0027network_allocations\u0027][0]"},{"line_number":500,"context_line":"        port_address \u003d network_allocation.ip_address"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_0fb85629","line":497,"range":{"start_line":497,"start_character":8,"end_line":497,"end_character":35},"updated":"2016-02-05 13:23:03.000000000","message":"Why exactly neutron? This driver should abstracted from Neutron. If needed to be plugged to some bridge - say explicitly about requirement for bridge and use config otpions.","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5a45f3fbcc6cb34f4598fb091bef13d0651e6bd9","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        self._get_helper(share).create_share(server_id)"},{"line_number":495,"context_line":"        return \u0027/share/%s\u0027 % share_name"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _connect_to_neutron_network(self, server_id, network_info):"},{"line_number":498,"context_line":"        LOG.debug(\"Attempting to connect container to neutron network.\")"},{"line_number":499,"context_line":"        network_allocation \u003d network_info[\u0027network_allocations\u0027][0]"},{"line_number":500,"context_line":"        port_address \u003d network_allocation.ip_address"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_c2df750b","line":497,"range":{"start_line":497,"start_character":8,"end_line":497,"end_character":35},"in_reply_to":"5a5ae5dd_0fb85629","updated":"2016-02-05 14:10:54.000000000","message":"Done","commit_id":"504570d9e497d35480827d0ab973c061e9f78ca0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bd6ecb50ec26a01e5b05c9a082391c959a4d8925","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"LXC/LXD Driver for shares."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This driver allows to use a LXD container as a share serevr."},{"line_number":19,"context_line":"Current implementation suggests that a container when started by LXD will be"},{"line_number":20,"context_line":"plugged into a Linux bridge. Also it is suggested that all interfaces willing"},{"line_number":21,"context_line":"to talk to each other reside in an OVS bridge.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_522ae9e8","line":18,"range":{"start_line":18,"start_character":53,"end_line":18,"end_character":59},"updated":"2016-02-09 13:59:30.000000000","message":"server","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"LXC/LXD Driver for shares."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This driver allows to use a LXD container as a share serevr."},{"line_number":19,"context_line":"Current implementation suggests that a container when started by LXD will be"},{"line_number":20,"context_line":"plugged into a Linux bridge. Also it is suggested that all interfaces willing"},{"line_number":21,"context_line":"to talk to each other reside in an OVS bridge.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_c1eda1f0","line":18,"range":{"start_line":18,"start_character":53,"end_line":18,"end_character":59},"in_reply_to":"5a5ae5dd_522ae9e8","updated":"2016-02-09 15:55:47.000000000","message":"Done","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78704fdd003efeecbc1d8890855e4f95b8697f3d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":46,"context_line":"               required\u003dTrue,"},{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to. \""},{"line_number":48,"context_line":"               \"It will be unpluged from here by the driver.\"),"},{"line_number":49,"context_line":"    cfg.StrOpt(\"lxd_ovs_bridge_name\","},{"line_number":50,"context_line":"               default\u003d\"br-int\","},{"line_number":51,"context_line":"               required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_01ac19ec","line":48,"range":{"start_line":48,"start_character":15,"end_line":48,"end_character":63},"updated":"2016-02-09 15:16:23.000000000","message":"wrong indentation","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":46,"context_line":"               required\u003dTrue,"},{"line_number":47,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to. \""},{"line_number":48,"context_line":"               \"It will be unpluged from here by the driver.\"),"},{"line_number":49,"context_line":"    cfg.StrOpt(\"lxd_ovs_bridge_name\","},{"line_number":50,"context_line":"               default\u003d\"br-int\","},{"line_number":51,"context_line":"               required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_57b5f3cd","line":48,"range":{"start_line":48,"start_character":15,"end_line":48,"end_character":63},"in_reply_to":"5a5ae5dd_01ac19ec","updated":"2016-02-09 15:55:47.000000000","message":"Done","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78704fdd003efeecbc1d8890855e4f95b8697f3d","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        raise NotImplementedError()"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"class LXCCIFSHelper(object):"},{"line_number":350,"context_line":"    def __init__(self, lxd_helper, *args, **kwargs):"},{"line_number":351,"context_line":"        super(LXCCIFSHelper, self).__init__()"},{"line_number":352,"context_line":"        self.share \u003d None or kwargs.get(\"share\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_e11f7d07","line":349,"range":{"start_line":349,"start_character":6,"end_line":349,"end_character":27},"updated":"2016-02-09 15:16:23.000000000","message":"Current CIFS helper depends on \"registry\" option in CIFS config, it should be enabled and disabled by default. You won\u0027t get errors, but share will not be exported indeed.\n\nSo, maybe better to enable it explicitly?","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        raise NotImplementedError()"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"class LXCCIFSHelper(object):"},{"line_number":350,"context_line":"    def __init__(self, lxd_helper, *args, **kwargs):"},{"line_number":351,"context_line":"        super(LXCCIFSHelper, self).__init__()"},{"line_number":352,"context_line":"        self.share \u003d None or kwargs.get(\"share\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_d73b229b","line":349,"range":{"start_line":349,"start_character":6,"end_line":349,"end_character":27},"in_reply_to":"5a5ae5dd_e11f7d07","updated":"2016-02-09 15:55:47.000000000","message":"Ok, will check this behaviour.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bd6ecb50ec26a01e5b05c9a082391c959a4d8925","unresolved":false,"context_lines":[{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":528,"context_line":"        lv_device \u003d self._get_lv_device(share)"},{"line_number":529,"context_line":"        cmd \u003d [\u0027lvextend\u0027, \u0027-L\u0027, \u0027%sG\u0027 % new_size, \u0027-n\u0027, lv_device]"},{"line_number":530,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":531,"context_line":"        self._execute(\u0027resize2fs\u0027, lv_device, run_as_root\u003dTrue)"},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_1508db27","line":529,"range":{"start_line":529,"start_character":14,"end_line":529,"end_character":67},"updated":"2016-02-09 13:59:30.000000000","message":"I recommend to use tuple instead of list in such cases. It is 10 times faster.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78704fdd003efeecbc1d8890855e4f95b8697f3d","unresolved":false,"context_lines":[{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":528,"context_line":"        lv_device \u003d self._get_lv_device(share)"},{"line_number":529,"context_line":"        cmd \u003d [\u0027lvextend\u0027, \u0027-L\u0027, \u0027%sG\u0027 % new_size, \u0027-n\u0027, lv_device]"},{"line_number":530,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":531,"context_line":"        self._execute(\u0027resize2fs\u0027, lv_device, run_as_root\u003dTrue)"},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_81ba49bf","line":529,"range":{"start_line":529,"start_character":14,"end_line":529,"end_character":67},"in_reply_to":"5a5ae5dd_1508db27","updated":"2016-02-09 15:16:23.000000000","message":"Not only here in all places where you need only some kind of an array and do not change amount of its elements.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":528,"context_line":"        lv_device \u003d self._get_lv_device(share)"},{"line_number":529,"context_line":"        cmd \u003d [\u0027lvextend\u0027, \u0027-L\u0027, \u0027%sG\u0027 % new_size, \u0027-n\u0027, lv_device]"},{"line_number":530,"context_line":"        self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":531,"context_line":"        self._execute(\u0027resize2fs\u0027, lv_device, run_as_root\u003dTrue)"},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_0179792f","line":529,"range":{"start_line":529,"start_character":14,"end_line":529,"end_character":67},"in_reply_to":"5a5ae5dd_1508db27","updated":"2016-02-09 15:55:47.000000000","message":"Ok, I\u0027ll do that, but I am not sure that speed is an issue here.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bd6ecb50ec26a01e5b05c9a082391c959a4d8925","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":571,"context_line":"        self._get_helper(share).delete_share(server_id)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        self._execute(\"umount\", self._get_lv_device(share), run_as_root\u003dTrue)"},{"line_number":574,"context_line":"        self._execute(\"lxc\", \"config\", \"device\", \"remove\","},{"line_number":575,"context_line":"                      server_id, share.share_id, run_as_root\u003dTrue)"},{"line_number":576,"context_line":"        self._execute(\"lvremove\", \"-f\", \"--autobackup\", \"n\","},{"line_number":577,"context_line":"                      self._get_lv_device(share), run_as_root\u003dTrue)"},{"line_number":578,"context_line":"        self.lxd.execute_sync("},{"line_number":579,"context_line":"            server_id,"},{"line_number":580,"context_line":"            [\"rm\", \"-fR\", \"/shares/%s\" % share.share_id]"},{"line_number":581,"context_line":"        )"},{"line_number":582,"context_line":"        LOG.debug(\"Deletion of share %s is complete!\" % share.share_id)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def _get_host_veth(self, server_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_922e21a4","line":581,"range":{"start_line":573,"start_character":7,"end_line":581,"end_character":9},"updated":"2016-02-09 13:59:30.000000000","message":"I guess would be useful to add checks for share presence. Because it is common situation to get deletion request for broken servers. That have never not been working.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":571,"context_line":"        self._get_helper(share).delete_share(server_id)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        self._execute(\"umount\", self._get_lv_device(share), run_as_root\u003dTrue)"},{"line_number":574,"context_line":"        self._execute(\"lxc\", \"config\", \"device\", \"remove\","},{"line_number":575,"context_line":"                      server_id, share.share_id, run_as_root\u003dTrue)"},{"line_number":576,"context_line":"        self._execute(\"lvremove\", \"-f\", \"--autobackup\", \"n\","},{"line_number":577,"context_line":"                      self._get_lv_device(share), run_as_root\u003dTrue)"},{"line_number":578,"context_line":"        self.lxd.execute_sync("},{"line_number":579,"context_line":"            server_id,"},{"line_number":580,"context_line":"            [\"rm\", \"-fR\", \"/shares/%s\" % share.share_id]"},{"line_number":581,"context_line":"        )"},{"line_number":582,"context_line":"        LOG.debug(\"Deletion of share %s is complete!\" % share.share_id)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def _get_host_veth(self, server_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_c14a81ac","line":581,"range":{"start_line":573,"start_character":7,"end_line":581,"end_character":9},"in_reply_to":"5a5ae5dd_922e21a4","updated":"2016-02-09 15:55:47.000000000","message":"If this check is to be added then it should be performed before deleting a share via helper. I have not seen a broken container so far, so these commands should be fine no matter what is the state of the server according to Manila.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bd6ecb50ec26a01e5b05c9a082391c959a4d8925","unresolved":false,"context_lines":[{"line_number":591,"context_line":"    def _teardown_server(self, *args, **kwargs):"},{"line_number":592,"context_line":"        server_id \u003d self._get_container_name(kwargs[\"server_details\"][\"id\"])"},{"line_number":593,"context_line":"        host_veth \u003d self._get_host_veth(server_id)"},{"line_number":594,"context_line":"        self.lxd.stop_container(server_id)"},{"line_number":595,"context_line":"        self._execute(\"ovs-vsctl\", \"--\", \"del-port\","},{"line_number":596,"context_line":"                      self.configuration.lxd_ovs_bridge_name, host_veth,"},{"line_number":597,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def deny_access(self, context, share, access_ref, share_server\u003dNone):"},{"line_number":600,"context_line":"        host_to_deny \u003d access_ref[\"access_to\"]"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_126c7107","line":597,"range":{"start_line":594,"start_character":8,"end_line":597,"end_character":39},"updated":"2016-02-09 13:59:30.000000000","message":"I guess would be useful to add checks for server presence. Because it is common situation to get deletion request for broken servers. That have never not been working.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":591,"context_line":"    def _teardown_server(self, *args, **kwargs):"},{"line_number":592,"context_line":"        server_id \u003d self._get_container_name(kwargs[\"server_details\"][\"id\"])"},{"line_number":593,"context_line":"        host_veth \u003d self._get_host_veth(server_id)"},{"line_number":594,"context_line":"        self.lxd.stop_container(server_id)"},{"line_number":595,"context_line":"        self._execute(\"ovs-vsctl\", \"--\", \"del-port\","},{"line_number":596,"context_line":"                      self.configuration.lxd_ovs_bridge_name, host_veth,"},{"line_number":597,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def deny_access(self, context, share, access_ref, share_server\u003dNone):"},{"line_number":600,"context_line":"        host_to_deny \u003d access_ref[\"access_to\"]"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_81cb291e","line":597,"range":{"start_line":594,"start_character":8,"end_line":597,"end_character":39},"in_reply_to":"5a5ae5dd_126c7107","updated":"2016-02-09 15:55:47.000000000","message":"ditto","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bd6ecb50ec26a01e5b05c9a082391c959a4d8925","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        return \"manila-%s\" % server_id"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    def _setup_server(self, network_info, metadata\u003dNone):"},{"line_number":635,"context_line":"        msg \u003d \"Creating share server \u0027%s\u0027.\""},{"line_number":636,"context_line":"        server_id \u003d self._get_container_name(network_info[\"server_id\"])"},{"line_number":637,"context_line":"        LOG.debug(msg % server_id)"},{"line_number":638,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_d26c9938","line":635,"range":{"start_line":635,"start_character":14,"end_line":635,"end_character":43},"updated":"2016-02-09 13:59:30.000000000","message":"All log messages should use translation functions. Same for all such occurrences.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        return \"manila-%s\" % server_id"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    def _setup_server(self, network_info, metadata\u003dNone):"},{"line_number":635,"context_line":"        msg \u003d \"Creating share server \u0027%s\u0027.\""},{"line_number":636,"context_line":"        server_id \u003d self._get_container_name(network_info[\"server_id\"])"},{"line_number":637,"context_line":"        LOG.debug(msg % server_id)"},{"line_number":638,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_e1da1de9","line":635,"range":{"start_line":635,"start_character":14,"end_line":635,"end_character":43},"in_reply_to":"5a5ae5dd_d26c9938","updated":"2016-02-09 15:55:47.000000000","message":"Ok, will fix this.\nEdit: tox -epep8 says that debug-level logs should not be translated.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bd6ecb50ec26a01e5b05c9a082391c959a4d8925","unresolved":false,"context_lines":[{"line_number":639,"context_line":"        try:"},{"line_number":640,"context_line":"            self.lxd.create_container(server_id)"},{"line_number":641,"context_line":"        except Exception as e:"},{"line_number":642,"context_line":"            raise exception.ManilaException(\"Cannot create container: %s\", e)"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        self.lxd.start_container(server_id)"},{"line_number":645,"context_line":"        self.lxd.api.container_run_command(server_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_d2da59e9","line":642,"range":{"start_line":642,"start_character":44,"end_line":642,"end_character":73},"updated":"2016-02-09 13:59:30.000000000","message":"Same about exceptions. Also, maybe you may want to log it as \"LOG.exception(...)\" on line 641.5","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":639,"context_line":"        try:"},{"line_number":640,"context_line":"            self.lxd.create_container(server_id)"},{"line_number":641,"context_line":"        except Exception as e:"},{"line_number":642,"context_line":"            raise exception.ManilaException(\"Cannot create container: %s\", e)"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        self.lxd.start_container(server_id)"},{"line_number":645,"context_line":"        self.lxd.api.container_run_command(server_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_1c7b207d","line":642,"range":{"start_line":642,"start_character":44,"end_line":642,"end_character":73},"in_reply_to":"5a5ae5dd_d2da59e9","updated":"2016-02-09 15:55:47.000000000","message":"Ok, I\u0027ll add translation. As for logging exception, won\u0027t it get logged by manager?","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78e91896024ffed5cdb2fc3327299aed9b1025a9","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                       host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027"},{"line_number":298,"context_line":"        self.lxd.execute_sync("},{"line_number":299,"context_line":"            server_id,"},{"line_number":300,"context_line":"            [\"sed\", \"-i\", deny_pattern,"},{"line_number":301,"context_line":"             \"/etc/exports\"]"},{"line_number":302,"context_line":"        )"},{"line_number":303,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_8295ef87","line":301,"range":{"start_line":300,"start_character":12,"end_line":301,"end_character":28},"updated":"2016-02-12 11:22:23.000000000","message":"Why it is on two lines? Same in other places.","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"03570c7a0bdf00e931ca0447c8d27a9f0d0d0c59","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                       host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027"},{"line_number":298,"context_line":"        self.lxd.execute_sync("},{"line_number":299,"context_line":"            server_id,"},{"line_number":300,"context_line":"            [\"sed\", \"-i\", deny_pattern,"},{"line_number":301,"context_line":"             \"/etc/exports\"]"},{"line_number":302,"context_line":"        )"},{"line_number":303,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_b5e943b9","line":301,"range":{"start_line":300,"start_character":12,"end_line":301,"end_character":28},"in_reply_to":"3a57f1b5_8295ef87","updated":"2016-02-12 13:59:58.000000000","message":"Looks like a leftover from earlier versions.","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78e91896024ffed5cdb2fc3327299aed9b1025a9","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                      \"path\u003d/shares/\" + share_name, run_as_root\u003dTrue)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        self._get_helper(share).create_share(server_id)"},{"line_number":521,"context_line":"        return \u0027/share/%s\u0027 % share_name"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":524,"context_line":"        lv_device \u003d self._get_lv_device(share)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_82672fe8","line":521,"range":{"start_line":521,"start_character":15,"end_line":521,"end_character":39},"updated":"2016-02-12 11:22:23.000000000","message":"It is path,but not export location. So, indeed, you need to implement getting of export location in your Share helpers.","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"03570c7a0bdf00e931ca0447c8d27a9f0d0d0c59","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                      \"path\u003d/shares/\" + share_name, run_as_root\u003dTrue)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        self._get_helper(share).create_share(server_id)"},{"line_number":521,"context_line":"        return \u0027/share/%s\u0027 % share_name"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":524,"context_line":"        lv_device \u003d self._get_lv_device(share)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_7888a2c5","line":521,"range":{"start_line":521,"start_character":15,"end_line":521,"end_character":39},"in_reply_to":"3a57f1b5_82672fe8","updated":"2016-02-12 13:59:58.000000000","message":"Done","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78e91896024ffed5cdb2fc3327299aed9b1025a9","unresolved":false,"context_lines":[{"line_number":605,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":606,"context_line":"        pass"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":609,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":610,"context_line":"        share_name \u003d share.share_id"},{"line_number":611,"context_line":"        access_level \u003d access[\"access_level\"]"},{"line_number":612,"context_line":"        host_to_allow \u003d access[\"access_to\"]"},{"line_number":613,"context_line":"        LOG.debug(\"Allowing access for host %(host)s to share %(share)s at \""},{"line_number":614,"context_line":"                  \"share server %(share_server)s.\" %"},{"line_number":615,"context_line":"                  {\"share_server\": share_server[\"id\"],"},{"line_number":616,"context_line":"                   \"share\": share.share_id,"},{"line_number":617,"context_line":"                   \"host\": host_to_allow})"},{"line_number":618,"context_line":"        if access_level not in (const.ACCESS_LEVEL_RW, const.ACCESS_LEVEL_RO):"},{"line_number":619,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        self._get_helper(share).allow_access(share_name, server_id,"},{"line_number":622,"context_line":"                                             host_to_allow)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def get_network_allocations_number(self):"},{"line_number":625,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_82f72f8a","line":622,"range":{"start_line":608,"start_character":8,"end_line":622,"end_character":59},"updated":"2016-02-12 11:22:23.000000000","message":"All RO rules are implemented as RW. It is bug and it should be fixed.","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e7ad2e5f2d6f4627439adeba81fa635ab69996b4","unresolved":false,"context_lines":[{"line_number":605,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":606,"context_line":"        pass"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":609,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":610,"context_line":"        share_name \u003d share.share_id"},{"line_number":611,"context_line":"        access_level \u003d access[\"access_level\"]"},{"line_number":612,"context_line":"        host_to_allow \u003d access[\"access_to\"]"},{"line_number":613,"context_line":"        LOG.debug(\"Allowing access for host %(host)s to share %(share)s at \""},{"line_number":614,"context_line":"                  \"share server %(share_server)s.\" %"},{"line_number":615,"context_line":"                  {\"share_server\": share_server[\"id\"],"},{"line_number":616,"context_line":"                   \"share\": share.share_id,"},{"line_number":617,"context_line":"                   \"host\": host_to_allow})"},{"line_number":618,"context_line":"        if access_level not in (const.ACCESS_LEVEL_RW, const.ACCESS_LEVEL_RO):"},{"line_number":619,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        self._get_helper(share).allow_access(share_name, server_id,"},{"line_number":622,"context_line":"                                             host_to_allow)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def get_network_allocations_number(self):"},{"line_number":625,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_907f6eaa","line":622,"range":{"start_line":608,"start_character":8,"end_line":622,"end_character":59},"in_reply_to":"3a57f1b5_244763bd","updated":"2016-02-12 14:13:00.000000000","message":"Where? You added forth required param and do not provide it. So, it will fail with TypeError as following:\n\nTypeError: access_allow() takes exactly 3 arguments (2 given)","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"03570c7a0bdf00e931ca0447c8d27a9f0d0d0c59","unresolved":false,"context_lines":[{"line_number":605,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":606,"context_line":"        pass"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":609,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":610,"context_line":"        share_name \u003d share.share_id"},{"line_number":611,"context_line":"        access_level \u003d access[\"access_level\"]"},{"line_number":612,"context_line":"        host_to_allow \u003d access[\"access_to\"]"},{"line_number":613,"context_line":"        LOG.debug(\"Allowing access for host %(host)s to share %(share)s at \""},{"line_number":614,"context_line":"                  \"share server %(share_server)s.\" %"},{"line_number":615,"context_line":"                  {\"share_server\": share_server[\"id\"],"},{"line_number":616,"context_line":"                   \"share\": share.share_id,"},{"line_number":617,"context_line":"                   \"host\": host_to_allow})"},{"line_number":618,"context_line":"        if access_level not in (const.ACCESS_LEVEL_RW, const.ACCESS_LEVEL_RO):"},{"line_number":619,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        self._get_helper(share).allow_access(share_name, server_id,"},{"line_number":622,"context_line":"                                             host_to_allow)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def get_network_allocations_number(self):"},{"line_number":625,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_244763bd","line":622,"range":{"start_line":608,"start_character":8,"end_line":622,"end_character":59},"in_reply_to":"3a57f1b5_82f72f8a","updated":"2016-02-12 13:59:58.000000000","message":"Done","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78e91896024ffed5cdb2fc3327299aed9b1025a9","unresolved":false,"context_lines":[{"line_number":643,"context_line":"                                           [\"mkdir\", \"-m\", \"777\", \"/shares\"])"},{"line_number":644,"context_line":"        self._connect_to_network(server_id, network_info)"},{"line_number":645,"context_line":"        # TODO(aovchinnikov): expand metadata above the bare minimum"},{"line_number":646,"context_line":"        LOG.debug(\"Container was created!\")"},{"line_number":647,"context_line":"        return {\"id\": network_info[\"server_id\"]}"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_020c9feb","line":646,"range":{"start_line":646,"start_character":8,"end_line":646,"end_character":42},"updated":"2016-02-12 11:22:23.000000000","message":"Which container? Name? ID of a \"share server\"?","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"03570c7a0bdf00e931ca0447c8d27a9f0d0d0c59","unresolved":false,"context_lines":[{"line_number":643,"context_line":"                                           [\"mkdir\", \"-m\", \"777\", \"/shares\"])"},{"line_number":644,"context_line":"        self._connect_to_network(server_id, network_info)"},{"line_number":645,"context_line":"        # TODO(aovchinnikov): expand metadata above the bare minimum"},{"line_number":646,"context_line":"        LOG.debug(\"Container was created!\")"},{"line_number":647,"context_line":"        return {\"id\": network_info[\"server_id\"]}"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_c40e8f8b","line":646,"range":{"start_line":646,"start_character":8,"end_line":646,"end_character":42},"in_reply_to":"3a57f1b5_020c9feb","updated":"2016-02-12 13:59:58.000000000","message":"Done","commit_id":"66451167c7e88f275a4d6fdb30bf79931efaa3b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"548d8a71005f103d486382c5a5870724898c1e1e","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow, access_level):"},{"line_number":311,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":313,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":314,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":315,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":316,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":317,"context_line":"        search_pattern \u003d share_folder + \u0027.*\u0027 +\\"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_5376e0a4","line":314,"range":{"start_line":311,"start_character":8,"end_line":314,"end_character":47},"updated":"2016-02-12 14:12:51.000000000","message":"What if None? In that case you get unexpected NameError exception.","commit_id":"de5c6986eb37cc42fca1ae8a5d2b417d2670c3d3"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"bc65b1bc103ececce52d0e5d509932d4514e3b7f","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow, access_level):"},{"line_number":311,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":313,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":314,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":315,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":316,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":317,"context_line":"        search_pattern \u003d share_folder + \u0027.*\u0027 +\\"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_93f0d892","line":314,"range":{"start_line":311,"start_character":8,"end_line":314,"end_character":47},"in_reply_to":"3a57f1b5_5376e0a4","updated":"2016-02-12 14:18:32.000000000","message":"Ok, it seems that an else clause could be needed indeed.","commit_id":"de5c6986eb37cc42fca1ae8a5d2b417d2670c3d3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"548d8a71005f103d486382c5a5870724898c1e1e","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        if access_level not in (const.ACCESS_LEVEL_RW, const.ACCESS_LEVEL_RO):"},{"line_number":636,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        self._get_helper(share).allow_access(share_name, server_id,"},{"line_number":639,"context_line":"                                             host_to_allow)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def get_network_allocations_number(self):"},{"line_number":642,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_53eb4013","line":639,"range":{"start_line":638,"start_character":8,"end_line":639,"end_character":59},"updated":"2016-02-12 14:12:51.000000000","message":"In previous patch-set here was comment, marked as Done. But it is not so:\n\nYou added forth required param and do not provide it. So, it will fail with TypeError as following:\n\nTypeError: access_allow() takes exactly 4 arguments (3 given)","commit_id":"de5c6986eb37cc42fca1ae8a5d2b417d2670c3d3"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"bc65b1bc103ececce52d0e5d509932d4514e3b7f","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        if access_level not in (const.ACCESS_LEVEL_RW, const.ACCESS_LEVEL_RO):"},{"line_number":636,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        self._get_helper(share).allow_access(share_name, server_id,"},{"line_number":639,"context_line":"                                             host_to_allow)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def get_network_allocations_number(self):"},{"line_number":642,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_13e5c8da","line":639,"range":{"start_line":638,"start_character":8,"end_line":639,"end_character":59},"in_reply_to":"3a57f1b5_53eb4013","updated":"2016-02-12 14:18:32.000000000","message":"Oops, my fault.","commit_id":"de5c6986eb37cc42fca1ae8a5d2b417d2670c3d3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"548d8a71005f103d486382c5a5870724898c1e1e","unresolved":false,"context_lines":[{"line_number":660,"context_line":"                                           [\"mkdir\", \"-m\", \"777\", \"/shares\"])"},{"line_number":661,"context_line":"        self._connect_to_network(server_id, network_info)"},{"line_number":662,"context_line":"        # TODO(aovchinnikov): expand metadata above the bare minimum"},{"line_number":663,"context_line":"        LOG.debug(\"Container %s was created!\" % server_id)"},{"line_number":664,"context_line":"        return {\"id\": network_info[\"server_id\"]}"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_3070fadb","line":663,"range":{"start_line":663,"start_character":18,"end_line":663,"end_character":57},"updated":"2016-02-12 14:12:51.000000000","message":"It is not clear that it is ID of share server and how it is related to container name.","commit_id":"de5c6986eb37cc42fca1ae8a5d2b417d2670c3d3"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"bc65b1bc103ececce52d0e5d509932d4514e3b7f","unresolved":false,"context_lines":[{"line_number":660,"context_line":"                                           [\"mkdir\", \"-m\", \"777\", \"/shares\"])"},{"line_number":661,"context_line":"        self._connect_to_network(server_id, network_info)"},{"line_number":662,"context_line":"        # TODO(aovchinnikov): expand metadata above the bare minimum"},{"line_number":663,"context_line":"        LOG.debug(\"Container %s was created!\" % server_id)"},{"line_number":664,"context_line":"        return {\"id\": network_info[\"server_id\"]}"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a57f1b5_b3a87478","line":663,"range":{"start_line":663,"start_character":18,"end_line":663,"end_character":57},"in_reply_to":"3a57f1b5_3070fadb","updated":"2016-02-12 14:18:32.000000000","message":"Actually this is a container\u0027s name.","commit_id":"de5c6986eb37cc42fca1ae8a5d2b417d2670c3d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"5a31200d689f234c96e62e7721f240d400331d67","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            except Exception as e:"},{"line_number":198,"context_line":"                LOG.exception(e)"},{"line_number":199,"context_line":"                raise exception.ManilaException("},{"line_number":200,"context_line":"                    _(\"Cannot get operation info: %s\"), e"},{"line_number":201,"context_line":"                )"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"            return ("}],"source_content_type":"text/x-python","patch_set":28,"id":"1a54edaf_a910b9a9","line":200,"updated":"2016-02-13 04:08:50.000000000","message":"Change , to %","commit_id":"49d0504fe3b5ac0404b160e417d59adb5ede28d1"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"ab4ac8aca5156f87a412bcaac9a4451e40188dbd","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            except Exception as e:"},{"line_number":198,"context_line":"                LOG.exception(e)"},{"line_number":199,"context_line":"                raise exception.ManilaException("},{"line_number":200,"context_line":"                    _(\"Cannot get operation info: %s\"), e"},{"line_number":201,"context_line":"                )"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"            return ("}],"source_content_type":"text/x-python","patch_set":28,"id":"dae33548_3b74049b","line":200,"in_reply_to":"1a54edaf_a910b9a9","updated":"2016-02-15 09:01:54.000000000","message":"Done","commit_id":"49d0504fe3b5ac0404b160e417d59adb5ede28d1"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"5a31200d689f234c96e62e7721f240d400331d67","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            )"},{"line_number":206,"context_line":"        self._wait("},{"line_number":207,"context_line":"            wait,"},{"line_number":208,"context_line":"            exception.ManilaException(_(\"Operation %s still running\"),"},{"line_number":209,"context_line":"                                      operation)"},{"line_number":210,"context_line":"        )"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"1a54edaf_4926e517","line":208,"updated":"2016-02-13 04:08:50.000000000","message":"Change , to %","commit_id":"49d0504fe3b5ac0404b160e417d59adb5ede28d1"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"ab4ac8aca5156f87a412bcaac9a4451e40188dbd","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            )"},{"line_number":206,"context_line":"        self._wait("},{"line_number":207,"context_line":"            wait,"},{"line_number":208,"context_line":"            exception.ManilaException(_(\"Operation %s still running\"),"},{"line_number":209,"context_line":"                                      operation)"},{"line_number":210,"context_line":"        )"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"dae33548_1b794094","line":208,"in_reply_to":"1a54edaf_4926e517","updated":"2016-02-15 09:01:54.000000000","message":"Done","commit_id":"49d0504fe3b5ac0404b160e417d59adb5ede28d1"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"5a31200d689f234c96e62e7721f240d400331d67","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        try:"},{"line_number":656,"context_line":"            self.lxd.create_container(server_id)"},{"line_number":657,"context_line":"        except Exception as e:"},{"line_number":658,"context_line":"            raise exception.ManilaException(_(\"Cannot create container: %s\"),"},{"line_number":659,"context_line":"                                            e)"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"        self.lxd.start_container(server_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a54edaf_6923a106","line":658,"updated":"2016-02-13 04:08:50.000000000","message":"Change , to %","commit_id":"49d0504fe3b5ac0404b160e417d59adb5ede28d1"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"ab4ac8aca5156f87a412bcaac9a4451e40188dbd","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        try:"},{"line_number":656,"context_line":"            self.lxd.create_container(server_id)"},{"line_number":657,"context_line":"        except Exception as e:"},{"line_number":658,"context_line":"            raise exception.ManilaException(_(\"Cannot create container: %s\"),"},{"line_number":659,"context_line":"                                            e)"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"        self.lxd.start_container(server_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"dae33548_1b3ca092","line":658,"in_reply_to":"1a54edaf_6923a106","updated":"2016-02-15 09:01:54.000000000","message":"Done","commit_id":"49d0504fe3b5ac0404b160e417d59adb5ede28d1"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0efc9a527a59c3ce7e39261bb376e2f0a57dd86c","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        )"},{"line_number":294,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":297,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":298,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":299,"context_line":"        deny_pattern \u003d \"\\$\" + share_folder + \u0027.*\u0027 +\\"}],"source_content_type":"text/x-python","patch_set":32,"id":"dae33548_4a48c35b","line":296,"range":{"start_line":296,"start_character":7,"end_line":296,"end_character":19},"updated":"2016-02-16 16:16:00.000000000","message":"Please implement update_access() instead of deny_access","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0d522f9fbc747d3b5969282ed61f3476802291d7","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        )"},{"line_number":294,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":297,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":298,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":299,"context_line":"        deny_pattern \u003d \"\\$\" + share_folder + \u0027.*\u0027 +\\"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_954a1d82","line":296,"range":{"start_line":296,"start_character":7,"end_line":296,"end_character":19},"in_reply_to":"dae33548_4a48c35b","updated":"2016-02-20 09:43:20.000000000","message":"Done","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0efc9a527a59c3ce7e39261bb376e2f0a57dd86c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        )"},{"line_number":305,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow, access_level):"},{"line_number":308,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":309,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":310,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"}],"source_content_type":"text/x-python","patch_set":32,"id":"dae33548_6a64a7e3","line":307,"range":{"start_line":307,"start_character":8,"end_line":307,"end_character":20},"updated":"2016-02-16 16:16:00.000000000","message":"Please implement update_access() instead of allow_access","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0d522f9fbc747d3b5969282ed61f3476802291d7","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        )"},{"line_number":305,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow, access_level):"},{"line_number":308,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":309,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":310,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_754f9992","line":307,"range":{"start_line":307,"start_character":8,"end_line":307,"end_character":20},"in_reply_to":"dae33548_6a64a7e3","updated":"2016-02-20 09:43:20.000000000","message":"Done","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0efc9a527a59c3ce7e39261bb376e2f0a57dd86c","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    def delete_share(self, server_id):"},{"line_number":344,"context_line":"        raise NotImplementedError()"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":347,"context_line":"        raise NotImplementedError()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow):"},{"line_number":350,"context_line":"        raise NotImplementedError()"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"class LXCCIFSHelper(object):"}],"source_content_type":"text/x-python","patch_set":32,"id":"dae33548_0aacfbeb","line":350,"range":{"start_line":346,"start_character":3,"end_line":350,"end_character":35},"updated":"2016-02-16 16:16:00.000000000","message":"Please implement update_access() instead of allow_access and deny_access","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0d522f9fbc747d3b5969282ed61f3476802291d7","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    def delete_share(self, server_id):"},{"line_number":344,"context_line":"        raise NotImplementedError()"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":347,"context_line":"        raise NotImplementedError()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow):"},{"line_number":350,"context_line":"        raise NotImplementedError()"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"class LXCCIFSHelper(object):"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_b549218e","line":350,"range":{"start_line":346,"start_character":3,"end_line":350,"end_character":35},"in_reply_to":"dae33548_0aacfbeb","updated":"2016-02-20 09:43:20.000000000","message":"Done","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0efc9a527a59c3ce7e39261bb376e2f0a57dd86c","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            [\"net\", \"conf\", \"delshare\", self.share.share_id]"},{"line_number":389,"context_line":"        )"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":392,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":393,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":394,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"dae33548_aa834f55","line":391,"range":{"start_line":391,"start_character":8,"end_line":391,"end_character":19},"updated":"2016-02-16 16:16:00.000000000","message":"Please implement update_access() instead of deny_access","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0d522f9fbc747d3b5969282ed61f3476802291d7","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            [\"net\", \"conf\", \"delshare\", self.share.share_id]"},{"line_number":389,"context_line":"        )"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":392,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":393,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":394,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_155f2d42","line":391,"range":{"start_line":391,"start_character":8,"end_line":391,"end_character":19},"in_reply_to":"dae33548_aa834f55","updated":"2016-02-20 09:43:20.000000000","message":"Done","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0efc9a527a59c3ce7e39261bb376e2f0a57dd86c","unresolved":false,"context_lines":[{"line_number":406,"context_line":"             allowed_hosts]"},{"line_number":407,"context_line":"        )"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow, access_level):"},{"line_number":410,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":411,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":412,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":32,"id":"dae33548_ca805349","line":409,"range":{"start_line":409,"start_character":8,"end_line":409,"end_character":20},"updated":"2016-02-16 16:16:00.000000000","message":"Please implement update_access() instead of allow_access","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0d522f9fbc747d3b5969282ed61f3476802291d7","unresolved":false,"context_lines":[{"line_number":406,"context_line":"             allowed_hosts]"},{"line_number":407,"context_line":"        )"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow, access_level):"},{"line_number":410,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":411,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":412,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_f55ba952","line":409,"range":{"start_line":409,"start_character":8,"end_line":409,"end_character":20},"in_reply_to":"dae33548_ca805349","updated":"2016-02-20 09:43:20.000000000","message":"Done","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0efc9a527a59c3ce7e39261bb376e2f0a57dd86c","unresolved":false,"context_lines":[{"line_number":609,"context_line":"                      self.configuration.lxd_ovs_bridge_name, host_veth,"},{"line_number":610,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def deny_access(self, context, share, access_ref, share_server\u003dNone):"},{"line_number":613,"context_line":"        host_to_deny \u003d access_ref[\"access_to\"]"},{"line_number":614,"context_line":"        LOG.debug(\"Denying access for host %(host)s to share %(share)s at \""},{"line_number":615,"context_line":"                  \"share server %(share_server)s.\" %"}],"source_content_type":"text/x-python","patch_set":32,"id":"dae33548_6a92e79f","line":612,"range":{"start_line":612,"start_character":8,"end_line":612,"end_character":19},"updated":"2016-02-16 16:16:00.000000000","message":"Please implement update_access() instead of deny_access","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0d522f9fbc747d3b5969282ed61f3476802291d7","unresolved":false,"context_lines":[{"line_number":609,"context_line":"                      self.configuration.lxd_ovs_bridge_name, host_veth,"},{"line_number":610,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def deny_access(self, context, share, access_ref, share_server\u003dNone):"},{"line_number":613,"context_line":"        host_to_deny \u003d access_ref[\"access_to\"]"},{"line_number":614,"context_line":"        LOG.debug(\"Denying access for host %(host)s to share %(share)s at \""},{"line_number":615,"context_line":"                  \"share server %(share_server)s.\" %"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_5559b559","line":612,"range":{"start_line":612,"start_character":8,"end_line":612,"end_character":19},"in_reply_to":"dae33548_6a92e79f","updated":"2016-02-20 09:43:20.000000000","message":"Done","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0efc9a527a59c3ce7e39261bb376e2f0a57dd86c","unresolved":false,"context_lines":[{"line_number":622,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":623,"context_line":"        pass"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":626,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":627,"context_line":"        share_name \u003d share.share_id"},{"line_number":628,"context_line":"        access_level \u003d access[\"access_level\"]"}],"source_content_type":"text/x-python","patch_set":32,"id":"dae33548_4a8d637a","line":625,"range":{"start_line":625,"start_character":8,"end_line":625,"end_character":20},"updated":"2016-02-16 16:16:00.000000000","message":"Please implement update_access() instead of allow_access","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0d522f9fbc747d3b5969282ed61f3476802291d7","unresolved":false,"context_lines":[{"line_number":622,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":623,"context_line":"        pass"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":626,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":627,"context_line":"        share_name \u003d share.share_id"},{"line_number":628,"context_line":"        access_level \u003d access[\"access_level\"]"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_95317d0e","line":625,"range":{"start_line":625,"start_character":8,"end_line":625,"end_character":20},"in_reply_to":"dae33548_4a8d637a","updated":"2016-02-20 09:43:20.000000000","message":"Done","commit_id":"9de7a2f94d42116866ccf34038a7960e5ce59e15"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":46,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":47,"context_line":"               required\u003dTrue,"},{"line_number":48,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to. \""},{"line_number":49,"context_line":"                    \"It will be unpluged from here by the driver.\"),"},{"line_number":50,"context_line":"    cfg.StrOpt(\"lxd_ovs_bridge_name\","},{"line_number":51,"context_line":"               default\u003d\"br-int\","},{"line_number":52,"context_line":"               required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_373827ef","line":49,"range":{"start_line":49,"start_character":32,"end_line":49,"end_character":40},"updated":"2016-02-22 23:13:29.000000000","message":"unplugged","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":47,"context_line":"               required\u003dTrue,"},{"line_number":48,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to. \""},{"line_number":49,"context_line":"                    \"It will be unpluged from here by the driver.\"),"},{"line_number":50,"context_line":"    cfg.StrOpt(\"lxd_ovs_bridge_name\","},{"line_number":51,"context_line":"               default\u003d\"br-int\","},{"line_number":52,"context_line":"               required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_8f6b8f1d","line":49,"range":{"start_line":49,"start_character":32,"end_line":49,"end_character":40},"in_reply_to":"bae84128_373827ef","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.StrOpt(\"lxd_nfs_server\","},{"line_number":55,"context_line":"               default\u003d\"unfs3\","},{"line_number":56,"context_line":"               help\u003d\"User space NFS server to be used. Currently the only \""},{"line_number":57,"context_line":"                    \"implementation supported is unsf3. In future ganesha \""},{"line_number":58,"context_line":"                    \"is planned to be supported as well. Please note, that \""},{"line_number":59,"context_line":"                    \"unfs3 is mostly an experimental driver which should \""},{"line_number":60,"context_line":"                    \"be used in production with care and at the user\u0027s own \""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_773e2fdb","line":57,"range":{"start_line":57,"start_character":49,"end_line":57,"end_character":54},"updated":"2016-02-22 23:13:29.000000000","message":"unfs3","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.StrOpt(\"lxd_nfs_server\","},{"line_number":55,"context_line":"               default\u003d\"unfs3\","},{"line_number":56,"context_line":"               help\u003d\"User space NFS server to be used. Currently the only \""},{"line_number":57,"context_line":"                    \"implementation supported is unsf3. In future ganesha \""},{"line_number":58,"context_line":"                    \"is planned to be supported as well. Please note, that \""},{"line_number":59,"context_line":"                    \"unfs3 is mostly an experimental driver which should \""},{"line_number":60,"context_line":"                    \"be used in production with care and at the user\u0027s own \""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_0f665f50","line":57,"range":{"start_line":57,"start_character":49,"end_line":57,"end_character":54},"in_reply_to":"bae84128_773e2fdb","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def create_container(self, name):"},{"line_number":95,"context_line":"        container_config \u003d {"},{"line_number":96,"context_line":"            \"name\": name,"},{"line_number":97,"context_line":"            \"source\": {\"type\": \"image\", \"alias\": self.conf.lxd_image_name}"},{"line_number":98,"context_line":"        }"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        state, data \u003d self.api.container_init(container_config)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_ba125e55","line":97,"range":{"start_line":97,"start_character":22,"end_line":97,"end_character":74},"updated":"2016-02-22 23:13:29.000000000","message":"Please wrap.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def create_container(self, name):"},{"line_number":95,"context_line":"        container_config \u003d {"},{"line_number":96,"context_line":"            \"name\": name,"},{"line_number":97,"context_line":"            \"source\": {\"type\": \"image\", \"alias\": self.conf.lxd_image_name}"},{"line_number":98,"context_line":"        }"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        state, data \u003d self.api.container_init(container_config)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_8f526f65","line":97,"range":{"start_line":97,"start_character":22,"end_line":97,"end_character":74},"in_reply_to":"bae84128_ba125e55","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        state, data \u003d self.api.container_init(container_config)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.debug(\"Container init result: %s, %s\", state, data)"},{"line_number":103,"context_line":"        LOG.debug(\"Containers list %s\", self.api.container_list())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_333c9bc7","line":102,"range":{"start_line":102,"start_character":47,"end_line":102,"end_character":49},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        state, data \u003d self.api.container_init(container_config)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.debug(\"Container init result: %s, %s\", state, data)"},{"line_number":103,"context_line":"        LOG.debug(\"Containers list %s\", self.api.container_list())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_6fe72bac","line":102,"range":{"start_line":102,"start_character":47,"end_line":102,"end_character":49},"in_reply_to":"bae84128_333c9bc7","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        state, data \u003d self.api.container_init(container_config)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.debug(\"Container init result: %s, %s\", state, data)"},{"line_number":103,"context_line":"        LOG.debug(\"Containers list %s\", self.api.container_list())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"},{"line_number":106,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d3228fa2","line":103,"range":{"start_line":103,"start_character":36,"end_line":103,"end_character":38},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        state, data \u003d self.api.container_init(container_config)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.debug(\"Container init result: %s, %s\", state, data)"},{"line_number":103,"context_line":"        LOG.debug(\"Containers list %s\", self.api.container_list())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"},{"line_number":106,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_af05b346","line":103,"range":{"start_line":103,"start_character":36,"end_line":103,"end_character":38},"in_reply_to":"bae84128_d3228fa2","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d3b28fe4","line":107,"range":{"start_line":107,"start_character":27,"end_line":107,"end_character":36},"updated":"2016-02-23 14:32:30.000000000","message":"Please change it to something like \"checking if container is initialized\"","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_3343fb43","line":107,"range":{"start_line":107,"start_character":39,"end_line":107,"end_character":41},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_6f9e0b08","line":107,"range":{"start_line":107,"start_character":39,"end_line":107,"end_character":41},"in_reply_to":"bae84128_3343fb43","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        def container_initialized():"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_8f0a6f24","line":107,"range":{"start_line":107,"start_character":27,"end_line":107,"end_character":36},"in_reply_to":"bae84128_d3b28fe4","updated":"2016-02-24 10:43:58.000000000","message":"Ok, but this will look like \"Check if container initialized: 54dd7bbc1f214e0daaed2ee848f251b6\". I am unsure that it will ever help. On the other hand a pair of messages one of each contains operation uuid and the other corresponding status might be helpfull.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_f31d1363","line":110,"range":{"start_line":110,"start_character":48,"end_line":110,"end_character":49},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_53c31f57","line":110,"range":{"start_line":110,"start_character":26,"end_line":110,"end_character":42},"updated":"2016-02-23 14:32:30.000000000","message":"this message is too similar to another one in another method. Please change it to more contextual.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c111eb53","line":110,"range":{"start_line":110,"start_character":26,"end_line":110,"end_character":42},"in_reply_to":"bae84128_53c31f57","updated":"2016-02-24 10:43:58.000000000","message":"Yes, because here we want to see operation status. In the other method you are talking about we want to see operation status as well.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                LOG.debug(\"Operation: %s\", data[\"operation\"])"},{"line_number":108,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_412cbb98","line":110,"range":{"start_line":110,"start_character":48,"end_line":110,"end_character":49},"in_reply_to":"bae84128_f31d1363","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            except Exception as e:"},{"line_number":115,"context_line":"                LOG.debug(\"Check error \u0027%s\u0027\", e)"},{"line_number":116,"context_line":"                return False"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_53fe7fae","line":114,"range":{"start_line":114,"start_character":12,"end_line":114,"end_character":34},"updated":"2016-02-23 14:32:30.000000000","message":"isn\u0027t it a good idea to add LOG.exception(e)?","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            except Exception as e:"},{"line_number":115,"context_line":"                LOG.debug(\"Check error \u0027%s\u0027\", e)"},{"line_number":116,"context_line":"                return False"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_011593e3","line":114,"range":{"start_line":114,"start_character":12,"end_line":114,"end_character":34},"in_reply_to":"bae84128_53fe7fae","updated":"2016-02-24 10:43:58.000000000","message":"Probably not, since we can get several exceptions in a row before operation succeeds. If, however, operation fails completely then we\u0027ll get a real exception logged inside _wait method. We might want to see what happened to the failed operations when debugging, but I believe it does not justify to log every single failed operation with exception level.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            except Exception as e:"},{"line_number":115,"context_line":"                LOG.debug(\"Check error \u0027%s\u0027\", e)"},{"line_number":116,"context_line":"                return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self._wait("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_7332a3f3","line":115,"range":{"start_line":115,"start_character":42,"end_line":115,"end_character":44},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                return info[\"status\"].lower() \u003d\u003d \"success\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            except Exception as e:"},{"line_number":115,"context_line":"                LOG.debug(\"Check error \u0027%s\u0027\", e)"},{"line_number":116,"context_line":"                return False"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self._wait("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_41531b17","line":115,"range":{"start_line":115,"start_character":42,"end_line":115,"end_character":44},"in_reply_to":"bae84128_7332a3f3","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self._wait("},{"line_number":119,"context_line":"            container_initialized,"},{"line_number":120,"context_line":"            exception.ManilaException(_(\"Container creation error\"))"},{"line_number":121,"context_line":"        )"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @utils.retry(exception.ManilaException, retries\u003d5)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_53183f75","line":120,"range":{"start_line":120,"start_character":64,"end_line":120,"end_character":65},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self._wait("},{"line_number":119,"context_line":"            container_initialized,"},{"line_number":120,"context_line":"            exception.ManilaException(_(\"Container creation error\"))"},{"line_number":121,"context_line":"        )"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @utils.retry(exception.ManilaException, retries\u003d5)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_61bd7fd7","line":120,"range":{"start_line":120,"start_character":64,"end_line":120,"end_character":65},"in_reply_to":"bae84128_53183f75","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @utils.retry(exception.ManilaException, retries\u003d5)"},{"line_number":124,"context_line":"    def start_container(self, name):"},{"line_number":125,"context_line":"        LOG.debug(\"Start container %s\" % name)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        throwaway, data \u003d self.api.container_start(name, -1)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c937824b","line":125,"range":{"start_line":125,"start_character":38,"end_line":125,"end_character":41},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @utils.retry(exception.ManilaException, retries\u003d5)"},{"line_number":124,"context_line":"    def start_container(self, name):"},{"line_number":125,"context_line":"        LOG.debug(\"Start container %s\" % name)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        throwaway, data \u003d self.api.container_start(name, -1)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_a1aae782","line":125,"range":{"start_line":125,"start_character":38,"end_line":125,"end_character":41},"in_reply_to":"bae84128_c937824b","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        throwaway, data \u003d self.api.container_start(name, -1)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        def container_running():"},{"line_number":130,"context_line":"            LOG.debug(\"Start Operation: %s\", data[\"operation\"])"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"            try:"},{"line_number":133,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_532f9f87","line":130,"range":{"start_line":130,"start_character":41,"end_line":130,"end_character":43},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        throwaway, data \u003d self.api.container_start(name, -1)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        def container_running():"},{"line_number":130,"context_line":"            LOG.debug(\"Start Operation: %s\", data[\"operation\"])"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"            try:"},{"line_number":133,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c17a8b23","line":130,"range":{"start_line":130,"start_character":41,"end_line":130,"end_character":43},"in_reply_to":"bae84128_532f9f87","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":134,"context_line":"            except Exception as e:"},{"line_number":135,"context_line":"                raise exception.ManilaException("},{"line_number":136,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":137,"context_line":"                )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            LOG.debug(\"Operation info: %s, %s\", state, info)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_731bc373","line":136,"range":{"start_line":136,"start_character":52,"end_line":136,"end_character":53},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                state, info \u003d self.api.operation_info(data[\"operation\"])"},{"line_number":134,"context_line":"            except Exception as e:"},{"line_number":135,"context_line":"                raise exception.ManilaException("},{"line_number":136,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":137,"context_line":"                )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            LOG.debug(\"Operation info: %s, %s\", state, info)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_61929f4d","line":136,"range":{"start_line":136,"start_character":52,"end_line":136,"end_character":53},"in_reply_to":"bae84128_731bc373","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":137,"context_line":"                )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            if \"status\" in info[\"metadata\"]:"},{"line_number":142,"context_line":"                meta \u003d info[\"metadata\"]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_f3e4f3e0","line":139,"range":{"start_line":139,"start_character":23,"end_line":139,"end_character":37},"updated":"2016-02-23 14:32:30.000000000","message":"Too similar to another debug message.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":137,"context_line":"                )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            if \"status\" in info[\"metadata\"]:"},{"line_number":142,"context_line":"                meta \u003d info[\"metadata\"]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_3315bb3f","line":139,"range":{"start_line":139,"start_character":44,"end_line":139,"end_character":46},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":137,"context_line":"                )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            if \"status\" in info[\"metadata\"]:"},{"line_number":142,"context_line":"                meta \u003d info[\"metadata\"]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_81008367","line":139,"range":{"start_line":139,"start_character":44,"end_line":139,"end_character":46},"in_reply_to":"bae84128_3315bb3f","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":137,"context_line":"                )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"            LOG.debug(\"Operation info: %s, %s\", state, info)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            if \"status\" in info[\"metadata\"]:"},{"line_number":142,"context_line":"                meta \u003d info[\"metadata\"]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_41183bd3","line":139,"range":{"start_line":139,"start_character":23,"end_line":139,"end_character":37},"in_reply_to":"bae84128_f3e4f3e0","updated":"2016-02-24 10:43:58.000000000","message":"I\u0027ll add operation name to the message to make it easier to distinguish between different operations.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                err_info \u003d info[\"metadata\"][\"metadata\"]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"                raise exception.ManilaException("},{"line_number":155,"context_line":"                    _(\"Cannot start container: %s\") % err_info"},{"line_number":156,"context_line":"                )"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"            result \u003d self.api.container_running(name)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_937ac786","line":155,"range":{"start_line":155,"start_character":48,"end_line":155,"end_character":50},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                err_info \u003d info[\"metadata\"][\"metadata\"]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"                raise exception.ManilaException("},{"line_number":155,"context_line":"                    _(\"Cannot start container: %s\") % err_info"},{"line_number":156,"context_line":"                )"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"            result \u003d self.api.container_running(name)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c1244b0e","line":155,"range":{"start_line":155,"start_character":48,"end_line":155,"end_character":50},"in_reply_to":"bae84128_937ac786","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                )"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"            result \u003d self.api.container_running(name)"},{"line_number":159,"context_line":"            LOG.debug(\"Check is container running: %s\", result)"},{"line_number":160,"context_line":"            return result"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self._wait("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d30baf22","line":159,"range":{"start_line":159,"start_character":52,"end_line":159,"end_character":54},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                )"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"            result \u003d self.api.container_running(name)"},{"line_number":159,"context_line":"            LOG.debug(\"Check is container running: %s\", result)"},{"line_number":160,"context_line":"            return result"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self._wait("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_011bd3ca","line":159,"range":{"start_line":159,"start_character":52,"end_line":159,"end_character":54},"in_reply_to":"bae84128_d30baf22","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self._wait("},{"line_number":163,"context_line":"            container_running,"},{"line_number":164,"context_line":"            exception.ManilaException(\"Container startup error\")"},{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def stop_container(self, name):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_9305a712","line":164,"range":{"start_line":164,"start_character":62,"end_line":164,"end_character":63},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self._wait("},{"line_number":163,"context_line":"            container_running,"},{"line_number":164,"context_line":"            exception.ManilaException(\"Container startup error\")"},{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def stop_container(self, name):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_417f9bdf","line":164,"range":{"start_line":164,"start_character":62,"end_line":164,"end_character":63},"in_reply_to":"bae84128_9305a712","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def stop_container(self, name):"},{"line_number":168,"context_line":"        LOG.debug(\"Stopping container %s\" % name)"},{"line_number":169,"context_line":"        state, data \u003d self.api.container_stop(name, 60)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        def container_stopped():"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_535ddf13","line":168,"range":{"start_line":168,"start_character":39,"end_line":168,"end_character":41},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def stop_container(self, name):"},{"line_number":168,"context_line":"        LOG.debug(\"Stopping container %s\" % name)"},{"line_number":169,"context_line":"        state, data \u003d self.api.container_stop(name, 60)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        def container_stopped():"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_09f7aa8b","line":168,"range":{"start_line":168,"start_character":42,"end_line":168,"end_character":44},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def stop_container(self, name):"},{"line_number":168,"context_line":"        LOG.debug(\"Stopping container %s\" % name)"},{"line_number":169,"context_line":"        state, data \u003d self.api.container_stop(name, 60)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        def container_stopped():"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_a1594790","line":168,"range":{"start_line":168,"start_character":42,"end_line":168,"end_character":44},"in_reply_to":"bae84128_09f7aa8b","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def stop_container(self, name):"},{"line_number":168,"context_line":"        LOG.debug(\"Stopping container %s\" % name)"},{"line_number":169,"context_line":"        state, data \u003d self.api.container_stop(name, 60)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        def container_stopped():"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_815c037e","line":168,"range":{"start_line":168,"start_character":39,"end_line":168,"end_character":41},"in_reply_to":"bae84128_535ddf13","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self._wait("},{"line_number":175,"context_line":"            container_stopped,"},{"line_number":176,"context_line":"            exception.ManilaException(_(\"Container stopping error\"))"},{"line_number":177,"context_line":"        )"},{"line_number":178,"context_line":"        self.api.container_destroy(name)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_93a127fb","line":176,"range":{"start_line":176,"start_character":64,"end_line":176,"end_character":66},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self._wait("},{"line_number":175,"context_line":"            container_stopped,"},{"line_number":176,"context_line":"            exception.ManilaException(_(\"Container stopping error\"))"},{"line_number":177,"context_line":"        )"},{"line_number":178,"context_line":"        self.api.container_destroy(name)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_e157cf55","line":176,"range":{"start_line":176,"start_character":64,"end_line":176,"end_character":66},"in_reply_to":"bae84128_93a127fb","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            LOG.debug(\"Wait operation %s...\", operation)"},{"line_number":191,"context_line":"            try:"},{"line_number":192,"context_line":"                state, info \u003d self.api.operation_info(operation)"},{"line_number":193,"context_line":"                LOG.debug(\"Operation details: %s\", info)"},{"line_number":194,"context_line":"            except pylxd_exc.APIError as e:"},{"line_number":195,"context_line":"                LOG.exception(e)"},{"line_number":196,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_b3d1cb59","line":193,"range":{"start_line":193,"start_character":47,"end_line":193,"end_character":49},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            LOG.debug(\"Wait operation %s...\", operation)"},{"line_number":191,"context_line":"            try:"},{"line_number":192,"context_line":"                state, info \u003d self.api.operation_info(operation)"},{"line_number":193,"context_line":"                LOG.debug(\"Operation details: %s\", info)"},{"line_number":194,"context_line":"            except pylxd_exc.APIError as e:"},{"line_number":195,"context_line":"                LOG.exception(e)"},{"line_number":196,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_014913b7","line":193,"range":{"start_line":193,"start_character":47,"end_line":193,"end_character":49},"in_reply_to":"bae84128_b3d1cb59","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            except Exception as e:"},{"line_number":198,"context_line":"                LOG.exception(e)"},{"line_number":199,"context_line":"                raise exception.ManilaException("},{"line_number":200,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":201,"context_line":"                )"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"            return ("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_33c65b9a","line":200,"range":{"start_line":200,"start_character":51,"end_line":200,"end_character":53},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            except Exception as e:"},{"line_number":198,"context_line":"                LOG.exception(e)"},{"line_number":199,"context_line":"                raise exception.ManilaException("},{"line_number":200,"context_line":"                    _(\"Cannot get operation info: %s\") % e"},{"line_number":201,"context_line":"                )"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"            return ("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_21e537a7","line":200,"range":{"start_line":200,"start_character":51,"end_line":200,"end_character":53},"in_reply_to":"bae84128_33c65b9a","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            )"},{"line_number":206,"context_line":"        self._wait("},{"line_number":207,"context_line":"            wait,"},{"line_number":208,"context_line":"            exception.ManilaException(_(\"Operation %s still running\") %"},{"line_number":209,"context_line":"                                      operation)"},{"line_number":210,"context_line":"        )"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_f3c7d395","line":208,"range":{"start_line":208,"start_character":66,"end_line":208,"end_character":68},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            )"},{"line_number":206,"context_line":"        self._wait("},{"line_number":207,"context_line":"            wait,"},{"line_number":208,"context_line":"            exception.ManilaException(_(\"Operation %s still running\") %"},{"line_number":209,"context_line":"                                      operation)"},{"line_number":210,"context_line":"        )"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_a1e787aa","line":208,"range":{"start_line":208,"start_character":66,"end_line":208,"end_character":68},"in_reply_to":"bae84128_f3c7d395","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        status, info \u003d self.api.operation_info(result[\"operation\"])"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        LOG.debug(\"Operation details: %s, %s\" % (info, status))"},{"line_number":245,"context_line":"        return cmd_result"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_69d91622","line":244,"range":{"start_line":244,"start_character":45,"end_line":244,"end_character":48},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        status, info \u003d self.api.operation_info(result[\"operation\"])"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        LOG.debug(\"Operation details: %s, %s\" % (info, status))"},{"line_number":245,"context_line":"        return cmd_result"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_e1050f46","line":244,"range":{"start_line":244,"start_character":45,"end_line":244,"end_character":48},"in_reply_to":"bae84128_69d91622","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"class LXCUnfs3Helper(object):"},{"line_number":249,"context_line":"    # (aovchinnikov): This is a temporary replacement for nfs-ganesha"},{"line_number":250,"context_line":"    # designed for testing purposes. It is not intended to be used in"},{"line_number":251,"context_line":"    # production."},{"line_number":252,"context_line":"    def __init__(self, lxd_helper, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_9a6cbad1","line":249,"range":{"start_line":249,"start_character":4,"end_line":249,"end_character":6},"updated":"2016-02-22 23:13:29.000000000","message":"Seems like you want NOTE or TODO here.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"class LXCUnfs3Helper(object):"},{"line_number":249,"context_line":"    # (aovchinnikov): This is a temporary replacement for nfs-ganesha"},{"line_number":250,"context_line":"    # designed for testing purposes. It is not intended to be used in"},{"line_number":251,"context_line":"    # production."},{"line_number":252,"context_line":"    def __init__(self, lxd_helper, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c15c4b4d","line":249,"range":{"start_line":249,"start_character":4,"end_line":249,"end_character":6},"in_reply_to":"bae84128_9a6cbad1","updated":"2016-02-24 10:43:58.000000000","message":"Right! Thank you!","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            [\"ip\", \"addr\", \"show\", \"eth0\"]"},{"line_number":282,"context_line":"        ).split()[18].split(\u0027/\u0027)[0]"},{"line_number":283,"context_line":"        location \u003d result + \u0027:\u0027 + \"/shares/%s\" % self.share.share_id"},{"line_number":284,"context_line":"        return location"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def delete_share(self, server_id):"},{"line_number":287,"context_line":"        share_name \u003d self.share.share_id"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_7aa8d6db","line":284,"range":{"start_line":284,"start_character":15,"end_line":284,"end_character":23},"updated":"2016-02-22 23:13:29.000000000","message":"Will you be supporting export location metadata?  With a single location, this would be trivial.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            [\"ip\", \"addr\", \"show\", \"eth0\"]"},{"line_number":282,"context_line":"        ).split()[18].split(\u0027/\u0027)[0]"},{"line_number":283,"context_line":"        location \u003d result + \u0027:\u0027 + \"/shares/%s\" % self.share.share_id"},{"line_number":284,"context_line":"        return location"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def delete_share(self, server_id):"},{"line_number":287,"context_line":"        share_name \u003d self.share.share_id"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c438d9d5","line":284,"range":{"start_line":284,"start_character":15,"end_line":284,"end_character":23},"in_reply_to":"bae84128_7aa8d6db","updated":"2016-02-24 10:43:58.000000000","message":"Yes, but I was planning to do it in ganesha driver. This one is here till I figure out why ganesha misbehaves while in container.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":297,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":298,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":299,"context_line":"        deny_pattern \u003d \"\\$\" + share_folder + \u0027.*\u0027 +\\"},{"line_number":300,"context_line":"                       host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027"},{"line_number":301,"context_line":"        self.lxd.execute_sync("},{"line_number":302,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_ba71be78","line":299,"range":{"start_line":299,"start_character":51,"end_line":299,"end_character":52},"updated":"2016-02-22 23:13:29.000000000","message":"Please use () instead of \\ for line continuation.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":297,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":298,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":299,"context_line":"        deny_pattern \u003d \"\\$\" + share_folder + \u0027.*\u0027 +\\"},{"line_number":300,"context_line":"                       host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027"},{"line_number":301,"context_line":"        self.lxd.execute_sync("},{"line_number":302,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_243425dc","line":299,"range":{"start_line":299,"start_character":51,"end_line":299,"end_character":52},"in_reply_to":"bae84128_ba71be78","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":297,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":298,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":299,"context_line":"        deny_pattern \u003d \"\\$\" + share_folder + \u0027.*\u0027 +\\"},{"line_number":300,"context_line":"                       host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027"},{"line_number":301,"context_line":"        self.lxd.execute_sync("},{"line_number":302,"context_line":"            server_id,"},{"line_number":303,"context_line":"            [\"sed\", \"-i\", deny_pattern, \"/etc/exports\"]"},{"line_number":304,"context_line":"        )"},{"line_number":305,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":308,"context_line":"                      access_level):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_b6a259ac","line":305,"range":{"start_line":297,"start_character":0,"end_line":305,"end_character":38},"updated":"2016-02-23 14:32:30.000000000","message":"You are removing rules independently of access_level validation. Please perform a validation and do not attempt to remove the rule if it does not pass validation (do not throw exception).","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":297,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":298,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":299,"context_line":"        deny_pattern \u003d \"\\$\" + share_folder + \u0027.*\u0027 +\\"},{"line_number":300,"context_line":"                       host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027"},{"line_number":301,"context_line":"        self.lxd.execute_sync("},{"line_number":302,"context_line":"            server_id,"},{"line_number":303,"context_line":"            [\"sed\", \"-i\", deny_pattern, \"/etc/exports\"]"},{"line_number":304,"context_line":"        )"},{"line_number":305,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":308,"context_line":"                      access_level):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d7ea49da","line":305,"range":{"start_line":297,"start_character":0,"end_line":305,"end_character":38},"in_reply_to":"bae84128_b6a259ac","updated":"2016-02-24 10:43:58.000000000","message":"Somehow I am unsure about the need to validate a rule before deleting it. As far as I understand, we intend to block a host, no  matter what access level it has, isn\u0027t that right?","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":308,"context_line":"                      access_level):"},{"line_number":309,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":310,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_1a8f0a76","line":309,"range":{"start_line":309,"start_character":27,"end_line":309,"end_character":31},"updated":"2016-02-22 23:13:29.000000000","message":"Please use the predefined constants for \u0027ro\u0027 and \u0027rw\u0027.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":308,"context_line":"                      access_level):"},{"line_number":309,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":310,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_a4a4b507","line":309,"range":{"start_line":309,"start_character":27,"end_line":309,"end_character":31},"in_reply_to":"bae84128_1a8f0a76","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                      access_level):"},{"line_number":309,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":310,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            raise exception.ManilaException(_(\"Illegal access level %s\") %"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_138877c4","line":311,"range":{"start_line":311,"start_character":29,"end_line":311,"end_character":34},"updated":"2016-02-23 14:32:30.000000000","message":"use constants.ACCEESS_LEVEL_RW","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                      access_level):"},{"line_number":309,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":310,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            raise exception.ManilaException(_(\"Illegal access level %s\") %"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c4dbb97a","line":311,"range":{"start_line":311,"start_character":29,"end_line":311,"end_character":34},"in_reply_to":"bae84128_138877c4","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            raise exception.ManilaException(_(\"Illegal access level %s\") %"},{"line_number":315,"context_line":"                                            str(access_level))"},{"line_number":316,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":317,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_b3bd4b6a","line":314,"range":{"start_line":314,"start_character":69,"end_line":314,"end_character":72},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            raise exception.ManilaException(_(\"Illegal access level %s\") %"},{"line_number":315,"context_line":"                                            str(access_level))"},{"line_number":316,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":317,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_fab98616","line":314,"range":{"start_line":314,"start_character":12,"end_line":314,"end_character":43},"updated":"2016-02-22 23:13:29.000000000","message":"raise exception.InvalidShareAccessLevel(level\u003daccess_level)","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            raise exception.ManilaException(_(\"Illegal access level %s\") %"},{"line_number":315,"context_line":"                                            str(access_level))"},{"line_number":316,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":317,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_7ab244e6","line":314,"range":{"start_line":314,"start_character":69,"end_line":314,"end_character":72},"in_reply_to":"bae84128_b3bd4b6a","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        elif access_level \u003d\u003d \u0027rw\u0027:"},{"line_number":312,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            raise exception.ManilaException(_(\"Illegal access level %s\") %"},{"line_number":315,"context_line":"                                            str(access_level))"},{"line_number":316,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":317,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_faa774a4","line":314,"range":{"start_line":314,"start_character":12,"end_line":314,"end_character":43},"in_reply_to":"bae84128_fab98616","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                                            str(access_level))"},{"line_number":316,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":317,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":318,"context_line":"        search_pattern \u003d share_folder + \u0027.*\u0027 +\\"},{"line_number":319,"context_line":"            host_to_allow.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*\u0027"},{"line_number":320,"context_line":"        result \u003d self.lxd.execute_sync("},{"line_number":321,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_fafea6ac","line":318,"range":{"start_line":318,"start_character":46,"end_line":318,"end_character":47},"updated":"2016-02-22 23:13:29.000000000","message":"Please use () instead of \\ for line continuation.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                                            str(access_level))"},{"line_number":316,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":317,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":318,"context_line":"        search_pattern \u003d share_folder + \u0027.*\u0027 +\\"},{"line_number":319,"context_line":"            host_to_allow.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*\u0027"},{"line_number":320,"context_line":"        result \u003d self.lxd.execute_sync("},{"line_number":321,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_a4403508","line":318,"range":{"start_line":318,"start_character":46,"end_line":318,"end_character":47},"in_reply_to":"bae84128_fafea6ac","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":335,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":336,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":337,"context_line":"            for rule in (access_rules or []):"},{"line_number":338,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":339,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_fa718645","line":336,"range":{"start_line":336,"start_character":8,"end_line":336,"end_character":53},"updated":"2016-02-22 23:13:29.000000000","message":"As presently coded, add_rules and delete_rules will always be lists, so this check won\u0027t work.  You could use:\n\n    if not (add_rules or delete_rules):","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":335,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":336,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":337,"context_line":"            for rule in (access_rules or []):"},{"line_number":338,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":339,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_57cab91b","line":336,"range":{"start_line":336,"start_character":8,"end_line":336,"end_character":53},"in_reply_to":"bae84128_fa718645","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":335,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":336,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":337,"context_line":"            for rule in (access_rules or []):"},{"line_number":338,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":339,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":340,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":341,"context_line":"                                   access_level)"},{"line_number":342,"context_line":"            return"},{"line_number":343,"context_line":"        if add_rules is not None:"},{"line_number":344,"context_line":"            for rule in add_rules:"},{"line_number":345,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d3144f4e","line":342,"range":{"start_line":337,"start_character":12,"end_line":342,"end_character":18},"updated":"2016-02-23 14:32:30.000000000","message":"if this is the recovery mode, it is supposed to clear previously existing rules.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":335,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":336,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":337,"context_line":"            for rule in (access_rules or []):"},{"line_number":338,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":339,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":340,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":341,"context_line":"                                   access_level)"},{"line_number":342,"context_line":"            return"},{"line_number":343,"context_line":"        if add_rules is not None:"},{"line_number":344,"context_line":"            for rule in add_rules:"},{"line_number":345,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_b77505cc","line":342,"range":{"start_line":337,"start_character":12,"end_line":342,"end_character":18},"in_reply_to":"bae84128_d3144f4e","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":341,"context_line":"                                   access_level)"},{"line_number":342,"context_line":"            return"},{"line_number":343,"context_line":"        if add_rules is not None:"},{"line_number":344,"context_line":"            for rule in add_rules:"},{"line_number":345,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":346,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_fabfc6a7","line":343,"range":{"start_line":343,"start_character":8,"end_line":343,"end_character":33},"updated":"2016-02-22 23:13:29.000000000","message":"Delete this line.  add_rules should always be iterable.  Same below for delete_rules.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":341,"context_line":"                                   access_level)"},{"line_number":342,"context_line":"            return"},{"line_number":343,"context_line":"        if add_rules is not None:"},{"line_number":344,"context_line":"            for rule in add_rules:"},{"line_number":345,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":346,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_77141d4c","line":343,"range":{"start_line":343,"start_character":8,"end_line":343,"end_character":33},"in_reply_to":"bae84128_fabfc6a7","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":352,"context_line":"                self._deny_access(server_id, host_to_deny)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"class LXCGaneshaHelper(object):"},{"line_number":356,"context_line":"    def __init__(self, lxd_helper, *args, **kwargs):"},{"line_number":357,"context_line":"        super(LXCGaneshaHelper, self).__init__()"},{"line_number":358,"context_line":"        self.share \u003d None or kwargs.get(\"share\")"},{"line_number":359,"context_line":"        self.lxd \u003d lxd_helper"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def create_share(self, server_id):"},{"line_number":362,"context_line":"        raise NotImplementedError()"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_share(self, server_id):"},{"line_number":365,"context_line":"        raise NotImplementedError()"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":368,"context_line":"        raise NotImplementedError()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow):"},{"line_number":371,"context_line":"        raise NotImplementedError()"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"class LXCCIFSHelper(object):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_16406533","line":371,"range":{"start_line":354,"start_character":0,"end_line":371,"end_character":35},"updated":"2016-02-23 14:32:30.000000000","message":"I guess this should not be here if it is not functional.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":352,"context_line":"                self._deny_access(server_id, host_to_deny)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"class LXCGaneshaHelper(object):"},{"line_number":356,"context_line":"    def __init__(self, lxd_helper, *args, **kwargs):"},{"line_number":357,"context_line":"        super(LXCGaneshaHelper, self).__init__()"},{"line_number":358,"context_line":"        self.share \u003d None or kwargs.get(\"share\")"},{"line_number":359,"context_line":"        self.lxd \u003d lxd_helper"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def create_share(self, server_id):"},{"line_number":362,"context_line":"        raise NotImplementedError()"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_share(self, server_id):"},{"line_number":365,"context_line":"        raise NotImplementedError()"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    def deny_access(self, server_id, host_to_deny):"},{"line_number":368,"context_line":"        raise NotImplementedError()"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def allow_access(self, share_name, server_id, host_to_allow):"},{"line_number":371,"context_line":"        raise NotImplementedError()"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"class LXCCIFSHelper(object):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_da6b90b5","line":371,"range":{"start_line":354,"start_character":0,"end_line":371,"end_character":35},"in_reply_to":"bae84128_16406533","updated":"2016-02-24 10:43:58.000000000","message":"Ok, agreed, it clutters the code.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":417,"context_line":"        )"},{"line_number":418,"context_line":"        if allowed_hosts.count(host_to_deny) \u003d\u003d 0:"},{"line_number":419,"context_line":"            LOG.debug(\"Access for host %s is already denied\" % host_to_deny)"},{"line_number":420,"context_line":"            return"},{"line_number":421,"context_line":"        pruned_hosts \u003d filter(lambda x: not x.startswith(host_to_deny),"},{"line_number":422,"context_line":"                              allowed_hosts.split())"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_96bc75bc","line":419,"range":{"start_line":419,"start_character":58,"end_line":419,"end_character":60},"updated":"2016-02-23 14:32:30.000000000","message":"Add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":417,"context_line":"        )"},{"line_number":418,"context_line":"        if allowed_hosts.count(host_to_deny) \u003d\u003d 0:"},{"line_number":419,"context_line":"            LOG.debug(\"Access for host %s is already denied\" % host_to_deny)"},{"line_number":420,"context_line":"            return"},{"line_number":421,"context_line":"        pruned_hosts \u003d filter(lambda x: not x.startswith(host_to_deny),"},{"line_number":422,"context_line":"                              allowed_hosts.split())"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_5a9e60b9","line":419,"range":{"start_line":419,"start_character":58,"end_line":419,"end_character":60},"in_reply_to":"bae84128_96bc75bc","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":431,"context_line":"                      access_level):"},{"line_number":432,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":433,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":434,"context_line":"            return"},{"line_number":435,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":436,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_56a82d77","line":433,"range":{"start_line":433,"start_character":58,"end_line":433,"end_character":60},"updated":"2016-02-23 14:32:30.000000000","message":"Add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":431,"context_line":"                      access_level):"},{"line_number":432,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":433,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":434,"context_line":"            return"},{"line_number":435,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":436,"context_line":"            server_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_9a7bc87a","line":433,"range":{"start_line":433,"start_character":58,"end_line":433,"end_character":60},"in_reply_to":"bae84128_56a82d77","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":431,"context_line":"                      access_level):"},{"line_number":432,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":433,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":434,"context_line":"            return"},{"line_number":435,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":436,"context_line":"            server_id,"},{"line_number":437,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_367e4919","line":434,"range":{"start_line":433,"start_character":12,"end_line":434,"end_character":18},"updated":"2016-02-23 14:32:30.000000000","message":"Is it always accessible to read data?","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":431,"context_line":"                      access_level):"},{"line_number":432,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":433,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":434,"context_line":"            return"},{"line_number":435,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":436,"context_line":"            server_id,"},{"line_number":437,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_5ad30060","line":434,"range":{"start_line":433,"start_character":12,"end_line":434,"end_character":18},"in_reply_to":"bae84128_367e4919","updated":"2016-02-24 10:43:58.000000000","message":"AFAIK yes.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":433,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":434,"context_line":"            return"},{"line_number":435,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":436,"context_line":"            server_id,"},{"line_number":437,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":"        if allowed_hosts.count(host_to_allow) !\u003d 0:"},{"line_number":440,"context_line":"            LOG.debug(\"Access for host %s is already allowed\" % host_to_allow)"},{"line_number":441,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_56d66df1","line":438,"range":{"start_line":435,"start_character":6,"end_line":438,"end_character":9},"updated":"2016-02-23 14:32:30.000000000","message":"what if access_level is not \u0027rw\u0027?","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        if access_level \u003d\u003d \u0027ro\u0027:"},{"line_number":433,"context_line":"            LOG.debug(\"Host is accessible for reading data\")"},{"line_number":434,"context_line":"            return"},{"line_number":435,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":436,"context_line":"            server_id,"},{"line_number":437,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":"        if allowed_hosts.count(host_to_allow) !\u003d 0:"},{"line_number":440,"context_line":"            LOG.debug(\"Access for host %s is already allowed\" % host_to_allow)"},{"line_number":441,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_ba1e8c09","line":438,"range":{"start_line":435,"start_character":6,"end_line":438,"end_character":9},"in_reply_to":"bae84128_56d66df1","updated":"2016-02-24 10:43:58.000000000","message":"Good point, will add corresponding check.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":"        if allowed_hosts.count(host_to_allow) !\u003d 0:"},{"line_number":440,"context_line":"            LOG.debug(\"Access for host %s is already allowed\" % host_to_allow)"},{"line_number":441,"context_line":"            return"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        allowed_hosts \u003d \", \".join([host_to_allow, allowed_hosts])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d69b9d64","line":440,"range":{"start_line":440,"start_character":59,"end_line":440,"end_character":61},"updated":"2016-02-23 14:32:30.000000000","message":"add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":"        if allowed_hosts.count(host_to_allow) !\u003d 0:"},{"line_number":440,"context_line":"            LOG.debug(\"Access for host %s is already allowed\" % host_to_allow)"},{"line_number":441,"context_line":"            return"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        allowed_hosts \u003d \", \".join([host_to_allow, allowed_hosts])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_1a1a1817","line":440,"range":{"start_line":440,"start_character":59,"end_line":440,"end_character":61},"in_reply_to":"bae84128_d69b9d64","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":447,"context_line":"             allowed_hosts]"},{"line_number":448,"context_line":"        )"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":451,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":452,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":453,"context_line":"            for rule in (access_rules or []):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_5a06b286","line":450,"range":{"start_line":450,"start_character":8,"end_line":450,"end_character":21},"updated":"2016-02-22 23:13:29.000000000","message":"Same comments here as above.  add_rules and delete_rules will never be None and should always be iterable.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":447,"context_line":"             allowed_hosts]"},{"line_number":448,"context_line":"        )"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":451,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":452,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":453,"context_line":"            for rule in (access_rules or []):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_baf68c8c","line":450,"range":{"start_line":450,"start_character":8,"end_line":450,"end_character":21},"in_reply_to":"bae84128_5a06b286","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":450,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":451,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":452,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":453,"context_line":"            for rule in (access_rules or []):"},{"line_number":454,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":455,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":456,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":457,"context_line":"                                   access_level)"},{"line_number":458,"context_line":"            return"},{"line_number":459,"context_line":"        if add_rules is not None:"},{"line_number":460,"context_line":"            for rule in add_rules:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_f6e4e1e0","line":457,"range":{"start_line":453,"start_character":11,"end_line":457,"end_character":48},"updated":"2016-02-23 14:32:30.000000000","message":"If this is recovery mode, it is supposed to clear any previously added rules.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":450,"context_line":"    def update_access(self, share_name, server_id, access_rules,"},{"line_number":451,"context_line":"                      add_rules\u003dNone, delete_rules\u003dNone):"},{"line_number":452,"context_line":"        if add_rules is None and delete_rules is None:"},{"line_number":453,"context_line":"            for rule in (access_rules or []):"},{"line_number":454,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":455,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":456,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":457,"context_line":"                                   access_level)"},{"line_number":458,"context_line":"            return"},{"line_number":459,"context_line":"        if add_rules is not None:"},{"line_number":460,"context_line":"            for rule in add_rules:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_7ad364d5","line":457,"range":{"start_line":453,"start_character":11,"end_line":457,"end_character":48},"in_reply_to":"bae84128_f6e4e1e0","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    def _get_nfs_helper(self):"},{"line_number":519,"context_line":"        if self.configuration.lxd_nfs_server \u003d\u003d \u0027ganesha\u0027:"},{"line_number":520,"context_line":"            return LXCGaneshaHelper"},{"line_number":521,"context_line":"        elif self.configuration.lxd_nfs_server \u003d\u003d \u0027unfs3\u0027:"},{"line_number":522,"context_line":"            return LXCUnfs3Helper"},{"line_number":523,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d6a71d09","line":520,"range":{"start_line":520,"start_character":12,"end_line":520,"end_character":35},"updated":"2016-02-23 14:32:30.000000000","message":"raise an exception saying it is unsupported. If LXCGaneshaHelper is not functional at this moment it should not be included.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    def _get_nfs_helper(self):"},{"line_number":519,"context_line":"        if self.configuration.lxd_nfs_server \u003d\u003d \u0027ganesha\u0027:"},{"line_number":520,"context_line":"            return LXCGaneshaHelper"},{"line_number":521,"context_line":"        elif self.configuration.lxd_nfs_server \u003d\u003d \u0027unfs3\u0027:"},{"line_number":522,"context_line":"            return LXCUnfs3Helper"},{"line_number":523,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_5a4dc098","line":520,"range":{"start_line":520,"start_character":12,"end_line":520,"end_character":35},"in_reply_to":"bae84128_d6a71d09","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            return LXCUnfs3Helper"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            raise exception.ManilaException(_(\"Unsupported NFS userspace \""},{"line_number":525,"context_line":"                                            \"server: %s\") %"},{"line_number":526,"context_line":"                                            self.configuration.lxd_nfs_server)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def _get_helper(self, share):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d60efd8a","line":525,"range":{"start_line":525,"start_character":54,"end_line":525,"end_character":56},"updated":"2016-02-23 14:32:30.000000000","message":"Add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            return LXCUnfs3Helper"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            raise exception.ManilaException(_(\"Unsupported NFS userspace \""},{"line_number":525,"context_line":"                                            \"server: %s\") %"},{"line_number":526,"context_line":"                                            self.configuration.lxd_nfs_server)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def _get_helper(self, share):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_ba253e0a","line":525,"range":{"start_line":525,"start_character":44,"end_line":525,"end_character":45},"updated":"2016-02-22 23:13:29.000000000","message":"Fix alignment.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            return LXCUnfs3Helper"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            raise exception.ManilaException(_(\"Unsupported NFS userspace \""},{"line_number":525,"context_line":"                                            \"server: %s\") %"},{"line_number":526,"context_line":"                                            self.configuration.lxd_nfs_server)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def _get_helper(self, share):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_7a46c47b","line":525,"range":{"start_line":525,"start_character":44,"end_line":525,"end_character":45},"in_reply_to":"bae84128_ba253e0a","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            return LXCUnfs3Helper"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            raise exception.ManilaException(_(\"Unsupported NFS userspace \""},{"line_number":525,"context_line":"                                            \"server: %s\") %"},{"line_number":526,"context_line":"                                            self.configuration.lxd_nfs_server)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def _get_helper(self, share):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_da61d006","line":525,"range":{"start_line":525,"start_character":54,"end_line":525,"end_character":56},"in_reply_to":"bae84128_d60efd8a","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":542,"context_line":"            return self._helpers[\"CIFS\"]"},{"line_number":543,"context_line":"        else:"},{"line_number":544,"context_line":"            raise exception.InvalidShare("},{"line_number":545,"context_line":"                reason\u003d_(\"Wrong, unsupported or disabled protocol\"))"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def _get_lv_device(self, share):"},{"line_number":548,"context_line":"        return os.path.join(\"/dev\", self.configuration.lxd_volume_group,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_16250508","line":545,"range":{"start_line":545,"start_character":64,"end_line":545,"end_character":66},"updated":"2016-02-23 14:32:30.000000000","message":"Add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":542,"context_line":"            return self._helpers[\"CIFS\"]"},{"line_number":543,"context_line":"        else:"},{"line_number":544,"context_line":"            raise exception.InvalidShare("},{"line_number":545,"context_line":"                reason\u003d_(\"Wrong, unsupported or disabled protocol\"))"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def _get_lv_device(self, share):"},{"line_number":548,"context_line":"        return os.path.join(\"/dev\", self.configuration.lxd_volume_group,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_fa52d433","line":545,"range":{"start_line":545,"start_character":64,"end_line":545,"end_character":66},"in_reply_to":"bae84128_16250508","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        return os.path.join(\"/tmp\", share.share_id)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":557,"context_line":"        LOG.debug(\"Create share on server \u0027%s\u0027\" % share_server[\"id\"])"},{"line_number":558,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":559,"context_line":"        share_name \u003d share.share_id"},{"line_number":560,"context_line":"        self.lxd.execute_sync("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d6855dcf","line":557,"range":{"start_line":557,"start_character":45,"end_line":557,"end_character":47},"updated":"2016-02-23 14:32:30.000000000","message":"Add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        return os.path.join(\"/tmp\", share.share_id)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":557,"context_line":"        LOG.debug(\"Create share on server \u0027%s\u0027\" % share_server[\"id\"])"},{"line_number":558,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":559,"context_line":"        share_name \u003d share.share_id"},{"line_number":560,"context_line":"        self.lxd.execute_sync("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_1a2fb8a1","line":557,"range":{"start_line":557,"start_character":45,"end_line":557,"end_character":47},"in_reply_to":"bae84128_d6855dcf","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            [\"ifconfig\", \"eth0\", port_address, \"up\"]"},{"line_number":597,"context_line":"        )"},{"line_number":598,"context_line":"        host_veth \u003d self._get_host_veth(server_id)"},{"line_number":599,"context_line":"        msg_helper \u003d {\u0027id\u0027: server_id, \u0027veth\u0027: host_veth,"},{"line_number":600,"context_line":"                      \u0027lb\u0027: self.configuration.lxd_linux_bridge_name,"},{"line_number":601,"context_line":"                      \u0027ovsb\u0027: self.configuration.lxd_ovs_bridge_name,"},{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_9acf9a28","line":599,"range":{"start_line":599,"start_character":21,"end_line":599,"end_character":22},"updated":"2016-02-22 23:13:29.000000000","message":"Please wrap according to the guidelines.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            [\"ifconfig\", \"eth0\", port_address, \"up\"]"},{"line_number":597,"context_line":"        )"},{"line_number":598,"context_line":"        host_veth \u003d self._get_host_veth(server_id)"},{"line_number":599,"context_line":"        msg_helper \u003d {\u0027id\u0027: server_id, \u0027veth\u0027: host_veth,"},{"line_number":600,"context_line":"                      \u0027lb\u0027: self.configuration.lxd_linux_bridge_name,"},{"line_number":601,"context_line":"                      \u0027ovsb\u0027: self.configuration.lxd_ovs_bridge_name,"},{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_1a06981f","line":599,"range":{"start_line":599,"start_character":21,"end_line":599,"end_character":22},"in_reply_to":"bae84128_9acf9a28","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                      \u0027ovsb\u0027: self.configuration.lxd_ovs_bridge_name,"},{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"},{"line_number":603,"context_line":"                      \u0027subnet\u0027: network_info[\u0027neutron_subnet_id\u0027]}"},{"line_number":604,"context_line":"        LOG.debug(\"Container %(id)s veth is %(veth)s\" % msg_helper)"},{"line_number":605,"context_line":"        LOG.debug(\"Removing %(veth)s from %(lb)s.\" % msg_helper)"},{"line_number":606,"context_line":"        self._execute(\"brctl\", \"delif\","},{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_09716a76","line":604,"range":{"start_line":604,"start_character":51,"end_line":604,"end_character":53},"updated":"2016-02-23 14:32:30.000000000","message":"Add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                      \u0027ovsb\u0027: self.configuration.lxd_ovs_bridge_name,"},{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"},{"line_number":603,"context_line":"                      \u0027subnet\u0027: network_info[\u0027neutron_subnet_id\u0027]}"},{"line_number":604,"context_line":"        LOG.debug(\"Container %(id)s veth is %(veth)s\" % msg_helper)"},{"line_number":605,"context_line":"        LOG.debug(\"Removing %(veth)s from %(lb)s.\" % msg_helper)"},{"line_number":606,"context_line":"        self._execute(\"brctl\", \"delif\","},{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c99b0265","line":604,"range":{"start_line":604,"start_character":54,"end_line":604,"end_character":56},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                      \u0027ovsb\u0027: self.configuration.lxd_ovs_bridge_name,"},{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"},{"line_number":603,"context_line":"                      \u0027subnet\u0027: network_info[\u0027neutron_subnet_id\u0027]}"},{"line_number":604,"context_line":"        LOG.debug(\"Container %(id)s veth is %(veth)s\" % msg_helper)"},{"line_number":605,"context_line":"        LOG.debug(\"Removing %(veth)s from %(lb)s.\" % msg_helper)"},{"line_number":606,"context_line":"        self._execute(\"brctl\", \"delif\","},{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_fa001404","line":604,"range":{"start_line":604,"start_character":51,"end_line":604,"end_character":53},"in_reply_to":"bae84128_09716a76","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                      \u0027ovsb\u0027: self.configuration.lxd_ovs_bridge_name,"},{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"},{"line_number":603,"context_line":"                      \u0027subnet\u0027: network_info[\u0027neutron_subnet_id\u0027]}"},{"line_number":604,"context_line":"        LOG.debug(\"Container %(id)s veth is %(veth)s\" % msg_helper)"},{"line_number":605,"context_line":"        LOG.debug(\"Removing %(veth)s from %(lb)s.\" % msg_helper)"},{"line_number":606,"context_line":"        self._execute(\"brctl\", \"delif\","},{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_35056d10","line":604,"range":{"start_line":604,"start_character":54,"end_line":604,"end_character":56},"in_reply_to":"bae84128_c99b0265","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"},{"line_number":603,"context_line":"                      \u0027subnet\u0027: network_info[\u0027neutron_subnet_id\u0027]}"},{"line_number":604,"context_line":"        LOG.debug(\"Container %(id)s veth is %(veth)s\" % msg_helper)"},{"line_number":605,"context_line":"        LOG.debug(\"Removing %(veth)s from %(lb)s.\" % msg_helper)"},{"line_number":606,"context_line":"        self._execute(\"brctl\", \"delif\","},{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"},{"line_number":608,"context_line":"                      run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_a9903e44","line":605,"range":{"start_line":605,"start_character":50,"end_line":605,"end_character":52},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                      \u0027ip\u0027: port_address,"},{"line_number":603,"context_line":"                      \u0027subnet\u0027: network_info[\u0027neutron_subnet_id\u0027]}"},{"line_number":604,"context_line":"        LOG.debug(\"Container %(id)s veth is %(veth)s\" % msg_helper)"},{"line_number":605,"context_line":"        LOG.debug(\"Removing %(veth)s from %(lb)s.\" % msg_helper)"},{"line_number":606,"context_line":"        self._execute(\"brctl\", \"delif\","},{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"},{"line_number":608,"context_line":"                      run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d516c14a","line":605,"range":{"start_line":605,"start_character":50,"end_line":605,"end_character":52},"in_reply_to":"bae84128_a9903e44","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"},{"line_number":608,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        LOG.debug(\"Plugging %(veth)s into %(ovsb)s.\" % msg_helper)"},{"line_number":611,"context_line":"        set_if \u003d [\u0027--\u0027, \u0027set\u0027, \u0027interface\u0027, host_veth]"},{"line_number":612,"context_line":"        e_mac \u003d set_if + [\u0027external-ids:attached-mac\u003d\"%s\"\u0027 % port_mac]"},{"line_number":613,"context_line":"        e_id \u003d set_if + [\u0027external-ids:iface-id\u003d\"%s\"\u0027 % port_id]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_49725212","line":610,"range":{"start_line":610,"start_character":52,"end_line":610,"end_character":55},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":607,"context_line":"                      self.configuration.lxd_linux_bridge_name, host_veth,"},{"line_number":608,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        LOG.debug(\"Plugging %(veth)s into %(ovsb)s.\" % msg_helper)"},{"line_number":611,"context_line":"        set_if \u003d [\u0027--\u0027, \u0027set\u0027, \u0027interface\u0027, host_veth]"},{"line_number":612,"context_line":"        e_mac \u003d set_if + [\u0027external-ids:attached-mac\u003d\"%s\"\u0027 % port_mac]"},{"line_number":613,"context_line":"        e_id \u003d set_if + [\u0027external-ids:iface-id\u003d\"%s\"\u0027 % port_id]"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_b5117d54","line":610,"range":{"start_line":610,"start_character":52,"end_line":610,"end_character":55},"in_reply_to":"bae84128_49725212","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                      self.configuration.lxd_ovs_bridge_name, host_veth,"},{"line_number":617,"context_line":"                      *(e_mac + e_id + e_status), run_as_root\u003dTrue)"},{"line_number":618,"context_line":"        LOG.debug(\"Now container %(id)s should be accessible from network \""},{"line_number":619,"context_line":"                  \"%(subnet)s by address %(ip)s.\" % msg_helper)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":622,"context_line":"        LOG.debug(\"Deleting share %(share)s on server \u0027%(server)s\u0027\" %"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_e97fe614","line":619,"range":{"start_line":619,"start_character":49,"end_line":619,"end_character":52},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                  \"%(subnet)s by address %(ip)s.\" % msg_helper)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":622,"context_line":"        LOG.debug(\"Deleting share %(share)s on server \u0027%(server)s\u0027\" %"},{"line_number":623,"context_line":"                  {\"server\": share_server[\"id\"],"},{"line_number":624,"context_line":"                   \"share\": share.share_id})"},{"line_number":625,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_29d0ae1e","line":622,"range":{"start_line":622,"start_character":64,"end_line":622,"end_character":67},"updated":"2016-02-23 14:32:30.000000000","message":"Add a period.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                  \"%(subnet)s by address %(ip)s.\" % msg_helper)"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":622,"context_line":"        LOG.debug(\"Deleting share %(share)s on server \u0027%(server)s\u0027\" %"},{"line_number":623,"context_line":"                  {\"server\": share_server[\"id\"],"},{"line_number":624,"context_line":"                   \"share\": share.share_id})"},{"line_number":625,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_f5178542","line":622,"range":{"start_line":622,"start_character":64,"end_line":622,"end_character":67},"in_reply_to":"bae84128_29d0ae1e","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":634,"context_line":"            server_id,"},{"line_number":635,"context_line":"            [\"rm\", \"-fR\", \"/shares/%s\" % share.share_id]"},{"line_number":636,"context_line":"        )"},{"line_number":637,"context_line":"        LOG.debug(\"Deletion of share %s is complete!\" % share.share_id)"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def _get_host_veth(self, server_id):"},{"line_number":640,"context_line":"        for ip in self.lxd.api.container_info(server_id)[\u0027ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_0994ca40","line":637,"range":{"start_line":637,"start_character":53,"end_line":637,"end_character":57},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":634,"context_line":"            server_id,"},{"line_number":635,"context_line":"            [\"rm\", \"-fR\", \"/shares/%s\" % share.share_id]"},{"line_number":636,"context_line":"        )"},{"line_number":637,"context_line":"        LOG.debug(\"Deletion of share %s is complete!\" % share.share_id)"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def _get_host_veth(self, server_id):"},{"line_number":640,"context_line":"        for ip in self.lxd.api.container_info(server_id)[\u0027ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_1534a9db","line":637,"range":{"start_line":637,"start_character":53,"end_line":637,"end_character":57},"in_reply_to":"bae84128_0994ca40","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":659,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":660,"context_line":"        share_name \u003d share.share_id"},{"line_number":661,"context_line":"        LOG.debug(\"Updating access to share %(share)s at \""},{"line_number":662,"context_line":"                  \"share server %(share_server)s.\" %"},{"line_number":663,"context_line":"                  {\"share_server\": share_server[\"id\"],"},{"line_number":664,"context_line":"                   \"share\": share.share_id})"},{"line_number":665,"context_line":"        for rule in (access_rules or []) + (add_rules or []):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_c9b82278","line":662,"range":{"start_line":662,"start_character":50,"end_line":662,"end_character":52},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":659,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":660,"context_line":"        share_name \u003d share.share_id"},{"line_number":661,"context_line":"        LOG.debug(\"Updating access to share %(share)s at \""},{"line_number":662,"context_line":"                  \"share server %(share_server)s.\" %"},{"line_number":663,"context_line":"                  {\"share_server\": share_server[\"id\"],"},{"line_number":664,"context_line":"                   \"share\": share.share_id})"},{"line_number":665,"context_line":"        for rule in (access_rules or []) + (add_rules or []):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_f5b3054b","line":662,"range":{"start_line":662,"start_character":50,"end_line":662,"end_character":52},"in_reply_to":"bae84128_c9b82278","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"0013128f0e7006a974dc515f40bb04043c54fdff","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                  \"share server %(share_server)s.\" %"},{"line_number":663,"context_line":"                  {\"share_server\": share_server[\"id\"],"},{"line_number":664,"context_line":"                   \"share\": share.share_id})"},{"line_number":665,"context_line":"        for rule in (access_rules or []) + (add_rules or []):"},{"line_number":666,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":667,"context_line":"            if access_level not in (const.ACCESS_LEVEL_RW,"},{"line_number":668,"context_line":"                                    const.ACCESS_LEVEL_RO):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_7a70d6dc","line":665,"range":{"start_line":665,"start_character":20,"end_line":665,"end_character":60},"updated":"2016-02-22 23:13:29.000000000","message":"You can assume these are iterables.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                  \"share server %(share_server)s.\" %"},{"line_number":663,"context_line":"                  {\"share_server\": share_server[\"id\"],"},{"line_number":664,"context_line":"                   \"share\": share.share_id})"},{"line_number":665,"context_line":"        for rule in (access_rules or []) + (add_rules or []):"},{"line_number":666,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":667,"context_line":"            if access_level not in (const.ACCESS_LEVEL_RW,"},{"line_number":668,"context_line":"                                    const.ACCESS_LEVEL_RO):"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_35ef2d1f","line":665,"range":{"start_line":665,"start_character":20,"end_line":665,"end_character":60},"in_reply_to":"bae84128_7a70d6dc","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":664,"context_line":"                   \"share\": share.share_id})"},{"line_number":665,"context_line":"        for rule in (access_rules or []) + (add_rules or []):"},{"line_number":666,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":667,"context_line":"            if access_level not in (const.ACCESS_LEVEL_RW,"},{"line_number":668,"context_line":"                                    const.ACCESS_LEVEL_RO):"},{"line_number":669,"context_line":"                raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":670,"context_line":"        self._get_helper(share).update_access(share_name, server_id,"},{"line_number":671,"context_line":"                                              access_rules, add_rules,"},{"line_number":672,"context_line":"                                              delete_rules)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_a964be21","line":669,"range":{"start_line":667,"start_character":12,"end_line":669,"end_character":75},"updated":"2016-02-23 14:32:30.000000000","message":"Isn\u0027t your helper is already doing this?","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":664,"context_line":"                   \"share\": share.share_id})"},{"line_number":665,"context_line":"        for rule in (access_rules or []) + (add_rules or []):"},{"line_number":666,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":667,"context_line":"            if access_level not in (const.ACCESS_LEVEL_RW,"},{"line_number":668,"context_line":"                                    const.ACCESS_LEVEL_RO):"},{"line_number":669,"context_line":"                raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":670,"context_line":"        self._get_helper(share).update_access(share_name, server_id,"},{"line_number":671,"context_line":"                                              access_rules, add_rules,"},{"line_number":672,"context_line":"                                              delete_rules)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d5752164","line":669,"range":{"start_line":667,"start_character":12,"end_line":669,"end_character":75},"in_reply_to":"bae84128_a964be21","updated":"2016-02-24 10:43:58.000000000","message":"Now yes, so this branch becomes redundant.","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a1a0b9aacc7b2861896af81fd5a6ccc1e57a46e2","unresolved":false,"context_lines":[{"line_number":693,"context_line":"                                           [\"mkdir\", \"-m\", \"777\", \"/shares\"])"},{"line_number":694,"context_line":"        self._connect_to_network(server_id, network_info)"},{"line_number":695,"context_line":"        # TODO(aovchinnikov): expand metadata above the bare minimum"},{"line_number":696,"context_line":"        LOG.debug(\"Container %s was created!\" % server_id)"},{"line_number":697,"context_line":"        return {\"id\": network_info[\"server_id\"]}"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_67b93d15","line":696,"range":{"start_line":696,"start_character":46,"end_line":696,"end_character":48},"updated":"2016-02-23 14:32:30.000000000","message":"use comma instead of %","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"d50de9e8bae8897f1166e34bdd812ae45b7f27a8","unresolved":false,"context_lines":[{"line_number":693,"context_line":"                                           [\"mkdir\", \"-m\", \"777\", \"/shares\"])"},{"line_number":694,"context_line":"        self._connect_to_network(server_id, network_info)"},{"line_number":695,"context_line":"        # TODO(aovchinnikov): expand metadata above the bare minimum"},{"line_number":696,"context_line":"        LOG.debug(\"Container %s was created!\" % server_id)"},{"line_number":697,"context_line":"        return {\"id\": network_info[\"server_id\"]}"}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_5508f1d9","line":696,"range":{"start_line":696,"start_character":46,"end_line":696,"end_character":48},"in_reply_to":"bae84128_67b93d15","updated":"2016-02-24 10:43:58.000000000","message":"Done","commit_id":"7462f89a98b3dc02e0b3f855df53591afa40ea10"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a03dfa6c65a4b2e7fdcb89302db64582b66c9a05","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":300,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":301,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":302,"context_line":"        deny_pattern \u003d (\"\\$\" + share_folder + \u0027.*\u0027 +"},{"line_number":303,"context_line":"                        host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027)"},{"line_number":304,"context_line":"        self.lxd.execute_sync("},{"line_number":305,"context_line":"            server_id,"},{"line_number":306,"context_line":"            [\"sed\", \"-i\", deny_pattern, \"/etc/exports\"]"},{"line_number":307,"context_line":"        )"},{"line_number":308,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":311,"context_line":"                      access_level):"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_de753932","line":308,"range":{"start_line":300,"start_character":0,"end_line":308,"end_character":38},"updated":"2016-02-24 11:51:57.000000000","message":"Imagine the following situation: user adds an \u0027ip\u0027 type rule with value 10.0.0.1. Ok. Then user adds an \u0027user\u0027 type rule with value 10.0.0.1. You block this rule and do not add it because \u0027user\u0027 type rule is not allowed for this helper or protocol. The rule will stay in DB with error status. The user will attempt to remove this rule, call will reach this deny method and remove a rule with value 10.0.0.1, which is the \u0027ip\u0027 type one.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"e6723b1dcdc6e8a1e41a0ef4ce65a389533ea839","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":300,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":301,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":302,"context_line":"        deny_pattern \u003d (\"\\$\" + share_folder + \u0027.*\u0027 +"},{"line_number":303,"context_line":"                        host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027)"},{"line_number":304,"context_line":"        self.lxd.execute_sync("},{"line_number":305,"context_line":"            server_id,"},{"line_number":306,"context_line":"            [\"sed\", \"-i\", deny_pattern, \"/etc/exports\"]"},{"line_number":307,"context_line":"        )"},{"line_number":308,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":311,"context_line":"                      access_level):"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_ee284c88","line":308,"range":{"start_line":300,"start_character":0,"end_line":308,"end_character":38},"in_reply_to":"bae84128_de753932","updated":"2016-02-24 12:48:15.000000000","message":"Oh, you mean access_type validation. Ok, this sounds reasonable. But shouldn\u0027t it be done id update_access then?","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0bbf6a66698bfb530265996f3c33717a5d5541b2","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":300,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":301,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":302,"context_line":"        deny_pattern \u003d (\"\\$\" + share_folder + \u0027.*\u0027 +"},{"line_number":303,"context_line":"                        host_to_deny.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*$d\u0027)"},{"line_number":304,"context_line":"        self.lxd.execute_sync("},{"line_number":305,"context_line":"            server_id,"},{"line_number":306,"context_line":"            [\"sed\", \"-i\", deny_pattern, \"/etc/exports\"]"},{"line_number":307,"context_line":"        )"},{"line_number":308,"context_line":"        self._restart_unfsd(server_id)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":311,"context_line":"                      access_level):"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_0443cf13","line":308,"range":{"start_line":300,"start_character":0,"end_line":308,"end_character":38},"in_reply_to":"bae84128_ee284c88","updated":"2016-02-24 13:13:43.000000000","message":"Could be, but you also have internal methods, so your decision.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a03dfa6c65a4b2e7fdcb89302db64582b66c9a05","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":311,"context_line":"                      access_level):"},{"line_number":312,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":313,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":314,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":315,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":316,"context_line":"        else:"},{"line_number":317,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":318,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":319,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":320,"context_line":"        search_pattern \u003d (share_folder + \u0027.*\u0027 +"},{"line_number":321,"context_line":"                          host_to_allow.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*\u0027)"},{"line_number":322,"context_line":"        result \u003d self.lxd.execute_sync("},{"line_number":323,"context_line":"            server_id,"},{"line_number":324,"context_line":"            [\"grep\", search_pattern, \"/etc/exports\"]"},{"line_number":325,"context_line":"        )"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        if result \u003d\u003d \u0027\u0027:"},{"line_number":328,"context_line":"            new_share \u003d share_folder + \u0027 \u0027 + host_to_allow + access_rules"},{"line_number":329,"context_line":"            result \u003d self.lxd.execute_sync("},{"line_number":330,"context_line":"                server_id,"},{"line_number":331,"context_line":"                [\"sed\", \"-i\", \"$ a\\\\\" + new_share, \"/etc/exports\"]"},{"line_number":332,"context_line":"            )"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"            self._restart_unfsd(server_id)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def update_access(self, share_name, server_id, access_rules, add_rules,"},{"line_number":337,"context_line":"                      delete_rules):"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_9ecd7168","line":334,"range":{"start_line":312,"start_character":0,"end_line":334,"end_character":42},"updated":"2016-02-24 11:51:57.000000000","message":"If this is responsible for NFS, according to your support matrix doc, you should be block \u0027user\u0027 type rules. You are not checking for them.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"e6723b1dcdc6e8a1e41a0ef4ce65a389533ea839","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":311,"context_line":"                      access_level):"},{"line_number":312,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":313,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":314,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":315,"context_line":"            access_rules \u003d self.access_rules_rw"},{"line_number":316,"context_line":"        else:"},{"line_number":317,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"},{"line_number":318,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":319,"context_line":"        share_folder \u003d \"/shares/%s\" % share_name"},{"line_number":320,"context_line":"        search_pattern \u003d (share_folder + \u0027.*\u0027 +"},{"line_number":321,"context_line":"                          host_to_allow.replace(\u0027.\u0027, \u0027\\.\u0027) + \u0027.*\u0027)"},{"line_number":322,"context_line":"        result \u003d self.lxd.execute_sync("},{"line_number":323,"context_line":"            server_id,"},{"line_number":324,"context_line":"            [\"grep\", search_pattern, \"/etc/exports\"]"},{"line_number":325,"context_line":"        )"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        if result \u003d\u003d \u0027\u0027:"},{"line_number":328,"context_line":"            new_share \u003d share_folder + \u0027 \u0027 + host_to_allow + access_rules"},{"line_number":329,"context_line":"            result \u003d self.lxd.execute_sync("},{"line_number":330,"context_line":"                server_id,"},{"line_number":331,"context_line":"                [\"sed\", \"-i\", \"$ a\\\\\" + new_share, \"/etc/exports\"]"},{"line_number":332,"context_line":"            )"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"            self._restart_unfsd(server_id)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def update_access(self, share_name, server_id, access_rules, add_rules,"},{"line_number":337,"context_line":"                      delete_rules):"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_0e113004","line":334,"range":{"start_line":312,"start_character":0,"end_line":334,"end_character":42},"in_reply_to":"bae84128_9ecd7168","updated":"2016-02-24 12:48:15.000000000","message":"Yes, that part is obviously missing. Probably it should be checked in update_access().","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a03dfa6c65a4b2e7fdcb89302db64582b66c9a05","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    def update_access(self, share_name, server_id, access_rules, add_rules,"},{"line_number":337,"context_line":"                      delete_rules):"},{"line_number":338,"context_line":"        if not (add_rules or delete_rules):"},{"line_number":339,"context_line":"            self.lxd.execute_sync("},{"line_number":340,"context_line":"                server_id,"},{"line_number":341,"context_line":"                [\"sed\", \"-i\", \"/#.*/b; /.*/d\", \"/etc/exports\"]"},{"line_number":342,"context_line":"            )"},{"line_number":343,"context_line":"            for rule in (access_rules or []):"},{"line_number":344,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":345,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_fe2bdd7f","line":342,"range":{"start_line":339,"start_character":0,"end_line":342,"end_character":13},"updated":"2016-02-24 11:51:57.000000000","message":"I am not sure of what this does, but you must be careful to only remove all rules related to the given share. There may be rules related to other shares in /etc/exports.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"e6723b1dcdc6e8a1e41a0ef4ce65a389533ea839","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    def update_access(self, share_name, server_id, access_rules, add_rules,"},{"line_number":337,"context_line":"                      delete_rules):"},{"line_number":338,"context_line":"        if not (add_rules or delete_rules):"},{"line_number":339,"context_line":"            self.lxd.execute_sync("},{"line_number":340,"context_line":"                server_id,"},{"line_number":341,"context_line":"                [\"sed\", \"-i\", \"/#.*/b; /.*/d\", \"/etc/exports\"]"},{"line_number":342,"context_line":"            )"},{"line_number":343,"context_line":"            for rule in (access_rules or []):"},{"line_number":344,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":345,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_4bdb2a7c","line":342,"range":{"start_line":339,"start_character":0,"end_line":342,"end_character":13},"in_reply_to":"bae84128_fe2bdd7f","updated":"2016-02-24 12:48:15.000000000","message":"Hmm, good point, thank you, this one is too  broad indeed. Apparently I was thinking about complete breakdown and recovery. Will fix it.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a03dfa6c65a4b2e7fdcb89302db64582b66c9a05","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        )"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":398,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":399,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":400,"context_line":"            server_id,"},{"line_number":401,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":402,"context_line":"        )"},{"line_number":403,"context_line":"        if allowed_hosts.count(host_to_deny) \u003d\u003d 0:"},{"line_number":404,"context_line":"            LOG.debug(\"Access for host %s is already denied.\", host_to_deny)"},{"line_number":405,"context_line":"            return"},{"line_number":406,"context_line":"        pruned_hosts \u003d filter(lambda x: not x.startswith(host_to_deny),"},{"line_number":407,"context_line":"                              allowed_hosts.split())"},{"line_number":408,"context_line":"        allowed_hosts \u003d \" \".join(pruned_hosts)"},{"line_number":409,"context_line":"        self.lxd.execute_sync("},{"line_number":410,"context_line":"            server_id,"},{"line_number":411,"context_line":"            [\"net\", \"conf\", \"setparm\", share_name, \"hosts allow\","},{"line_number":412,"context_line":"             allowed_hosts]"},{"line_number":413,"context_line":"        )"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_de9259f5","line":412,"range":{"start_line":398,"start_character":0,"end_line":412,"end_character":27},"updated":"2016-02-24 11:51:57.000000000","message":"perform validation to not do anything when an \u0027ip\u0027 rule is received here. According to your support matrix, this method should only support \u0027user\u0027 type rules. By the way, as far as I know about CIFS, \"hosts allow\" values should be IPs or hostnames, in your support matrix you say your CIFS implementation supports \u0027user\u0027 type.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"e6723b1dcdc6e8a1e41a0ef4ce65a389533ea839","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        )"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def _deny_access(self, server_id, host_to_deny):"},{"line_number":398,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":399,"context_line":"        allowed_hosts \u003d self.lxd.execute_sync("},{"line_number":400,"context_line":"            server_id,"},{"line_number":401,"context_line":"            [\"net\", \"conf\", \"getparm\", share_name, \"hosts allow\"]"},{"line_number":402,"context_line":"        )"},{"line_number":403,"context_line":"        if allowed_hosts.count(host_to_deny) \u003d\u003d 0:"},{"line_number":404,"context_line":"            LOG.debug(\"Access for host %s is already denied.\", host_to_deny)"},{"line_number":405,"context_line":"            return"},{"line_number":406,"context_line":"        pruned_hosts \u003d filter(lambda x: not x.startswith(host_to_deny),"},{"line_number":407,"context_line":"                              allowed_hosts.split())"},{"line_number":408,"context_line":"        allowed_hosts \u003d \" \".join(pruned_hosts)"},{"line_number":409,"context_line":"        self.lxd.execute_sync("},{"line_number":410,"context_line":"            server_id,"},{"line_number":411,"context_line":"            [\"net\", \"conf\", \"setparm\", share_name, \"hosts allow\","},{"line_number":412,"context_line":"             allowed_hosts]"},{"line_number":413,"context_line":"        )"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_0170e1a2","line":412,"range":{"start_line":398,"start_character":0,"end_line":412,"end_character":27},"in_reply_to":"bae84128_de9259f5","updated":"2016-02-24 12:48:15.000000000","message":"Thank you for pointing this out, that\u0027s obviously my wrong. It was intended to be used with \u0027ip\u0027 rules only. Also it seems that the same error has crept into support matrix.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a03dfa6c65a4b2e7fdcb89302db64582b66c9a05","unresolved":false,"context_lines":[{"line_number":415,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":416,"context_line":"                      access_level):"},{"line_number":417,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":418,"context_line":"            LOG.debug(\"Host is accessible for reading data.\")"},{"line_number":419,"context_line":"            return"},{"line_number":420,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":421,"context_line":"            allowed_hosts \u003d self.lxd.execute_sync("}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_53348248","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":61},"updated":"2016-02-24 11:51:57.000000000","message":"So, is there any way to not always allow read without a RO access rule? Is this intended or is it a limitation? Is this related to CIFS guest access? What if it is disabled?","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"0bbf6a66698bfb530265996f3c33717a5d5541b2","unresolved":false,"context_lines":[{"line_number":415,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":416,"context_line":"                      access_level):"},{"line_number":417,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":418,"context_line":"            LOG.debug(\"Host is accessible for reading data.\")"},{"line_number":419,"context_line":"            return"},{"line_number":420,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":421,"context_line":"            allowed_hosts \u003d self.lxd.execute_sync("}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_447af724","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":61},"in_reply_to":"bae84128_4e2338bd","updated":"2016-02-24 13:13:43.000000000","message":"From what I have seen in the generic driver, CIFS does not support RO for IP rules. So you could just block IP rules which are RO, throw exception in this case, here you should not depend on whether guest is enabled/disabled. \n\nIf you want to allow guest to be disabled/enabled, you could add a config option for it, so admin chooses whether to allow RO to everybody or not.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"e6723b1dcdc6e8a1e41a0ef4ce65a389533ea839","unresolved":false,"context_lines":[{"line_number":415,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":416,"context_line":"                      access_level):"},{"line_number":417,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":418,"context_line":"            LOG.debug(\"Host is accessible for reading data.\")"},{"line_number":419,"context_line":"            return"},{"line_number":420,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":421,"context_line":"            allowed_hosts \u003d self.lxd.execute_sync("}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_4e2338bd","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":61},"in_reply_to":"bae84128_53348248","updated":"2016-02-24 12:48:15.000000000","message":"Yes, this is related to guest access being turned on by default. Probably it should be turned off instead. Or \u0027ro\u0027 should be provided anyways.","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a03dfa6c65a4b2e7fdcb89302db64582b66c9a05","unresolved":false,"context_lines":[{"line_number":425,"context_line":"            if allowed_hosts.count(host_to_allow) !\u003d 0:"},{"line_number":426,"context_line":"                LOG.debug(\"Access for host %s is already allowed.\","},{"line_number":427,"context_line":"                          host_to_allow)"},{"line_number":428,"context_line":"                return"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            allowed_hosts \u003d \", \".join([host_to_allow, allowed_hosts])"},{"line_number":431,"context_line":"            self.lxd.execute_sync("},{"line_number":432,"context_line":"                server_id,"},{"line_number":433,"context_line":"                [\"net\", \"conf\", \"setparm\", share_name, \"hosts allow\","},{"line_number":434,"context_line":"                 allowed_hosts]"},{"line_number":435,"context_line":"            )"},{"line_number":436,"context_line":"        else:"},{"line_number":437,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_7e234dbd","line":434,"range":{"start_line":428,"start_character":10,"end_line":434,"end_character":31},"updated":"2016-02-24 11:51:57.000000000","message":"Does this method support both \u0027ip\u0027 and \u0027user\u0027 type rules? you are not validating. As far as I know, \"hosts allow\" is only for IPs and hostnames. What do you do when you receive an \u0027user\u0027 type rule here?","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"e6723b1dcdc6e8a1e41a0ef4ce65a389533ea839","unresolved":false,"context_lines":[{"line_number":425,"context_line":"            if allowed_hosts.count(host_to_allow) !\u003d 0:"},{"line_number":426,"context_line":"                LOG.debug(\"Access for host %s is already allowed.\","},{"line_number":427,"context_line":"                          host_to_allow)"},{"line_number":428,"context_line":"                return"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            allowed_hosts \u003d \", \".join([host_to_allow, allowed_hosts])"},{"line_number":431,"context_line":"            self.lxd.execute_sync("},{"line_number":432,"context_line":"                server_id,"},{"line_number":433,"context_line":"                [\"net\", \"conf\", \"setparm\", share_name, \"hosts allow\","},{"line_number":434,"context_line":"                 allowed_hosts]"},{"line_number":435,"context_line":"            )"},{"line_number":436,"context_line":"        else:"},{"line_number":437,"context_line":"            raise exception.InvalidShareAccessLevel(level\u003daccess_level)"}],"source_content_type":"text/x-python","patch_set":36,"id":"bae84128_61ea8ddc","line":434,"range":{"start_line":428,"start_character":10,"end_line":434,"end_character":31},"in_reply_to":"bae84128_7e234dbd","updated":"2016-02-24 12:48:15.000000000","message":"No, it only supports \u0027ip\u0027 so far. As in unfs3 helper it should be validated in update_access().","commit_id":"fe682e8559ea96ff7b8fd5eb3a1fa5990391ce8b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d6896d1a7892e5241b56c60154bc0bc61d4c98c9","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":347,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":348,"context_line":"                access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":349,"context_line":"                if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":350,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":351,"context_line":"                                       access_level)"},{"line_number":352,"context_line":"            return"},{"line_number":353,"context_line":"        for rule in add_rules:"},{"line_number":354,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_04374f4d","line":351,"range":{"start_line":349,"start_character":16,"end_line":351,"end_character":52},"updated":"2016-02-24 13:13:28.000000000","message":"else? if this method ends gracefully API will believe an \u0027user\u0027 rule has been successfully added.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0fbf32c3f080bd0b1807d8c6f8cd637ea94018c5","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":347,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":348,"context_line":"                access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":349,"context_line":"                if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":350,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":351,"context_line":"                                       access_level)"},{"line_number":352,"context_line":"            return"},{"line_number":353,"context_line":"        for rule in add_rules:"},{"line_number":354,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_442317bd","line":351,"range":{"start_line":349,"start_character":16,"end_line":351,"end_character":52},"in_reply_to":"bae84128_04374f4d","updated":"2016-02-24 13:51:07.000000000","message":"Good point.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d6896d1a7892e5241b56c60154bc0bc61d4c98c9","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":355,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":356,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":357,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":358,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":359,"context_line":"                                   access_level)"},{"line_number":360,"context_line":"        for rule in delete_rules:"},{"line_number":361,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":362,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_841a3fc4","line":359,"range":{"start_line":357,"start_character":12,"end_line":359,"end_character":48},"updated":"2016-02-24 13:13:28.000000000","message":"else? if this method ends gracefully API will believe an \u0027user\u0027 rule has been successfully added.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0fbf32c3f080bd0b1807d8c6f8cd637ea94018c5","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":355,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":356,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":357,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":358,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":359,"context_line":"                                   access_level)"},{"line_number":360,"context_line":"        for rule in delete_rules:"},{"line_number":361,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":362,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_3f253c5b","line":359,"range":{"start_line":357,"start_character":12,"end_line":359,"end_character":48},"in_reply_to":"bae84128_841a3fc4","updated":"2016-02-24 13:51:07.000000000","message":"Done","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d6896d1a7892e5241b56c60154bc0bc61d4c98c9","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        for rule in delete_rules:"},{"line_number":361,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":362,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":363,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":364,"context_line":"                self._deny_access(server_id, host_to_deny)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"class LXCCIFSHelper(object):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_e4622b3d","line":364,"range":{"start_line":363,"start_character":11,"end_line":364,"end_character":58},"updated":"2016-02-24 13:13:28.000000000","message":"this is ok, but I suggest adding a warning message.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0fbf32c3f080bd0b1807d8c6f8cd637ea94018c5","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        for rule in delete_rules:"},{"line_number":361,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":362,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":363,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":364,"context_line":"                self._deny_access(server_id, host_to_deny)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"class LXCCIFSHelper(object):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_1fe958b7","line":364,"range":{"start_line":363,"start_character":11,"end_line":364,"end_character":58},"in_reply_to":"bae84128_e4622b3d","updated":"2016-02-24 13:51:07.000000000","message":"Ok, will add a warning.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d6896d1a7892e5241b56c60154bc0bc61d4c98c9","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":457,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":458,"context_line":"                access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":459,"context_line":"                if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":460,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":461,"context_line":"                                       access_level)"},{"line_number":462,"context_line":"            return"},{"line_number":463,"context_line":"        for rule in add_rules:"},{"line_number":464,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_24d093c8","line":461,"range":{"start_line":459,"start_character":16,"end_line":461,"end_character":52},"updated":"2016-02-24 13:13:28.000000000","message":"else? if this method ends gracefully API will believe an \u0027user\u0027 rule has been successfully added.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0fbf32c3f080bd0b1807d8c6f8cd637ea94018c5","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":457,"context_line":"                access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":458,"context_line":"                access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":459,"context_line":"                if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":460,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":461,"context_line":"                                       access_level)"},{"line_number":462,"context_line":"            return"},{"line_number":463,"context_line":"        for rule in add_rules:"},{"line_number":464,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_5fcf6055","line":461,"range":{"start_line":459,"start_character":16,"end_line":461,"end_character":52},"in_reply_to":"bae84128_24d093c8","updated":"2016-02-24 13:51:07.000000000","message":"Done","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d6896d1a7892e5241b56c60154bc0bc61d4c98c9","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":465,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":466,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":467,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":468,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":469,"context_line":"                                   access_level)"},{"line_number":470,"context_line":"        for rule in delete_rules:"},{"line_number":471,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":472,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_04d3cfd5","line":469,"range":{"start_line":467,"start_character":12,"end_line":469,"end_character":48},"updated":"2016-02-24 13:13:28.000000000","message":"else? if this method ends gracefully API will believe an \u0027user\u0027 rule has been successfully added.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0fbf32c3f080bd0b1807d8c6f8cd637ea94018c5","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":465,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":466,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":467,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":468,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":469,"context_line":"                                   access_level)"},{"line_number":470,"context_line":"        for rule in delete_rules:"},{"line_number":471,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":472,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_ff063484","line":469,"range":{"start_line":467,"start_character":12,"end_line":469,"end_character":48},"in_reply_to":"bae84128_04d3cfd5","updated":"2016-02-24 13:51:07.000000000","message":"Done","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d6896d1a7892e5241b56c60154bc0bc61d4c98c9","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        for rule in delete_rules:"},{"line_number":471,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":472,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":473,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":474,"context_line":"                self._deny_access(server_id, host_to_deny)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"class LXCDriver(driver.GaneshaMixin, driver.ShareDriver, driver.ExecuteMixin):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_44d957f2","line":474,"range":{"start_line":473,"start_character":13,"end_line":474,"end_character":58},"updated":"2016-02-24 13:13:28.000000000","message":"this is ok, but I suggest adding a warning message.","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"0fbf32c3f080bd0b1807d8c6f8cd637ea94018c5","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        for rule in delete_rules:"},{"line_number":471,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":472,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":473,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":474,"context_line":"                self._deny_access(server_id, host_to_deny)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"class LXCDriver(driver.GaneshaMixin, driver.ShareDriver, driver.ExecuteMixin):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bae84128_df09b096","line":474,"range":{"start_line":473,"start_character":13,"end_line":474,"end_character":58},"in_reply_to":"bae84128_44d957f2","updated":"2016-02-24 13:51:07.000000000","message":"Done","commit_id":"dd70c6f2e2c23f16e6592be557e85ad82c0a02e9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5989eb1767be1208e5cc827763cb0d2ff90341b1","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":352,"context_line":"                                       access_level)"},{"line_number":353,"context_line":"                else:"},{"line_number":354,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":355,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":356,"context_line":"            return"},{"line_number":357,"context_line":"        for rule in add_rules:"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_d5318fa3","line":354,"range":{"start_line":354,"start_character":51,"end_line":354,"end_character":61},"updated":"2016-02-24 14:00:16.000000000","message":"s/suppoerted/supported","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"60d24db08ed6890823eac5d4b46039e7b8a17c1e","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":352,"context_line":"                                       access_level)"},{"line_number":353,"context_line":"                else:"},{"line_number":354,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":355,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":356,"context_line":"            return"},{"line_number":357,"context_line":"        for rule in add_rules:"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_f565b31d","line":354,"range":{"start_line":354,"start_character":51,"end_line":354,"end_character":61},"in_reply_to":"bae84128_d5318fa3","updated":"2016-02-24 14:55:06.000000000","message":"Done","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5989eb1767be1208e5cc827763cb0d2ff90341b1","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                                       access_level)"},{"line_number":353,"context_line":"                else:"},{"line_number":354,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":355,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":356,"context_line":"            return"},{"line_number":357,"context_line":"        for rule in add_rules:"},{"line_number":358,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_75fc03b8","line":355,"range":{"start_line":355,"start_character":26,"end_line":355,"end_character":70},"updated":"2016-02-24 14:00:16.000000000","message":"Please use exception.InvalidAccessException, and as a nit, I suggest formatting the string in the same statement.","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"60d24db08ed6890823eac5d4b46039e7b8a17c1e","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                                       access_level)"},{"line_number":353,"context_line":"                else:"},{"line_number":354,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":355,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":356,"context_line":"            return"},{"line_number":357,"context_line":"        for rule in add_rules:"},{"line_number":358,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_b52e8ba2","line":355,"range":{"start_line":355,"start_character":26,"end_line":355,"end_character":70},"in_reply_to":"bae84128_1585b7cd","updated":"2016-02-24 14:55:06.000000000","message":"Done","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"60d24db08ed6890823eac5d4b46039e7b8a17c1e","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                                       access_level)"},{"line_number":353,"context_line":"                else:"},{"line_number":354,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":355,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":356,"context_line":"            return"},{"line_number":357,"context_line":"        for rule in add_rules:"},{"line_number":358,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_5523bfbc","line":355,"range":{"start_line":355,"start_character":26,"end_line":355,"end_character":70},"in_reply_to":"bae84128_75fc03b8","updated":"2016-02-24 14:55:06.000000000","message":"Done","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d5c60b2d02dfb54cd654d3cecd7fe2a0dfab34c3","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                                       access_level)"},{"line_number":353,"context_line":"                else:"},{"line_number":354,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":355,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":356,"context_line":"            return"},{"line_number":357,"context_line":"        for rule in add_rules:"},{"line_number":358,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_1585b7cd","line":355,"range":{"start_line":355,"start_character":26,"end_line":355,"end_character":70},"in_reply_to":"bae84128_75fc03b8","updated":"2016-02-24 14:03:53.000000000","message":"correction: exception.InvalidShareAccess","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5989eb1767be1208e5cc827763cb0d2ff90341b1","unresolved":false,"context_lines":[{"line_number":361,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":362,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":363,"context_line":"                                   access_level)"},{"line_number":364,"context_line":"            else:"},{"line_number":365,"context_line":"                msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":366,"context_line":"                raise exception.ManilaException(msg % access_type)"},{"line_number":367,"context_line":"        for rule in delete_rules:"},{"line_number":368,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":369,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_b5196b24","line":366,"range":{"start_line":364,"start_character":12,"end_line":366,"end_character":66},"updated":"2016-02-24 14:00:16.000000000","message":"same as above","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"60d24db08ed6890823eac5d4b46039e7b8a17c1e","unresolved":false,"context_lines":[{"line_number":361,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":362,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":363,"context_line":"                                   access_level)"},{"line_number":364,"context_line":"            else:"},{"line_number":365,"context_line":"                msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":366,"context_line":"                raise exception.ManilaException(msg % access_type)"},{"line_number":367,"context_line":"        for rule in delete_rules:"},{"line_number":368,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":369,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_b054d9c9","line":366,"range":{"start_line":364,"start_character":12,"end_line":366,"end_character":66},"in_reply_to":"bae84128_b5196b24","updated":"2016-02-24 14:55:06.000000000","message":"Done","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5989eb1767be1208e5cc827763cb0d2ff90341b1","unresolved":false,"context_lines":[{"line_number":433,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":434,"context_line":"                      access_level):"},{"line_number":435,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":436,"context_line":"            LOG.debug(\"Host is accessible for reading data.\")"},{"line_number":437,"context_line":"            return"},{"line_number":438,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":439,"context_line":"            allowed_hosts \u003d self.lxd.execute_sync("}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_d58d0f32","line":436,"range":{"start_line":436,"start_character":12,"end_line":436,"end_character":61},"updated":"2016-02-24 14:00:16.000000000","message":"Will there be a config option for guest access enable/disable?","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"60d24db08ed6890823eac5d4b46039e7b8a17c1e","unresolved":false,"context_lines":[{"line_number":433,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":434,"context_line":"                      access_level):"},{"line_number":435,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":436,"context_line":"            LOG.debug(\"Host is accessible for reading data.\")"},{"line_number":437,"context_line":"            return"},{"line_number":438,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":439,"context_line":"            allowed_hosts \u003d self.lxd.execute_sync("}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_1c0b1f7e","line":436,"range":{"start_line":436,"start_character":12,"end_line":436,"end_character":61},"in_reply_to":"bae84128_d58d0f32","updated":"2016-02-24 14:55:06.000000000","message":"Yes.","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5989eb1767be1208e5cc827763cb0d2ff90341b1","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":470,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":471,"context_line":"                                       access_level)"},{"line_number":472,"context_line":"                else:"},{"line_number":473,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":474,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":475,"context_line":"            return"},{"line_number":476,"context_line":"        for rule in add_rules:"},{"line_number":477,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_35dc3b45","line":474,"range":{"start_line":472,"start_character":16,"end_line":474,"end_character":70},"updated":"2016-02-24 14:00:16.000000000","message":"same as above","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"60d24db08ed6890823eac5d4b46039e7b8a17c1e","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":470,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":471,"context_line":"                                       access_level)"},{"line_number":472,"context_line":"                else:"},{"line_number":473,"context_line":"                    msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":474,"context_line":"                    raise exception.ManilaException(msg % access_type)"},{"line_number":475,"context_line":"            return"},{"line_number":476,"context_line":"        for rule in add_rules:"},{"line_number":477,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_f06021a7","line":474,"range":{"start_line":472,"start_character":16,"end_line":474,"end_character":70},"in_reply_to":"bae84128_35dc3b45","updated":"2016-02-24 14:55:06.000000000","message":"Done","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5989eb1767be1208e5cc827763cb0d2ff90341b1","unresolved":false,"context_lines":[{"line_number":480,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":481,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":482,"context_line":"                                   access_level)"},{"line_number":483,"context_line":"            else:"},{"line_number":484,"context_line":"                msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":485,"context_line":"                raise exception.ManilaException(msg % access_type)"},{"line_number":486,"context_line":"        for rule in delete_rules:"},{"line_number":487,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":488,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_75ea43dc","line":485,"range":{"start_line":483,"start_character":12,"end_line":485,"end_character":66},"updated":"2016-02-24 14:00:16.000000000","message":"same as above","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"60d24db08ed6890823eac5d4b46039e7b8a17c1e","unresolved":false,"context_lines":[{"line_number":480,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":481,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":482,"context_line":"                                   access_level)"},{"line_number":483,"context_line":"            else:"},{"line_number":484,"context_line":"                msg \u003d _(\"Access type %s is not suppoerted by the driver.\")"},{"line_number":485,"context_line":"                raise exception.ManilaException(msg % access_type)"},{"line_number":486,"context_line":"        for rule in delete_rules:"},{"line_number":487,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":488,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_305729cb","line":485,"range":{"start_line":483,"start_character":12,"end_line":485,"end_character":66},"in_reply_to":"bae84128_75ea43dc","updated":"2016-02-24 14:55:06.000000000","message":"Done","commit_id":"18905e367e2d82ecd4e7d272c2500f4c7b996bfb"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5da24baf0432f44eb764adf78c712c7cde182107","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":356,"context_line":"                                       access_level)"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":359,"context_line":"            return"},{"line_number":360,"context_line":"        for rule in add_rules:"},{"line_number":361,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_93cc3536","line":358,"range":{"start_line":358,"start_character":55,"end_line":358,"end_character":73},"updated":"2016-02-24 16:30:24.000000000","message":"this message will produce the following output:\n\nInvalid access rule: \u0027user\u0027.\n\nPlease create a message like it was before and set \"reason\u003dmsg\".","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"08f8bf717deb7f7bddbb0d3b56d3f3bfb462bdb3","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":356,"context_line":"                                       access_level)"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":359,"context_line":"            return"},{"line_number":360,"context_line":"        for rule in add_rules:"},{"line_number":361,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_f0c3cc88","line":358,"range":{"start_line":358,"start_character":55,"end_line":358,"end_character":73},"in_reply_to":"bae84128_93cc3536","updated":"2016-02-25 08:12:22.000000000","message":"Oh, ok.","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5da24baf0432f44eb764adf78c712c7cde182107","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":366,"context_line":"                                   access_level)"},{"line_number":367,"context_line":"            else:"},{"line_number":368,"context_line":"                raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":369,"context_line":"        for rule in delete_rules:"},{"line_number":370,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":371,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_f3e661ae","line":368,"range":{"start_line":368,"start_character":51,"end_line":368,"end_character":69},"updated":"2016-02-24 16:30:24.000000000","message":"this message will produce the following output:\n\nInvalid access rule: \u0027user\u0027.\n\nPlease create a message like it was before and set \"reason\u003dmsg\".","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"08f8bf717deb7f7bddbb0d3b56d3f3bfb462bdb3","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":366,"context_line":"                                   access_level)"},{"line_number":367,"context_line":"            else:"},{"line_number":368,"context_line":"                raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":369,"context_line":"        for rule in delete_rules:"},{"line_number":370,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":371,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_10bbd00f","line":368,"range":{"start_line":368,"start_character":51,"end_line":368,"end_character":69},"in_reply_to":"bae84128_f3e661ae","updated":"2016-02-25 08:12:22.000000000","message":"Done","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5da24baf0432f44eb764adf78c712c7cde182107","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":388,"context_line":"        cmd \u003d [\"net\", \"conf\", \"addshare\", share_name,"},{"line_number":389,"context_line":"               \"/shares/%s\" % share_name, \"writeable\u003dy\"]"},{"line_number":390,"context_line":"        if self.conf.lxd_cifs_guest_ok \u003d\u003d \"yes\":"},{"line_number":391,"context_line":"            cmd.append(\"guest_ok\u003dy\")"},{"line_number":392,"context_line":"        self.lxd.execute_sync(server_id, cmd)"},{"line_number":393,"context_line":"        parameters \u003d {"},{"line_number":394,"context_line":"            \"browseable\": \"yes\","}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_56b3bb4c","line":391,"range":{"start_line":390,"start_character":8,"end_line":391,"end_character":36},"updated":"2016-02-24 16:30:24.000000000","message":"I am assuming the absence will produce \"guest_ok\u003dn\".","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"08f8bf717deb7f7bddbb0d3b56d3f3bfb462bdb3","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        share_name \u003d self.share.share_id"},{"line_number":388,"context_line":"        cmd \u003d [\"net\", \"conf\", \"addshare\", share_name,"},{"line_number":389,"context_line":"               \"/shares/%s\" % share_name, \"writeable\u003dy\"]"},{"line_number":390,"context_line":"        if self.conf.lxd_cifs_guest_ok \u003d\u003d \"yes\":"},{"line_number":391,"context_line":"            cmd.append(\"guest_ok\u003dy\")"},{"line_number":392,"context_line":"        self.lxd.execute_sync(server_id, cmd)"},{"line_number":393,"context_line":"        parameters \u003d {"},{"line_number":394,"context_line":"            \"browseable\": \"yes\","}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_5009d8dc","line":391,"range":{"start_line":390,"start_character":8,"end_line":391,"end_character":36},"in_reply_to":"bae84128_56b3bb4c","updated":"2016-02-25 08:12:22.000000000","message":"Most likely. But anyway I think I\u0027ll just add it explicitly.","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5da24baf0432f44eb764adf78c712c7cde182107","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":439,"context_line":"            if self.conf.lxd_cifs_guest_ok !\u003d \"yes\":"},{"line_number":440,"context_line":"                raise exception.ManilaException(_(\"Can\u0027t provide \u0027ro\u0027 access\""},{"line_number":441,"context_line":"                                                  \"for guest\"))"},{"line_number":442,"context_line":"            LOG.debug(\"Host is accessible for reading data.\")"},{"line_number":443,"context_line":"            return"},{"line_number":444,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_73a9b123","line":441,"range":{"start_line":441,"start_character":59,"end_line":441,"end_character":60},"updated":"2016-02-24 16:30:24.000000000","message":"add a period.","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"08f8bf717deb7f7bddbb0d3b56d3f3bfb462bdb3","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":439,"context_line":"            if self.conf.lxd_cifs_guest_ok !\u003d \"yes\":"},{"line_number":440,"context_line":"                raise exception.ManilaException(_(\"Can\u0027t provide \u0027ro\u0027 access\""},{"line_number":441,"context_line":"                                                  \"for guest\"))"},{"line_number":442,"context_line":"            LOG.debug(\"Host is accessible for reading data.\")"},{"line_number":443,"context_line":"            return"},{"line_number":444,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_10ee30ec","line":441,"range":{"start_line":441,"start_character":59,"end_line":441,"end_character":60},"in_reply_to":"bae84128_73a9b123","updated":"2016-02-25 08:12:22.000000000","message":"Done","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5da24baf0432f44eb764adf78c712c7cde182107","unresolved":false,"context_lines":[{"line_number":476,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":477,"context_line":"                                       access_level)"},{"line_number":478,"context_line":"                else:"},{"line_number":479,"context_line":"                    raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":480,"context_line":"            return"},{"line_number":481,"context_line":"        for rule in add_rules:"},{"line_number":482,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_b34cd99e","line":479,"range":{"start_line":479,"start_character":55,"end_line":479,"end_character":73},"updated":"2016-02-24 16:30:24.000000000","message":"this message will produce the following output:\n\nInvalid access rule: \u0027user\u0027.\n\nPlease create a message like it was before and set \"reason\u003dmsg\".","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"08f8bf717deb7f7bddbb0d3b56d3f3bfb462bdb3","unresolved":false,"context_lines":[{"line_number":476,"context_line":"                    self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":477,"context_line":"                                       access_level)"},{"line_number":478,"context_line":"                else:"},{"line_number":479,"context_line":"                    raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":480,"context_line":"            return"},{"line_number":481,"context_line":"        for rule in add_rules:"},{"line_number":482,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_b098246c","line":479,"range":{"start_line":479,"start_character":55,"end_line":479,"end_character":73},"in_reply_to":"bae84128_b34cd99e","updated":"2016-02-25 08:12:22.000000000","message":"Done","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5da24baf0432f44eb764adf78c712c7cde182107","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":487,"context_line":"                                   access_level)"},{"line_number":488,"context_line":"            else:"},{"line_number":489,"context_line":"                raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":490,"context_line":"        for rule in delete_rules:"},{"line_number":491,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":492,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_f310215b","line":489,"range":{"start_line":489,"start_character":51,"end_line":489,"end_character":69},"updated":"2016-02-24 16:30:24.000000000","message":"this message will produce the following output:\n\nInvalid access rule: \u0027user\u0027.\n\nPlease create a message like it was before and set \"reason\u003dmsg\".","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"08f8bf717deb7f7bddbb0d3b56d3f3bfb462bdb3","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":487,"context_line":"                                   access_level)"},{"line_number":488,"context_line":"            else:"},{"line_number":489,"context_line":"                raise exception.InvalidShareAccess(reason\u003daccess_type)"},{"line_number":490,"context_line":"        for rule in delete_rules:"},{"line_number":491,"context_line":"            host_to_deny \u003d rule[\u0027access_to\u0027]"},{"line_number":492,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_f0a2ac99","line":489,"range":{"start_line":489,"start_character":51,"end_line":489,"end_character":69},"in_reply_to":"bae84128_f310215b","updated":"2016-02-25 08:12:22.000000000","message":"Done","commit_id":"ce113cf324898910ba90296f72b4ee05640f14cd"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ea1011bc4feba32a70d42a5a3ca4a9ec456bbb65","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        status, info \u003d self.api.operation_info(result[\"operation\"])"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        LOG.debug(\"Operation details: %s, %s.\", (info, status))"},{"line_number":253,"context_line":"        return cmd_result"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"9aed3d3a_cd8775b3","line":252,"updated":"2016-03-01 02:42:25.000000000","message":"LOG.debug(\"Operation details: %(info)s, %(status)s.\", {\u0027info\u0027 : info, \u0027status\u0027: status})","commit_id":"8f2835538b0379c89a965ceea6fd93b210e2749d"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c29a75539601821d9a816b82c2528cc1affcd6f1","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        status, info \u003d self.api.operation_info(result[\"operation\"])"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        LOG.debug(\"Operation details: %s, %s.\", (info, status))"},{"line_number":253,"context_line":"        return cmd_result"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"9aed3d3a_53aadf19","line":252,"in_reply_to":"9aed3d3a_cd8775b3","updated":"2016-03-01 05:39:38.000000000","message":"Done","commit_id":"8f2835538b0379c89a965ceea6fd93b210e2749d"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ea1011bc4feba32a70d42a5a3ca4a9ec456bbb65","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":491,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":492,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":493,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":494,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":495,"context_line":"                                   access_level)"},{"line_number":496,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":44,"id":"9aed3d3a_36f10ece","line":493,"updated":"2016-03-01 02:42:25.000000000","message":"Access by IP is optional for CIFS shares but access by user is required. This is the reason for the test failures","commit_id":"8f2835538b0379c89a965ceea6fd93b210e2749d"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"c29a75539601821d9a816b82c2528cc1affcd6f1","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            host_to_allow \u003d rule[\u0027access_to\u0027]"},{"line_number":491,"context_line":"            access_level \u003d rule[\u0027access_level\u0027]"},{"line_number":492,"context_line":"            access_type \u003d rule[\u0027access_type\u0027]"},{"line_number":493,"context_line":"            if access_type \u003d\u003d \u0027ip\u0027:"},{"line_number":494,"context_line":"                self._allow_access(share_name, server_id, host_to_allow,"},{"line_number":495,"context_line":"                                   access_level)"},{"line_number":496,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":44,"id":"9aed3d3a_26155be4","line":493,"in_reply_to":"9aed3d3a_36f10ece","updated":"2016-03-01 05:39:38.000000000","message":"Oh, then I should add access by user with the next patch set.","commit_id":"8f2835538b0379c89a965ceea6fd93b210e2749d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":43,"context_line":"lxd_opts \u003d ["},{"line_number":44,"context_line":"    # (aovchinnikov): this has to stay till we can produce images which"},{"line_number":45,"context_line":"    # can set up OVS correctly."},{"line_number":46,"context_line":"    cfg.StrOpt(\"lxd_linux_bridge_name\","},{"line_number":47,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":48,"context_line":"               required\u003dTrue,"},{"line_number":49,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to. \""}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_9969ec8e","line":46,"range":{"start_line":46,"start_character":16,"end_line":46,"end_character":19},"updated":"2016-03-01 13:43:26.000000000","message":"contradicts name of a module.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"407008dc112f1d8db1c201d77c6709e4b94e5d5e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"lxd_opts \u003d ["},{"line_number":44,"context_line":"    # (aovchinnikov): this has to stay till we can produce images which"},{"line_number":45,"context_line":"    # can set up OVS correctly."},{"line_number":46,"context_line":"    cfg.StrOpt(\"lxd_linux_bridge_name\","},{"line_number":47,"context_line":"               default\u003d\"lxcbr0\","},{"line_number":48,"context_line":"               required\u003dTrue,"},{"line_number":49,"context_line":"               help\u003d\"Linux bridge used by LXD to plug host-side veth to. \""}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_4c3b1dec","line":46,"range":{"start_line":46,"start_character":16,"end_line":46,"end_character":19},"in_reply_to":"7af24918_9969ec8e","updated":"2016-03-01 14:51:43.000000000","message":"Done","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":317,"context_line":"                      access_level):"},{"line_number":318,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":319,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":320,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":321,"context_line":"            access_rules \u003d self.access_rules_rw"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_d96254ad","line":318,"updated":"2016-03-01 13:43:26.000000000","message":"Where is check for \"access_type\" !\u003d IP?","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"f337f6e2fd6a1bc37dbfca62251b2ad36214f363","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":317,"context_line":"                      access_level):"},{"line_number":318,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":319,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":320,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":321,"context_line":"            access_rules \u003d self.access_rules_rw"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_74418539","line":318,"in_reply_to":"7af24918_d96254ad","updated":"2016-03-01 13:56:40.000000000","message":"Right below, in update_access()","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"e0cb645abe7551906eef5dfdb3d1f7fc06f311b2","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def _allow_access(self, share_name, server_id, host_to_allow,"},{"line_number":317,"context_line":"                      access_level):"},{"line_number":318,"context_line":"        if access_level \u003d\u003d const.ACCESS_LEVEL_RO:"},{"line_number":319,"context_line":"            access_rules \u003d self.access_rules_ro"},{"line_number":320,"context_line":"        elif access_level \u003d\u003d const.ACCESS_LEVEL_RW:"},{"line_number":321,"context_line":"            access_rules \u003d self.access_rules_rw"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_9431b1ef","line":318,"in_reply_to":"7af24918_d96254ad","updated":"2016-03-01 13:55:18.000000000","message":"down on lines 358/370?","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"}],"manila/share/drivers/lxd.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"89293db1c63135cbbd684e8d1febf1510bc0865c","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":619,"context_line":"        LOG.debug(\"Create share on server \u0027%s\u0027.\" % share_server[\"id\"])"},{"line_number":620,"context_line":"        server_id \u003d self._get_container_name(share_server[\"id\"])"},{"line_number":621,"context_line":"        share_name \u003d share.share_id"},{"line_number":622,"context_line":"        self.lxd.execute_sync("},{"line_number":623,"context_line":"            server_id,"},{"line_number":624,"context_line":"            [\"mkdir\", \"-m\", \"777\", \"/shares/%s\" % share_name]"}],"source_content_type":"text/x-python","patch_set":52,"id":"7af24918_c1215da1","line":621,"range":{"start_line":621,"start_character":21,"end_line":621,"end_character":35},"updated":"2016-03-02 16:12:17.000000000","message":"\"share_id\" should be replaced with \"id\" attr that is \"share_instance_id\". Can be follow-up fix or updated here.","commit_id":"4f74b224fad7bf9ca665d70a66c79c98cf8d5674"}],"manila/tests/share/drivers/test_lxd.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b2389e08c90ff1313c06452051bbd5e929e3d6d6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\"Unit tests for the LXC driver module.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_6194ede7","line":16,"updated":"2016-02-09 15:19:16.000000000","message":"Too small test coverage. All helpers should be covered too.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\"Unit tests for the LXC driver module.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_fc5ac44f","line":16,"in_reply_to":"5a5ae5dd_6194ede7","updated":"2016-02-09 15:55:47.000000000","message":"Sure, that was the first batch of tests.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b2389e08c90ff1313c06452051bbd5e929e3d6d6","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def tearDown(self):"},{"line_number":94,"context_line":"        super(LXCDriverTestCase, self).tearDown()"},{"line_number":95,"context_line":"        fake_utils.fake_execute_set_repliers([])"},{"line_number":96,"context_line":"        fake_utils.fake_execute_clear_log()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_create_share(self):"},{"line_number":99,"context_line":"        helper \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_817d69e9","line":96,"range":{"start_line":95,"start_character":8,"end_line":96,"end_character":43},"updated":"2016-02-09 15:19:16.000000000","message":"It is common approach to use \"addCleanup\" function instead of \"tearDown\", because \"tearDown\" will not run if test fails.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"4c5c5444f99958bb79b9cfbcb90409f23d81abf3","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def tearDown(self):"},{"line_number":94,"context_line":"        super(LXCDriverTestCase, self).tearDown()"},{"line_number":95,"context_line":"        fake_utils.fake_execute_set_repliers([])"},{"line_number":96,"context_line":"        fake_utils.fake_execute_clear_log()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_create_share(self):"},{"line_number":99,"context_line":"        helper \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_5c30b807","line":96,"range":{"start_line":95,"start_character":8,"end_line":96,"end_character":43},"in_reply_to":"5a5ae5dd_817d69e9","updated":"2016-02-09 15:55:47.000000000","message":"Ok, will fix this.","commit_id":"0853f0d0cccc30dffb23b46a69a6d62f6f23b95b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc3654c2ceaff91dd07bd5070a391f885473a92","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\"Unit tests for the LXC driver module.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import functools"},{"line_number":18,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_fe13b60b","line":15,"updated":"2016-03-01 13:43:26.000000000","message":"Name of this module has \"lxd\" in name, but tested module has \"lxc\". This incompatibility should be resolved.","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"407008dc112f1d8db1c201d77c6709e4b94e5d5e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\"Unit tests for the LXC driver module.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import functools"},{"line_number":18,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_2f3a0337","line":15,"in_reply_to":"7af24918_fe13b60b","updated":"2016-03-01 14:51:43.000000000","message":"Done","commit_id":"4ae96609eada05b5a338e62c23d48d687b879a5c"}],"manila/utils.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":615,"context_line":"    return wrapper"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"},{"line_number":619,"context_line":"    \"\"\""},{"line_number":620,"context_line":"    Wait until callable predicate is evaluated as True"},{"line_number":621,"context_line":"    :param predicate: Callable deciding whether waiting should continue."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_2187f162","line":618,"updated":"2015-11-16 13:53:12.000000000","message":"Is not this func do the work of \"retry\" func defined above in this module?","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58f9a6f23fa61785eb807cb31983e38a0f6cbcb9","unresolved":false,"context_lines":[{"line_number":615,"context_line":"    return wrapper"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"},{"line_number":619,"context_line":"    \"\"\""},{"line_number":620,"context_line":"    Wait until callable predicate is evaluated as True"},{"line_number":621,"context_line":"    :param predicate: Callable deciding whether waiting should continue."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_b630e9e9","line":618,"in_reply_to":"ba8a016a_2187f162","updated":"2015-11-21 02:39:22.000000000","message":"This does look similar to retry.  Not sure why we need another one like this.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"79208ec8cbd69839d96297dda534dea040bbb8cf","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"},{"line_number":619,"context_line":"    \"\"\""},{"line_number":620,"context_line":"    Wait until callable predicate is evaluated as True"},{"line_number":621,"context_line":"    :param predicate: Callable deciding whether waiting should continue."},{"line_number":622,"context_line":"    Best practice is to instantiate predicate with functools.partial()"},{"line_number":623,"context_line":"    :param timeout: Timeout in seconds how long should function wait."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_4649ebcf","line":620,"updated":"2015-11-16 13:53:12.000000000","message":"http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2bb36c46c1d80151b64b200ee40b09bf032c1e40","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    :param sleep: Polling interval for results in seconds."},{"line_number":625,"context_line":"    :param exception: Exception class for eventlet.Timeout."},{"line_number":626,"context_line":"    (see doc for eventlet.Timeout for more information)"},{"line_number":627,"context_line":"    \"\"\""},{"line_number":628,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":629,"context_line":"        while not predicate():"},{"line_number":630,"context_line":"            eventlet.sleep(sleep)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_f99c126b","line":627,"updated":"2015-11-17 08:38:25.000000000","message":"Add an empty line.","commit_id":"c40f2a0c073b5c24514b68e9cbb82bff9df421b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"89cfd0c8cdf10c27588e2d0b735d66d3180026ee","unresolved":false,"context_lines":[{"line_number":658,"context_line":"            return value * multiplier"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"},{"line_number":662,"context_line":"    \"\"\"Wait until callable predicate is evaluated as True"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"    :param predicate: Callable deciding whether waiting should continue."},{"line_number":665,"context_line":"    Best practice is to instantiate predicate with functools.partial()"},{"line_number":666,"context_line":"    :param timeout: Timeout in seconds how long should function wait."},{"line_number":667,"context_line":"    :param sleep: Polling interval for results in seconds."},{"line_number":668,"context_line":"    :param exception: Exception class for eventlet.Timeout."},{"line_number":669,"context_line":"    (see doc for eventlet.Timeout for more information)"},{"line_number":670,"context_line":"    \"\"\""},{"line_number":671,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":672,"context_line":"        while not predicate():"},{"line_number":673,"context_line":"            eventlet.sleep(sleep)"}],"source_content_type":"text/x-python","patch_set":51,"id":"7af24918_6ac4b95e","line":673,"range":{"start_line":661,"start_character":0,"end_line":673,"end_character":33},"updated":"2016-03-02 11:28:42.000000000","message":"It is not covered with unit tests.","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"15a8bb42d5a145018ae1e3fa2ce1a7aa47000d01","unresolved":false,"context_lines":[{"line_number":658,"context_line":"            return value * multiplier"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"},{"line_number":662,"context_line":"    \"\"\"Wait until callable predicate is evaluated as True"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"    :param predicate: Callable deciding whether waiting should continue."},{"line_number":665,"context_line":"    Best practice is to instantiate predicate with functools.partial()"},{"line_number":666,"context_line":"    :param timeout: Timeout in seconds how long should function wait."},{"line_number":667,"context_line":"    :param sleep: Polling interval for results in seconds."},{"line_number":668,"context_line":"    :param exception: Exception class for eventlet.Timeout."},{"line_number":669,"context_line":"    (see doc for eventlet.Timeout for more information)"},{"line_number":670,"context_line":"    \"\"\""},{"line_number":671,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":672,"context_line":"        while not predicate():"},{"line_number":673,"context_line":"            eventlet.sleep(sleep)"}],"source_content_type":"text/x-python","patch_set":51,"id":"7af24918_49c1f92d","line":673,"range":{"start_line":661,"start_character":0,"end_line":673,"end_character":33},"in_reply_to":"7af24918_6ac4b95e","updated":"2016-03-02 15:52:27.000000000","message":"Done","commit_id":"2fd63c81bae51177a17dff321181f2a1eabb3ab4"}],"requirements.txt":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9ab9d982aad77ad51e2069f26e4af3e733944f8b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"paramiko\u003e\u003d1.13.0 # LGPL"},{"line_number":29,"context_line":"Paste # MIT"},{"line_number":30,"context_line":"PasteDeploy\u003e\u003d1.5.0 # MIT"},{"line_number":31,"context_line":"pylxd\u003e\u003d0.19.0"},{"line_number":32,"context_line":"python-neutronclient\u003e\u003d2.6.0 # Apache-2.0"},{"line_number":33,"context_line":"keystonemiddleware\u003e\u003d4.0.0 # Apache-2.0"},{"line_number":34,"context_line":"requests!\u003d2.9.0,\u003e\u003d2.8.1 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":25,"id":"3a57f1b5_be27dbc8","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":13},"updated":"2016-02-12 14:35:00.000000000","message":"Should be following:\n\n\"\"\"\npylxd\u003e\u003d0.19.0  # Apache-2.0\n\"\"\"","commit_id":"1c82f3b2d4dedb881d191c03fc64fb0a5b2e7b9b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"13046ab6506e4bc483d69dac6526f57f08db6071","unresolved":false,"context_lines":[{"line_number":28,"context_line":"paramiko\u003e\u003d1.13.0 # LGPL"},{"line_number":29,"context_line":"Paste # MIT"},{"line_number":30,"context_line":"PasteDeploy\u003e\u003d1.5.0 # MIT"},{"line_number":31,"context_line":"pylxd\u003e\u003d0.19.0"},{"line_number":32,"context_line":"python-neutronclient\u003e\u003d2.6.0 # Apache-2.0"},{"line_number":33,"context_line":"keystonemiddleware\u003e\u003d4.0.0 # Apache-2.0"},{"line_number":34,"context_line":"requests!\u003d2.9.0,\u003e\u003d2.8.1 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":25,"id":"3a57f1b5_1985e905","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":13},"in_reply_to":"3a57f1b5_be27dbc8","updated":"2016-02-12 14:46:39.000000000","message":"TY","commit_id":"1c82f3b2d4dedb881d191c03fc64fb0a5b2e7b9b"}]}
