)]}'
{"devstack/plugin.sh":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"5697d9ddf2c6c62dbe19c9198dcb8a360fd735c6","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                    local first_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/alpha"},{"line_number":453,"context_line":"                    local second_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/betta"},{"line_number":454,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $first_file"},{"line_number":455,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $second_file"},{"line_number":456,"context_line":"                    sudo zpool create alpha $first_file"},{"line_number":457,"context_line":"                    sudo zpool create betta $second_file"},{"line_number":458,"context_line":"                    # Create subdir (nested dataset) for second pool"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3a57f1b5_9ea5a305","line":455,"updated":"2016-02-10 22:32:58.000000000","message":"add \"sudo modprobe zfs\" here","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2226a32090ea7263d4a37ef4a485f86a61ed8e06","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                    local first_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/alpha"},{"line_number":453,"context_line":"                    local second_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/betta"},{"line_number":454,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $first_file"},{"line_number":455,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $second_file"},{"line_number":456,"context_line":"                    sudo zpool create alpha $first_file"},{"line_number":457,"context_line":"                    sudo zpool create betta $second_file"},{"line_number":458,"context_line":"                    # Create subdir (nested dataset) for second pool"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3a57f1b5_f05149d9","line":455,"in_reply_to":"3a57f1b5_9ea5a305","updated":"2016-02-11 11:13:52.000000000","message":"It will fail Fuse version of ZFS is installed.","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"958468a58ece70ff64c0be9ad7a4404fc8ce9e0f","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                    local first_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/alpha"},{"line_number":453,"context_line":"                    local second_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/betta"},{"line_number":454,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $first_file"},{"line_number":455,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $second_file"},{"line_number":456,"context_line":"                    sudo zpool create alpha $first_file"},{"line_number":457,"context_line":"                    sudo zpool create betta $second_file"},{"line_number":458,"context_line":"                    # Create subdir (nested dataset) for second pool"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3a57f1b5_bcf2ca6d","line":455,"in_reply_to":"3a57f1b5_b01671a5","updated":"2016-02-11 12:28:36.000000000","message":"Done it on installation step, where we setup kernel version.","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"cc55841e81889fce4939b59d62d3660bcaea979d","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                    local first_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/alpha"},{"line_number":453,"context_line":"                    local second_file\u003d\"$MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\"/betta"},{"line_number":454,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $first_file"},{"line_number":455,"context_line":"                    truncate -s $MANILA_ZFSONLINUX_ZPOOL_SIZE $second_file"},{"line_number":456,"context_line":"                    sudo zpool create alpha $first_file"},{"line_number":457,"context_line":"                    sudo zpool create betta $second_file"},{"line_number":458,"context_line":"                    # Create subdir (nested dataset) for second pool"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3a57f1b5_b01671a5","line":455,"in_reply_to":"3a57f1b5_f05149d9","updated":"2016-02-11 11:19:34.000000000","message":"It will fail *IF* Fuse version of ZFS is installed.","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"e6ecf116352e59aaa7f8e0505ca63c6c87b8cc38","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                    # NOTE(vponomaryov): following installation is valid for Ubuntu \u0027trusty\u0027."},{"line_number":504,"context_line":"                    sudo apt-get install -y software-properties-common"},{"line_number":505,"context_line":"                    sudo apt-add-repository --yes ppa:zfs-native/stable"},{"line_number":506,"context_line":"                    sudo apt-get -y -q update \u0026\u0026 apt-get -y -q upgrade"},{"line_number":507,"context_line":"                    sudo apt-get install -y linux-headers-generic"},{"line_number":508,"context_line":"                    sudo apt-get install -y build-essential"},{"line_number":509,"context_line":"                    sudo apt-get install -y ubuntu-zfs"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3a57f1b5_4cc0ece0","line":506,"updated":"2016-02-10 21:25:00.000000000","message":"need sudo after \u0026\u0026","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2226a32090ea7263d4a37ef4a485f86a61ed8e06","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                    # NOTE(vponomaryov): following installation is valid for Ubuntu \u0027trusty\u0027."},{"line_number":504,"context_line":"                    sudo apt-get install -y software-properties-common"},{"line_number":505,"context_line":"                    sudo apt-add-repository --yes ppa:zfs-native/stable"},{"line_number":506,"context_line":"                    sudo apt-get -y -q update \u0026\u0026 apt-get -y -q upgrade"},{"line_number":507,"context_line":"                    sudo apt-get install -y linux-headers-generic"},{"line_number":508,"context_line":"                    sudo apt-get install -y build-essential"},{"line_number":509,"context_line":"                    sudo apt-get install -y ubuntu-zfs"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3a57f1b5_b00991df","line":506,"in_reply_to":"3a57f1b5_4cc0ece0","updated":"2016-02-11 11:13:52.000000000","message":"Right, will add.","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"958468a58ece70ff64c0be9ad7a4404fc8ce9e0f","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                    # NOTE(vponomaryov): following installation is valid for Ubuntu \u0027trusty\u0027."},{"line_number":504,"context_line":"                    sudo apt-get install -y software-properties-common"},{"line_number":505,"context_line":"                    sudo apt-add-repository --yes ppa:zfs-native/stable"},{"line_number":506,"context_line":"                    sudo apt-get -y -q update \u0026\u0026 apt-get -y -q upgrade"},{"line_number":507,"context_line":"                    sudo apt-get install -y linux-headers-generic"},{"line_number":508,"context_line":"                    sudo apt-get install -y build-essential"},{"line_number":509,"context_line":"                    sudo apt-get install -y ubuntu-zfs"}],"source_content_type":"text/x-sh","patch_set":11,"id":"3a57f1b5_1c28bee1","line":506,"in_reply_to":"3a57f1b5_b00991df","updated":"2016-02-11 12:28:36.000000000","message":"Done","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a1f90a6b1f3f26cc8259b5239f4975f590ba57ae","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                    iniset $MANILA_CONF $BE zfs_zpool_list $filename"},{"line_number":472,"context_line":"                fi"},{"line_number":473,"context_line":"                iniset $MANILA_CONF $BE zfs_share_export_ip $MANILA_ZFSONLINUX_SHARE_EXPORT_IP"},{"line_number":474,"context_line":"                iniset $MANILA_CONF $BE zfs_share_export_ip $MANILA_ZFSONLINUX_SERVICE_IP"},{"line_number":475,"context_line":"                iniset $MANILA_CONF $BE zfs_dataset_creation_options $MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS"},{"line_number":476,"context_line":"                let \"file_counter\u003dfile_counter+1\""},{"line_number":477,"context_line":"            done"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_f5b75af3","line":474,"range":{"start_line":474,"start_character":40,"end_line":474,"end_character":59},"updated":"2016-02-24 19:26:09.000000000","message":"TODO: Should be \"zfs_service_ip\" on line 474","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5ce465130a17695df9c4768a6a57ff273729fec9","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                    iniset $MANILA_CONF $BE zfs_zpool_list $filename"},{"line_number":472,"context_line":"                fi"},{"line_number":473,"context_line":"                iniset $MANILA_CONF $BE zfs_share_export_ip $MANILA_ZFSONLINUX_SHARE_EXPORT_IP"},{"line_number":474,"context_line":"                iniset $MANILA_CONF $BE zfs_share_export_ip $MANILA_ZFSONLINUX_SERVICE_IP"},{"line_number":475,"context_line":"                iniset $MANILA_CONF $BE zfs_dataset_creation_options $MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS"},{"line_number":476,"context_line":"                let \"file_counter\u003dfile_counter+1\""},{"line_number":477,"context_line":"            done"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_14c1f680","line":474,"range":{"start_line":474,"start_character":40,"end_line":474,"end_character":59},"in_reply_to":"bae84128_4a1ca413","updated":"2016-02-25 14:09:36.000000000","message":"Done","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"a73e2f7b07ce8ae680575edff38d13605343eb2f","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                    iniset $MANILA_CONF $BE zfs_zpool_list $filename"},{"line_number":472,"context_line":"                fi"},{"line_number":473,"context_line":"                iniset $MANILA_CONF $BE zfs_share_export_ip $MANILA_ZFSONLINUX_SHARE_EXPORT_IP"},{"line_number":474,"context_line":"                iniset $MANILA_CONF $BE zfs_share_export_ip $MANILA_ZFSONLINUX_SERVICE_IP"},{"line_number":475,"context_line":"                iniset $MANILA_CONF $BE zfs_dataset_creation_options $MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS"},{"line_number":476,"context_line":"                let \"file_counter\u003dfile_counter+1\""},{"line_number":477,"context_line":"            done"}],"source_content_type":"text/x-sh","patch_set":34,"id":"bae84128_4a1ca413","line":474,"range":{"start_line":474,"start_character":40,"end_line":474,"end_character":59},"in_reply_to":"bae84128_f5b75af3","updated":"2016-02-24 20:02:28.000000000","message":"+1\ngood catch, I just hit this too","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"cfc1614dba1ebe0bc027f0f779de7719e763e269","unresolved":false,"context_lines":[{"line_number":514,"context_line":"                # in \u0027requirements.txt\u0027 file."},{"line_number":515,"context_line":"                # Package \u0027nsenter\u0027 is expected to be installed on host with"},{"line_number":516,"context_line":"                # ZFS, if it is remote for manila-share service host."},{"line_number":517,"context_line":"                sudo pip install nsenter"},{"line_number":518,"context_line":"            else"},{"line_number":519,"context_line":"                echo \"Manila Devstack plugin does not support installation \"\\"},{"line_number":520,"context_line":"                    \"of ZFS packages for non-\u0027Ubuntu-trusty\u0027 distros. \"\\"}],"source_content_type":"text/x-sh","patch_set":37,"id":"9aed3d3a_b7694e8e","line":517,"updated":"2016-02-25 22:12:38.000000000","message":"Actually nsenter should be provided by the util-linux package. Trusty is too old to have this utility, but Utopic has it.\n\nhttp://askubuntu.com/questions/439056/why-there-is-no-nsenter-in-util-linux\n\nWe should depend on the binary version, not the python version. For trusty, the python version is an okay workaround but distros will simply include util-linux, therefore it doesnt\u0027 make sense to modify g-r.","commit_id":"67a4dc101974adf15b579c7532df417ac0b67524"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":520,"context_line":"                echo \"Manila Devstack plugin does not support installation \"\\"},{"line_number":521,"context_line":"                    \"of ZFS packages for non-\u0027Ubuntu-trusty\u0027 distros. \"\\"},{"line_number":522,"context_line":"                    \"Please, install it first by other means or add its support \"\\"},{"line_number":523,"context_line":"                    \"for distro that is used by you to Manila project.\""},{"line_number":524,"context_line":"                exit 1"},{"line_number":525,"context_line":"            fi"},{"line_number":526,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":50,"id":"9aed3d3a_35558df9","line":523,"range":{"start_line":523,"start_character":25,"end_line":523,"end_character":69},"updated":"2016-02-29 23:48:22.000000000","message":"\"your distro\"","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":520,"context_line":"                echo \"Manila Devstack plugin does not support installation \"\\"},{"line_number":521,"context_line":"                    \"of ZFS packages for non-\u0027Ubuntu-trusty\u0027 distros. \"\\"},{"line_number":522,"context_line":"                    \"Please, install it first by other means or add its support \"\\"},{"line_number":523,"context_line":"                    \"for distro that is used by you to Manila project.\""},{"line_number":524,"context_line":"                exit 1"},{"line_number":525,"context_line":"            fi"},{"line_number":526,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":50,"id":"7af24918_3edb69ef","line":523,"range":{"start_line":523,"start_character":25,"end_line":523,"end_character":69},"in_reply_to":"9aed3d3a_35558df9","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"}],"devstack/settings":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"62760d2ea5633803101b4db99714d4fa52c6a09b","unresolved":false,"context_lines":[{"line_number":144,"context_line":"# Options for configuration of ZFSonLinux driver"},{"line_number":145,"context_line":"# \u0027MANILA_ZFSONLINUX_ZPOOL_SIZE\u0027 defines size of each zpool. That value"},{"line_number":146,"context_line":"# will be used for creation of sparse files."},{"line_number":147,"context_line":"MANILA_ZFSONLINUX_ZPOOL_SIZE\u003d${MANILA_ZFSONLINUX_ZPOOL_SIZE:-\"10G\"}"},{"line_number":148,"context_line":"MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\u003d${MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR:-\"/opt/stack/data/manila/zfsonlinux\"}"},{"line_number":149,"context_line":"MANILA_ZFSONLINUX_SHARE_EXPORT_IP\u003d${MANILA_ZFSONLINUX_SHARE_EXPORT_IP:-\"127.0.0.1\"}"},{"line_number":150,"context_line":"MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS\u003d${MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS:-\"compression\u003dgzip\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"3a57f1b5_94e55439","line":147,"updated":"2016-02-11 16:32:09.000000000","message":"I\u0027d prefer a higher default. Since it\u0027s sparse we could easily do 50g or 100g.","commit_id":"2721b6117292a6c2b3451ef5ef91a9d2134595ce"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"19176ae096f219a9f9a5220bc953173f534336e1","unresolved":false,"context_lines":[{"line_number":144,"context_line":"# Options for configuration of ZFSonLinux driver"},{"line_number":145,"context_line":"# \u0027MANILA_ZFSONLINUX_ZPOOL_SIZE\u0027 defines size of each zpool. That value"},{"line_number":146,"context_line":"# will be used for creation of sparse files."},{"line_number":147,"context_line":"MANILA_ZFSONLINUX_ZPOOL_SIZE\u003d${MANILA_ZFSONLINUX_ZPOOL_SIZE:-\"10G\"}"},{"line_number":148,"context_line":"MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\u003d${MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR:-\"/opt/stack/data/manila/zfsonlinux\"}"},{"line_number":149,"context_line":"MANILA_ZFSONLINUX_SHARE_EXPORT_IP\u003d${MANILA_ZFSONLINUX_SHARE_EXPORT_IP:-\"127.0.0.1\"}"},{"line_number":150,"context_line":"MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS\u003d${MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS:-\"compression\u003dgzip\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"3a57f1b5_d76aeeb2","line":147,"in_reply_to":"3a57f1b5_94e55439","updated":"2016-02-11 16:44:48.000000000","message":"I was thinking about it too. Will increase.","commit_id":"2721b6117292a6c2b3451ef5ef91a9d2134595ce"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"044e199d7ef5e6eab698b2a3c11712544422aa1a","unresolved":false,"context_lines":[{"line_number":144,"context_line":"# Options for configuration of ZFSonLinux driver"},{"line_number":145,"context_line":"# \u0027MANILA_ZFSONLINUX_ZPOOL_SIZE\u0027 defines size of each zpool. That value"},{"line_number":146,"context_line":"# will be used for creation of sparse files."},{"line_number":147,"context_line":"MANILA_ZFSONLINUX_ZPOOL_SIZE\u003d${MANILA_ZFSONLINUX_ZPOOL_SIZE:-\"10G\"}"},{"line_number":148,"context_line":"MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR\u003d${MANILA_ZFSONLINUX_BACKEND_FILES_CONTAINER_DIR:-\"/opt/stack/data/manila/zfsonlinux\"}"},{"line_number":149,"context_line":"MANILA_ZFSONLINUX_SHARE_EXPORT_IP\u003d${MANILA_ZFSONLINUX_SHARE_EXPORT_IP:-\"127.0.0.1\"}"},{"line_number":150,"context_line":"MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS\u003d${MANILA_ZFSONLINUX_DATASET_CREATION_OPTIONS:-\"compression\u003dgzip\"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"3a57f1b5_ce46d74e","line":147,"in_reply_to":"3a57f1b5_d76aeeb2","updated":"2016-02-11 18:08:42.000000000","message":"Done","commit_id":"2721b6117292a6c2b3451ef5ef91a9d2134595ce"}],"doc/source/devref/zfs_on_linux_driver.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  for share creation."},{"line_number":62,"context_line":"* Any amount of nested datasets is allowed to be used."},{"line_number":63,"context_line":"* All share replicas are read-only, only active one is RW."},{"line_number":64,"context_line":"* All share replicas are synched periodically, not continuously."},{"line_number":65,"context_line":"  So, status \u0027in_sync\u0027 means latest sync was successful."},{"line_number":66,"context_line":"  Time range between syncs equals to value of"},{"line_number":67,"context_line":"  config global opt \u0027replica_state_update_interval\u0027."}],"source_content_type":"text/x-rst","patch_set":50,"id":"9aed3d3a_157fa966","line":64,"range":{"start_line":64,"start_character":25,"end_line":64,"end_character":32},"updated":"2016-02-29 23:48:22.000000000","message":"synchronized","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  for share creation."},{"line_number":62,"context_line":"* Any amount of nested datasets is allowed to be used."},{"line_number":63,"context_line":"* All share replicas are read-only, only active one is RW."},{"line_number":64,"context_line":"* All share replicas are synched periodically, not continuously."},{"line_number":65,"context_line":"  So, status \u0027in_sync\u0027 means latest sync was successful."},{"line_number":66,"context_line":"  Time range between syncs equals to value of"},{"line_number":67,"context_line":"  config global opt \u0027replica_state_update_interval\u0027."}],"source_content_type":"text/x-rst","patch_set":50,"id":"7af24918_3e89a9cb","line":64,"range":{"start_line":64,"start_character":25,"end_line":64,"end_character":32},"in_reply_to":"9aed3d3a_157fa966","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"}],"etc/manila/rootwrap.d/share.filters":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"439301b29ec800c50e853fcdbff38d2a355f07b3","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# manila/share/drivers/ganesha/manager.py:"},{"line_number":137,"context_line":"rmconf: RegExpFilter, sh, root, sh, -c, rm -f /.*/\\*\\.conf$"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# ZFS commands"},{"line_number":140,"context_line":"# manila/share/drivers/zfsonlinux/driver.py"},{"line_number":141,"context_line":"# manila/share/drivers/zfsonlinux/utils.py"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"3a57f1b5_857d4b1e","line":138,"updated":"2016-02-11 02:42:54.000000000","message":"These command shouldn\u0027t go in the manila rootwrap because they\u0027re not supposed to be run on the m-shr host. They should always be run remotely through ssh.","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2226a32090ea7263d4a37ef4a485f86a61ed8e06","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# manila/share/drivers/ganesha/manager.py:"},{"line_number":137,"context_line":"rmconf: RegExpFilter, sh, root, sh, -c, rm -f /.*/\\*\\.conf$"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# ZFS commands"},{"line_number":140,"context_line":"# manila/share/drivers/zfsonlinux/driver.py"},{"line_number":141,"context_line":"# manila/share/drivers/zfsonlinux/utils.py"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"3a57f1b5_76e9dc7f","line":138,"in_reply_to":"3a57f1b5_857d4b1e","updated":"2016-02-11 11:13:52.000000000","message":"Why? Why we should not allow to run them locally?","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"}],"manila/db/sqlalchemy/api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":2812,"context_line":""},{"line_number":2813,"context_line":"def _driver_private_data_query(session, context, host, entity_id, key\u003dNone,"},{"line_number":2814,"context_line":"                               read_deleted\u003dFalse):"},{"line_number":2815,"context_line":"    query \u003d model_query("},{"line_number":2816,"context_line":"        context, models.DriverPrivateData, session\u003dsession,"},{"line_number":2817,"context_line":"        read_deleted\u003dread_deleted,"},{"line_number":2818,"context_line":"    ).filter_by("},{"line_number":2819,"context_line":"        entity_uuid\u003dentity_id,"},{"line_number":2820,"context_line":"    )"},{"line_number":2821,"context_line":""},{"line_number":2822,"context_line":"    if isinstance(key, list):"},{"line_number":2823,"context_line":"        return query.filter(models.DriverPrivateData.key.in_(key))"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_d53d4190","line":2820,"range":{"start_line":2815,"start_character":4,"end_line":2820,"end_character":5},"updated":"2016-02-29 23:48:22.000000000","message":"I understand why you made this change. However, the reason needs to be evident in the commit message..","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":2812,"context_line":""},{"line_number":2813,"context_line":"def _driver_private_data_query(session, context, host, entity_id, key\u003dNone,"},{"line_number":2814,"context_line":"                               read_deleted\u003dFalse):"},{"line_number":2815,"context_line":"    query \u003d model_query("},{"line_number":2816,"context_line":"        context, models.DriverPrivateData, session\u003dsession,"},{"line_number":2817,"context_line":"        read_deleted\u003dread_deleted,"},{"line_number":2818,"context_line":"    ).filter_by("},{"line_number":2819,"context_line":"        entity_uuid\u003dentity_id,"},{"line_number":2820,"context_line":"    )"},{"line_number":2821,"context_line":""},{"line_number":2822,"context_line":"    if isinstance(key, list):"},{"line_number":2823,"context_line":"        return query.filter(models.DriverPrivateData.key.in_(key))"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_de16c554","line":2820,"range":{"start_line":2815,"start_character":4,"end_line":2820,"end_character":5},"in_reply_to":"9aed3d3a_d53d4190","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"}],"manila/exception.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    message \u003d _(\"Bad network configuration: %(reason)s.\")"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class BadConfigurationException(NetworkException):"},{"line_number":122,"context_line":"    message \u003d _(\"Bad configuration: %(reason)s.\")"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_d58ee12c","line":121,"range":{"start_line":121,"start_character":32,"end_line":121,"end_character":48},"updated":"2016-02-29 23:48:22.000000000","message":"This should be ManilaException","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    message \u003d _(\"Bad network configuration: %(reason)s.\")"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class BadConfigurationException(NetworkException):"},{"line_number":122,"context_line":"    message \u003d _(\"Bad configuration: %(reason)s.\")"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_a103d80c","line":121,"range":{"start_line":121,"start_character":32,"end_line":121,"end_character":48},"in_reply_to":"9aed3d3a_d58ee12c","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"}],"manila/share/drivers/zfsonlinux/driver.py":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"20395c31612f9a50c44da3db4ca011815b2ee95b","unresolved":false,"context_lines":[{"line_number":94,"context_line":"             \"Not used for replication operations. They require \""},{"line_number":95,"context_line":"             \"passwordless SSH access. Optional.\"),"},{"line_number":96,"context_line":"    cfg.StrOpt("},{"line_number":97,"context_line":"        \"zfs_ssh_private_key_path\","},{"line_number":98,"context_line":"        help\u003d\"Path to SSH private key that should be used for SSH\u0027ing ZFS \""},{"line_number":99,"context_line":"             \"storage host. Not used for replication operations. Optional.\"),"},{"line_number":100,"context_line":"    cfg.ListOpt("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_67956187","line":97,"updated":"2016-02-24 19:39:49.000000000","message":"This config opt seems to overlap with path_to_private_key from service_instance.py. Also zfs_ssh_username overlaps with service_instance_user.\n\nPerhaps we should find a way to merge these SSH-related options into a common set of options.","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0b6a59ef2362236a452676e337ff5f4b5608927b","unresolved":false,"context_lines":[{"line_number":94,"context_line":"             \"Not used for replication operations. They require \""},{"line_number":95,"context_line":"             \"passwordless SSH access. Optional.\"),"},{"line_number":96,"context_line":"    cfg.StrOpt("},{"line_number":97,"context_line":"        \"zfs_ssh_private_key_path\","},{"line_number":98,"context_line":"        help\u003d\"Path to SSH private key that should be used for SSH\u0027ing ZFS \""},{"line_number":99,"context_line":"             \"storage host. Not used for replication operations. Optional.\"),"},{"line_number":100,"context_line":"    cfg.ListOpt("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d134e3fc","line":97,"in_reply_to":"bae84128_67956187","updated":"2016-02-24 21:49:34.000000000","message":"Some time, not now.","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"28eb074526d789e3ba2cb14d825caef54d7e653e","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            }"},{"line_number":292,"context_line":"            if self.configuration.zfs_enable_replication:"},{"line_number":293,"context_line":"                pool[\u0027replication_type\u0027] \u003d \u0027readable\u0027"},{"line_number":294,"context_line":"                pool[\u0027replication_partners\u0027] \u003d [\u0027london\u0027, \u0027paris\u0027]"},{"line_number":295,"context_line":"            pools.append(pool)"},{"line_number":296,"context_line":"        return pools"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_bb92e0f4","line":294,"updated":"2016-02-24 21:01:44.000000000","message":"replication_partners should not be hardcoded here","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0b6a59ef2362236a452676e337ff5f4b5608927b","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            }"},{"line_number":292,"context_line":"            if self.configuration.zfs_enable_replication:"},{"line_number":293,"context_line":"                pool[\u0027replication_type\u0027] \u003d \u0027readable\u0027"},{"line_number":294,"context_line":"                pool[\u0027replication_partners\u0027] \u003d [\u0027london\u0027, \u0027paris\u0027]"},{"line_number":295,"context_line":"            pools.append(pool)"},{"line_number":296,"context_line":"        return pools"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_b1803f8d","line":294,"in_reply_to":"bae84128_bb92e0f4","updated":"2016-02-24 21:49:34.000000000","message":"It is workaround for not ready parent change yet.","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"d74e00b3059bc4bf0cffd1c6fa2c29fcdf21a1f0","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    @ensure_share_server_not_provided"},{"line_number":572,"context_line":"    def create_replica(self, context, replica_list, new_replica,"},{"line_number":573,"context_line":"                       access_rules, share_server\u003dNone):"},{"line_number":574,"context_line":"        \"\"\"Replicates the active replica to a new replica on this backend.\"\"\""},{"line_number":575,"context_line":"        active_replica \u003d self._get_active_replica(replica_list)"},{"line_number":576,"context_line":"        src_dataset_name \u003d self.private_storage.get("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_f68d9d2b","line":573,"updated":"2016-02-24 21:15:33.000000000","message":"I get stack trace when create_replica() is invoked. See http://paste.openstack.org/show/488106/\n\nThe problem is the signature of this method. The second positional argument, replica_list, is not actually a list when this method is invoked, it is a dict called current_active_replica.","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"66ad521dfb6420643b7061fdde0fab1a6ca46ce1","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    @ensure_share_server_not_provided"},{"line_number":572,"context_line":"    def create_replica(self, context, replica_list, new_replica,"},{"line_number":573,"context_line":"                       access_rules, share_server\u003dNone):"},{"line_number":574,"context_line":"        \"\"\"Replicates the active replica to a new replica on this backend.\"\"\""},{"line_number":575,"context_line":"        active_replica \u003d self._get_active_replica(replica_list)"},{"line_number":576,"context_line":"        src_dataset_name \u003d self.private_storage.get("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_d615f99b","line":573,"in_reply_to":"bae84128_76f7cd8c","updated":"2016-02-24 21:19:00.000000000","message":"+1 i was going to say that..","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"f7b48d62c090ca7c919ba9036caa9596d18eb706","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    @ensure_share_server_not_provided"},{"line_number":572,"context_line":"    def create_replica(self, context, replica_list, new_replica,"},{"line_number":573,"context_line":"                       access_rules, share_server\u003dNone):"},{"line_number":574,"context_line":"        \"\"\"Replicates the active replica to a new replica on this backend.\"\"\""},{"line_number":575,"context_line":"        active_replica \u003d self._get_active_replica(replica_list)"},{"line_number":576,"context_line":"        src_dataset_name \u003d self.private_storage.get("}],"source_content_type":"text/x-python","patch_set":34,"id":"bae84128_76f7cd8c","line":573,"in_reply_to":"bae84128_f68d9d2b","updated":"2016-02-24 21:18:12.000000000","message":"Actually ignore this comment. It looks like I screwed up my git environment because when I cherry-picked this change I didn\u0027t get the dependent parents...","commit_id":"0b4fd0ac10e2eee2e8b315b1ca4460e642cc6f5f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def wrap(self, context, *args, **kwargs):"},{"line_number":119,"context_line":"        server \u003d kwargs.get(\u0027share_server\u0027)"},{"line_number":120,"context_line":"        if server:"},{"line_number":121,"context_line":"            raise exception.ManilaException("},{"line_number":122,"context_line":"                _(\"Share server handling is not available. \""},{"line_number":123,"context_line":"                  \"But \u0027share_server\u0027 was provided. \u0027%s\u0027. \""},{"line_number":124,"context_line":"                  \"Share network should not be used.\") % server.get("}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_9c4e9d6d","line":121,"updated":"2016-02-27 03:26:03.000000000","message":"Please use a more specific exception type.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def wrap(self, context, *args, **kwargs):"},{"line_number":119,"context_line":"        server \u003d kwargs.get(\u0027share_server\u0027)"},{"line_number":120,"context_line":"        if server:"},{"line_number":121,"context_line":"            raise exception.ManilaException("},{"line_number":122,"context_line":"                _(\"Share server handling is not available. \""},{"line_number":123,"context_line":"                  \"But \u0027share_server\u0027 was provided. \u0027%s\u0027. \""},{"line_number":124,"context_line":"                  \"Share network should not be used.\") % server.get("}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_d22129b6","line":121,"in_reply_to":"9aed3d3a_9c4e9d6d","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        for zpool in self.configuration.zfs_zpool_list:"},{"line_number":151,"context_line":"            zpool_name \u003d zpool.split(\u0027/\u0027)[0]"},{"line_number":152,"context_line":"            if zpool_name in zpools:"},{"line_number":153,"context_line":"                raise exception.ManilaException("},{"line_number":154,"context_line":"                    _(\"Usage of same zpool twice is prohibited. \""},{"line_number":155,"context_line":"                      \"Duplicate is \u0027%(zpool)s\u0027. List of zpools: \""},{"line_number":156,"context_line":"                      \"%(zpool_list)s.\") % {"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_5c4d356b","line":153,"updated":"2016-02-27 03:26:03.000000000","message":"Please use a more specific exception.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        for zpool in self.configuration.zfs_zpool_list:"},{"line_number":151,"context_line":"            zpool_name \u003d zpool.split(\u0027/\u0027)[0]"},{"line_number":152,"context_line":"            if zpool_name in zpools:"},{"line_number":153,"context_line":"                raise exception.ManilaException("},{"line_number":154,"context_line":"                    _(\"Usage of same zpool twice is prohibited. \""},{"line_number":155,"context_line":"                      \"Duplicate is \u0027%(zpool)s\u0027. List of zpools: \""},{"line_number":156,"context_line":"                      \"%(zpool_list)s.\") % {"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_356e7f95","line":153,"in_reply_to":"9aed3d3a_5c4d356b","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            zpool_name \u003d zpool.split(\u0027/\u0027)[0]"},{"line_number":152,"context_line":"            if zpool_name in zpools:"},{"line_number":153,"context_line":"                raise exception.ManilaException("},{"line_number":154,"context_line":"                    _(\"Usage of same zpool twice is prohibited. \""},{"line_number":155,"context_line":"                      \"Duplicate is \u0027%(zpool)s\u0027. List of zpools: \""},{"line_number":156,"context_line":"                      \"%(zpool_list)s.\") % {"},{"line_number":157,"context_line":"                          \u0027zpool\u0027: zpool,"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_5c6415e3","line":154,"updated":"2016-02-27 03:26:03.000000000","message":"Suggest rewording: Using the same zpool twice is prohibited.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            zpool_name \u003d zpool.split(\u0027/\u0027)[0]"},{"line_number":152,"context_line":"            if zpool_name in zpools:"},{"line_number":153,"context_line":"                raise exception.ManilaException("},{"line_number":154,"context_line":"                    _(\"Usage of same zpool twice is prohibited. \""},{"line_number":155,"context_line":"                      \"Duplicate is \u0027%(zpool)s\u0027. List of zpools: \""},{"line_number":156,"context_line":"                      \"%(zpool_list)s.\") % {"},{"line_number":157,"context_line":"                          \u0027zpool\u0027: zpool,"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_750647cf","line":154,"in_reply_to":"9aed3d3a_5c6415e3","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                              \u0027name\u0027: name, \u0027out\u0027: out})"},{"line_number":183,"context_line":"                time.sleep(2)"},{"line_number":184,"context_line":"            else:"},{"line_number":185,"context_line":"                raise exception.ManilaException("},{"line_number":186,"context_line":"                    _(\"Could not destroy \u0027%s\u0027 dataset, \""},{"line_number":187,"context_line":"                      \"because it had opened files.\") % name)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_7c863966","line":185,"updated":"2016-02-27 03:26:03.000000000","message":"Please use a more specific exception type.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                              \u0027name\u0027: name, \u0027out\u0027: out})"},{"line_number":183,"context_line":"                time.sleep(2)"},{"line_number":184,"context_line":"            else:"},{"line_number":185,"context_line":"                raise exception.ManilaException("},{"line_number":186,"context_line":"                    _(\"Could not destroy \u0027%s\u0027 dataset, \""},{"line_number":187,"context_line":"                      \"because it had opened files.\") % name)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_753807a1","line":185,"in_reply_to":"9aed3d3a_7c863966","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            else:"},{"line_number":209,"context_line":"                pids \u003d [s.split(\u0027/\u0027)[0] for s in raw_pids.split(\u0027/proc/\u0027) if s]"},{"line_number":210,"context_line":"                LOG.debug("},{"line_number":211,"context_line":"                    \"List of pids that hold ZFS mount \u0027%(mnt)s\u0027: %(list)s\" % {"},{"line_number":212,"context_line":"                        \u0027mnt\u0027: mountpoint, \u0027list\u0027: \u0027 \u0027.join(pids)})"},{"line_number":213,"context_line":"                for pid in pids:"},{"line_number":214,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_dcf4a5f3","line":211,"updated":"2016-02-27 03:26:03.000000000","message":"Please use , instead of %","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            else:"},{"line_number":209,"context_line":"                pids \u003d [s.split(\u0027/\u0027)[0] for s in raw_pids.split(\u0027/proc/\u0027) if s]"},{"line_number":210,"context_line":"                LOG.debug("},{"line_number":211,"context_line":"                    \"List of pids that hold ZFS mount \u0027%(mnt)s\u0027: %(list)s\" % {"},{"line_number":212,"context_line":"                        \u0027mnt\u0027: mountpoint, \u0027list\u0027: \u0027 \u0027.join(pids)})"},{"line_number":213,"context_line":"                for pid in pids:"},{"line_number":214,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_95ce6bb2","line":211,"in_reply_to":"9aed3d3a_dcf4a5f3","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                self._helpers[share_proto.upper()] \u003d helper("},{"line_number":239,"context_line":"                    self.configuration)"},{"line_number":240,"context_line":"        else:"},{"line_number":241,"context_line":"            raise exception.ManilaException("},{"line_number":242,"context_line":"                \"No share helpers selected for ZFSonLinux Driver. \""},{"line_number":243,"context_line":"                \"Please specify using config option \u0027zfs_share_helpers\u0027.\")"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_7cd47946","line":241,"updated":"2016-02-27 03:26:03.000000000","message":"Please use more specific exception type.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                self._helpers[share_proto.upper()] \u003d helper("},{"line_number":239,"context_line":"                    self.configuration)"},{"line_number":240,"context_line":"        else:"},{"line_number":241,"context_line":"            raise exception.ManilaException("},{"line_number":242,"context_line":"                \"No share helpers selected for ZFSonLinux Driver. \""},{"line_number":243,"context_line":"                \"Please specify using config option \u0027zfs_share_helpers\u0027.\")"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_55d4e345","line":241,"in_reply_to":"9aed3d3a_7cd47946","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        self._setup_helpers()"},{"line_number":259,"context_line":"        for ip in (self.share_export_ip, self.service_ip):"},{"line_number":260,"context_line":"            if not utils.is_valid_ip_address(ip, 4):"},{"line_number":261,"context_line":"                raise exception.ManilaException("},{"line_number":262,"context_line":"                    _(\"Wrong IP address provided: %s\") % self.share_export_ip)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if not self.zpool_list:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_bc456118","line":261,"updated":"2016-02-27 03:26:03.000000000","message":"Same comment here.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        self._setup_helpers()"},{"line_number":259,"context_line":"        for ip in (self.share_export_ip, self.service_ip):"},{"line_number":260,"context_line":"            if not utils.is_valid_ip_address(ip, 4):"},{"line_number":261,"context_line":"                raise exception.ManilaException("},{"line_number":262,"context_line":"                    _(\"Wrong IP address provided: %s\") % self.share_export_ip)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if not self.zpool_list:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_95f78bf4","line":261,"in_reply_to":"9aed3d3a_bc456118","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                    _(\"Wrong IP address provided: %s\") % self.share_export_ip)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if not self.zpool_list:"},{"line_number":265,"context_line":"            raise exception.ManilaException("},{"line_number":266,"context_line":"                _(\"No zpools specified for usage: %s\") % self.zpool_list)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if self.configuration.zfs_use_ssh:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_fc6ec994","line":265,"updated":"2016-02-27 03:26:03.000000000","message":"Same","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                    _(\"Wrong IP address provided: %s\") % self.share_export_ip)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if not self.zpool_list:"},{"line_number":265,"context_line":"            raise exception.ManilaException("},{"line_number":266,"context_line":"                _(\"No zpools specified for usage: %s\") % self.zpool_list)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if self.configuration.zfs_use_ssh:"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_f5ded76b","line":265,"in_reply_to":"9aed3d3a_fc6ec994","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning("},{"line_number":412,"context_line":"                _LW(\"Share with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":413,"context_line":"                    \"absent on backend. Nothind has been deleted.\"),"},{"line_number":414,"context_line":"                {\u0027id\u0027: share[\u0027id\u0027], \u0027name\u0027: dataset_name})"},{"line_number":415,"context_line":"        self.private_storage.delete(share[\u0027id\u0027])"},{"line_number":416,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_dc102504","line":413,"updated":"2016-02-27 03:26:03.000000000","message":"Typo: s/Nothind/Nothing","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning("},{"line_number":412,"context_line":"                _LW(\"Share with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":413,"context_line":"                    \"absent on backend. Nothind has been deleted.\"),"},{"line_number":414,"context_line":"                {\u0027id\u0027: share[\u0027id\u0027], \u0027name\u0027: dataset_name})"},{"line_number":415,"context_line":"        self.private_storage.delete(share[\u0027id\u0027])"},{"line_number":416,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_b213c565","line":413,"in_reply_to":"9aed3d3a_dc102504","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        else:"},{"line_number":446,"context_line":"            LOG.warning("},{"line_number":447,"context_line":"                _LW(\"Snapshot with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":448,"context_line":"                    \"absent on backend. Nothind has been deleted.\"),"},{"line_number":449,"context_line":"                {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027name\u0027: snapshot_name})"},{"line_number":450,"context_line":"        self.private_storage.delete(snapshot[\u0027id\u0027])"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_1cfbadc2","line":448,"updated":"2016-02-27 03:26:03.000000000","message":"Nothing","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        else:"},{"line_number":446,"context_line":"            LOG.warning("},{"line_number":447,"context_line":"                _LW(\"Snapshot with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":448,"context_line":"                    \"absent on backend. Nothind has been deleted.\"),"},{"line_number":449,"context_line":"                {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027name\u0027: snapshot_name})"},{"line_number":450,"context_line":"        self.private_storage.delete(snapshot[\u0027id\u0027])"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_92168153","line":448,"in_reply_to":"9aed3d3a_1cfbadc2","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                    \"absent on backend. Nothing to ensure.\")"},{"line_number":519,"context_line":"            msg_data \u003d {\u0027id\u0027: share[\u0027id\u0027], \u0027name\u0027: dataset_name}"},{"line_number":520,"context_line":"            LOG.error(msg, msg_data)"},{"line_number":521,"context_line":"            raise exception.ManilaException(msg % msg_data)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def get_network_allocations_number(self):"},{"line_number":524,"context_line":"        \"\"\"ZFS does not handle networking. Return 0.\"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_1c228d52","line":521,"updated":"2016-02-27 03:26:03.000000000","message":"Please use more specific exception type.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                    \"absent on backend. Nothing to ensure.\")"},{"line_number":519,"context_line":"            msg_data \u003d {\u0027id\u0027: share[\u0027id\u0027], \u0027name\u0027: dataset_name}"},{"line_number":520,"context_line":"            LOG.error(msg, msg_data)"},{"line_number":521,"context_line":"            raise exception.ManilaException(msg % msg_data)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def get_network_allocations_number(self):"},{"line_number":524,"context_line":"        \"\"\"ZFS does not handle networking. Return 0.\"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_55bea3d4","line":521,"in_reply_to":"9aed3d3a_1c228d52","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":661,"context_line":"        else:"},{"line_number":662,"context_line":"            LOG.warning("},{"line_number":663,"context_line":"                _LW(\"Share replica with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":664,"context_line":"                    \"absent on backend. Nothind has been deleted.\"),"},{"line_number":665,"context_line":"                {\u0027id\u0027: replica[\u0027id\u0027], \u0027name\u0027: dataset_name})"},{"line_number":666,"context_line":"        self.private_storage.delete(replica[\u0027id\u0027])"},{"line_number":667,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_dcde653e","line":664,"updated":"2016-02-27 03:26:03.000000000","message":"s/Nothind/Nothing\n\nPlease fix all instances of \"Nothind\".","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":661,"context_line":"        else:"},{"line_number":662,"context_line":"            LOG.warning("},{"line_number":663,"context_line":"                _LW(\"Share replica with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":664,"context_line":"                    \"absent on backend. Nothind has been deleted.\"),"},{"line_number":665,"context_line":"                {\u0027id\u0027: replica[\u0027id\u0027], \u0027name\u0027: dataset_name})"},{"line_number":666,"context_line":"        self.private_storage.delete(replica[\u0027id\u0027])"},{"line_number":667,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_f20d4d3f","line":664,"in_reply_to":"9aed3d3a_dcde653e","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        return self._get_share_helper(share[\u0027share_proto\u0027]).update_access("},{"line_number":904,"context_line":"            dataset_name, access_rules, add_rules, delete_rules)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def unmanage(self, share):"},{"line_number":907,"context_line":"        \"\"\"Removes the specified share from Manila management.\"\"\""},{"line_number":908,"context_line":"        self.private_storage.delete(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_3c9cb168","line":906,"updated":"2016-02-27 03:26:03.000000000","message":"I didn\u0027t see \"manage\".  Why do you implement \"unmanage\" but not \"manage\"?","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        return self._get_share_helper(share[\u0027share_proto\u0027]).update_access("},{"line_number":904,"context_line":"            dataset_name, access_rules, add_rules, delete_rules)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def unmanage(self, share):"},{"line_number":907,"context_line":"        \"\"\"Removes the specified share from Manila management.\"\"\""},{"line_number":908,"context_line":"        self.private_storage.delete(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_48c56f59","line":906,"in_reply_to":"9aed3d3a_3c9cb168","updated":"2016-02-27 13:17:53.000000000","message":"\"Unmanage\" is implemented for all drivers in base class as empty one. I just remove data was was stored for share that anyway will be unregistered. So, I remove garbage here.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"08f6303bfb9aba64ecd5d77bbaba0f1a4a87becf","unresolved":false,"context_lines":[{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    def _get_active_replica(self, replica_list):"},{"line_number":562,"context_line":"        for replica in replica_list:"},{"line_number":563,"context_line":"            if replica[\u0027replica_state\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":564,"context_line":"                return replica"},{"line_number":565,"context_line":"        msg \u003d _(\"Active replica not found.\")"},{"line_number":566,"context_line":"        raise exception.ReplicationException(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":48,"id":"9aed3d3a_07afc381","line":563,"range":{"start_line":563,"start_character":43,"end_line":563,"end_character":51},"updated":"2016-02-28 16:37:11.000000000","message":"constants.REPLICA_STATE_ACTIVE","commit_id":"390dc1447e98836f90f34e0f5f5572cac8c163e3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"08f6303bfb9aba64ecd5d77bbaba0f1a4a87becf","unresolved":false,"context_lines":[{"line_number":634,"context_line":"            \u0027export_locations\u0027: self._get_share_helper("},{"line_number":635,"context_line":"                new_replica[\u0027share_proto\u0027]).create_exports(dst_dataset_name),"},{"line_number":636,"context_line":"            \u0027replica_state\u0027: constants.REPLICA_STATE_IN_SYNC,"},{"line_number":637,"context_line":"            \u0027access_rules_status\u0027: constants.REPLICA_STATE_IN_SYNC,"},{"line_number":638,"context_line":"        }"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    @ensure_share_server_not_provided"}],"source_content_type":"text/x-python","patch_set":48,"id":"9aed3d3a_47deeb11","line":637,"range":{"start_line":637,"start_character":45,"end_line":637,"end_character":66},"updated":"2016-02-28 16:37:11.000000000","message":"you mean: constants.STATUS_ACTIVE","commit_id":"390dc1447e98836f90f34e0f5f5572cac8c163e3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"08f6303bfb9aba64ecd5d77bbaba0f1a4a87becf","unresolved":false,"context_lines":[{"line_number":774,"context_line":"                \u0027id\u0027: r[\u0027id\u0027],"},{"line_number":775,"context_line":"                # NOTE(vponomaryov): access rules will be updated in next"},{"line_number":776,"context_line":"                # \u0027sync\u0027 operation."},{"line_number":777,"context_line":"                \u0027access_rules_status\u0027: constants.REPLICA_STATE_OUT_OF_SYNC,"},{"line_number":778,"context_line":"            }"},{"line_number":779,"context_line":"            for r in replica_list"},{"line_number":780,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":48,"id":"9aed3d3a_c7f95b82","line":777,"range":{"start_line":777,"start_character":49,"end_line":777,"end_character":74},"updated":"2016-02-28 16:37:11.000000000","message":"constants.STATUS_OUT_OF_SYNC","commit_id":"390dc1447e98836f90f34e0f5f5572cac8c163e3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"08f6303bfb9aba64ecd5d77bbaba0f1a4a87becf","unresolved":false,"context_lines":[{"line_number":893,"context_line":"            dst_dataset_name, access_rules)"},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        replica_dict[replica[\u0027id\u0027]][\u0027access_rules_status\u0027] \u003d ("},{"line_number":896,"context_line":"            constants.REPLICA_STATE_IN_SYNC)"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"        self.zfs(\u0027set\u0027, \u0027readonly\u003doff\u0027, dst_dataset_name)"},{"line_number":899,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"9aed3d3a_472c2b02","line":896,"range":{"start_line":896,"start_character":22,"end_line":896,"end_character":43},"updated":"2016-02-28 16:37:11.000000000","message":"constants.STATUS_ACTIVE","commit_id":"390dc1447e98836f90f34e0f5f5572cac8c163e3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        ],"},{"line_number":100,"context_line":"        help\u003d\"Specify list of share export helpers for ZFS storage. \""},{"line_number":101,"context_line":"             \"It should look like following: \""},{"line_number":102,"context_line":"             \"\u0027FOO_protocol\u003dfoo.FooClass,BAR_protocol\u003dbar.BarClass\u0027\""},{"line_number":103,"context_line":"             \"Required.\"),"},{"line_number":104,"context_line":"    cfg.StrOpt("},{"line_number":105,"context_line":"        \"zfs_replica_snapshot_prefix\","}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_75227553","line":102,"range":{"start_line":102,"start_character":66,"end_line":102,"end_character":68},"updated":"2016-02-29 23:48:22.000000000","message":"Missing a space.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        ],"},{"line_number":100,"context_line":"        help\u003d\"Specify list of share export helpers for ZFS storage. \""},{"line_number":101,"context_line":"             \"It should look like following: \""},{"line_number":102,"context_line":"             \"\u0027FOO_protocol\u003dfoo.FooClass,BAR_protocol\u003dbar.BarClass\u0027\""},{"line_number":103,"context_line":"             \"Required.\"),"},{"line_number":104,"context_line":"    cfg.StrOpt("},{"line_number":105,"context_line":"        \"zfs_replica_snapshot_prefix\","}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_2137c8e4","line":102,"range":{"start_line":102,"start_character":66,"end_line":102,"end_character":68},"in_reply_to":"9aed3d3a_75227553","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self.replica_snapshot_prefix \u003d ("},{"line_number":137,"context_line":"            self.configuration.zfs_replica_snapshot_prefix)"},{"line_number":138,"context_line":"        self.backend_name \u003d self.configuration.safe_get("},{"line_number":139,"context_line":"            \u0027share_backend_name\u0027) or \u0027ZFS\u0027"},{"line_number":140,"context_line":"        self.zpool_list \u003d self._get_zpool_list()"},{"line_number":141,"context_line":"        self.dataset_creation_options \u003d ("},{"line_number":142,"context_line":"            self.configuration.zfs_dataset_creation_options)"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_f5bb25e3","line":139,"range":{"start_line":139,"start_character":38,"end_line":139,"end_character":41},"updated":"2016-02-29 23:48:22.000000000","message":"Why just ZFS, why not ZFSOnLinux","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self.replica_snapshot_prefix \u003d ("},{"line_number":137,"context_line":"            self.configuration.zfs_replica_snapshot_prefix)"},{"line_number":138,"context_line":"        self.backend_name \u003d self.configuration.safe_get("},{"line_number":139,"context_line":"            \u0027share_backend_name\u0027) or \u0027ZFS\u0027"},{"line_number":140,"context_line":"        self.zpool_list \u003d self._get_zpool_list()"},{"line_number":141,"context_line":"        self.dataset_creation_options \u003d ("},{"line_number":142,"context_line":"            self.configuration.zfs_dataset_creation_options)"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_e15b202d","line":139,"range":{"start_line":139,"start_character":38,"end_line":139,"end_character":41},"in_reply_to":"9aed3d3a_f5bb25e3","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if \u0027@\u0027 not in name:"},{"line_number":170,"context_line":"            # NOTE(vponomaryov): check that dataset has no open files."},{"line_number":171,"context_line":"            start_point \u003d time.time()"},{"line_number":172,"context_line":"            while time.time() - start_point \u003c 60:"},{"line_number":173,"context_line":"                try:"},{"line_number":174,"context_line":"                    out, err \u003d self.execute(\u0027lsof\u0027, \u0027-w\u0027, mountpoint)"},{"line_number":175,"context_line":"                except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_b574fd35","line":172,"range":{"start_line":172,"start_character":46,"end_line":172,"end_character":48},"updated":"2016-02-29 23:48:22.000000000","message":"This should be configurable at some point to be usable.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if \u0027@\u0027 not in name:"},{"line_number":170,"context_line":"            # NOTE(vponomaryov): check that dataset has no open files."},{"line_number":171,"context_line":"            start_point \u003d time.time()"},{"line_number":172,"context_line":"            while time.time() - start_point \u003c 60:"},{"line_number":173,"context_line":"                try:"},{"line_number":174,"context_line":"                    out, err \u003d self.execute(\u0027lsof\u0027, \u0027-w\u0027, mountpoint)"},{"line_number":175,"context_line":"                except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_27c19881","line":172,"range":{"start_line":172,"start_character":46,"end_line":172,"end_character":48},"in_reply_to":"9aed3d3a_b574fd35","updated":"2016-03-01 11:35:22.000000000","message":"I consider it as overwhelming. No one will redefine it.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                          \"opened files. Will wait 2 more seconds. \""},{"line_number":181,"context_line":"                          \"Out: \\n%(out)s\", {"},{"line_number":182,"context_line":"                              \u0027name\u0027: name, \u0027out\u0027: out})"},{"line_number":183,"context_line":"                time.sleep(2)"},{"line_number":184,"context_line":"            else:"},{"line_number":185,"context_line":"                raise exception.ZFSonLinuxException("},{"line_number":186,"context_line":"                    msg\u003d_(\"Could not destroy \u0027%s\u0027 dataset, \""}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_f505e579","line":183,"range":{"start_line":183,"start_character":27,"end_line":183,"end_character":28},"updated":"2016-02-29 23:48:22.000000000","message":"This too..","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            except exception.ProcessExecutionError as e:"},{"line_number":193,"context_line":"                LOG.debug(\"Failed to run command, got error: %s\\n\""},{"line_number":194,"context_line":"                          \"Assuming other namespace-based services hold \""},{"line_number":195,"context_line":"                          \"ZFS mounts.\", e)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"            # NOTE(vponomaryov): perform workaround for Neutron bug #1546723"},{"line_number":198,"context_line":"            # We should release ZFS mount from all namespaces. It should not be"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_553e5128","line":195,"range":{"start_line":195,"start_character":41,"end_line":195,"end_character":42},"updated":"2016-02-29 23:48:22.000000000","message":"e.message?","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            except exception.ProcessExecutionError as e:"},{"line_number":193,"context_line":"                LOG.debug(\"Failed to run command, got error: %s\\n\""},{"line_number":194,"context_line":"                          \"Assuming other namespace-based services hold \""},{"line_number":195,"context_line":"                          \"ZFS mounts.\", e)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"            # NOTE(vponomaryov): perform workaround for Neutron bug #1546723"},{"line_number":198,"context_line":"            # We should release ZFS mount from all namespaces. It should not be"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_04b61a8a","line":195,"range":{"start_line":195,"start_character":41,"end_line":195,"end_character":42},"in_reply_to":"9aed3d3a_553e5128","updated":"2016-03-01 11:35:22.000000000","message":"message will be shown anyway.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            except exception.ProcessExecutionError as e:"},{"line_number":205,"context_line":"                LOG.warning("},{"line_number":206,"context_line":"                    _LW(\"Failed to get list of PIDs that hold ZFS dataset \""},{"line_number":207,"context_line":"                        \"mountpoint. Got following error: %s\"), e)"},{"line_number":208,"context_line":"            else:"},{"line_number":209,"context_line":"                pids \u003d [s.split(\u0027/\u0027)[0] for s in raw_pids.split(\u0027/proc/\u0027) if s]"},{"line_number":210,"context_line":"                LOG.debug("}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_756f152b","line":207,"range":{"start_line":207,"start_character":64,"end_line":207,"end_character":65},"updated":"2016-02-29 23:48:22.000000000","message":"would it make sense to dump the exception object? Why not just the message?","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            except exception.ProcessExecutionError as e:"},{"line_number":205,"context_line":"                LOG.warning("},{"line_number":206,"context_line":"                    _LW(\"Failed to get list of PIDs that hold ZFS dataset \""},{"line_number":207,"context_line":"                        \"mountpoint. Got following error: %s\"), e)"},{"line_number":208,"context_line":"            else:"},{"line_number":209,"context_line":"                pids \u003d [s.split(\u0027/\u0027)[0] for s in raw_pids.split(\u0027/proc/\u0027) if s]"},{"line_number":210,"context_line":"                LOG.debug("}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_84586a58","line":207,"range":{"start_line":207,"start_character":64,"end_line":207,"end_character":65},"in_reply_to":"9aed3d3a_756f152b","updated":"2016-03-01 11:35:22.000000000","message":"This is execution of CLI command. There is no gain showing trace at all. It always will be the same. only CLI command output makes sense.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                            \u0027/bin/umount\u0027, mountpoint)"},{"line_number":218,"context_line":"                    except exception.ProcessExecutionError as e:"},{"line_number":219,"context_line":"                        LOG.warning("},{"line_number":220,"context_line":"                            _LW(\"Failed to run command with release of \""},{"line_number":221,"context_line":"                                \"ZFS dataset mount, got error: %s\"), e)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            # NOTE(vponomaryov): sleep some time after unmount operations."},{"line_number":224,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_15eb2979","line":221,"range":{"start_line":220,"start_character":33,"end_line":221,"end_character":50},"updated":"2016-02-29 23:48:22.000000000","message":"Failed to release ZFS dataset mount point %s held by process with pid %s\n \nMakes for a more detailed error message..","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                            \u0027/bin/umount\u0027, mountpoint)"},{"line_number":218,"context_line":"                    except exception.ProcessExecutionError as e:"},{"line_number":219,"context_line":"                        LOG.warning("},{"line_number":220,"context_line":"                            _LW(\"Failed to run command with release of \""},{"line_number":221,"context_line":"                                \"ZFS dataset mount, got error: %s\"), e)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            # NOTE(vponomaryov): sleep some time after unmount operations."},{"line_number":224,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_a1ed9827","line":221,"range":{"start_line":220,"start_character":33,"end_line":221,"end_character":50},"in_reply_to":"9aed3d3a_15eb2979","updated":"2016-03-01 11:35:22.000000000","message":"mountpoint will be available in logging of executed command. only output/error result is absent and this info is already provided.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                reason\u003d_(\"No zpools specified for usage: \""},{"line_number":269,"context_line":"                         \"%s\") % self.zpool_list)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        if self.configuration.zfs_use_ssh:"},{"line_number":272,"context_line":"            self.ssh_executor(\u0027whoami\u0027)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _get_pools_info(self):"},{"line_number":275,"context_line":"        \"\"\"Returns info about all pools used by backend.\"\"\""}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_f5bde568","line":272,"range":{"start_line":271,"start_character":8,"end_line":272,"end_character":39},"updated":"2016-02-29 23:48:22.000000000","message":"Why is this necessary? Could you add a comment above this line?","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                reason\u003d_(\"No zpools specified for usage: \""},{"line_number":269,"context_line":"                         \"%s\") % self.zpool_list)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        if self.configuration.zfs_use_ssh:"},{"line_number":272,"context_line":"            self.ssh_executor(\u0027whoami\u0027)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _get_pools_info(self):"},{"line_number":275,"context_line":"        \"\"\"Returns info about all pools used by backend.\"\"\""}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_844b4a59","line":272,"range":{"start_line":271,"start_character":8,"end_line":272,"end_character":39},"in_reply_to":"9aed3d3a_f5bde568","updated":"2016-03-01 11:35:22.000000000","message":"It is direct check of SSH executor. If it does not work then it will fail. Can be any command here. This one is just one neutral command. It is executed on start of a driver.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    @ensure_share_server_not_provided"},{"line_number":356,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":357,"context_line":"        \"\"\"Is called to create share.\"\"\""},{"line_number":358,"context_line":"        options \u003d self._get_dataset_creation_options(share, is_readonly\u003dFalse)"},{"line_number":359,"context_line":"        cmd \u003d [\u0027create\u0027]"},{"line_number":360,"context_line":"        for option in options:"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_3010fb58","line":357,"range":{"start_line":357,"start_character":31,"end_line":357,"end_character":36},"updated":"2016-02-29 23:48:22.000000000","message":"nit: \"a share\"","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    @ensure_share_server_not_provided"},{"line_number":356,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":357,"context_line":"        \"\"\"Is called to create share.\"\"\""},{"line_number":358,"context_line":"        options \u003d self._get_dataset_creation_options(share, is_readonly\u003dFalse)"},{"line_number":359,"context_line":"        cmd \u003d [\u0027create\u0027]"},{"line_number":360,"context_line":"        for option in options:"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_e445ee17","line":357,"range":{"start_line":357,"start_character":31,"end_line":357,"end_character":36},"in_reply_to":"9aed3d3a_3010fb58","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    @ensure_share_server_not_provided"},{"line_number":421,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":422,"context_line":"        \"\"\"Is called to create snapshot.\"\"\""},{"line_number":423,"context_line":"        dataset_name \u003d self.private_storage.get("},{"line_number":424,"context_line":"            snapshot[\u0027share_id\u0027], \u0027dataset_name\u0027)"},{"line_number":425,"context_line":"        snapshot_name \u003d self._get_snapshot_name(snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_6b15763e","line":422,"range":{"start_line":422,"start_character":30,"end_line":422,"end_character":31},"updated":"2016-02-29 23:48:22.000000000","message":"a","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    @ensure_share_server_not_provided"},{"line_number":421,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":422,"context_line":"        \"\"\"Is called to create snapshot.\"\"\""},{"line_number":423,"context_line":"        dataset_name \u003d self.private_storage.get("},{"line_number":424,"context_line":"            snapshot[\u0027share_id\u0027], \u0027dataset_name\u0027)"},{"line_number":425,"context_line":"        snapshot_name \u003d self._get_snapshot_name(snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_2448762d","line":422,"range":{"start_line":422,"start_character":30,"end_line":422,"end_character":31},"in_reply_to":"9aed3d3a_6b15763e","updated":"2016-03-01 11:35:22.000000000","message":"Done","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        else:"},{"line_number":449,"context_line":"            LOG.warning("},{"line_number":450,"context_line":"                _LW(\"Snapshot with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":451,"context_line":"                    \"absent on backend. Nothing has been deleted.\"),"},{"line_number":452,"context_line":"                {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027name\u0027: snapshot_name})"},{"line_number":453,"context_line":"        self.private_storage.delete(snapshot[\u0027id\u0027])"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_0b230aa8","line":451,"range":{"start_line":451,"start_character":48,"end_line":451,"end_character":64},"updated":"2016-02-29 23:48:22.000000000","message":"\"Nothing to delete.\"? \n\nalso, you\u0027re removing it from private_storage below. So, there is something to \"delete\" :)","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        else:"},{"line_number":449,"context_line":"            LOG.warning("},{"line_number":450,"context_line":"                _LW(\"Snapshot with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":451,"context_line":"                    \"absent on backend. Nothing has been deleted.\"),"},{"line_number":452,"context_line":"                {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027name\u0027: snapshot_name})"},{"line_number":453,"context_line":"        self.private_storage.delete(snapshot[\u0027id\u0027])"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_c48ef226","line":451,"range":{"start_line":451,"start_character":48,"end_line":451,"end_character":64},"in_reply_to":"9aed3d3a_0b230aa8","updated":"2016-03-01 11:35:22.000000000","message":"Driver private storage is under-the-hood thing. Given message talks about real resources.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        return replication_snapshot_prefix"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def _get_replication_snapshot_tag(self, replica):"},{"line_number":555,"context_line":"        \"\"\"Returns replica- and time-based snapshot tag.\"\"\""},{"line_number":556,"context_line":"        current_time \u003d timeutils.utcnow().isoformat()"},{"line_number":557,"context_line":"        snapshot_tag \u003d \"%s_time_%s\" % ("},{"line_number":558,"context_line":"            self._get_replication_snapshot_prefix(replica), current_time)"}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_cb7ac287","line":555,"range":{"start_line":555,"start_character":26,"end_line":555,"end_character":27},"updated":"2016-02-29 23:48:22.000000000","message":"remove redundant -","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        return replication_snapshot_prefix"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def _get_replication_snapshot_tag(self, replica):"},{"line_number":555,"context_line":"        \"\"\"Returns replica- and time-based snapshot tag.\"\"\""},{"line_number":556,"context_line":"        current_time \u003d timeutils.utcnow().isoformat()"},{"line_number":557,"context_line":"        snapshot_tag \u003d \"%s_time_%s\" % ("},{"line_number":558,"context_line":"            self._get_replication_snapshot_prefix(replica), current_time)"}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_04fe1a6b","line":555,"range":{"start_line":555,"start_character":26,"end_line":555,"end_character":27},"in_reply_to":"9aed3d3a_cb7ac287","updated":"2016-03-01 11:35:22.000000000","message":"It is not redundant. It is shortened version of \"replica-based\". Can be shortened when used in pair with some other similar compound adjective.\n\nSo this sentence should be understood as following:\n\n\"\"\"\n\nReturns replica-based and time-based snapshot tag.\n\n\"\"\"","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        else:"},{"line_number":666,"context_line":"            LOG.warning("},{"line_number":667,"context_line":"                _LW(\"Share replica with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":668,"context_line":"                    \"absent on backend. Nothing has been deleted.\"),"},{"line_number":669,"context_line":"                {\u0027id\u0027: replica[\u0027id\u0027], \u0027name\u0027: dataset_name})"},{"line_number":670,"context_line":"        self.private_storage.delete(replica[\u0027id\u0027])"},{"line_number":671,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_2ba36e01","line":668,"range":{"start_line":668,"start_character":40,"end_line":668,"end_character":64},"updated":"2016-02-29 23:48:22.000000000","message":"same","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        else:"},{"line_number":666,"context_line":"            LOG.warning("},{"line_number":667,"context_line":"                _LW(\"Share replica with \u0027%(id)s\u0027 ID and \u0027%(name)s\u0027 NAME is \""},{"line_number":668,"context_line":"                    \"absent on backend. Nothing has been deleted.\"),"},{"line_number":669,"context_line":"                {\u0027id\u0027: replica[\u0027id\u0027], \u0027name\u0027: dataset_name})"},{"line_number":670,"context_line":"        self.private_storage.delete(replica[\u0027id\u0027])"},{"line_number":671,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_4454a253","line":668,"range":{"start_line":668,"start_character":40,"end_line":668,"end_character":64},"in_reply_to":"9aed3d3a_2ba36e01","updated":"2016-03-01 11:35:22.000000000","message":"Same as above, message about storage resources.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"77efc9d36734919d2ea751afa5b46c32d97091b7","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        # Apply access rules from original share"},{"line_number":751,"context_line":"        # TODO(vponomaryov): we should remove somehow rules that were"},{"line_number":752,"context_line":"        # deleted on active replica after creation of secondary replica."},{"line_number":753,"context_line":"        # For the moment there will be difference and it can be considered"},{"line_number":754,"context_line":"        # as a bug."},{"line_number":755,"context_line":"        self._get_share_helper(replica[\u0027share_proto\u0027]).update_access("},{"line_number":756,"context_line":"            dst_dataset_name, access_rules, make_all_ro\u003dTrue)"},{"line_number":757,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"9aed3d3a_8bb43a35","line":754,"range":{"start_line":753,"start_character":10,"end_line":754,"end_character":19},"updated":"2016-02-29 23:48:22.000000000","message":"Bug ID?","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9d38a91504d8acf7a562726e666711d6b2d7cb1","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        # Apply access rules from original share"},{"line_number":751,"context_line":"        # TODO(vponomaryov): we should remove somehow rules that were"},{"line_number":752,"context_line":"        # deleted on active replica after creation of secondary replica."},{"line_number":753,"context_line":"        # For the moment there will be difference and it can be considered"},{"line_number":754,"context_line":"        # as a bug."},{"line_number":755,"context_line":"        self._get_share_helper(replica[\u0027share_proto\u0027]).update_access("},{"line_number":756,"context_line":"            dst_dataset_name, access_rules, make_all_ro\u003dTrue)"},{"line_number":757,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"7af24918_c478b2fb","line":754,"range":{"start_line":753,"start_character":10,"end_line":754,"end_character":19},"in_reply_to":"9aed3d3a_8bb43a35","updated":"2016-03-01 11:35:22.000000000","message":"No driver upstream, no code, no filed bug, no bug ID.","commit_id":"6617e5a11cd661c7815d7de94c2609c6a4f8dac8"}],"manila/share/drivers/zfsonlinux/utils.py":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"00e6a2a0841b3a8806587b5a6e7c63ff8c8b0df0","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":212,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"},{"line_number":213,"context_line":"                rules.append("},{"line_number":214,"context_line":"                    \"%s:rw,no_root_squash,no_all_squash\" % rule[\u0027access_to\u0027])"},{"line_number":215,"context_line":"            elif rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RO:"},{"line_number":216,"context_line":"                rules.append(\"%s:rw,root_squash\" % rule[\u0027access_to\u0027])"},{"line_number":217,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a57f1b5_33d700ef","line":214,"updated":"2016-02-11 02:07:41.000000000","message":"This is the wrong syntax. Unfortunately for ubuntu-trusty, the sharenfs syntax is like this:\n\n\"sec\u003dsys,rw\u003d10.0.10.2:10.0.10.3:10.1.0.0/24,ro\u003d10.2.0.0/16:10.3.4.5,no_root_squash,insecure\"","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2226a32090ea7263d4a37ef4a485f86a61ed8e06","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":212,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"},{"line_number":213,"context_line":"                rules.append("},{"line_number":214,"context_line":"                    \"%s:rw,no_root_squash,no_all_squash\" % rule[\u0027access_to\u0027])"},{"line_number":215,"context_line":"            elif rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RO:"},{"line_number":216,"context_line":"                rules.append(\"%s:rw,root_squash\" % rule[\u0027access_to\u0027])"},{"line_number":217,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a57f1b5_765b1c88","line":214,"in_reply_to":"3a57f1b5_33d700ef","updated":"2016-02-11 11:13:52.000000000","message":"As you can see in docstring for this class, it is FUSE version based helper. CI has fuse version. Kernel-version ZFS indeed has different syntax and it will be added later.","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"958468a58ece70ff64c0be9ad7a4404fc8ce9e0f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":212,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"},{"line_number":213,"context_line":"                rules.append("},{"line_number":214,"context_line":"                    \"%s:rw,no_root_squash,no_all_squash\" % rule[\u0027access_to\u0027])"},{"line_number":215,"context_line":"            elif rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RO:"},{"line_number":216,"context_line":"                rules.append(\"%s:rw,root_squash\" % rule[\u0027access_to\u0027])"},{"line_number":217,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a57f1b5_7c39b240","line":214,"in_reply_to":"3a57f1b5_765b1c88","updated":"2016-02-11 12:28:36.000000000","message":"Done","commit_id":"3eee5136878f8a55c55ff0c672448bc4d559c7b0"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ff31089c4fb7db0c26993d5a9bc11a4b618112ff","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":234,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"},{"line_number":235,"context_line":"                if self.is_kernel_version:"},{"line_number":236,"context_line":"                    rule_template \u003d \"rw\u003d%s,no_root_squash,no_all_squash\""},{"line_number":237,"context_line":"                else:"},{"line_number":238,"context_line":"                    rule_template \u003d \"%s:rw,no_root_squash,no_all_squash\""},{"line_number":239,"context_line":"            elif rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RO:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a57f1b5_2c6f82c6","line":236,"updated":"2016-02-11 14:50:07.000000000","message":"This template should go outside the loop an the only thing the loop should do is generate a list of rw rules and a list of ro rules. Then those lists should be put into the template with \u0027:\u0027.join()","commit_id":"2721b6117292a6c2b3451ef5ef91a9d2134595ce"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"19176ae096f219a9f9a5220bc953173f534336e1","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":234,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"},{"line_number":235,"context_line":"                if self.is_kernel_version:"},{"line_number":236,"context_line":"                    rule_template \u003d \"rw\u003d%s,no_root_squash,no_all_squash\""},{"line_number":237,"context_line":"                else:"},{"line_number":238,"context_line":"                    rule_template \u003d \"%s:rw,no_root_squash,no_all_squash\""},{"line_number":239,"context_line":"            elif rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RO:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a57f1b5_d7df4e67","line":236,"in_reply_to":"3a57f1b5_2c6f82c6","updated":"2016-02-11 16:44:48.000000000","message":"What is wrong with existing approach? We have 4 different templates and they are introduced on lines 236, 238, 241 and 243.\n\nSo it is unclear why should be done changes here.","commit_id":"2721b6117292a6c2b3451ef5ef91a9d2134595ce"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"044e199d7ef5e6eab698b2a3c11712544422aa1a","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":234,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"},{"line_number":235,"context_line":"                if self.is_kernel_version:"},{"line_number":236,"context_line":"                    rule_template \u003d \"rw\u003d%s,no_root_squash,no_all_squash\""},{"line_number":237,"context_line":"                else:"},{"line_number":238,"context_line":"                    rule_template \u003d \"%s:rw,no_root_squash,no_all_squash\""},{"line_number":239,"context_line":"            elif rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RO:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a57f1b5_a318541f","line":236,"in_reply_to":"3a57f1b5_9aa81d22","updated":"2016-02-11 18:08:42.000000000","message":"Done and fixed bug, RO rules were setting \"RW\". So, always RW rules were set.","commit_id":"2721b6117292a6c2b3451ef5ef91a9d2134595ce"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"47fb516936023211b02fc052e49aed8e3300fea3","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":234,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"},{"line_number":235,"context_line":"                if self.is_kernel_version:"},{"line_number":236,"context_line":"                    rule_template \u003d \"rw\u003d%s,no_root_squash,no_all_squash\""},{"line_number":237,"context_line":"                else:"},{"line_number":238,"context_line":"                    rule_template \u003d \"%s:rw,no_root_squash,no_all_squash\""},{"line_number":239,"context_line":"            elif rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RO:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a57f1b5_9aa81d22","line":236,"in_reply_to":"3a57f1b5_d7df4e67","updated":"2016-02-11 17:08:51.000000000","message":"The problem is when you allows access to 2 things.\n\n $ manila access-allow 624353cd-70d8-463c-b418-3e037cfc4359 ip 10.0.0.1\n $ manila access-allow 624353cd-70d8-463c-b418-3e037cfc4359 ip 10.0.0.2\n $ sudo zfs get sharenfs alpha/manila_share_70410415_87e2_4889_9188_0eb99a2ddcd3\n\n NAME                                                     PROPERTY  VALUE                                                                              SOURCE\n alpha/manila_share_70410415_87e2_4889_9188_0eb99a2ddcd3  sharenfs  rw\u003d10.0.0.2,no_root_squash,no_all_squash,rw\u003d10.0.0.1,no_root_squash,no_all_squash  local\n\nNotice how all the options are duplicated. The sharenfs option should have looked like:\n\n rw\u003d10.0.0.1:10.0.0.2,no_root_squash,no_all_squash","commit_id":"2721b6117292a6c2b3451ef5ef91a9d2134595ce"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"2a871454f79807bbc6f213ba8963d80ac0639437","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # that were added and then removed. So, remove them explicitly."},{"line_number":284,"context_line":"        if delete_rules and access_rules:"},{"line_number":285,"context_line":"            mountpoint \u003d self.get_zfs_option(dataset_name, \u0027mountpoint\u0027)"},{"line_number":286,"context_line":"            for rule in delete_rules:"},{"line_number":287,"context_line":"                export_location \u003d rule[\u0027access_to\u0027] + \u0027:\u0027 + mountpoint"},{"line_number":288,"context_line":"                self.execute(\u0027sudo\u0027, \u0027exportfs\u0027, \u0027-u\u0027, export_location)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_e1ba8b09","line":288,"range":{"start_line":286,"start_character":0,"end_line":288,"end_character":71},"updated":"2016-02-22 17:55:13.000000000","message":"Shouldn\u0027t you validate the delete rules as well? Assume the following scenario:\n\n* User adds an ip 10.0.0.1 rule\n* User adds a user 10.0.0.1 rule\n* User tries to delete user 10.0.0.1 rule\n* Driver removes ip 10.0.0.1 rule","commit_id":"52b9c33d9f517b4ff61f3b6b7569ee323e2232ab"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8604d14f1e69d7f45315d55b27fddf1867137ed0","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # that were added and then removed. So, remove them explicitly."},{"line_number":284,"context_line":"        if delete_rules and access_rules:"},{"line_number":285,"context_line":"            mountpoint \u003d self.get_zfs_option(dataset_name, \u0027mountpoint\u0027)"},{"line_number":286,"context_line":"            for rule in delete_rules:"},{"line_number":287,"context_line":"                export_location \u003d rule[\u0027access_to\u0027] + \u0027:\u0027 + mountpoint"},{"line_number":288,"context_line":"                self.execute(\u0027sudo\u0027, \u0027exportfs\u0027, \u0027-u\u0027, export_location)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_4176acd7","line":288,"range":{"start_line":286,"start_character":0,"end_line":288,"end_character":71},"in_reply_to":"bae84128_369790ed","updated":"2016-02-23 13:25:13.000000000","message":"Will add such check if next PS.","commit_id":"52b9c33d9f517b4ff61f3b6b7569ee323e2232ab"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"f39182686dfb84a2eb2f73bbaee7f7b4d4dde5ec","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # that were added and then removed. So, remove them explicitly."},{"line_number":284,"context_line":"        if delete_rules and access_rules:"},{"line_number":285,"context_line":"            mountpoint \u003d self.get_zfs_option(dataset_name, \u0027mountpoint\u0027)"},{"line_number":286,"context_line":"            for rule in delete_rules:"},{"line_number":287,"context_line":"                export_location \u003d rule[\u0027access_to\u0027] + \u0027:\u0027 + mountpoint"},{"line_number":288,"context_line":"                self.execute(\u0027sudo\u0027, \u0027exportfs\u0027, \u0027-u\u0027, export_location)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_369790ed","line":288,"range":{"start_line":286,"start_character":0,"end_line":288,"end_character":71},"in_reply_to":"bae84128_5cd51cb7","updated":"2016-02-22 20:19:21.000000000","message":"exportfs will not complain indeed, but \u0027access_to\u0027 of both rules would be the same, so if the user tries to delete the \u0027user\u0027 rule, the driver will incorrectly remove the ip rule","commit_id":"52b9c33d9f517b4ff61f3b6b7569ee323e2232ab"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e08923e24859dd1f04786eadbfff71ede01c860f","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # that were added and then removed. So, remove them explicitly."},{"line_number":284,"context_line":"        if delete_rules and access_rules:"},{"line_number":285,"context_line":"            mountpoint \u003d self.get_zfs_option(dataset_name, \u0027mountpoint\u0027)"},{"line_number":286,"context_line":"            for rule in delete_rules:"},{"line_number":287,"context_line":"                export_location \u003d rule[\u0027access_to\u0027] + \u0027:\u0027 + mountpoint"},{"line_number":288,"context_line":"                self.execute(\u0027sudo\u0027, \u0027exportfs\u0027, \u0027-u\u0027, export_location)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bae84128_5cd51cb7","line":288,"range":{"start_line":286,"start_character":0,"end_line":288,"end_character":71},"in_reply_to":"bae84128_e1ba8b09","updated":"2016-02-22 18:24:20.000000000","message":"Driver removes \"access_to + \":\" + mountpoint\". There will be no IP. And \"exportfs\" will not complain if such absent. No need to perform any validations here. If that were so, then Tempest negative tests would fail.","commit_id":"52b9c33d9f517b4ff61f3b6b7569ee323e2232ab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\"Performs checks for required stuff.\"\"\""},{"line_number":191,"context_line":"        out, err \u003d self.execute(\u0027which\u0027, \u0027exportfs\u0027)"},{"line_number":192,"context_line":"        if not out:"},{"line_number":193,"context_line":"            raise exception.ManilaException("},{"line_number":194,"context_line":"                _(\"Utility \u0027exportfs\u0027 is not installed.\"))"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            self.execute(\u0027sudo\u0027, \u0027exportfs\u0027)"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_9cb7bdd7","line":193,"updated":"2016-02-27 03:26:03.000000000","message":"Please use a more specific exception.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\"Performs checks for required stuff.\"\"\""},{"line_number":191,"context_line":"        out, err \u003d self.execute(\u0027which\u0027, \u0027exportfs\u0027)"},{"line_number":192,"context_line":"        if not out:"},{"line_number":193,"context_line":"            raise exception.ManilaException("},{"line_number":194,"context_line":"                _(\"Utility \u0027exportfs\u0027 is not installed.\"))"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            self.execute(\u0027sudo\u0027, \u0027exportfs\u0027)"}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_524eb996","line":193,"in_reply_to":"9aed3d3a_9cb7bdd7","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77f7ced31635b4a7b0b7ab79380bb0aaed631581","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":198,"context_line":"            msg \u003d _(\"Call of \u0027exportfs\u0027 utility returned error: %s\")"},{"line_number":199,"context_line":"            LOG.exception(msg, e)"},{"line_number":200,"context_line":"            raise exception.ManilaException(msg % e)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def create_exports(self, dataset_name):"},{"line_number":203,"context_line":"        \"\"\"Creates NFS share exports for given ZFS dataset.\"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_bcb441d1","line":200,"updated":"2016-02-27 03:26:03.000000000","message":"Why re-raise a different exception here?  I think just \"raise\" is better.","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8df9722a6f8453f4d1e1bcc6f8c12a296c2be54c","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":198,"context_line":"            msg \u003d _(\"Call of \u0027exportfs\u0027 utility returned error: %s\")"},{"line_number":199,"context_line":"            LOG.exception(msg, e)"},{"line_number":200,"context_line":"            raise exception.ManilaException(msg % e)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def create_exports(self, dataset_name):"},{"line_number":203,"context_line":"        \"\"\"Creates NFS share exports for given ZFS dataset.\"\"\""}],"source_content_type":"text/x-python","patch_set":40,"id":"9aed3d3a_b2458571","line":200,"in_reply_to":"9aed3d3a_bcb441d1","updated":"2016-02-27 13:17:53.000000000","message":"Done","commit_id":"f6b9bdf4d34ccc1f59f001fd098d7213de56a714"}]}
