)]}'
{"contrib/ci/post_test_hook.sh":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f101e5c8e13d3ba7a6b658cd650fd09f89eddb13","unresolved":false,"context_lines":[{"line_number":82,"context_line":"iniset $TEMPEST_CONFIG share capability_create_share_from_snapshot_support $CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"# Capability \"mount_snapshot_support\""},{"line_number":85,"context_line":"CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT\u003d${CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT:-False}"},{"line_number":86,"context_line":"iniset $TEMPEST_CONFIG share capability_create_share_from_snapshot_support $CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"if [[ -z \"$MULTITENANCY_ENABLED\" ]]; then"},{"line_number":89,"context_line":"    # Define whether share drivers handle share servers or not."}],"source_content_type":"text/x-sh","patch_set":21,"id":"1a6eadb0_18818ec3","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":121},"updated":"2016-12-15 19:47:24.000000000","message":"shouldn\u0027t this be mountable snapshot? this currently is the same as above statement","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":82,"context_line":"iniset $TEMPEST_CONFIG share capability_create_share_from_snapshot_support $CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"# Capability \"mount_snapshot_support\""},{"line_number":85,"context_line":"CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT\u003d${CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT:-False}"},{"line_number":86,"context_line":"iniset $TEMPEST_CONFIG share capability_create_share_from_snapshot_support $CAPABILITY_CREATE_SHARE_FROM_SNAPSHOT_SUPPORT"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"if [[ -z \"$MULTITENANCY_ENABLED\" ]]; then"},{"line_number":89,"context_line":"    # Define whether share drivers handle share servers or not."}],"source_content_type":"text/x-sh","patch_set":21,"id":"1a6eadb0_e18dcc31","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":121},"in_reply_to":"1a6eadb0_18818ec3","updated":"2016-12-16 21:14:09.000000000","message":"removed","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":76,"context_line":"RUN_MANILA_REPLICATION_TESTS\u003d${RUN_MANILA_REPLICATION_TESTS:-False}"},{"line_number":77,"context_line":"RUN_MANILA_HOST_ASSISTED_MIGRATION_TESTS\u003d${RUN_MANILA_HOST_ASSISTED_MIGRATION_TESTS:-False}"},{"line_number":78,"context_line":"RUN_MANILA_DRIVER_ASSISTED_MIGRATION_TESTS\u003d${RUN_MANILA_DRIVER_ASSISTED_MIGRATION_TESTS:-False}"},{"line_number":79,"context_line":"RUN_MANILA_MOUNT_SNAPSHOTS_TESTS\u003d${RUN_MANILA_MOUNT_SNAPSHOTS_TESTS:-False}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"MANILA_CONF\u003d${MANILA_CONF:-/etc/manila/manila.conf}"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-sh","patch_set":55,"id":"5a3905b3_6b1f506c","line":79,"range":{"start_line":79,"start_character":60,"end_line":79,"end_character":61},"updated":"2017-01-23 02:17:58.000000000","message":"nit: drop the plural","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":76,"context_line":"RUN_MANILA_REPLICATION_TESTS\u003d${RUN_MANILA_REPLICATION_TESTS:-False}"},{"line_number":77,"context_line":"RUN_MANILA_HOST_ASSISTED_MIGRATION_TESTS\u003d${RUN_MANILA_HOST_ASSISTED_MIGRATION_TESTS:-False}"},{"line_number":78,"context_line":"RUN_MANILA_DRIVER_ASSISTED_MIGRATION_TESTS\u003d${RUN_MANILA_DRIVER_ASSISTED_MIGRATION_TESTS:-False}"},{"line_number":79,"context_line":"RUN_MANILA_MOUNT_SNAPSHOTS_TESTS\u003d${RUN_MANILA_MOUNT_SNAPSHOTS_TESTS:-False}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"MANILA_CONF\u003d${MANILA_CONF:-/etc/manila/manila.conf}"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-sh","patch_set":55,"id":"5a3905b3_7e5374e2","line":79,"range":{"start_line":79,"start_character":60,"end_line":79,"end_character":61},"in_reply_to":"5a3905b3_6b1f506c","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"contrib/ci/pre_test_hook.sh":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"3a4f4a645bc63be581687da962c876165d749cf9","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    save_configuration \"MANILA_OPTGROUP_adminnet_standalone_network_plugin_allowed_ip_ranges\" \"11.0.0.10-11.0.0.19,11.0.0.30-11.0.0.39,11.0.0.50-11.0.0.199\""},{"line_number":146,"context_line":"    save_configuration \"MANILA_OPTGROUP_adminnet_standalone_network_plugin_ip_version\" \"4\""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    DEFAULT_EXTRA_SPECS\u003d\"\u0027snapshot_support\u003dTrue create_share_from_snapshot_support\u003dTrue revert_to_snapshot_support\u003dTrue mount_snapshot_support\u003dTrue\u0027\""},{"line_number":149,"context_line":"    export MANILA_TEMPEST_CONCURRENCY\u003d24"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"elif [[ \"$DRIVER\" \u003d\u003d \"lvm\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":59,"id":"5a3905b3_7fc7bb95","line":148,"range":{"start_line":148,"start_character":88,"end_line":148,"end_character":120},"updated":"2017-01-24 09:10:21.000000000","message":"It looks redundant from this commit point of view. Same below.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    save_configuration \"MANILA_OPTGROUP_adminnet_standalone_network_plugin_allowed_ip_ranges\" \"11.0.0.10-11.0.0.19,11.0.0.30-11.0.0.39,11.0.0.50-11.0.0.199\""},{"line_number":146,"context_line":"    save_configuration \"MANILA_OPTGROUP_adminnet_standalone_network_plugin_ip_version\" \"4\""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    DEFAULT_EXTRA_SPECS\u003d\"\u0027snapshot_support\u003dTrue create_share_from_snapshot_support\u003dTrue revert_to_snapshot_support\u003dTrue mount_snapshot_support\u003dTrue\u0027\""},{"line_number":149,"context_line":"    export MANILA_TEMPEST_CONCURRENCY\u003d24"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"elif [[ \"$DRIVER\" \u003d\u003d \"lvm\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":59,"id":"5a3905b3_88234b55","line":148,"range":{"start_line":148,"start_character":88,"end_line":148,"end_character":120},"in_reply_to":"5a3905b3_7fc7bb95","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"etc/manila/policy.json":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"3a4f4a645bc63be581687da962c876165d749cf9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"share_snapshot:unmanage_snapshot\": \"rule:admin_api\","},{"line_number":62,"context_line":"    \"share_snapshot:force_delete\": \"rule:admin_api\","},{"line_number":63,"context_line":"    \"share_snapshot:reset_status\": \"rule:admin_api\","},{"line_number":64,"context_line":"    \"share_snapshot:access_list\": \"rule:default\","},{"line_number":65,"context_line":"    \"share_snapshot_export_location:index\": \"rule:default\","},{"line_number":66,"context_line":"    \"share_snapshot_export_location:show\": \"rule:default\","},{"line_number":67,"context_line":""}],"source_content_type":"application/json","patch_set":59,"id":"5a3905b3_7ffc1bb8","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":49},"updated":"2017-01-24 09:10:21.000000000","message":"Where is policies for \"access_allow\" and \"access_deny\"?\n\n\"Share\" has it on lines 26-29.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"share_snapshot:unmanage_snapshot\": \"rule:admin_api\","},{"line_number":62,"context_line":"    \"share_snapshot:force_delete\": \"rule:admin_api\","},{"line_number":63,"context_line":"    \"share_snapshot:reset_status\": \"rule:admin_api\","},{"line_number":64,"context_line":"    \"share_snapshot:access_list\": \"rule:default\","},{"line_number":65,"context_line":"    \"share_snapshot_export_location:index\": \"rule:default\","},{"line_number":66,"context_line":"    \"share_snapshot_export_location:show\": \"rule:default\","},{"line_number":67,"context_line":""}],"source_content_type":"application/json","patch_set":59,"id":"5a3905b3_48b3230a","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":49},"in_reply_to":"5a3905b3_7ffc1bb8","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"manila/api/common.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    interpretation and is limited to 64 characters."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":"    if len(access) \u003d\u003d 0 or len(access) \u003e 64:"},{"line_number":332,"context_line":"        exc_str \u003d _(\u0027Invalid CN (common name). Must be 1-64 chars long\u0027)"},{"line_number":333,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003dexc_str)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_23945d89","line":332,"range":{"start_line":332,"start_character":69,"end_line":332,"end_character":70},"updated":"2016-07-26 18:41:59.000000000","message":"period","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    interpretation and is limited to 64 characters."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":"    if len(access) \u003d\u003d 0 or len(access) \u003e 64:"},{"line_number":332,"context_line":"        exc_str \u003d _(\u0027Invalid CN (common name). Must be 1-64 chars long\u0027)"},{"line_number":333,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003dexc_str)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_e0993821","line":332,"range":{"start_line":332,"start_character":69,"end_line":332,"end_character":70},"in_reply_to":"dada55a8_23945d89","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if prefix \u003c 0 or prefix \u003e 32:"},{"line_number":356,"context_line":"                raise ValueError()"},{"line_number":357,"context_line":"        except ValueError:"},{"line_number":358,"context_line":"            msg \u003d \u0027IP prefix should be in range from 0 to 32\u0027"},{"line_number":359,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":360,"context_line":"    ip_range \u003d ip_range[0].split(\u0027.\u0027)"},{"line_number":361,"context_line":"    if len(ip_range) !\u003d 4:"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_4397d18f","line":358,"range":{"start_line":358,"start_character":60,"end_line":358,"end_character":61},"updated":"2016-07-26 18:41:59.000000000","message":"period","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if prefix \u003c 0 or prefix \u003e 32:"},{"line_number":356,"context_line":"                raise ValueError()"},{"line_number":357,"context_line":"        except ValueError:"},{"line_number":358,"context_line":"            msg \u003d \u0027IP prefix should be in range from 0 to 32\u0027"},{"line_number":359,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":360,"context_line":"    ip_range \u003d ip_range[0].split(\u0027.\u0027)"},{"line_number":361,"context_line":"    if len(ip_range) !\u003d 4:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_409f6403","line":358,"range":{"start_line":358,"start_character":60,"end_line":358,"end_character":61},"in_reply_to":"dada55a8_4397d18f","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":372,"context_line":"def validate_cephx_id(cephx_id):"},{"line_number":373,"context_line":"    if not cephx_id:"},{"line_number":374,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003d_("},{"line_number":375,"context_line":"            \u0027Ceph IDs may not be empty\u0027))"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    # This restriction may be lifted in Ceph in the future:"},{"line_number":378,"context_line":"    # http://tracker.ceph.com/issues/14626"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_83b6e93b","line":375,"range":{"start_line":375,"start_character":37,"end_line":375,"end_character":38},"updated":"2016-07-26 18:41:59.000000000","message":"period","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":372,"context_line":"def validate_cephx_id(cephx_id):"},{"line_number":373,"context_line":"    if not cephx_id:"},{"line_number":374,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003d_("},{"line_number":375,"context_line":"            \u0027Ceph IDs may not be empty\u0027))"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    # This restriction may be lifted in Ceph in the future:"},{"line_number":378,"context_line":"    # http://tracker.ceph.com/issues/14626"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_80895ccd","line":375,"range":{"start_line":375,"start_character":37,"end_line":375,"end_character":38},"in_reply_to":"dada55a8_83b6e93b","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    # http://tracker.ceph.com/issues/14626"},{"line_number":379,"context_line":"    if not set(cephx_id) \u003c\u003d set(string.printable):"},{"line_number":380,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003d_("},{"line_number":381,"context_line":"            \u0027Ceph IDs must consist of ASCII printable characters\u0027))"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    # Periods are technically permitted, but we restrict them here"},{"line_number":384,"context_line":"    # to avoid confusion where users are unsure whether they should"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_63b3f54d","line":381,"range":{"start_line":381,"start_character":63,"end_line":381,"end_character":64},"updated":"2016-07-26 18:41:59.000000000","message":"period","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    # http://tracker.ceph.com/issues/14626"},{"line_number":379,"context_line":"    if not set(cephx_id) \u003c\u003d set(string.printable):"},{"line_number":380,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003d_("},{"line_number":381,"context_line":"            \u0027Ceph IDs must consist of ASCII printable characters\u0027))"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    # Periods are technically permitted, but we restrict them here"},{"line_number":384,"context_line":"    # to avoid confusion where users are unsure whether they should"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_6086e8ba","line":381,"range":{"start_line":381,"start_character":63,"end_line":381,"end_character":64},"in_reply_to":"dada55a8_63b3f54d","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    # create \"client.client.foobar\"."},{"line_number":387,"context_line":"    if \u0027.\u0027 in cephx_id:"},{"line_number":388,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003d_("},{"line_number":389,"context_line":"            \u0027Ceph IDs may not contain periods\u0027))"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"def validate_access(access_type, access_to, enable_ceph\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_c382a151","line":389,"range":{"start_line":389,"start_character":44,"end_line":389,"end_character":46},"updated":"2016-07-26 18:41:59.000000000","message":"period","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    # create \"client.client.foobar\"."},{"line_number":387,"context_line":"    if \u0027.\u0027 in cephx_id:"},{"line_number":388,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003d_("},{"line_number":389,"context_line":"            \u0027Ceph IDs may not contain periods\u0027))"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"def validate_access(access_type, access_to, enable_ceph\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c09354f9","line":389,"range":{"start_line":389,"start_character":44,"end_line":389,"end_character":46},"in_reply_to":"dada55a8_c382a151","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    common name. The meaning of a string depends on its"},{"line_number":329,"context_line":"    interpretation and is limited to 64 characters."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":"    if len(access) \u003d\u003d 0 or len(access) \u003e 64:"},{"line_number":332,"context_line":"        exc_str \u003d _(\u0027Invalid CN (common name). Must be 1-64 chars long.\u0027)"},{"line_number":333,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003dexc_str)"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_31011b39","line":331,"range":{"start_line":331,"start_character":7,"end_line":331,"end_character":44},"updated":"2016-11-17 17:39:41.000000000","message":"You calculate length twice here. Lets use correct programming and do not do redundant stuff:\n\n\"\"\"\nif not (0 \u003c len(access) \u003c 65):\n\"\"\"","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    common name. The meaning of a string depends on its"},{"line_number":329,"context_line":"    interpretation and is limited to 64 characters."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":"    if len(access) \u003d\u003d 0 or len(access) \u003e 64:"},{"line_number":332,"context_line":"        exc_str \u003d _(\u0027Invalid CN (common name). Must be 1-64 chars long.\u0027)"},{"line_number":333,"context_line":"        raise webob.exc.HTTPBadRequest(explanation\u003dexc_str)"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_f293b84d","line":331,"range":{"start_line":331,"start_character":7,"end_line":331,"end_character":44},"in_reply_to":"7a77a97e_31011b39","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1e34a926b64c67a0cc4f469de444f37dfbec60ba","unresolved":false,"context_lines":[{"line_number":317,"context_line":"              {\"bad_options\": bad_options})"},{"line_number":318,"context_line":"    for opt in unknown_options:"},{"line_number":319,"context_line":"        del search_options[opt]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"def validate_common_name(access):"},{"line_number":323,"context_line":"    \"\"\"Validate common name passed by user."}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_f578fe91","line":320,"updated":"2017-01-12 18:00:14.000000000","message":"This change should have been implemented in separate commit. It is not directly related to current feature.","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":317,"context_line":"              {\"bad_options\": bad_options})"},{"line_number":318,"context_line":"    for opt in unknown_options:"},{"line_number":319,"context_line":"        del search_options[opt]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"def validate_common_name(access):"},{"line_number":323,"context_line":"    \"\"\"Validate common name passed by user."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_8969f8c0","line":320,"in_reply_to":"9a57fde8_f578fe91","updated":"2017-01-16 22:54:47.000000000","message":"yes, it could, but then I believe this separate commit wouldn\u0027t have a solid purpose","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"}],"manila/api/openstack/api_version_request.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    * 2.18 - Add gateway to the JSON response of share network show API."},{"line_number":72,"context_line":"    * 2.19 - Share snapshot instances admin APIs"},{"line_number":73,"context_line":"            (list/show/detail/reset-status)."},{"line_number":74,"context_line":"    * 2.20 - Add mountable snapshots APIs"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"\"\"\""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_7c57da57","line":74,"range":{"start_line":74,"start_character":40,"end_line":74,"end_character":41},"updated":"2016-08-02 11:38:42.000000000","message":"period","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6ae85c3f29ca4dbb1d3e85b99392299eb4724cf2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    * 2.18 - Add gateway to the JSON response of share network show API."},{"line_number":72,"context_line":"    * 2.19 - Share snapshot instances admin APIs"},{"line_number":73,"context_line":"            (list/show/detail/reset-status)."},{"line_number":74,"context_line":"    * 2.20 - Add mountable snapshots APIs"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"\"\"\""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_1878552b","line":74,"range":{"start_line":74,"start_character":40,"end_line":74,"end_character":41},"in_reply_to":"bacf61ea_7c57da57","updated":"2016-08-19 19:28:20.000000000","message":"Done","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    * 2.23 - Added share_type to filter results of scheduler-stats/pools API."},{"line_number":82,"context_line":"    * 2.24 - Added create_share_from_snapshot_support extra spec, which was"},{"line_number":83,"context_line":"             previously inferred from the \u0027snapshot_support\u0027 extra spec."},{"line_number":84,"context_line":"    * 2.25 - Add mountable snapshots APIs."},{"line_number":85,"context_line":"\"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_fc58f88c","line":84,"range":{"start_line":84,"start_character":13,"end_line":84,"end_character":16},"updated":"2016-12-18 19:26:24.000000000","message":"Added","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    * 2.23 - Added share_type to filter results of scheduler-stats/pools API."},{"line_number":82,"context_line":"    * 2.24 - Added create_share_from_snapshot_support extra spec, which was"},{"line_number":83,"context_line":"             previously inferred from the \u0027snapshot_support\u0027 extra spec."},{"line_number":84,"context_line":"    * 2.25 - Add mountable snapshots APIs."},{"line_number":85,"context_line":"\"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_a47ede67","line":84,"range":{"start_line":84,"start_character":13,"end_line":84,"end_character":16},"in_reply_to":"1a6eadb0_fc58f88c","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"}],"manila/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"2.25"},{"line_number":152,"context_line":"----"},{"line_number":153,"context_line":"  Add mountable snapshots APIs."}],"source_content_type":"text/x-rst","patch_set":22,"id":"1a6eadb0_1c5e9476","line":153,"range":{"start_line":153,"start_character":2,"end_line":153,"end_character":5},"updated":"2016-12-18 19:26:24.000000000","message":"Added","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"2.25"},{"line_number":152,"context_line":"----"},{"line_number":153,"context_line":"  Add mountable snapshots APIs."}],"source_content_type":"text/x-rst","patch_set":22,"id":"1a6eadb0_e4db767a","line":153,"range":{"start_line":153,"start_character":2,"end_line":153,"end_character":5},"in_reply_to":"1a6eadb0_1c5e9476","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"}],"manila/api/v1/shares.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        access_type \u003d access_data[\u0027access_type\u0027]"},{"line_number":404,"context_line":"        access_to \u003d access_data[\u0027access_to\u0027]"},{"line_number":405,"context_line":"        common.validate_access(access_type, access_to, enable_ceph)"},{"line_number":406,"context_line":"        try:"},{"line_number":407,"context_line":"            access \u003d self.share_api.allow_access("},{"line_number":408,"context_line":"                context, share, access_type, access_to,"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_8369c98e","line":405,"range":{"start_line":405,"start_character":8,"end_line":405,"end_character":67},"updated":"2016-07-26 18:41:59.000000000","message":"nice :)","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        access_type \u003d access_data[\u0027access_type\u0027]"},{"line_number":337,"context_line":"        access_to \u003d access_data[\u0027access_to\u0027]"},{"line_number":338,"context_line":"        common.validate_access(access_type, access_to, enable_ceph)"},{"line_number":339,"context_line":"        try:"},{"line_number":340,"context_line":"            access \u003d self.share_api.allow_access("},{"line_number":341,"context_line":"                context, share, access_type, access_to,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_7c4dc8c3","line":338,"range":{"start_line":338,"start_character":55,"end_line":338,"end_character":66},"updated":"2016-12-18 19:26:24.000000000","message":"make this a kwarg, there\u0027s a good chance we\u0027ll add more keys in the future.","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        access_type \u003d access_data[\u0027access_type\u0027]"},{"line_number":337,"context_line":"        access_to \u003d access_data[\u0027access_to\u0027]"},{"line_number":338,"context_line":"        common.validate_access(access_type, access_to, enable_ceph)"},{"line_number":339,"context_line":"        try:"},{"line_number":340,"context_line":"            access \u003d self.share_api.allow_access("},{"line_number":341,"context_line":"                context, share, access_type, access_to,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_44d42a1f","line":338,"range":{"start_line":338,"start_character":55,"end_line":338,"end_character":66},"in_reply_to":"1a6eadb0_7c4dc8c3","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1e34a926b64c67a0cc4f469de444f37dfbec60ba","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"The shares api.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import ast"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"from oslo_utils import strutils"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_b5e4b63b","line":18,"updated":"2017-01-12 18:00:14.000000000","message":"See comment in https://review.openstack.org/#/c/345526/38/manila/api/common.py","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"The shares api.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import ast"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"from oslo_utils import strutils"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_a9ab14d5","line":18,"in_reply_to":"9a57fde8_b5e4b63b","updated":"2017-01-16 22:54:47.000000000","message":"see response","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"}],"manila/api/v2/router.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                       action\u003d\"access_list\","},{"line_number":214,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        self.resources[\"share_snapshot_export_locations\"] \u003d ("},{"line_number":217,"context_line":"            share_snapshot_export_locations.create_resource())"},{"line_number":218,"context_line":"        mapper.connect(\"snapshots\","},{"line_number":219,"context_line":"                       \"/{project_id}/snapshots/{snapshot_id}/\""},{"line_number":220,"context_line":"                       \"export-locations\","},{"line_number":221,"context_line":"                       controller\u003dself.resources["},{"line_number":222,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":223,"context_line":"                       action\u003d\"snapshot_export_location_list\","},{"line_number":224,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        mapper.connect(\"snapshots\","},{"line_number":227,"context_line":"                       \"/{project_id}/snapshots/{snapshot_id}/\""},{"line_number":228,"context_line":"                       \"export-locations/{export_location_id}\","},{"line_number":229,"context_line":"                       controller\u003dself.resources["},{"line_number":230,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":231,"context_line":"                       action\u003d\"snapshot_export_location_show\","},{"line_number":232,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":235,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":236,"context_line":"                       \"{snapshot_instance_id}/export-locations\","},{"line_number":237,"context_line":"                       controller\u003dself.resources["},{"line_number":238,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":239,"context_line":"                       action\u003d\"snapshot_instance_export_location_list\","},{"line_number":240,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":243,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":244,"context_line":"                       \"{snapshot_instance_id}/export-locations/\""},{"line_number":245,"context_line":"                       \"{export_location_id}\","},{"line_number":246,"context_line":"                       controller\u003dself.resources["},{"line_number":247,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":248,"context_line":"                       action\u003d\"snapshot_instance_export_location_show\","},{"line_number":249,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        self.resources[\u0027snapshot_instances\u0027] \u003d ("},{"line_number":252,"context_line":"            share_snapshot_instances.create_resource())"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_3c01903a","line":249,"range":{"start_line":216,"start_character":0,"end_line":249,"end_character":54},"updated":"2016-12-18 19:26:24.000000000","message":"You could simplify this, we have:\n\ni. index\nii. detail\niii. show\n\nas our usual \"actions\" in every controller. I suggest you follow that pattern. It provides more extensibility.\n\nCreate two separate controllers, one for export locations of snapshots and one for export locations of snapshot-instances... and implement all three methods above...\n\n\nAlso, snapshot-instances are not exposed to tenants. They\u0027re admin only. So, please add all these to policy.json and use @wsgi.authorize to control access to each of these APIs","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                       action\u003d\"access_list\","},{"line_number":214,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        self.resources[\"share_snapshot_export_locations\"] \u003d ("},{"line_number":217,"context_line":"            share_snapshot_export_locations.create_resource())"},{"line_number":218,"context_line":"        mapper.connect(\"snapshots\","},{"line_number":219,"context_line":"                       \"/{project_id}/snapshots/{snapshot_id}/\""},{"line_number":220,"context_line":"                       \"export-locations\","},{"line_number":221,"context_line":"                       controller\u003dself.resources["},{"line_number":222,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":223,"context_line":"                       action\u003d\"snapshot_export_location_list\","},{"line_number":224,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        mapper.connect(\"snapshots\","},{"line_number":227,"context_line":"                       \"/{project_id}/snapshots/{snapshot_id}/\""},{"line_number":228,"context_line":"                       \"export-locations/{export_location_id}\","},{"line_number":229,"context_line":"                       controller\u003dself.resources["},{"line_number":230,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":231,"context_line":"                       action\u003d\"snapshot_export_location_show\","},{"line_number":232,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":235,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":236,"context_line":"                       \"{snapshot_instance_id}/export-locations\","},{"line_number":237,"context_line":"                       controller\u003dself.resources["},{"line_number":238,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":239,"context_line":"                       action\u003d\"snapshot_instance_export_location_list\","},{"line_number":240,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":243,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":244,"context_line":"                       \"{snapshot_instance_id}/export-locations/\""},{"line_number":245,"context_line":"                       \"{export_location_id}\","},{"line_number":246,"context_line":"                       controller\u003dself.resources["},{"line_number":247,"context_line":"                           \"share_snapshot_export_locations\"],"},{"line_number":248,"context_line":"                       action\u003d\"snapshot_instance_export_location_show\","},{"line_number":249,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        self.resources[\u0027snapshot_instances\u0027] \u003d ("},{"line_number":252,"context_line":"            share_snapshot_instances.create_resource())"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_928c1f37","line":249,"range":{"start_line":216,"start_character":0,"end_line":249,"end_character":54},"in_reply_to":"1a6eadb0_3c01903a","updated":"2016-12-20 16:10:32.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1e34a926b64c67a0cc4f469de444f37dfbec60ba","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                       action\u003d\"show\","},{"line_number":234,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.resources[\"share_snapshot_instance_export_locations\"] \u003d ("},{"line_number":237,"context_line":"            share_snapshot_instance_export_locations.create_resource())"},{"line_number":238,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":239,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":240,"context_line":"                       \"{snapshot_instance_id}/export-locations\","},{"line_number":241,"context_line":"                       controller\u003dself.resources["},{"line_number":242,"context_line":"                           \"share_snapshot_instance_export_locations\"],"},{"line_number":243,"context_line":"                       action\u003d\"index\","},{"line_number":244,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":247,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":248,"context_line":"                       \"{snapshot_instance_id}/export-locations/\""},{"line_number":249,"context_line":"                       \"{export_location_id}\","},{"line_number":250,"context_line":"                       controller\u003dself.resources["},{"line_number":251,"context_line":"                           \"share_snapshot_instance_export_locations\"],"},{"line_number":252,"context_line":"                       action\u003d\"show\","},{"line_number":253,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.resources[\u0027snapshot_instances\u0027] \u003d ("},{"line_number":256,"context_line":"            share_snapshot_instances.create_resource())"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_756fae92","line":253,"range":{"start_line":236,"start_character":8,"end_line":253,"end_character":54},"updated":"2017-01-12 18:00:14.000000000","message":"Shouldn\u0027t it be after line 260?","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                       action\u003d\"show\","},{"line_number":234,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.resources[\"share_snapshot_instance_export_locations\"] \u003d ("},{"line_number":237,"context_line":"            share_snapshot_instance_export_locations.create_resource())"},{"line_number":238,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":239,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":240,"context_line":"                       \"{snapshot_instance_id}/export-locations\","},{"line_number":241,"context_line":"                       controller\u003dself.resources["},{"line_number":242,"context_line":"                           \"share_snapshot_instance_export_locations\"],"},{"line_number":243,"context_line":"                       action\u003d\"index\","},{"line_number":244,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        mapper.connect(\"snapshot-instance\","},{"line_number":247,"context_line":"                       \"/{project_id}/snapshot-instances/\""},{"line_number":248,"context_line":"                       \"{snapshot_instance_id}/export-locations/\""},{"line_number":249,"context_line":"                       \"{export_location_id}\","},{"line_number":250,"context_line":"                       controller\u003dself.resources["},{"line_number":251,"context_line":"                           \"share_snapshot_instance_export_locations\"],"},{"line_number":252,"context_line":"                       action\u003d\"show\","},{"line_number":253,"context_line":"                       conditions\u003d{\"method\": [\"GET\"]})"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.resources[\u0027snapshot_instances\u0027] \u003d ("},{"line_number":256,"context_line":"            share_snapshot_instances.create_resource())"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_89cbb852","line":253,"range":{"start_line":236,"start_character":8,"end_line":253,"end_character":54},"in_reply_to":"9a57fde8_756fae92","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"}],"manila/api/v2/share_snapshot_export_locations.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"1a6eadb0_5cfe4c39","updated":"2016-12-18 19:26:24.000000000","message":"see comment in the router file","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"1a6eadb0_966cf39d","in_reply_to":"1a6eadb0_5cfe4c39","updated":"2016-12-20 16:10:32.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        db_api.share_snapshot_get(context, snapshot_id)"},{"line_number":63,"context_line":"        return self._show(context, export_location_id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":66,"context_line":"    def snapshot_instance_export_location_list(self, req,"},{"line_number":67,"context_line":"                                               snapshot_instance_id):"},{"line_number":68,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":69,"context_line":"        return self._list(context, snapshot_instance_id\u003dsnapshot_instance_id)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":72,"context_line":"    def snapshot_instance_export_location_show(self, req, snapshot_instance_id,"},{"line_number":73,"context_line":"                                               export_location_id):"},{"line_number":74,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":75,"context_line":"        db_api.share_snapshot_instance_get(context, snapshot_instance_id)"},{"line_number":76,"context_line":"        return self._show(context, export_location_id)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def create_resource():"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_bffd920a","line":76,"range":{"start_line":65,"start_character":0,"end_line":76,"end_character":54},"updated":"2016-12-18 19:26:24.000000000","message":"this needs to be limited to administrators. Please add these (and the above APIs) to policy.json and use wsgi.Controller.authorize() to control access.","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        db_api.share_snapshot_get(context, snapshot_id)"},{"line_number":63,"context_line":"        return self._show(context, export_location_id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":66,"context_line":"    def snapshot_instance_export_location_list(self, req,"},{"line_number":67,"context_line":"                                               snapshot_instance_id):"},{"line_number":68,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":69,"context_line":"        return self._list(context, snapshot_instance_id\u003dsnapshot_instance_id)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":72,"context_line":"    def snapshot_instance_export_location_show(self, req, snapshot_instance_id,"},{"line_number":73,"context_line":"                                               export_location_id):"},{"line_number":74,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":75,"context_line":"        db_api.share_snapshot_instance_get(context, snapshot_instance_id)"},{"line_number":76,"context_line":"        return self._show(context, export_location_id)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def create_resource():"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_b6500fd6","line":76,"range":{"start_line":65,"start_character":0,"end_line":76,"end_character":54},"in_reply_to":"1a6eadb0_bffd920a","updated":"2016-12-20 16:10:32.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"dd6edefd4e4967075e5e1cf6eb7d3d5eb1296287","unresolved":false,"context_lines":[{"line_number":26,"context_line":"            share_snapshot_export_locations.ViewBuilder)"},{"line_number":27,"context_line":"        self.resource_name \u003d \u0027share_snapshot_export_location\u0027"},{"line_number":28,"context_line":"        super(self.__class__, self).__init__()"},{"line_number":29,"context_line":"        self.share_api \u003d share.API()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":32,"context_line":"    @wsgi.Controller.authorize"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba5201f7_c37adb76","line":29,"range":{"start_line":29,"start_character":9,"end_line":29,"end_character":36},"updated":"2017-01-05 11:35:48.000000000","message":"this is not being used anywhere","commit_id":"a48b6d9037daed39e4e54031f85b0a1524953394"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1e34a926b64c67a0cc4f469de444f37dfbec60ba","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    @wsgi.Controller.authorize"},{"line_number":46,"context_line":"    def show(self, req, snapshot_id, export_location_id):"},{"line_number":47,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":48,"context_line":"        db_api.share_snapshot_get(context, snapshot_id)"},{"line_number":49,"context_line":"        export_location \u003d db_api.share_snapshot_instance_export_location_get("},{"line_number":50,"context_line":"            context, export_location_id)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_34999f6f","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":55},"updated":"2017-01-12 18:00:14.000000000","message":"Not Found case should be handled properly. For example like we do it here:\n\nhttps://github.com/openstack/manila/blob/master/manila/api/v2/share_export_locations.py\n\nor here:\n\nhttps://github.com/openstack/manila/blob/31a19b1f/manila/api/v2/share_instances.py#L89-L92\n\nSame above and in second module.","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    @wsgi.Controller.authorize"},{"line_number":46,"context_line":"    def show(self, req, snapshot_id, export_location_id):"},{"line_number":47,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":48,"context_line":"        db_api.share_snapshot_get(context, snapshot_id)"},{"line_number":49,"context_line":"        export_location \u003d db_api.share_snapshot_instance_export_location_get("},{"line_number":50,"context_line":"            context, export_location_id)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_e4b54131","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":55},"in_reply_to":"9a57fde8_34999f6f","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def index(self, req, snapshot_id):"},{"line_number":37,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":38,"context_line":"        snapshot \u003d self._verify_snapshot(context, snapshot_id)"},{"line_number":39,"context_line":"        instances \u003d snapshot.instances"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        export_locations \u003d []"},{"line_number":42,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_642539aa","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":17},"updated":"2017-01-19 12:03:57.000000000","message":"You use it only once. Don\u0027t see any need in additional alias.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def index(self, req, snapshot_id):"},{"line_number":37,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":38,"context_line":"        snapshot \u003d self._verify_snapshot(context, snapshot_id)"},{"line_number":39,"context_line":"        instances \u003d snapshot.instances"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        export_locations \u003d []"},{"line_number":42,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_7a3f9225","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":17},"in_reply_to":"5a3905b3_642539aa","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        instances \u003d snapshot.instances"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        export_locations \u003d []"},{"line_number":42,"context_line":"        for instance in instances:"},{"line_number":43,"context_line":"            si_els \u003d db_api.share_snapshot_instance_export_locations_get("},{"line_number":44,"context_line":"                context, instance[\u0027id\u0027])"},{"line_number":45,"context_line":"            export_locations.extend(si_els)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_843a25cc","line":42,"range":{"start_line":42,"start_character":24,"end_line":42,"end_character":33},"updated":"2017-01-19 12:03:57.000000000","message":"Use here \"snapshot.instances\" and remove line 39.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        instances \u003d snapshot.instances"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        export_locations \u003d []"},{"line_number":42,"context_line":"        for instance in instances:"},{"line_number":43,"context_line":"            si_els \u003d db_api.share_snapshot_instance_export_locations_get("},{"line_number":44,"context_line":"                context, instance[\u0027id\u0027])"},{"line_number":45,"context_line":"            export_locations.extend(si_els)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_9a3c3e31","line":42,"range":{"start_line":42,"start_character":24,"end_line":42,"end_character":33},"in_reply_to":"5a3905b3_843a25cc","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        export_locations \u003d []"},{"line_number":42,"context_line":"        for instance in instances:"},{"line_number":43,"context_line":"            si_els \u003d db_api.share_snapshot_instance_export_locations_get("},{"line_number":44,"context_line":"                context, instance[\u0027id\u0027])"},{"line_number":45,"context_line":"            export_locations.extend(si_els)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_647379b2","line":43,"range":{"start_line":43,"start_character":28,"end_line":43,"end_character":72},"updated":"2017-01-19 12:03:57.000000000","message":"According to existing methods naming approach, it should have been called \"share_snapshot_instance_export_locations_get_ALL\".\n\nAlso, you do so for access list of share snapshots already.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        export_locations \u003d []"},{"line_number":42,"context_line":"        for instance in instances:"},{"line_number":43,"context_line":"            si_els \u003d db_api.share_snapshot_instance_export_locations_get("},{"line_number":44,"context_line":"                context, instance[\u0027id\u0027])"},{"line_number":45,"context_line":"            export_locations.extend(si_els)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_5a8816e8","line":43,"range":{"start_line":43,"start_character":28,"end_line":43,"end_character":72},"in_reply_to":"5a3905b3_647379b2","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        snapshot \u003d self._verify_snapshot(context, snapshot_id)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        export_locations \u003d []"},{"line_number":41,"context_line":"        for instance in snapshot.instances:"},{"line_number":42,"context_line":"            si_els \u003d db_api.share_snapshot_instance_export_locations_get_all("},{"line_number":43,"context_line":"                context, instance[\u0027id\u0027])"},{"line_number":44,"context_line":"            export_locations.extend(si_els)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        return self._view_builder.list_export_locations(req, export_locations)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2a3a98cc","line":44,"range":{"start_line":41,"start_character":0,"end_line":44,"end_character":43},"updated":"2017-01-23 02:17:58.000000000","message":"this should be a property in the snapshot model, like:\n\nhttps://github.com/openstack/manila/blob/0970eb6/manila/db/sqlalchemy/models.py#L211","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        snapshot \u003d self._verify_snapshot(context, snapshot_id)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        export_locations \u003d []"},{"line_number":41,"context_line":"        for instance in snapshot.instances:"},{"line_number":42,"context_line":"            si_els \u003d db_api.share_snapshot_instance_export_locations_get_all("},{"line_number":43,"context_line":"                context, instance[\u0027id\u0027])"},{"line_number":44,"context_line":"            export_locations.extend(si_els)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        return self._view_builder.list_export_locations(req, export_locations)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_39a586a1","line":44,"range":{"start_line":41,"start_character":0,"end_line":44,"end_character":43},"in_reply_to":"5a3905b3_2a3a98cc","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def show(self, req, snapshot_id, export_location_id):"},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":52,"context_line":"        self._verify_snapshot(context, snapshot_id)"},{"line_number":53,"context_line":"        export_location \u003d db_api.share_snapshot_instance_export_location_get("},{"line_number":54,"context_line":"            context, export_location_id)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return self._view_builder.detail_export_location(req, export_location)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_4a3364f6","line":54,"range":{"start_line":53,"start_character":0,"end_line":54,"end_character":40},"updated":"2017-01-23 02:17:58.000000000","message":"same","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def show(self, req, snapshot_id, export_location_id):"},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":52,"context_line":"        self._verify_snapshot(context, snapshot_id)"},{"line_number":53,"context_line":"        export_location \u003d db_api.share_snapshot_instance_export_location_get("},{"line_number":54,"context_line":"            context, export_location_id)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return self._view_builder.detail_export_location(req, export_location)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_1901aa6a","line":54,"range":{"start_line":53,"start_character":0,"end_line":54,"end_character":40},"in_reply_to":"5a3905b3_4a3364f6","updated":"2017-01-23 19:06:08.000000000","message":"I believe this one is more specific. In index, you list all of them that have a valid status. Here you are requests a specific export location, so I guess that should not come from that filtered property, else it could be not in the list, even though the export location exists.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/api/v2/share_snapshot_instance_export_locations.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":38,"context_line":"        instance \u003d self._verify_snapshot_instance("},{"line_number":39,"context_line":"            context, snapshot_instance_id)"},{"line_number":40,"context_line":"        export_locations \u003d db_api.share_snapshot_instance_export_locations_get("},{"line_number":41,"context_line":"            context, instance[\u0027id\u0027])"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        return self._view_builder.list_export_locations(req, export_locations)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_a493a1a2","line":40,"range":{"start_line":40,"start_character":34,"end_line":40,"end_character":78},"updated":"2017-01-19 12:03:57.000000000","message":"same as in https://review.openstack.org/#/c/345526/44/manila/api/v2/share_snapshot_export_locations.py","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":38,"context_line":"        instance \u003d self._verify_snapshot_instance("},{"line_number":39,"context_line":"            context, snapshot_instance_id)"},{"line_number":40,"context_line":"        export_locations \u003d db_api.share_snapshot_instance_export_locations_get("},{"line_number":41,"context_line":"            context, instance[\u0027id\u0027])"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        return self._view_builder.list_export_locations(req, export_locations)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_ba4e5abf","line":40,"range":{"start_line":40,"start_character":34,"end_line":40,"end_character":78},"in_reply_to":"5a3905b3_a493a1a2","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"}],"manila/api/v2/share_snapshots.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"78e5ed1128c92dcfae5842031227497fbc10d3c6","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _allow(self, req, id, body):"},{"line_number":153,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":154,"context_line":"        access_data \u003d body.get(\u0027allow_access\u0027)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        access_type \u003d access_data[\u0027access_type\u0027]"},{"line_number":157,"context_line":"        access_to \u003d access_data[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_2e5e66e9","line":154,"updated":"2016-07-25 06:21:04.000000000","message":"please check the body validation by self.is_valid_body","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _allow(self, req, id, body):"},{"line_number":153,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":154,"context_line":"        access_data \u003d body.get(\u0027allow_access\u0027)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        access_type \u003d access_data[\u0027access_type\u0027]"},{"line_number":157,"context_line":"        access_to \u003d access_data[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_635494fd","line":154,"in_reply_to":"dada55a8_2e5e66e9","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":154,"context_line":"        access_data \u003d body.get(\u0027allow_access\u0027)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        access_type \u003d access_data[\u0027access_type\u0027]"},{"line_number":157,"context_line":"        access_to \u003d access_data[\u0027access_to\u0027]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        common.validate_access(access_type, access_to)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_3506c920","line":157,"range":{"start_line":156,"start_character":0,"end_line":157,"end_character":44},"updated":"2016-07-25 01:15:50.000000000","message":"Please validate that these keys are present and return HTTPBadRequest, 400 if not present","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":154,"context_line":"        access_data \u003d body.get(\u0027allow_access\u0027)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        access_type \u003d access_data[\u0027access_type\u0027]"},{"line_number":157,"context_line":"        access_to \u003d access_data[\u0027access_to\u0027]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        common.validate_access(access_type, access_to)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_43599034","line":157,"range":{"start_line":156,"start_character":0,"end_line":157,"end_character":44},"in_reply_to":"dada55a8_3506c920","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        common.validate_access(access_type, access_to)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        access \u003d self.share_api.snapshot_allow_access("},{"line_number":164,"context_line":"            context, snapshot, access_type, access_to)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_437d111b","line":161,"range":{"start_line":161,"start_character":7,"end_line":161,"end_character":59},"updated":"2016-07-26 18:41:59.000000000","message":"I may be wrong, but I recommend double check if you don\u0027t have to capture exception.NotFound and raise webob.exc.HTTPNotFound() here. I remember someone uploading a patch that touched this in a base class. Disregard this commend if you already checked this.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        common.validate_access(access_type, access_to)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        access \u003d self.share_api.snapshot_allow_access("},{"line_number":164,"context_line":"            context, snapshot, access_type, access_to)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_ec8d117d","line":161,"range":{"start_line":161,"start_character":7,"end_line":161,"end_character":59},"in_reply_to":"dada55a8_437d111b","updated":"2016-08-01 17:48:24.000000000","message":"I tested, no need. Thanks.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        access \u003d self.share_api.snapshot_allow_access("},{"line_number":164,"context_line":"            context, snapshot, access_type, access_to)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        return {\u0027access\u0027: access}"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _deny(self, req, id, body):"},{"line_number":169,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_70fe8f06","line":166,"range":{"start_line":166,"start_character":15,"end_line":166,"end_character":33},"updated":"2016-07-25 01:15:50.000000000","message":"Channel through a view builder.. share access APIs not doing this is an undesirable bug... because we won\u0027t be able to control what goes out the API if some key gets added in the database.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        access \u003d self.share_api.snapshot_allow_access("},{"line_number":164,"context_line":"            context, snapshot, access_type, access_to)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        return {\u0027access\u0027: access}"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _deny(self, req, id, body):"},{"line_number":169,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_472bcf82","line":166,"range":{"start_line":166,"start_character":15,"end_line":166,"end_character":33},"in_reply_to":"dada55a8_70fe8f06","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            context, snapshot, access_type, access_to)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        return {\u0027access\u0027: access}"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _deny(self, req, id, body):"},{"line_number":169,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_50038b0d","line":167,"range":{"start_line":167,"start_character":0,"end_line":167,"end_character":0},"updated":"2016-07-25 01:15:50.000000000","message":"The response code should be 202. Not 200. The share access API not doing this is a bug... https://specs.openstack.org/openstack/api-wg/guidelines/http.html#xx-success-codes","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            context, snapshot, access_type, access_to)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        return {\u0027access\u0027: access}"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _deny(self, req, id, body):"},{"line_number":169,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_ccb80d14","line":167,"range":{"start_line":167,"start_character":0,"end_line":167,"end_character":0},"in_reply_to":"dada55a8_50038b0d","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"78e5ed1128c92dcfae5842031227497fbc10d3c6","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def _deny(self, req, id, body):"},{"line_number":169,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        access_id \u003d body.get(\u0027deny_access\u0027)[\u0027access_id\u0027]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_ce150ae6","line":171,"range":{"start_line":171,"start_character":20,"end_line":171,"end_character":24},"updated":"2016-07-25 06:21:04.000000000","message":"Check body validation by is_valid_body.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def _deny(self, req, id, body):"},{"line_number":169,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        access_id \u003d body.get(\u0027deny_access\u0027)[\u0027access_id\u0027]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_551c1d77","line":171,"range":{"start_line":171,"start_character":20,"end_line":171,"end_character":56},"updated":"2016-07-25 01:15:50.000000000","message":"If there is no access_id, this will raise a KeyError, resulting in a HTTPInternalServerError, 500 to the client; but it should really be a HTTPBadRequest, 400..","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def _deny(self, req, id, body):"},{"line_number":169,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        access_id \u003d body.get(\u0027deny_access\u0027)[\u0027access_id\u0027]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_cc700d43","line":171,"range":{"start_line":171,"start_character":20,"end_line":171,"end_character":24},"in_reply_to":"dada55a8_ce150ae6","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":175,"context_line":"            if access.share_snapshot_id !\u003d id:"},{"line_number":176,"context_line":"                raise exception.NotFound()"},{"line_number":177,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":178,"context_line":"        except exception.NotFound as error:"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_f039dfd9","line":175,"range":{"start_line":175,"start_character":21,"end_line":175,"end_character":22},"updated":"2016-07-25 01:15:50.000000000","message":"better to use a dict reference..","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":175,"context_line":"            if access.share_snapshot_id !\u003d id:"},{"line_number":176,"context_line":"                raise exception.NotFound()"},{"line_number":177,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":178,"context_line":"        except exception.NotFound as error:"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_2c90c942","line":175,"range":{"start_line":175,"start_character":21,"end_line":175,"end_character":22},"in_reply_to":"dada55a8_f039dfd9","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"78e5ed1128c92dcfae5842031227497fbc10d3c6","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":175,"context_line":"            if access.share_snapshot_id !\u003d id:"},{"line_number":176,"context_line":"                raise exception.NotFound()"},{"line_number":177,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":178,"context_line":"        except exception.NotFound as error:"},{"line_number":179,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dsix.text_type(error))"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_2e2ca649","line":176,"updated":"2016-07-25 06:21:04.000000000","message":"Suggest including a meaningful message so that can tell what was not found.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":175,"context_line":"            if access.share_snapshot_id !\u003d id:"},{"line_number":176,"context_line":"                raise exception.NotFound()"},{"line_number":177,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":178,"context_line":"        except exception.NotFound as error:"},{"line_number":179,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dsix.text_type(error))"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_8e5d947b","line":176,"in_reply_to":"dada55a8_2e2ca649","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":175,"context_line":"            if access.share_snapshot_id !\u003d id:"},{"line_number":176,"context_line":"                raise exception.NotFound()"},{"line_number":177,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":178,"context_line":"        except exception.NotFound as error:"},{"line_number":179,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dsix.text_type(error))"},{"line_number":180,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_f040bf37","line":177,"range":{"start_line":177,"start_character":12,"end_line":177,"end_character":63},"updated":"2016-07-25 01:15:50.000000000","message":"Please refactor this like this:\n\ni. Get the snapshot, if it doesn\u0027t exist, you return HTTPNotFound. \nii. Get the access_rule for the given snapshot and the access_id specified, if it doesn\u0027t exist, you should return HTTPBadRequest.. \n\nThe Access ID is part of the body, not the URI, so returning HTTPNotFound would be inappropriate..","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":175,"context_line":"            if access.share_snapshot_id !\u003d id:"},{"line_number":176,"context_line":"                raise exception.NotFound()"},{"line_number":177,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":178,"context_line":"        except exception.NotFound as error:"},{"line_number":179,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dsix.text_type(error))"},{"line_number":180,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_57230a58","line":177,"range":{"start_line":177,"start_character":12,"end_line":177,"end_character":63},"in_reply_to":"dada55a8_f040bf37","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    def _access_list(self, req, id, body):"},{"line_number":184,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":187,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":188,"context_line":"        return {\u0027snapshot_access_list\u0027: access_list}"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_43cb5153","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":59},"updated":"2016-07-26 18:41:59.000000000","message":"same as above","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    def _access_list(self, req, id, body):"},{"line_number":184,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":187,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":188,"context_line":"        return {\u0027snapshot_access_list\u0027: access_list}"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_771cb713","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":59},"in_reply_to":"dada55a8_43cb5153","updated":"2016-08-01 17:48:24.000000000","message":"Same answer :)","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":187,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":188,"context_line":"        return {\u0027snapshot_access_list\u0027: access_list}"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.6\u0027)"},{"line_number":191,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_101ab36e","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":52},"updated":"2016-07-25 01:15:50.000000000","message":"Channel through a view builder..","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":187,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":188,"context_line":"        return {\u0027snapshot_access_list\u0027: access_list}"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.6\u0027)"},{"line_number":191,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_271e9b63","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":52},"in_reply_to":"dada55a8_03e4b9dd","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":187,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":188,"context_line":"        return {\u0027snapshot_access_list\u0027: access_list}"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.6\u0027)"},{"line_number":191,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_03e4b9dd","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":52},"in_reply_to":"dada55a8_101ab36e","updated":"2016-07-26 18:41:59.000000000","message":"+1, this will handle the list being empty","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":228,"context_line":"        return self._deny(req, id, body)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    @wsgi.Controller.api_version(\u00272.19\u0027)"},{"line_number":231,"context_line":"    @wsgi.action(\u0027access_list\u0027)"},{"line_number":232,"context_line":"    def access_list(self, req, id, body\u003dNone):"},{"line_number":233,"context_line":"        return self._access_list(req, id, body)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"def create_resource():"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_0b8d627b","line":233,"range":{"start_line":230,"start_character":0,"end_line":233,"end_character":47},"updated":"2016-07-25 01:15:50.000000000","message":"This API does not perform any action on any object/s. It should not be a HTTP POST. I understand that\u0027s how share access has been implemented; but that\u0027s a bug in itself :(\n\nLet\u0027s make this a GET and worry about changing share access as a microversioned API change.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":228,"context_line":"        return self._deny(req, id, body)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    @wsgi.Controller.api_version(\u00272.19\u0027)"},{"line_number":231,"context_line":"    @wsgi.action(\u0027access_list\u0027)"},{"line_number":232,"context_line":"    def access_list(self, req, id, body\u003dNone):"},{"line_number":233,"context_line":"        return self._access_list(req, id, body)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"def create_resource():"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_07c81e73","line":233,"range":{"start_line":230,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"dada55a8_0b8d627b","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if not (body and self.is_valid_body(body, \u0027allow_access\u0027)):"},{"line_number":165,"context_line":"            msg \u003d _(\"Access data not found in request body.\")"},{"line_number":166,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        access_data \u003d body.get(\u0027allow_access\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_49afb47c","line":165,"range":{"start_line":165,"start_character":21,"end_line":165,"end_character":61},"updated":"2016-08-12 00:39:32.000000000","message":"you could include the ID here","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6ae85c3f29ca4dbb1d3e85b99392299eb4724cf2","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if not (body and self.is_valid_body(body, \u0027allow_access\u0027)):"},{"line_number":165,"context_line":"            msg \u003d _(\"Access data not found in request body.\")"},{"line_number":166,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        access_data \u003d body.get(\u0027allow_access\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_58ee4db5","line":165,"range":{"start_line":165,"start_character":21,"end_line":165,"end_character":61},"in_reply_to":"9ad45d7e_49afb47c","updated":"2016-08-19 19:28:20.000000000","message":"These messages will get returned by the API, so all the information was just passed by the user. I don\u0027t see why we should include not needed information like IDs here. Besides, no API do what you suggested.","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        common.validate_access(access_type, access_to)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            access \u003d self.share_api.snapshot_allow_access("}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_3849e031","line":179,"range":{"start_line":179,"start_character":7,"end_line":179,"end_character":18},"updated":"2016-08-02 11:38:42.000000000","message":"If the snapshot could not be found, we need to raise exc.HTTPNotFound()","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6ae85c3f29ca4dbb1d3e85b99392299eb4724cf2","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        common.validate_access(access_type, access_to)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, id)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            access \u003d self.share_api.snapshot_allow_access("}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_78ace98c","line":179,"range":{"start_line":179,"start_character":7,"end_line":179,"end_character":18},"in_reply_to":"bacf61ea_3849e031","updated":"2016-08-19 19:28:20.000000000","message":"get_snapshot method already does that for me.","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if access[\u0027share_snapshot_id\u0027] !\u003d snapshot[\u0027id\u0027]:"},{"line_number":207,"context_line":"            msg \u003d _(\"Access rule not found for given snapshot\")"},{"line_number":208,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_09077c82","line":207,"range":{"start_line":207,"start_character":22,"end_line":207,"end_character":56},"updated":"2016-08-12 00:39:32.000000000","message":"which given snapshot?","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6ae85c3f29ca4dbb1d3e85b99392299eb4724cf2","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if access[\u0027share_snapshot_id\u0027] !\u003d snapshot[\u0027id\u0027]:"},{"line_number":207,"context_line":"            msg \u003d _(\"Access rule not found for given snapshot\")"},{"line_number":208,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_98e0c5ce","line":207,"range":{"start_line":207,"start_character":22,"end_line":207,"end_character":56},"in_reply_to":"9ad45d7e_09077c82","updated":"2016-08-19 19:28:20.000000000","message":"Same.","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":249,"context_line":"        return self._unmanage(req, id, body)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @wsgi.Controller.api_version(\u00272.20\u0027)"},{"line_number":252,"context_line":"    @wsgi.action(\u0027allow_access\u0027)"},{"line_number":253,"context_line":"    @wsgi.response(202)"},{"line_number":254,"context_line":"    def allow_access(self, req, id, body\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_917aefef","line":251,"range":{"start_line":251,"start_character":34,"end_line":251,"end_character":38},"updated":"2016-11-17 17:39:41.000000000","message":"2.23","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":249,"context_line":"        return self._unmanage(req, id, body)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @wsgi.Controller.api_version(\u00272.20\u0027)"},{"line_number":252,"context_line":"    @wsgi.action(\u0027allow_access\u0027)"},{"line_number":253,"context_line":"    @wsgi.response(202)"},{"line_number":254,"context_line":"    def allow_access(self, req, id, body\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_b246a0bd","line":251,"range":{"start_line":251,"start_character":34,"end_line":251,"end_character":38},"in_reply_to":"7a77a97e_917aefef","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    def allow_access(self, req, id, body\u003dNone):"},{"line_number":255,"context_line":"        return self._allow(req, id, body)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @wsgi.Controller.api_version(\u00272.20\u0027)"},{"line_number":258,"context_line":"    @wsgi.action(\u0027deny_access\u0027)"},{"line_number":259,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":260,"context_line":"        return self._deny(req, id, body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_d180e7c1","line":257,"range":{"start_line":257,"start_character":34,"end_line":257,"end_character":38},"updated":"2016-11-17 17:39:41.000000000","message":"2.23","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    def allow_access(self, req, id, body\u003dNone):"},{"line_number":255,"context_line":"        return self._allow(req, id, body)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @wsgi.Controller.api_version(\u00272.20\u0027)"},{"line_number":258,"context_line":"    @wsgi.action(\u0027deny_access\u0027)"},{"line_number":259,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":260,"context_line":"        return self._deny(req, id, body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_f21658a6","line":257,"range":{"start_line":257,"start_character":34,"end_line":257,"end_character":38},"in_reply_to":"7a77a97e_d180e7c1","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":260,"context_line":"        return self._deny(req, id, body)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @wsgi.Controller.api_version(\u00272.20\u0027)"},{"line_number":263,"context_line":"    def access_list(self, req, snapshot_id):"},{"line_number":264,"context_line":"        return self._access_list(req, snapshot_id)"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_116fbf2b","line":262,"range":{"start_line":262,"start_character":34,"end_line":262,"end_character":38},"updated":"2016-11-17 17:39:41.000000000","message":"2.23","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":260,"context_line":"        return self._deny(req, id, body)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @wsgi.Controller.api_version(\u00272.20\u0027)"},{"line_number":263,"context_line":"    def access_list(self, req, snapshot_id):"},{"line_number":264,"context_line":"        return self._access_list(req, snapshot_id)"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_120cb493","line":262,"range":{"start_line":262,"start_character":34,"end_line":262,"end_character":38},"in_reply_to":"7a77a97e_116fbf2b","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    def check_mount_snapshot_support(self, context, snapshot):"},{"line_number":218,"context_line":"        share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":219,"context_line":"        if not share[\u0027mount_snapshot_support\u0027]:"},{"line_number":220,"context_line":"            msg \u003d \"Mounting snapshots is not supported by this backend.\""},{"line_number":221,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def _access_list(self, req, snapshot_id):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_5fef4c1d","line":220,"range":{"start_line":220,"start_character":63,"end_line":220,"end_character":70},"updated":"2016-12-16 12:33:01.000000000","message":"users don\u0027t know about backends, you could say\n\n\"Mounting snapshots is not supported in this share.\"","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    def check_mount_snapshot_support(self, context, snapshot):"},{"line_number":218,"context_line":"        share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":219,"context_line":"        if not share[\u0027mount_snapshot_support\u0027]:"},{"line_number":220,"context_line":"            msg \u003d \"Mounting snapshots is not supported by this backend.\""},{"line_number":221,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def _access_list(self, req, snapshot_id):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_0181e8fa","line":220,"range":{"start_line":220,"start_character":63,"end_line":220,"end_character":70},"in_reply_to":"1a6eadb0_5fef4c1d","updated":"2016-12-16 21:14:09.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    def check_mount_snapshot_support(self, context, snapshot):"},{"line_number":218,"context_line":"        share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":219,"context_line":"        if not share[\u0027mount_snapshot_support\u0027]:"},{"line_number":220,"context_line":"            msg \u003d \"Mounting snapshots is not supported in this share.\""},{"line_number":221,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def _access_list(self, req, snapshot_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_fc42b867","line":220,"range":{"start_line":220,"start_character":19,"end_line":220,"end_character":69},"updated":"2016-12-18 19:26:24.000000000","message":"Users *may* be confused by this message. They\u0027re requesting access to a snapshot, but the error message is about mounting. How about:\n\n\"Cannot control access to the snapshot since the parent share does not support mounting its snapshots.\"","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    def check_mount_snapshot_support(self, context, snapshot):"},{"line_number":218,"context_line":"        share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":219,"context_line":"        if not share[\u0027mount_snapshot_support\u0027]:"},{"line_number":220,"context_line":"            msg \u003d \"Mounting snapshots is not supported in this share.\""},{"line_number":221,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def _access_list(self, req, snapshot_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_987d23ea","line":220,"range":{"start_line":220,"start_character":19,"end_line":220,"end_character":69},"in_reply_to":"1a6eadb0_fc42b867","updated":"2016-12-20 16:10:32.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, snapshot_id)"},{"line_number":227,"context_line":"        self.check_mount_snapshot_support(context, snapshot)"},{"line_number":228,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        return self._view_builder.detail_list_access(access_list)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_dc1b3c7f","line":227,"range":{"start_line":227,"start_character":0,"end_line":227,"end_character":60},"updated":"2016-12-18 19:26:24.000000000","message":"try, except set access_list to []","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, snapshot_id)"},{"line_number":227,"context_line":"        self.check_mount_snapshot_support(context, snapshot)"},{"line_number":228,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        return self._view_builder.detail_list_access(access_list)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_18d833ef","line":227,"range":{"start_line":227,"start_character":0,"end_line":227,"end_character":60},"in_reply_to":"1a6eadb0_dc1b3c7f","updated":"2016-12-20 16:10:32.000000000","message":"wouldn\u0027t this give the idea that it is supported if it does not raise an exception and return an empty list instead?","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":263,"context_line":"    @wsgi.action(\u0027allow_access\u0027)"},{"line_number":264,"context_line":"    @wsgi.response(202)"},{"line_number":265,"context_line":"    def allow_access(self, req, id, body\u003dNone):"},{"line_number":266,"context_line":"        return self._allow(req, id, body)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_df024e09","line":265,"range":{"start_line":265,"start_character":0,"end_line":265,"end_character":47},"updated":"2016-12-18 19:26:24.000000000","message":"@wsgi.Controller.authorize(\u0027allow_access\u0027)","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":263,"context_line":"    @wsgi.action(\u0027allow_access\u0027)"},{"line_number":264,"context_line":"    @wsgi.response(202)"},{"line_number":265,"context_line":"    def allow_access(self, req, id, body\u003dNone):"},{"line_number":266,"context_line":"        return self._allow(req, id, body)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_8496423c","line":265,"range":{"start_line":265,"start_character":0,"end_line":265,"end_character":47},"in_reply_to":"1a6eadb0_df024e09","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":269,"context_line":"    @wsgi.action(\u0027deny_access\u0027)"},{"line_number":270,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":271,"context_line":"        return self._deny(req, id, body)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_1f0da637","line":270,"range":{"start_line":270,"start_character":0,"end_line":270,"end_character":46},"updated":"2016-12-18 19:26:24.000000000","message":"@wsgi.Controller.authorize(\u0027deny_access\u0027)","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":269,"context_line":"    @wsgi.action(\u0027deny_access\u0027)"},{"line_number":270,"context_line":"    def deny_access(self, req, id, body\u003dNone):"},{"line_number":271,"context_line":"        return self._deny(req, id, body)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_a49b3e65","line":270,"range":{"start_line":270,"start_character":0,"end_line":270,"end_character":46},"in_reply_to":"1a6eadb0_1f0da637","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        return self._deny(req, id, body)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":274,"context_line":"    def access_list(self, req, snapshot_id):"},{"line_number":275,"context_line":"        return self._access_list(req, snapshot_id)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_3f126259","line":274,"range":{"start_line":274,"start_character":0,"end_line":274,"end_character":44},"updated":"2016-12-18 19:26:24.000000000","message":"@wsgi.Controller.authorize(\u0027access_list\u0027)\n\n\ni.e, add all of these APIs to policy.json","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        return self._deny(req, id, body)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    @wsgi.Controller.api_version(\u00272.25\u0027)"},{"line_number":274,"context_line":"    def access_list(self, req, snapshot_id):"},{"line_number":275,"context_line":"        return self._access_list(req, snapshot_id)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_e4a1b695","line":274,"range":{"start_line":274,"start_character":0,"end_line":274,"end_character":44},"in_reply_to":"1a6eadb0_3f126259","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        if not (body and self.is_valid_body(body, \u0027snapshot\u0027)):"},{"line_number":135,"context_line":"            msg \u003d _(\"Snapshot entity not found in request body.\")"},{"line_number":136,"context_line":"            raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        data \u003d body[\u0027snapshot\u0027]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        required_parameters \u003d (\u0027share_id\u0027, \u0027provider_location\u0027)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_44267d69","line":137,"updated":"2017-01-19 12:03:57.000000000","message":"Why \"access\" logic is added as part of this \"share_snapshots\" module, but its export locations as separate?\n\nI would like to see export locations be part of this module too. Same for share snapshot instances.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        if not (body and self.is_valid_body(body, \u0027snapshot\u0027)):"},{"line_number":135,"context_line":"            msg \u003d _(\"Snapshot entity not found in request body.\")"},{"line_number":136,"context_line":"            raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        data \u003d body[\u0027snapshot\u0027]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        required_parameters \u003d (\u0027share_id\u0027, \u0027provider_location\u0027)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_7049658b","line":137,"in_reply_to":"5a3905b3_44267d69","updated":"2017-01-19 17:38:02.000000000","message":"we discussed on IRC, we agreed to not do this in the scope of this patch.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        except exception.ShareSnapshotAccessExists as e:"},{"line_number":187,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return self._view_builder.detail_access(access)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def _deny(self, req, id, body):"},{"line_number":192,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_4a1fe4b6","line":189,"range":{"start_line":189,"start_character":48,"end_line":189,"end_character":55},"updated":"2017-01-23 02:17:58.000000000","message":"pass the req object","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        except exception.ShareSnapshotAccessExists as e:"},{"line_number":187,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return self._view_builder.detail_access(access)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def _deny(self, req, id, body):"},{"line_number":192,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_396f462c","line":189,"range":{"start_line":189,"start_character":48,"end_line":189,"end_character":55},"in_reply_to":"5a3905b3_4a1fe4b6","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        access_data \u003d body.get(\u0027deny_access\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        self._validate_parameters(access_data, (\u0027access_id\u0027,))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        access_id \u003d access_data[\u0027access_id\u0027]"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6abae00b","line":200,"range":{"start_line":200,"start_character":0,"end_line":200,"end_character":62},"updated":"2017-01-23 02:17:58.000000000","message":"fix_response\u003dTrue","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        access_data \u003d body.get(\u0027deny_access\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        self._validate_parameters(access_data, (\u0027access_id\u0027,))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        access_id \u003d access_data[\u0027access_id\u0027]"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_b9efb685","line":200,"range":{"start_line":200,"start_character":0,"end_line":200,"end_character":62},"in_reply_to":"5a3905b3_6abae00b","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"},{"line_number":215,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def check_mount_snapshot_support(self, context, snapshot):"},{"line_number":218,"context_line":"        share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":219,"context_line":"        if not share[\u0027mount_snapshot_support\u0027]:"},{"line_number":220,"context_line":"            msg \u003d _(\"Cannot control access to the snapshot %(snap)s since the \""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_cafcb474","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":13},"updated":"2017-01-23 02:17:58.000000000","message":"_check","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"},{"line_number":215,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def check_mount_snapshot_support(self, context, snapshot):"},{"line_number":218,"context_line":"        share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":219,"context_line":"        if not share[\u0027mount_snapshot_support\u0027]:"},{"line_number":220,"context_line":"            msg \u003d _(\"Cannot control access to the snapshot %(snap)s since the \""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_79faae44","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":13},"in_reply_to":"5a3905b3_cafcb474","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        self.check_mount_snapshot_support(context, snapshot)"},{"line_number":231,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        return self._view_builder.detail_list_access(access_list)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.6\u0027)"},{"line_number":236,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_8a7b8cf4","line":233,"range":{"start_line":233,"start_character":52,"end_line":233,"end_character":65},"updated":"2017-01-23 02:17:58.000000000","message":"pass the request object","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        self.check_mount_snapshot_support(context, snapshot)"},{"line_number":231,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        return self._view_builder.detail_list_access(access_list)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.6\u0027)"},{"line_number":236,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_d99ba216","line":233,"range":{"start_line":233,"start_character":52,"end_line":233,"end_character":65},"in_reply_to":"5a3905b3_8a7b8cf4","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"3a4f4a645bc63be581687da962c876165d749cf9","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        if access[\u0027share_snapshot_id\u0027] !\u003d snapshot[\u0027id\u0027]:"},{"line_number":212,"context_line":"            msg \u003d _(\"Access rule not found for given snapshot.\")"},{"line_number":213,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_1fcdd730","line":212,"range":{"start_line":212,"start_character":22,"end_line":212,"end_character":62},"updated":"2017-01-24 09:10:21.000000000","message":"It is wrong message. At first, you raise \"badRequest\", at second you do not make \"search\" to say it is not found. You compare provided value with required.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        access \u003d self.share_api.snapshot_access_get(context, access_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        if access[\u0027share_snapshot_id\u0027] !\u003d snapshot[\u0027id\u0027]:"},{"line_number":212,"context_line":"            msg \u003d _(\"Access rule not found for given snapshot.\")"},{"line_number":213,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        self.share_api.snapshot_deny_access(context, snapshot, access)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_e8a76fa4","line":212,"range":{"start_line":212,"start_character":22,"end_line":212,"end_character":62},"in_reply_to":"5a3905b3_1fcdd730","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"3a4f4a645bc63be581687da962c876165d749cf9","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, snapshot_id)"},{"line_number":231,"context_line":"        self._check_mount_snapshot_support(context, snapshot)"},{"line_number":232,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        return self._view_builder.detail_list_access(req, access_list)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_ffbe4b63","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":61},"updated":"2017-01-24 09:10:21.000000000","message":"Here, you raise \"BadRequest\" for any share that \"does not support this feature\". It is different than \"bad request\". I guess, it should be \"405 Method Not Allowed\".","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        snapshot \u003d self.share_api.get_snapshot(context, snapshot_id)"},{"line_number":231,"context_line":"        self._check_mount_snapshot_support(context, snapshot)"},{"line_number":232,"context_line":"        access_list \u003d self.share_api.snapshot_access_get_all(context, snapshot)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        return self._view_builder.detail_list_access(req, access_list)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_68b8df75","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":61},"in_reply_to":"5a3905b3_ffbe4b63","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d2e50d19828f8c1e78e3223f47b304f695b1cc94","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_b605c514","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"updated":"2017-01-24 12:22:44.000000000","message":"No!\n\n\"If a request is made to a known resource URI, but the HTTP method used for the request is not supported for that resource, the return code should be 405 Method Not Allowed. The response should include the Allow header with the list of accepted request methods for the resource.\"\n\nYou cannot send a message to the client that the verb POST is unsupported. Remember that such requests are cacheable. If a migration is performed after this request has been sent and response cached, and the snapshot now supports mounting, the client cannot discover this until a cache timeout or refresh. \n\nAlso, this is inconsistent with other previous capabilities:\n\nhttps://github.com/openstack/manila/blob/0970eb6/manila/share/api.py#L439\nhttps://github.com/openstack/manila/blob/53539c0/manila/api/v2/shares.py#L68\nhttps://github.com/openstack/manila/blob/53539c0/manila/api/v1/shares.py#L269","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"fc4016423ac9ffefe2cfe71c7e5ddc27f0f639de","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_6a6609ee","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_0743c06c","updated":"2017-01-24 13:32:16.000000000","message":"Goutham,\n\n1) URL changes\n2) logic of raising exception is not reached anymore","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7e1bde8dcc4df76e7e53d6966b6c2b99353d8b54","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_4ce96eb6","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_0c0be6d6","updated":"2017-01-24 12:55:49.000000000","message":"Need to mention that original request was made for \"access_list\" operation, that uses \"GET\" method and is applied to unique URL and always will be the same for it. The fact that the same logic is used for other HTTP methods means, in current case, bug.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9fc1223fd38ddec715ada2f9b68afdf2f764d442","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_c7ec59bd","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_2708bd27","updated":"2017-01-24 13:11:33.000000000","message":"\"What you\u0027re suggesting is we send a 405 on POST.\"\nIt is not the thing I am suggesting. Following question after it is made on your \"suggestion\", not mine.\n\nI requested change on \"access-list\" [1] operation that is \"GET on /snapshots/{snapshot-id}/access-list\" [2].\n\n[1] https://review.openstack.org/#/c/345526/59..60/manila/api/v2/share_snapshots.py\n\n[2] https://review.openstack.org/#/c/345526/60/manila/api/v2/router.py","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9e312812f072ced79cc9661f072640a249ad03a1","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_a7a4ac4a","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_478ce8d9","updated":"2017-01-24 13:28:23.000000000","message":"Why do you combined logic for different methods?","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7bc73f1a39b82d315b6963a5c7d11de1d66bbd9d","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_2708bd27","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_4ce96eb6","updated":"2017-01-24 13:02:53.000000000","message":"\"Need to mention that original request was made for \"access_list\" operation, that uses \"GET\" method and is applied to unique URL and always will be the same for it.\"\n\n* Hmmm, not just access-list, access-allow, access-deny use it too. \n\n\"The fact that the same logic is used for other HTTP methods means, in current case, bug.\"\n\n* Despite the explanation I gave you above??\n\n\n- Yes. the URL is POST on /snapshots/{snapshot_id} or GET on /snapshots/{snapshot-id}/access-list\n\nAs you point out: the resource we\u0027re talking about is /snapshots/{snapshot_id}\n\nWhat all HTTP methods make sense for this resource:\n- GET\n- POST \n- DELETE\n\nWhat you\u0027re suggesting is we send a 405 on POST. How does this make sense when you can actually POST \"force-delete\", \"unmanage\", \"reset-status\"?","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"10224cd322d4191b60fbcd089343c0232c751e59","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_b175cf32","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_51df4b39","updated":"2017-01-24 12:36:22.000000000","message":"How is that an incorrect response?","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1452622278d55bf551465515eb7948e5294606c0","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_51df4b39","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_51f58bea","updated":"2017-01-24 12:35:26.000000000","message":"Goutham Pacha Ravi,\n\nWhat exactly are you proposing? Keep answering incorrect response \"BadRequest\"?\n\nAlso, what do you mean by \"and the snapshot now supports mounting\"? It will be either supported or not in each deployment.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a493aac64fed12cf590b05139b2a72136e0adfb1","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_1034d847","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_6a6609ee","updated":"2017-01-24 14:16:29.000000000","message":"URL does not change - In case of migration Snapshot ID remains the same, instance changes..","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c83b422cfcff01e4fa15316769200ff4bc9dd802","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_f162f73c","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_b175cf32","updated":"2017-01-24 12:40:40.000000000","message":"It is incorrect because \"BadRequest\" is not \"not supported operation for this resource\", it is \"something wrong with data you provided and server does not understand it\". In ur case it does understand but not going to process it.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f1418aa434dfa90422845564e942a1defdf4d53e","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_117f83e0","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_b175cf32","updated":"2017-01-24 12:39:43.000000000","message":"You are aware that:\n* migration of shares with snapshots is supported in Ocata\n* If the parent share previously had a share-type where mountable-snapshots was False and the new share type supports mounting, \"the snapshot now supports mounting\"\n\nAlso, a \"method\" in HTTP lingo is a verb: POST, GET, PUT, ... \nYou cannot use \"methodNotAllowed\" as a response on a URI if you just want to disallow a particular case of the verb\u0027s usage, like in the situation here. \n\nBadRequest is the right response as pointed out in all the other places where we perform such similar checks.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"bc16834f081ce359ef3983b5d5f79cf02372dbed","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_51f58bea","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_b605c514","updated":"2017-01-24 12:29:55.000000000","message":"POST is also used for other \"actions\" on snapshots: reset_status, unmanage, force-delete","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d235de10e41c5db8080783113e34e20e4892258f","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_e7095496","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_c7ec59bd","updated":"2017-01-24 13:24:38.000000000","message":"Valeriy, validation needs to be performed for access-list, access-allow and access-deny, so it would be inconsistent validating only in access-list. I am inclined to moving back to BadRequest based on Goutham\u0027s arguments, as it would solve this problem.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"08e6a1f0551fcc43b1ac08ec165795cefe2ade50","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_0c0be6d6","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_cce1de2b","updated":"2017-01-24 12:50:04.000000000","message":"\"all other existing answer are used incorrectly too.\"\n\nNo. I don\u0027t think so. \n400 is un-cacheable. Also, we have established the pattern of using human readable responses to clarify the usage of the Invalid/badRequest:\n\nAs per RFC2616:\n\n  \"HTTP status codes are extensible. HTTP applications are not required\n   to understand the meaning of all registered status codes, though such\n   understanding is obviously desirable. However, applications MUST\n   understand the class of any status code, as indicated by the first\n   digit, and treat any unrecognized response as being equivalent to the\n   x00 status code of that class, with the exception that an\n   unrecognized response MUST NOT be cached. For example, if an\n   unrecognized status code of 431 is received by the client, it can\n   safely assume that there was something wrong with its request and\n   treat the response as if it had received a 400 status code. In such\n   cases, user agents SHOULD present to the user the entity returned\n   with the response, since that entity is likely to include human-\n   readable information which will explain the unusual status.\"","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7e1bde8dcc4df76e7e53d6966b6c2b99353d8b54","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_2cdc2245","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_cce1de2b","updated":"2017-01-24 12:55:49.000000000","message":"Also, just mentioning that","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"476ef64f026fcb873159fa0d737e2e3a1ba82095","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_0743c06c","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_e7095496","updated":"2017-01-24 13:29:01.000000000","message":"\u0027I requested change on \"access-list\"\u0027\n\nValeriy: What happens when the snapshot is part of a share that is migrated to a share type that now supports mountable snapshots?","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"74299775bf27d343bd468ad31f8579579aca59ce","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_478ce8d9","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_e7095496","updated":"2017-01-24 13:27:55.000000000","message":"Why not separately?","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d1b7dd32119d124f563767c45d998c65ec03b3d8","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_f165971d","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_f162f73c","updated":"2017-01-24 12:43:05.000000000","message":"I do not insist on exactly this answer, I insisnt on not using \"BadRequest\" here. It has different purpose.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"324fcb25f558cbbc89625bb05fb6eb0d70cdc617","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_ec013a06","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_f165971d","updated":"2017-01-24 12:44:37.000000000","message":"And yes, all other existing answer are used incorrectly too.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"37bb8475917d73845fee4b91ec06855a7f7c8caa","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    \"parent share %(share)s does not support mounting its \""},{"line_number":224,"context_line":"                    \"snapshots.\") % {\u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":225,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]}"},{"line_number":226,"context_line":"            raise exc.HTTPMethodNotAllowed(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _access_list(self, req, snapshot_id):"},{"line_number":229,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a3905b3_cce1de2b","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":59},"in_reply_to":"5a3905b3_f165971d","updated":"2017-01-24 12:47:02.000000000","message":"We are limited in the number of HTTP response codes there really are.\nIn the API-WG and in past discussions here in Manila, we\u0027ve toyed with the idea of having custom project-specific error codes to extend the HTTP Error codes for scenarios that we encounter. However, that\u0027s a long term goal, if it ever happens\n\nI understand your objection that BadRequest is touted for \"malformed\" requests. However, it is our consistent response across the project. I don\u0027t understand what\u0027s new or different about this API against our existing ones.","commit_id":"ea23d39590072cefa1c992abe07f40b6ddfac1c9"}],"manila/api/views/share_snapshot_export_locations.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":20,"context_line":"    _collection_name \u003d \"share_snapshot_export_locations\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def detail_export_location(self, export_location):"},{"line_number":23,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_5c080c2e","line":20,"range":{"start_line":20,"start_character":24,"end_line":20,"end_character":55},"updated":"2016-12-18 19:26:24.000000000","message":"what about share_snapshot_instance_export_locations?","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":20,"context_line":"    _collection_name \u003d \"share_snapshot_export_locations\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def detail_export_location(self, export_location):"},{"line_number":23,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_7ed9b356","line":20,"range":{"start_line":20,"start_character":24,"end_line":20,"end_character":55},"in_reply_to":"1a6eadb0_5c080c2e","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"            \u0027export_location\u0027: {"},{"line_number":25,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":26,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":27,"context_line":"                \u0027is_admin_only\u0027: export_location[\u0027is_admin_only\u0027],"},{"line_number":28,"context_line":"                \u0027share_snapshot_instance_id\u0027:"},{"line_number":29,"context_line":"                    export_location[\u0027share_snapshot_instance_id\u0027],"},{"line_number":30,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_9f19b67c","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":66},"updated":"2016-12-18 19:26:24.000000000","message":"if admin-only, then the export location should not be returned to tenants","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":24,"context_line":"            \u0027export_location\u0027: {"},{"line_number":25,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":26,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":27,"context_line":"                \u0027is_admin_only\u0027: export_location[\u0027is_admin_only\u0027],"},{"line_number":28,"context_line":"                \u0027share_snapshot_instance_id\u0027:"},{"line_number":29,"context_line":"                    export_location[\u0027share_snapshot_instance_id\u0027],"},{"line_number":30,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_3e157be4","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":66},"in_reply_to":"1a6eadb0_9f19b67c","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":26,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":27,"context_line":"                \u0027is_admin_only\u0027: export_location[\u0027is_admin_only\u0027],"},{"line_number":28,"context_line":"                \u0027share_snapshot_instance_id\u0027:"},{"line_number":29,"context_line":"                    export_location[\u0027share_snapshot_instance_id\u0027],"},{"line_number":30,"context_line":"            }"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_7f1cda6a","line":29,"range":{"start_line":28,"start_character":16,"end_line":29,"end_character":66},"updated":"2016-12-18 19:26:24.000000000","message":"should only be returned to administrators","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":26,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":27,"context_line":"                \u0027is_admin_only\u0027: export_location[\u0027is_admin_only\u0027],"},{"line_number":28,"context_line":"                \u0027share_snapshot_instance_id\u0027:"},{"line_number":29,"context_line":"                    export_location[\u0027share_snapshot_instance_id\u0027],"},{"line_number":30,"context_line":"            }"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_5ed4f71e","line":29,"range":{"start_line":28,"start_character":16,"end_line":29,"end_character":66},"in_reply_to":"1a6eadb0_7f1cda6a","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1e34a926b64c67a0cc4f469de444f37dfbec60ba","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":20,"context_line":"    _collection_name \u003d \"share_snapshot_export_locations\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def _get_view(self, request, export_location, detail\u003dFalse):"},{"line_number":23,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_7e96a695","line":20,"range":{"start_line":20,"start_character":24,"end_line":20,"end_character":55},"updated":"2017-01-12 18:00:14.000000000","message":"This","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":20,"context_line":"    _collection_name \u003d \"share_snapshot_export_locations\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def _get_view(self, request, export_location, detail\u003dFalse):"},{"line_number":23,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_44e8d5b4","line":20,"range":{"start_line":20,"start_character":24,"end_line":20,"end_character":55},"in_reply_to":"9a57fde8_7e96a695","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1e34a926b64c67a0cc4f469de444f37dfbec60ba","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        result \u003d {"},{"line_number":26,"context_line":"            \u0027export_location\u0027: {"},{"line_number":27,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":28,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":29,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_fecff6b0","line":26,"range":{"start_line":26,"start_character":13,"end_line":26,"end_character":28},"updated":"2017-01-12 18:00:14.000000000","message":"and this are incompatible. For \"show\" and \"list\" commands you use different kind of keys.","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        result \u003d {"},{"line_number":26,"context_line":"            \u0027export_location\u0027: {"},{"line_number":27,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":28,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":29,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_04decd10","line":26,"range":{"start_line":26,"start_character":13,"end_line":26,"end_character":28},"in_reply_to":"9a57fde8_fecff6b0","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        result \u003d {"},{"line_number":26,"context_line":"            \u0027share_snapshot_export_locations\u0027: {"},{"line_number":27,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":28,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":29,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_d0d22c34","line":26,"range":{"start_line":26,"start_character":13,"end_line":26,"end_character":44},"updated":"2017-01-19 12:03:57.000000000","message":"It should be singular.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        result \u003d {"},{"line_number":26,"context_line":"            \u0027share_snapshot_export_locations\u0027: {"},{"line_number":27,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":28,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":29,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_b348372f","line":26,"range":{"start_line":26,"start_character":13,"end_line":26,"end_character":44},"in_reply_to":"5a3905b3_d0d22c34","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            }"},{"line_number":30,"context_line":"        }"},{"line_number":31,"context_line":"        if context.is_admin:"},{"line_number":32,"context_line":"            ss_el \u003d result[\u0027share_snapshot_export_locations\u0027]"},{"line_number":33,"context_line":"            ss_el[\u0027share_snapshot_instance_id\u0027] \u003d ("},{"line_number":34,"context_line":"                export_location[\u0027share_snapshot_instance_id\u0027])"},{"line_number":35,"context_line":"            ss_el[\u0027is_admin_only\u0027] \u003d export_location[\u0027is_admin_only\u0027]"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_10dd9442","line":32,"range":{"start_line":32,"start_character":28,"end_line":32,"end_character":59},"updated":"2017-01-19 12:03:57.000000000","message":"ditto","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            }"},{"line_number":30,"context_line":"        }"},{"line_number":31,"context_line":"        if context.is_admin:"},{"line_number":32,"context_line":"            ss_el \u003d result[\u0027share_snapshot_export_locations\u0027]"},{"line_number":33,"context_line":"            ss_el[\u0027share_snapshot_instance_id\u0027] \u003d ("},{"line_number":34,"context_line":"                export_location[\u0027share_snapshot_instance_id\u0027])"},{"line_number":35,"context_line":"            ss_el[\u0027is_admin_only\u0027] \u003d export_location[\u0027is_admin_only\u0027]"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_934b3b2b","line":32,"range":{"start_line":32,"start_character":28,"end_line":32,"end_character":59},"in_reply_to":"5a3905b3_10dd9442","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        result \u003d {self._collection_name: []}"},{"line_number":48,"context_line":"        for export_location in export_locations:"},{"line_number":49,"context_line":"            if not (not context.is_admin and export_location[\u0027is_admin_only\u0027]):"},{"line_number":50,"context_line":"                result[self._collection_name].append(self._get_view("},{"line_number":51,"context_line":"                    request,"},{"line_number":52,"context_line":"                    export_location)[\u0027share_snapshot_export_locations\u0027])"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_f0a568b5","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":78},"updated":"2017-01-19 12:03:57.000000000","message":"\"Not\" for \"not\"? It will be more readable making it as following:\n\n\"\"\"\nif context.is_admin or not export_location[\u0027is_admin_only\u0027]:\n\"\"\"","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        result \u003d {self._collection_name: []}"},{"line_number":48,"context_line":"        for export_location in export_locations:"},{"line_number":49,"context_line":"            if not (not context.is_admin and export_location[\u0027is_admin_only\u0027]):"},{"line_number":50,"context_line":"                result[self._collection_name].append(self._get_view("},{"line_number":51,"context_line":"                    request,"},{"line_number":52,"context_line":"                    export_location)[\u0027share_snapshot_export_locations\u0027])"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_f3bb9f0c","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":78},"in_reply_to":"5a3905b3_f0a568b5","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            if not (not context.is_admin and export_location[\u0027is_admin_only\u0027]):"},{"line_number":50,"context_line":"                result[self._collection_name].append(self._get_view("},{"line_number":51,"context_line":"                    request,"},{"line_number":52,"context_line":"                    export_location)[\u0027share_snapshot_export_locations\u0027])"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                continue"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_70e4180d","line":52,"range":{"start_line":52,"start_character":38,"end_line":52,"end_character":69},"updated":"2017-01-19 12:03:57.000000000","message":"ditto","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            if not (not context.is_admin and export_location[\u0027is_admin_only\u0027]):"},{"line_number":50,"context_line":"                result[self._collection_name].append(self._get_view("},{"line_number":51,"context_line":"                    request,"},{"line_number":52,"context_line":"                    export_location)[\u0027share_snapshot_export_locations\u0027])"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                continue"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_333c4793","line":52,"range":{"start_line":52,"start_character":38,"end_line":52,"end_character":69},"in_reply_to":"5a3905b3_70e4180d","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        result \u003d {"},{"line_number":26,"context_line":"            \u0027share_snapshot_export_location\u0027: {"},{"line_number":27,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":28,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":29,"context_line":"            }"},{"line_number":30,"context_line":"        }"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2a3ff824","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":48},"updated":"2017-01-23 02:17:58.000000000","message":"missing links\n\n\u0027links\u0027: self._get_links(request, export_location[\u0027id\u0027])","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        result \u003d {"},{"line_number":26,"context_line":"            \u0027share_snapshot_export_location\u0027: {"},{"line_number":27,"context_line":"                \u0027id\u0027: export_location[\u0027id\u0027],"},{"line_number":28,"context_line":"                \u0027path\u0027: export_location[\u0027path\u0027],"},{"line_number":29,"context_line":"            }"},{"line_number":30,"context_line":"        }"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_7b79b8c7","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":48},"in_reply_to":"5a3905b3_2a3ff824","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/api/views/share_snapshots.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        snapshot_dict[\u0027user_id\u0027] \u003d snapshot.get(\u0027user_id\u0027)"},{"line_number":76,"context_line":"        snapshot_dict[\u0027project_id\u0027] \u003d snapshot.get(\u0027project_id\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @common.ViewBuilder.versioned_method(\"2.20\")"},{"line_number":79,"context_line":"    def add_export_location(self, context, snapshot_dict, snapshot):"},{"line_number":80,"context_line":"        export_location \u003d snapshot.get(\u0027export_location\u0027)"},{"line_number":81,"context_line":"        snapshot_dict[\u0027export_location\u0027] \u003d export_location"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _list_view(self, func, request, snapshots):"},{"line_number":84,"context_line":"        \"\"\"Provide a view for a list of share snapshots.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_29d360d6","line":81,"range":{"start_line":78,"start_character":4,"end_line":81,"end_character":58},"updated":"2016-08-12 00:39:32.000000000","message":"where are you handling admin_only export locations to be shown only to admins? please see export location view","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        snapshot_dict[\u0027user_id\u0027] \u003d snapshot.get(\u0027user_id\u0027)"},{"line_number":76,"context_line":"        snapshot_dict[\u0027project_id\u0027] \u003d snapshot.get(\u0027project_id\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @common.ViewBuilder.versioned_method(\"2.20\")"},{"line_number":79,"context_line":"    def add_export_location(self, context, snapshot_dict, snapshot):"},{"line_number":80,"context_line":"        export_location \u003d snapshot.get(\u0027export_location\u0027)"},{"line_number":81,"context_line":"        snapshot_dict[\u0027export_location\u0027] \u003d export_location"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _list_view(self, func, request, snapshots):"},{"line_number":84,"context_line":"        \"\"\"Provide a view for a list of share snapshots.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_69d9d8f2","line":81,"range":{"start_line":78,"start_character":4,"end_line":81,"end_character":58},"updated":"2016-08-12 00:39:32.000000000","message":"where are you handling admin_only export locations to be shown only to admins? please see export location view","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def detail_access(self, access):"},{"line_number":92,"context_line":"        return {"},{"line_number":93,"context_line":"            \u0027access\u0027: {"},{"line_number":94,"context_line":"                \u0027id\u0027: access[\u0027id\u0027],"},{"line_number":95,"context_line":"                \u0027access_type\u0027: access[\u0027access_type\u0027],"},{"line_number":96,"context_line":"                \u0027access_to\u0027: access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_1083d4cd","line":93,"range":{"start_line":93,"start_character":13,"end_line":93,"end_character":19},"updated":"2017-01-19 12:03:57.000000000","message":"This","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def detail_access(self, access):"},{"line_number":92,"context_line":"        return {"},{"line_number":93,"context_line":"            \u0027access\u0027: {"},{"line_number":94,"context_line":"                \u0027id\u0027: access[\u0027id\u0027],"},{"line_number":95,"context_line":"                \u0027access_type\u0027: access[\u0027access_type\u0027],"},{"line_number":96,"context_line":"                \u0027access_to\u0027: access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_93cedb81","line":93,"range":{"start_line":93,"start_character":13,"end_line":93,"end_character":19},"in_reply_to":"5a3905b3_1083d4cd","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"719c512ccb22b8244cb037729dad183991d0a22e","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def detail_list_access(self, access_list):"},{"line_number":102,"context_line":"        return {"},{"line_number":103,"context_line":"            \u0027snapshot_access_list\u0027:"},{"line_number":104,"context_line":"                [access[\u0027access\u0027] for access in map("},{"line_number":105,"context_line":"                    self.detail_access, access_list)]"},{"line_number":106,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_70517862","line":103,"range":{"start_line":103,"start_character":13,"end_line":103,"end_character":33},"updated":"2017-01-19 12:03:57.000000000","message":"and this are incompatible.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def detail_list_access(self, access_list):"},{"line_number":102,"context_line":"        return {"},{"line_number":103,"context_line":"            \u0027snapshot_access_list\u0027:"},{"line_number":104,"context_line":"                [access[\u0027access\u0027] for access in map("},{"line_number":105,"context_line":"                    self.detail_access, access_list)]"},{"line_number":106,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_d3c86377","line":103,"range":{"start_line":103,"start_character":13,"end_line":103,"end_character":33},"in_reply_to":"5a3905b3_70517862","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return snapshots_dict"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def detail_access(self, access):"},{"line_number":92,"context_line":"        return {"},{"line_number":93,"context_line":"            \u0027snapshot_access\u0027: {"},{"line_number":94,"context_line":"                \u0027id\u0027: access[\u0027id\u0027],"},{"line_number":95,"context_line":"                \u0027access_type\u0027: access[\u0027access_type\u0027],"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_0a295ce6","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":14},"updated":"2017-01-23 02:17:58.000000000","message":"assign to a variable, return later. makes it easier to extend..","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return snapshots_dict"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def detail_access(self, access):"},{"line_number":92,"context_line":"        return {"},{"line_number":93,"context_line":"            \u0027snapshot_access\u0027: {"},{"line_number":94,"context_line":"                \u0027id\u0027: access[\u0027id\u0027],"},{"line_number":95,"context_line":"                \u0027access_type\u0027: access[\u0027access_type\u0027],"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_14297137","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":14},"in_reply_to":"5a3905b3_0a295ce6","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/api/views/shares.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        share_dict[\u0027create_share_from_snapshot_support\u0027] \u003d share.get("},{"line_number":150,"context_line":"            \u0027create_share_from_snapshot_support\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    @common.ViewBuilder.versioned_method(\"2.24\")"},{"line_number":153,"context_line":"    def add_mount_snapshot_support_field(self, context, share_dict, share):"},{"line_number":154,"context_line":"        share_dict[\u0027mount_snapshot_support\u0027] \u003d share.get("},{"line_number":155,"context_line":"            \u0027mount_snapshot_support\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_fc6106d4","line":152,"range":{"start_line":152,"start_character":44,"end_line":152,"end_character":46},"updated":"2016-12-16 12:33:01.000000000","message":"25","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        share_dict[\u0027create_share_from_snapshot_support\u0027] \u003d share.get("},{"line_number":150,"context_line":"            \u0027create_share_from_snapshot_support\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    @common.ViewBuilder.versioned_method(\"2.24\")"},{"line_number":153,"context_line":"    def add_mount_snapshot_support_field(self, context, share_dict, share):"},{"line_number":154,"context_line":"        share_dict[\u0027mount_snapshot_support\u0027] \u003d share.get("},{"line_number":155,"context_line":"            \u0027mount_snapshot_support\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_8175f832","line":152,"range":{"start_line":152,"start_character":44,"end_line":152,"end_character":46},"in_reply_to":"1a6eadb0_fc6106d4","updated":"2016-12-16 21:14:09.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"}],"manila/common/constants.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":35,"context_line":"STATUS_SHRINKING_POSSIBLE_DATA_LOSS_ERROR \u003d ("},{"line_number":36,"context_line":"    \u0027shrinking_possible_data_loss_error\u0027"},{"line_number":37,"context_line":")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"STATUS_REPLICATION_CHANGE \u003d \u0027replication_change\u0027"},{"line_number":40,"context_line":"STATUS_RESTORING \u003d \u0027restoring\u0027"},{"line_number":41,"context_line":"STATUS_REVERTING \u003d \u0027reverting\u0027"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2a6d3831","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":0},"updated":"2017-01-23 02:17:58.000000000","message":"gratuitous change","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"STATUS_SHRINKING_POSSIBLE_DATA_LOSS_ERROR \u003d ("},{"line_number":36,"context_line":"    \u0027shrinking_possible_data_loss_error\u0027"},{"line_number":37,"context_line":")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"STATUS_REPLICATION_CHANGE \u003d \u0027replication_change\u0027"},{"line_number":40,"context_line":"STATUS_RESTORING \u003d \u0027restoring\u0027"},{"line_number":41,"context_line":"STATUS_REVERTING \u003d \u0027reverting\u0027"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_14e091f9","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":0},"in_reply_to":"5a3905b3_2a6d3831","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    ACCESS_STATE_DENYING,"},{"line_number":66,"context_line":"    ACCESS_STATE_ACTIVE,"},{"line_number":67,"context_line":"    ACCESS_STATE_ERROR,"},{"line_number":68,"context_line":")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"TASK_STATE_MIGRATION_STARTING \u003d \u0027migration_starting\u0027"},{"line_number":71,"context_line":"TASK_STATE_MIGRATION_IN_PROGRESS \u003d \u0027migration_in_progress\u0027"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2a545851","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":1},"updated":"2017-01-23 02:17:58.000000000","message":"where is this used? you could use it as the enum value in models.py","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    ACCESS_STATE_DENYING,"},{"line_number":66,"context_line":"    ACCESS_STATE_ACTIVE,"},{"line_number":67,"context_line":"    ACCESS_STATE_ERROR,"},{"line_number":68,"context_line":")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"TASK_STATE_MIGRATION_STARTING \u003d \u0027migration_starting\u0027"},{"line_number":71,"context_line":"TASK_STATE_MIGRATION_IN_PROGRESS \u003d \u0027migration_in_progress\u0027"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_74747535","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":1},"in_reply_to":"5a3905b3_2a545851","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        SNAPSHOT_SUPPORT,"},{"line_number":218,"context_line":"        CREATE_SHARE_FROM_SNAPSHOT_SUPPORT,"},{"line_number":219,"context_line":"        REVERT_TO_SNAPSHOT_SUPPORT,"},{"line_number":220,"context_line":"    )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    # NOTE(cknight): Some extra specs are optional, but a nominal (typically"},{"line_number":223,"context_line":"    # False, but may be non-boolean) default value for each is still needed"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6a73c015","line":220,"range":{"start_line":220,"start_character":4,"end_line":220,"end_character":5},"updated":"2017-01-23 02:17:58.000000000","message":"this is a boolean option too...","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        SNAPSHOT_SUPPORT,"},{"line_number":218,"context_line":"        CREATE_SHARE_FROM_SNAPSHOT_SUPPORT,"},{"line_number":219,"context_line":"        REVERT_TO_SNAPSHOT_SUPPORT,"},{"line_number":220,"context_line":"    )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    # NOTE(cknight): Some extra specs are optional, but a nominal (typically"},{"line_number":223,"context_line":"    # False, but may be non-boolean) default value for each is still needed"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_b4897d28","line":220,"range":{"start_line":220,"start_character":4,"end_line":220,"end_character":5},"in_reply_to":"5a3905b3_6a73c015","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/db/api.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        context, share_snapshot_id)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"def share_snapshot_access_delete(context, access_id):"},{"line_number":546,"context_line":"    return IMPL.share_snapshot_access_delete(context, access_id)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_e336c54f","line":545,"range":{"start_line":545,"start_character":5,"end_line":545,"end_character":53},"updated":"2016-07-26 18:41:59.000000000","message":"please add docstrings to other methods as well","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        context, share_snapshot_id)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"def share_snapshot_access_delete(context, access_id):"},{"line_number":546,"context_line":"    return IMPL.share_snapshot_access_delete(context, access_id)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_344480b5","line":545,"range":{"start_line":545,"start_character":5,"end_line":545,"end_character":53},"in_reply_to":"dada55a8_e336c54f","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        context, share_snapshot_id)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"def share_snapshot_access_delete(context, access_id):"},{"line_number":546,"context_line":"    return IMPL.share_snapshot_access_delete(context, access_id)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_af849d0a","line":545,"range":{"start_line":545,"start_character":5,"end_line":545,"end_character":53},"in_reply_to":"dada55a8_e336c54f","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":549,"context_line":"    return IMPL.share_snapshot_access_get(context, access_id)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"def share_snapshot_access_get_all_for_share_snapshot(context,"},{"line_number":553,"context_line":"                                                     share_snapshot_id):"},{"line_number":554,"context_line":"    \"\"\"Get all access rules for given share snapshot.\"\"\""},{"line_number":555,"context_line":"    return IMPL.share_snapshot_access_get_all_for_share_snapshot("},{"line_number":556,"context_line":"        context, share_snapshot_id)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"def share_snapshot_access_get_all_by_type_and_access(context,"},{"line_number":560,"context_line":"                                                     share_snapshot_id,"},{"line_number":561,"context_line":"                                                     access_type,"},{"line_number":562,"context_line":"                                                     access_to):"},{"line_number":563,"context_line":"    \"\"\"Get all access rules for given access type and access to.\"\"\""},{"line_number":564,"context_line":"    return IMPL.share_snapshot_access_get_all_by_type_and_access("},{"line_number":565,"context_line":"        context, share_snapshot_id, access_type, access_to)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_bf4bd25e","line":565,"range":{"start_line":552,"start_character":0,"end_line":565,"end_character":59},"updated":"2016-12-18 19:26:24.000000000","message":"can be one query with filters","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":549,"context_line":"    return IMPL.share_snapshot_access_get(context, access_id)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"def share_snapshot_access_get_all_for_share_snapshot(context,"},{"line_number":553,"context_line":"                                                     share_snapshot_id):"},{"line_number":554,"context_line":"    \"\"\"Get all access rules for given share snapshot.\"\"\""},{"line_number":555,"context_line":"    return IMPL.share_snapshot_access_get_all_for_share_snapshot("},{"line_number":556,"context_line":"        context, share_snapshot_id)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"def share_snapshot_access_get_all_by_type_and_access(context,"},{"line_number":560,"context_line":"                                                     share_snapshot_id,"},{"line_number":561,"context_line":"                                                     access_type,"},{"line_number":562,"context_line":"                                                     access_to):"},{"line_number":563,"context_line":"    \"\"\"Get all access rules for given access type and access to.\"\"\""},{"line_number":564,"context_line":"    return IMPL.share_snapshot_access_get_all_by_type_and_access("},{"line_number":565,"context_line":"        context, share_snapshot_id, access_type, access_to)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_4fbb63e5","line":565,"range":{"start_line":552,"start_character":0,"end_line":565,"end_character":59},"in_reply_to":"1a6eadb0_bf4bd25e","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        context, share_snapshot_id, access_type, access_to)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"},{"line_number":569,"context_line":"    \"\"\"Update the state of the share snapshot instance access.\"\"\""},{"line_number":570,"context_line":"    return IMPL.share_snapshot_instance_access_update_state(context,"},{"line_number":571,"context_line":"                                                            mapping_id, state)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"def share_snapshot_instance_access_get(context, share_snapshot_instance_id,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_df296e8b","line":571,"range":{"start_line":568,"start_character":0,"end_line":571,"end_character":78},"updated":"2016-12-18 19:26:24.000000000","message":"you should be able to update all keys in the model..","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        context, share_snapshot_id, access_type, access_to)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"},{"line_number":569,"context_line":"    \"\"\"Update the state of the share snapshot instance access.\"\"\""},{"line_number":570,"context_line":"    return IMPL.share_snapshot_instance_access_update_state(context,"},{"line_number":571,"context_line":"                                                            mapping_id, state)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"def share_snapshot_instance_access_get(context, share_snapshot_instance_id,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_4f38c3a0","line":571,"range":{"start_line":568,"start_character":0,"end_line":571,"end_character":78},"in_reply_to":"1a6eadb0_df296e8b","updated":"2016-12-23 17:51:33.000000000","message":"this is not a share instance update, it is a share instance access mapping update","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":588,"context_line":"    return IMPL.share_snapshot_instance_export_location_create(context, values)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"def share_snapshot_instance_export_locations_get(context,"},{"line_number":592,"context_line":"                                                 share_snapshot_instance_id):"},{"line_number":593,"context_line":"    \"\"\"Get the share snapshot instance export locations for given id.\"\"\""},{"line_number":594,"context_line":"    return IMPL.share_snapshot_instance_export_locations_get("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_7f6bfa85","line":591,"range":{"start_line":591,"start_character":0,"end_line":591,"end_character":57},"updated":"2016-12-18 19:26:24.000000000","message":"you\u0027d need a db query for snapshot_export_locations","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":588,"context_line":"    return IMPL.share_snapshot_instance_export_location_create(context, values)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"def share_snapshot_instance_export_locations_get(context,"},{"line_number":592,"context_line":"                                                 share_snapshot_instance_id):"},{"line_number":593,"context_line":"    \"\"\"Get the share snapshot instance export locations for given id.\"\"\""},{"line_number":594,"context_line":"    return IMPL.share_snapshot_instance_export_locations_get("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_c40d9a3f","line":591,"range":{"start_line":591,"start_character":0,"end_line":591,"end_character":57},"in_reply_to":"1a6eadb0_7f6bfa85","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    return IMPL.share_snapshot_access_create(context, values)"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"def share_snapshot_access_get(context, access_id):"},{"line_number":547,"context_line":"    \"\"\"Get share snapshot access rule from given access_id.\"\"\""},{"line_number":548,"context_line":"    return IMPL.share_snapshot_access_get(context, access_id)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"def share_snapshot_access_get_all_for_snapshot_instance("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6aa66054","line":548,"range":{"start_line":546,"start_character":0,"end_line":548,"end_character":61},"updated":"2017-01-23 02:17:58.000000000","message":"This and the method on line 584 can be one method","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    return IMPL.share_snapshot_access_create(context, values)"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"def share_snapshot_access_get(context, access_id):"},{"line_number":547,"context_line":"    \"\"\"Get share snapshot access rule from given access_id.\"\"\""},{"line_number":548,"context_line":"    return IMPL.share_snapshot_access_get(context, access_id)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"def share_snapshot_access_get_all_for_snapshot_instance("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_75538017","line":548,"range":{"start_line":546,"start_character":0,"end_line":548,"end_character":61},"in_reply_to":"5a3905b3_6aa66054","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":548,"context_line":"    return IMPL.share_snapshot_access_get(context, access_id)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"def share_snapshot_access_get_all_for_snapshot_instance("},{"line_number":552,"context_line":"        context, snapshot_instance_id, session\u003dNone):"},{"line_number":553,"context_line":"    \"\"\"Get all access rules related to a certain snapshot instance.\"\"\""},{"line_number":554,"context_line":"    return IMPL.share_snapshot_access_get_all_for_snapshot_instance("},{"line_number":555,"context_line":"        context, snapshot_instance_id, session)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"def share_snapshot_access_get_all_for_share_snapshot(context,"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_eab9707a","line":555,"range":{"start_line":551,"start_character":0,"end_line":555,"end_character":47},"updated":"2017-01-23 02:17:58.000000000","message":"this and the method on line 577 can be one method..","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":548,"context_line":"    return IMPL.share_snapshot_access_get(context, access_id)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"def share_snapshot_access_get_all_for_snapshot_instance("},{"line_number":552,"context_line":"        context, snapshot_instance_id, session\u003dNone):"},{"line_number":553,"context_line":"    \"\"\"Get all access rules related to a certain snapshot instance.\"\"\""},{"line_number":554,"context_line":"    return IMPL.share_snapshot_access_get_all_for_snapshot_instance("},{"line_number":555,"context_line":"        context, snapshot_instance_id, session)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"def share_snapshot_access_get_all_for_share_snapshot(context,"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_b5596837","line":555,"range":{"start_line":551,"start_character":0,"end_line":555,"end_character":47},"in_reply_to":"5a3905b3_eab9707a","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        context, share_snapshot_id, filters)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def share_snapshot_export_locations_get(context, snapshot):"},{"line_number":567,"context_line":"    \"\"\"Get all export locations for a given share snapshot.\"\"\""},{"line_number":568,"context_line":"    return IMPL.share_snapshot_export_locations_get(context, snapshot)"},{"line_number":569,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_0adebcdc","line":566,"range":{"start_line":566,"start_character":49,"end_line":566,"end_character":57},"updated":"2017-01-23 02:17:58.000000000","message":"snapshot_id?","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        context, share_snapshot_id, filters)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def share_snapshot_export_locations_get(context, snapshot):"},{"line_number":567,"context_line":"    \"\"\"Get all export locations for a given share snapshot.\"\"\""},{"line_number":568,"context_line":"    return IMPL.share_snapshot_export_locations_get(context, snapshot)"},{"line_number":569,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_1534fcdb","line":566,"range":{"start_line":566,"start_character":49,"end_line":566,"end_character":57},"in_reply_to":"5a3905b3_0adebcdc","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":568,"context_line":"    return IMPL.share_snapshot_export_locations_get(context, snapshot)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"},{"line_number":572,"context_line":"    \"\"\"Update the state of the share snapshot instance access.\"\"\""},{"line_number":573,"context_line":"    return IMPL.share_snapshot_instance_access_update_state(context,"},{"line_number":574,"context_line":"                                                            mapping_id, state)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"def share_snapshot_instance_access_get_all_for_instance("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2a02983d","line":574,"range":{"start_line":571,"start_character":0,"end_line":574,"end_character":78},"updated":"2017-01-23 02:17:58.000000000","message":"you could use a generic update method for all fields in the model.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":568,"context_line":"    return IMPL.share_snapshot_export_locations_get(context, snapshot)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"},{"line_number":572,"context_line":"    \"\"\"Update the state of the share snapshot instance access.\"\"\""},{"line_number":573,"context_line":"    return IMPL.share_snapshot_instance_access_update_state(context,"},{"line_number":574,"context_line":"                                                            mapping_id, state)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"def share_snapshot_instance_access_get_all_for_instance("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_7505400f","line":574,"range":{"start_line":571,"start_character":0,"end_line":574,"end_character":78},"in_reply_to":"5a3905b3_2a02983d","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/db/migrations/alembic/versions/a77e2ad5012d_add_share_snapshot_access.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"78e5ed1128c92dcfae5842031227497fbc10d3c6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                name\u003d\u0027ssiam_snapshot_instance_fk\u0027)),"},{"line_number":54,"context_line":"        sa.Column(\u0027access_id\u0027, sa.String(36),"},{"line_number":55,"context_line":"                  sa.ForeignKey(\u0027share_snapshot_access_map.id\u0027,"},{"line_number":56,"context_line":"                                name\u003d\u0027ssam_access_fk\u0027)),"},{"line_number":57,"context_line":"        sa.Column(\u0027state\u0027, sa.String(255))"},{"line_number":58,"context_line":"    )"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_6eab3e8a","line":56,"range":{"start_line":56,"start_character":38,"end_line":56,"end_character":52},"updated":"2016-07-25 06:21:04.000000000","message":"Should be ssiam_access_fk?","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                name\u003d\u0027ssiam_snapshot_instance_fk\u0027)),"},{"line_number":54,"context_line":"        sa.Column(\u0027access_id\u0027, sa.String(36),"},{"line_number":55,"context_line":"                  sa.ForeignKey(\u0027share_snapshot_access_map.id\u0027,"},{"line_number":56,"context_line":"                                name\u003d\u0027ssam_access_fk\u0027)),"},{"line_number":57,"context_line":"        sa.Column(\u0027state\u0027, sa.String(255))"},{"line_number":58,"context_line":"    )"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_b484f00a","line":56,"range":{"start_line":56,"start_character":38,"end_line":56,"end_character":52},"in_reply_to":"dada55a8_6eab3e8a","updated":"2016-08-01 17:48:24.000000000","message":"No, ssam \u003d share_snapshot_access_map which is the table it is referring to.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"78e5ed1128c92dcfae5842031227497fbc10d3c6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        sa.Column(\u0027path\u0027, sa.String(2000)),"},{"line_number":71,"context_line":"        sa.Column(\u0027is_admin_only\u0027, sa.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":72,"context_line":"    )"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def downgrade():"},{"line_number":76,"context_line":"    op.drop_table(\u0027share_snapshot_instance_export_locations\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_2e04a67c","line":73,"updated":"2016-07-25 06:21:04.000000000","message":"Why no share_snapshot_instance_export_locations_metadata? Will this data derive from share_instance_export_locations_metadata?","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        sa.Column(\u0027path\u0027, sa.String(2000)),"},{"line_number":71,"context_line":"        sa.Column(\u0027is_admin_only\u0027, sa.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":72,"context_line":"    )"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def downgrade():"},{"line_number":76,"context_line":"    op.drop_table(\u0027share_snapshot_instance_export_locations\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_b4e990b9","line":73,"in_reply_to":"dada55a8_2e04a67c","updated":"2016-08-01 17:48:24.000000000","message":"This implementation does not have export locations metadata for the mountable snapshots.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_c948c4ce","line":1,"range":{"start_line":1,"start_character":3,"end_line":1,"end_character":32},"updated":"2016-08-12 00:39:32.000000000","message":"where is the Hitachi header?","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6ae85c3f29ca4dbb1d3e85b99392299eb4724cf2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_59a92f7b","line":1,"range":{"start_line":1,"start_character":3,"end_line":1,"end_character":32},"in_reply_to":"9ad45d7e_c948c4ce","updated":"2016-08-19 19:28:20.000000000","message":"Done","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        sa.Column(\u0027access_id\u0027, sa.String(36),"},{"line_number":58,"context_line":"                  sa.ForeignKey(\u0027share_snapshot_access_map.id\u0027,"},{"line_number":59,"context_line":"                                name\u003d\u0027ssam_access_fk\u0027)),"},{"line_number":60,"context_line":"        sa.Column(\u0027state\u0027, sa.String(255))"},{"line_number":61,"context_line":"    )"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    op.create_table("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_bf2af22d","line":60,"range":{"start_line":60,"start_character":27,"end_line":60,"end_character":42},"updated":"2016-12-18 19:26:24.000000000","message":"default?","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        sa.Column(\u0027access_id\u0027, sa.String(36),"},{"line_number":58,"context_line":"                  sa.ForeignKey(\u0027share_snapshot_access_map.id\u0027,"},{"line_number":59,"context_line":"                                name\u003d\u0027ssam_access_fk\u0027)),"},{"line_number":60,"context_line":"        sa.Column(\u0027state\u0027, sa.String(255))"},{"line_number":61,"context_line":"    )"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    op.create_table("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_cfa4d3a7","line":60,"range":{"start_line":60,"start_character":27,"end_line":60,"end_character":42},"in_reply_to":"1a6eadb0_bf2af22d","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b2981376af282e42e623133e95a433e6a785698d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        sa.Column(\u0027is_admin_only\u0027, sa.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":78,"context_line":"    )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    op.add_column(\u0027shares\u0027,"},{"line_number":81,"context_line":"                  sa.Column(\u0027mount_snapshot_support\u0027, sa.Boolean,"},{"line_number":82,"context_line":"                            default\u003dFalse))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def downgrade():"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_247ed1e4","line":82,"range":{"start_line":80,"start_character":4,"end_line":82,"end_character":43},"updated":"2017-01-19 12:25:01.000000000","message":"\"default\u003dFalse\" does not mean it will set this value to existing records after adding this column. So, after migration to new DB schema, all existing snapshots will have \u0027None\u0027 value.\n\nSo, you need to set this default value explicitly for each of existing snapshots.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        sa.Column(\u0027is_admin_only\u0027, sa.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":78,"context_line":"    )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    op.add_column(\u0027shares\u0027,"},{"line_number":81,"context_line":"                  sa.Column(\u0027mount_snapshot_support\u0027, sa.Boolean,"},{"line_number":82,"context_line":"                            default\u003dFalse))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def downgrade():"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_4e792693","line":82,"range":{"start_line":80,"start_character":4,"end_line":82,"end_character":43},"in_reply_to":"5a3905b3_247ed1e4","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"}],"manila/db/sqlalchemy/api.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2334,"context_line":""},{"line_number":2335,"context_line":"        if len(mappings) \u003e 0:"},{"line_number":2336,"context_line":"            msg \u003d (_(\"Access rule %s has mappings\""},{"line_number":2337,"context_line":"                     \" to share instances.\") % access_id)"},{"line_number":2338,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"        session.query(models.ShareAccessMapping).filter_by("}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_9c43b212","line":2337,"range":{"start_line":2337,"start_character":26,"end_line":2337,"end_character":41},"updated":"2016-12-16 12:33:01.000000000","message":"share snapshot instances","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":2334,"context_line":""},{"line_number":2335,"context_line":"        if len(mappings) \u003e 0:"},{"line_number":2336,"context_line":"            msg \u003d (_(\"Access rule %s has mappings\""},{"line_number":2337,"context_line":"                     \" to share instances.\") % access_id)"},{"line_number":2338,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"        session.query(models.ShareAccessMapping).filter_by("}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_0411f65c","line":2337,"range":{"start_line":2337,"start_character":26,"end_line":2337,"end_character":41},"in_reply_to":"1a6eadb0_9c43b212","updated":"2016-12-16 21:14:09.000000000","message":"Removed this method.","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2335,"context_line":"        if len(mappings) \u003e 0:"},{"line_number":2336,"context_line":"            msg \u003d (_(\"Access rule %s has mappings\""},{"line_number":2337,"context_line":"                     \" to share instances.\") % access_id)"},{"line_number":2338,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"        session.query(models.ShareAccessMapping).filter_by("},{"line_number":2341,"context_line":"            id\u003daccess_id).soft_delete()"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_7c57b6c9","line":2338,"range":{"start_line":2338,"start_character":28,"end_line":2338,"end_character":46},"updated":"2016-12-16 12:33:01.000000000","message":"InvalidShareSnapshotAccess","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2337,"context_line":"                     \" to share instances.\") % access_id)"},{"line_number":2338,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"        session.query(models.ShareAccessMapping).filter_by("},{"line_number":2341,"context_line":"            id\u003daccess_id).soft_delete()"},{"line_number":2342,"context_line":""},{"line_number":2343,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_9c5ad2f0","line":2340,"range":{"start_line":2340,"start_character":29,"end_line":2340,"end_character":47},"updated":"2016-12-16 12:33:01.000000000","message":"wrong model","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"        context, session,"},{"line_number":2407,"context_line":"        {\u0027share_snapshot_instance_id\u0027: share_snapshot_instance_id}).all()"},{"line_number":2408,"context_line":""},{"line_number":2409,"context_line":"    if export_locations:"},{"line_number":2410,"context_line":"        return export_locations"},{"line_number":2411,"context_line":"    else:"},{"line_number":2412,"context_line":"        raise exception.NotFound()"},{"line_number":2413,"context_line":""},{"line_number":2414,"context_line":""},{"line_number":2415,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_1fb846e5","line":2412,"range":{"start_line":2409,"start_character":0,"end_line":2412,"end_character":34},"updated":"2016-12-18 19:26:24.000000000","message":".all returns a list, since you\u0027re not searching by ID, you shouldn\u0027t raise NotFound() here..","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"        context, session,"},{"line_number":2407,"context_line":"        {\u0027share_snapshot_instance_id\u0027: share_snapshot_instance_id}).all()"},{"line_number":2408,"context_line":""},{"line_number":2409,"context_line":"    if export_locations:"},{"line_number":2410,"context_line":"        return export_locations"},{"line_number":2411,"context_line":"    else:"},{"line_number":2412,"context_line":"        raise exception.NotFound()"},{"line_number":2413,"context_line":""},{"line_number":2414,"context_line":""},{"line_number":2415,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_d603cb74","line":2412,"range":{"start_line":2409,"start_character":0,"end_line":2412,"end_character":34},"in_reply_to":"1a6eadb0_1fb846e5","updated":"2016-12-20 16:10:32.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bae02f4e90ee4bca972cc1818df6b225231c5427","unresolved":false,"context_lines":[{"line_number":1962,"context_line":""},{"line_number":1963,"context_line":"        snapshot_instance_ref.soft_delete("},{"line_number":1964,"context_line":"            session\u003dsession, update_status\u003dTrue)"},{"line_number":1965,"context_line":"        access_mappings \u003d share_snapshot_instance_access_get_all_for_instance("},{"line_number":1966,"context_line":"            context, snapshot_instance_id, session)"},{"line_number":1967,"context_line":"        for mapping in access_mappings:"},{"line_number":1968,"context_line":"            share_snapshot_instance_access_delete(context, mapping[\u0027id\u0027])"},{"line_number":1969,"context_line":"        snapshot \u003d share_snapshot_get("},{"line_number":1970,"context_line":"            context, snapshot_instance_ref[\u0027snapshot_id\u0027], session\u003dsession)"},{"line_number":1971,"context_line":"        if len(snapshot.instances) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_0788f721","line":1968,"range":{"start_line":1965,"start_character":8,"end_line":1968,"end_character":73},"updated":"2017-01-19 12:28:38.000000000","message":"It should be done prior to deletion of snapshot instance. It depends on presence of that DB record. And, now, when we have \"DB purge\" feature, it will be possible to shoot our own legs in case we fail after snapshot instance deletion and before finishing this func.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":1962,"context_line":""},{"line_number":1963,"context_line":"        snapshot_instance_ref.soft_delete("},{"line_number":1964,"context_line":"            session\u003dsession, update_status\u003dTrue)"},{"line_number":1965,"context_line":"        access_mappings \u003d share_snapshot_instance_access_get_all_for_instance("},{"line_number":1966,"context_line":"            context, snapshot_instance_id, session)"},{"line_number":1967,"context_line":"        for mapping in access_mappings:"},{"line_number":1968,"context_line":"            share_snapshot_instance_access_delete(context, mapping[\u0027id\u0027])"},{"line_number":1969,"context_line":"        snapshot \u003d share_snapshot_get("},{"line_number":1970,"context_line":"            context, snapshot_instance_ref[\u0027snapshot_id\u0027], session\u003dsession)"},{"line_number":1971,"context_line":"        if len(snapshot.instances) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_6edd0242","line":1968,"range":{"start_line":1965,"start_character":8,"end_line":1968,"end_character":73},"in_reply_to":"5a3905b3_0788f721","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":2370,"context_line":""},{"line_number":2371,"context_line":""},{"line_number":2372,"context_line":"@require_context"},{"line_number":2373,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"},{"line_number":2374,"context_line":"    session \u003d get_session()"},{"line_number":2375,"context_line":"    with session.begin():"},{"line_number":2376,"context_line":"        mapping \u003d _share_snapshot_instance_access_get_query("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6d8cba7f","line":2373,"range":{"start_line":2373,"start_character":41,"end_line":2373,"end_character":47},"updated":"2017-01-23 02:17:58.000000000","message":"this should be a generic update method","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":2370,"context_line":""},{"line_number":2371,"context_line":""},{"line_number":2372,"context_line":"@require_context"},{"line_number":2373,"context_line":"def share_snapshot_instance_access_update_state(context, mapping_id, state):"},{"line_number":2374,"context_line":"    session \u003d get_session()"},{"line_number":2375,"context_line":"    with session.begin():"},{"line_number":2376,"context_line":"        mapping \u003d _share_snapshot_instance_access_get_query("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_9508ec29","line":2373,"range":{"start_line":2373,"start_character":41,"end_line":2373,"end_character":47},"in_reply_to":"5a3905b3_6d8cba7f","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/db/sqlalchemy/models.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":802,"context_line":"        STATE_NEW: 1,"},{"line_number":803,"context_line":"        STATE_DELETED: 2,"},{"line_number":804,"context_line":"        STATE_DELETING: 3,"},{"line_number":805,"context_line":"        STATE_ERROR: 4"},{"line_number":806,"context_line":"    }"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_447f8d14","line":805,"range":{"start_line":805,"start_character":21,"end_line":805,"end_character":22},"updated":"2016-08-02 11:38:42.000000000","message":"tailing comma","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6ae85c3f29ca4dbb1d3e85b99392299eb4724cf2","unresolved":false,"context_lines":[{"line_number":802,"context_line":"        STATE_NEW: 1,"},{"line_number":803,"context_line":"        STATE_DELETED: 2,"},{"line_number":804,"context_line":"        STATE_DELETING: 3,"},{"line_number":805,"context_line":"        STATE_ERROR: 4"},{"line_number":806,"context_line":"    }"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_9992874a","line":805,"range":{"start_line":805,"start_character":21,"end_line":805,"end_character":22},"in_reply_to":"bacf61ea_447f8d14","updated":"2016-08-19 19:28:20.000000000","message":"Done","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"        return result"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    @property"},{"line_number":631,"context_line":"    def export_location(self):"},{"line_number":632,"context_line":"        if len(self.instances) \u003e 0:"},{"line_number":633,"context_line":"            return self.instance.export_location"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"    @property"},{"line_number":636,"context_line":"    def aggregate_status(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_944e5d6d","line":633,"range":{"start_line":630,"start_character":0,"end_line":633,"end_character":48},"updated":"2016-11-17 17:39:41.000000000","message":"Such property in Share model is used only for compatibility. New feature for snapshots should use plural variant only.","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"        return result"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    @property"},{"line_number":631,"context_line":"    def export_location(self):"},{"line_number":632,"context_line":"        if len(self.instances) \u003e 0:"},{"line_number":633,"context_line":"            return self.instance.export_location"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"    @property"},{"line_number":636,"context_line":"    def aggregate_status(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_32ed308c","line":633,"range":{"start_line":630,"start_character":0,"end_line":633,"end_character":48},"in_reply_to":"7a77a97e_944e5d6d","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        # with share drivers"},{"line_number":712,"context_line":"        return self.share_instance_id"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    @property"},{"line_number":715,"context_line":"    def export_location(self):"},{"line_number":716,"context_line":"        if len(self.export_locations) \u003e 0:"},{"line_number":717,"context_line":"            return self.export_locations[0][\u0027path\u0027]"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":720,"context_line":"    deleted \u003d Column(String(36), default\u003d\u0027False\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_b47a7986","line":717,"range":{"start_line":714,"start_character":4,"end_line":717,"end_character":51},"updated":"2016-11-17 17:39:41.000000000","message":"ditto","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        # with share drivers"},{"line_number":712,"context_line":"        return self.share_instance_id"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    @property"},{"line_number":715,"context_line":"    def export_location(self):"},{"line_number":716,"context_line":"        if len(self.export_locations) \u003e 0:"},{"line_number":717,"context_line":"            return self.export_locations[0][\u0027path\u0027]"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":720,"context_line":"    deleted \u003d Column(String(36), default\u003d\u0027False\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_6c81884a","line":717,"range":{"start_line":714,"start_character":4,"end_line":717,"end_character":51},"in_reply_to":"7a77a97e_b47a7986","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":741,"context_line":"            \u0027and_(\u0027"},{"line_number":742,"context_line":"            \u0027ShareSnapshotInstance.id \u003d\u003d \u0027"},{"line_number":743,"context_line":"            \u0027ShareSnapshotInstanceExportLocations.share_snapshot_instance_id, \u0027"},{"line_number":744,"context_line":"            \u0027ShareSnapshotInstanceExportLocations.deleted \u003d\u003d 0)\u0027"},{"line_number":745,"context_line":"        )"},{"line_number":746,"context_line":"    )"},{"line_number":747,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_74b46134","line":744,"range":{"start_line":744,"start_character":61,"end_line":744,"end_character":62},"updated":"2016-11-17 17:39:41.000000000","message":"You default it to \"False\" at [1]. So, I guess, it is a bug and you will receive empty list always.\n\n[1] https://review.openstack.org/#/c/345526/8/manila/db/migrations/alembic/versions/a77e2ad5012d_add_share_snapshot_access.py@69","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":741,"context_line":"            \u0027and_(\u0027"},{"line_number":742,"context_line":"            \u0027ShareSnapshotInstance.id \u003d\u003d \u0027"},{"line_number":743,"context_line":"            \u0027ShareSnapshotInstanceExportLocations.share_snapshot_instance_id, \u0027"},{"line_number":744,"context_line":"            \u0027ShareSnapshotInstanceExportLocations.deleted \u003d\u003d 0)\u0027"},{"line_number":745,"context_line":"        )"},{"line_number":746,"context_line":"    )"},{"line_number":747,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_3249b08c","line":744,"range":{"start_line":744,"start_character":61,"end_line":744,"end_character":62},"in_reply_to":"7a77a97e_74b46134","updated":"2016-11-23 11:36:33.000000000","message":"Weird, it works on my tests. Will check that. Thanks for pointing it out.","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":791,"context_line":"    STATE_ERROR \u003d constants.STATUS_ERROR"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"    STATE_PRIORITIES \u003d {"},{"line_number":794,"context_line":"        STATE_ACTIVE: 0,"},{"line_number":795,"context_line":"        STATE_NEW: 1,"},{"line_number":796,"context_line":"        STATE_DELETED: 2,"},{"line_number":797,"context_line":"        STATE_DELETING: 3,"},{"line_number":798,"context_line":"        STATE_ERROR: 4,"},{"line_number":799,"context_line":"    }"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_9c3d72df","line":798,"range":{"start_line":794,"start_character":6,"end_line":798,"end_character":23},"updated":"2016-12-16 12:33:01.000000000","message":"I believe we should change those to \n\nSTATE_ACTIVE: 0,\nSTATE_QUEUED_TO_BE_APPLIED: 1,\nSTATE_DELETED: 2,\nSTATE_QUEUED_TO_BE_DELETED:3,\nSTATE_ERROR: 4,\n\nin order to match the new share instance access rules states","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[{"line_number":790,"context_line":"    STATE_DELETED \u003d constants.STATUS_DELETED"},{"line_number":791,"context_line":"    STATE_ERROR \u003d constants.STATUS_ERROR"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"    STATE_PRIORITIES \u003d {"},{"line_number":794,"context_line":"        STATE_ACTIVE: 0,"},{"line_number":795,"context_line":"        STATE_NEW: 1,"},{"line_number":796,"context_line":"        STATE_DELETED: 2,"},{"line_number":797,"context_line":"        STATE_DELETING: 3,"},{"line_number":798,"context_line":"        STATE_ERROR: 4,"},{"line_number":799,"context_line":"    }"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_76683722","line":798,"range":{"start_line":793,"start_character":4,"end_line":798,"end_character":23},"updated":"2016-12-20 16:10:32.000000000","message":"please see previous comment","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1e34a926b64c67a0cc4f469de444f37dfbec60ba","unresolved":false,"context_lines":[{"line_number":824,"context_line":"    path \u003d Column(String(2000))"},{"line_number":825,"context_line":"    is_admin_only \u003d Column(Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":826,"context_line":"    deleted \u003d Column(String(36), default\u003d\u0027False\u0027)"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"class SecurityService(BASE, ManilaBase):"},{"line_number":830,"context_line":"    \"\"\"Security service information for manila shares.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_94516b65","line":827,"updated":"2017-01-12 18:00:14.000000000","message":"Why no metadata table for snapshot export locations?","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":824,"context_line":"    path \u003d Column(String(2000))"},{"line_number":825,"context_line":"    is_admin_only \u003d Column(Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":826,"context_line":"    deleted \u003d Column(String(36), default\u003d\u0027False\u0027)"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"class SecurityService(BASE, ManilaBase):"},{"line_number":830,"context_line":"    \"\"\"Security service information for manila shares.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_242f49f7","line":827,"in_reply_to":"9a57fde8_94516b65","updated":"2017-01-16 22:54:47.000000000","message":"not proposed in the spec","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        state \u003d ShareSnapshotInstanceAccessMapping.STATE_QUEUED_TO_APPLY"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"        if len(self.instance_mappings) \u003e 0:"},{"line_number":773,"context_line":"            state \u003d ShareSnapshotInstanceAccessMapping.STATE_ACTIVE"},{"line_number":774,"context_line":"            priorities \u003d ShareSnapshotInstanceAccessMapping.STATE_PRIORITIES"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"            for mapping in self.instance_mappings:"},{"line_number":777,"context_line":"                priority \u003d priorities.get("},{"line_number":778,"context_line":"                    mapping[\u0027state\u0027],"},{"line_number":779,"context_line":"                    ShareSnapshotInstanceAccessMapping.STATUS_ERROR)"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"                if priority \u003e priorities.get(state):"},{"line_number":782,"context_line":"                    state \u003d mapping[\u0027state\u0027]"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"                if (state \u003d\u003d ShareSnapshotInstanceAccessMapping."},{"line_number":785,"context_line":"                        STATUS_ERROR):"},{"line_number":786,"context_line":"                    break"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        return state"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6a47404b","line":786,"range":{"start_line":773,"start_character":0,"end_line":786,"end_character":25},"updated":"2017-01-23 02:17:58.000000000","message":"use the aggregation used for the share access map model\u0027s state.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        state \u003d ShareSnapshotInstanceAccessMapping.STATE_QUEUED_TO_APPLY"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"        if len(self.instance_mappings) \u003e 0:"},{"line_number":773,"context_line":"            state \u003d ShareSnapshotInstanceAccessMapping.STATE_ACTIVE"},{"line_number":774,"context_line":"            priorities \u003d ShareSnapshotInstanceAccessMapping.STATE_PRIORITIES"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"            for mapping in self.instance_mappings:"},{"line_number":777,"context_line":"                priority \u003d priorities.get("},{"line_number":778,"context_line":"                    mapping[\u0027state\u0027],"},{"line_number":779,"context_line":"                    ShareSnapshotInstanceAccessMapping.STATUS_ERROR)"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"                if priority \u003e priorities.get(state):"},{"line_number":782,"context_line":"                    state \u003d mapping[\u0027state\u0027]"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"                if (state \u003d\u003d ShareSnapshotInstanceAccessMapping."},{"line_number":785,"context_line":"                        STATUS_ERROR):"},{"line_number":786,"context_line":"                    break"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        return state"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_0f287785","line":786,"range":{"start_line":773,"start_character":0,"end_line":786,"end_character":25},"in_reply_to":"5a3905b3_6a47404b","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":808,"context_line":"class ShareSnapshotInstanceAccessMapping(BASE, ManilaBase):"},{"line_number":809,"context_line":"    \"\"\"Represents access to individual share snapshot instances.\"\"\""},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    STATE_QUEUED_TO_APPLY \u003d constants.ACCESS_STATE_QUEUED_TO_APPLY"},{"line_number":812,"context_line":"    STATE_ACTIVE \u003d constants.ACCESS_STATE_ACTIVE"},{"line_number":813,"context_line":"    STATE_QUEUED_TO_DENY \u003d constants.ACCESS_STATE_QUEUED_TO_DENY"},{"line_number":814,"context_line":"    STATE_DELETED \u003d constants.STATUS_DELETED"},{"line_number":815,"context_line":"    STATUS_ERROR \u003d constants.ACCESS_STATE_ERROR"},{"line_number":816,"context_line":"    STATE_APPLYING \u003d constants.ACCESS_STATE_APPLYING"},{"line_number":817,"context_line":"    STATE_DENYING \u003d constants.ACCESS_STATE_DENYING"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    STATE_PRIORITIES \u003d {"},{"line_number":820,"context_line":"        STATE_ACTIVE: 0,"},{"line_number":821,"context_line":"        STATE_QUEUED_TO_APPLY: 1,"},{"line_number":822,"context_line":"        STATE_APPLYING: 2,"},{"line_number":823,"context_line":"        STATUS_ERROR: 3,"},{"line_number":824,"context_line":"        STATE_DELETED: 4,"},{"line_number":825,"context_line":"        STATE_DENYING: 5,"},{"line_number":826,"context_line":"        STATE_QUEUED_TO_DENY: 6,"},{"line_number":827,"context_line":"    }"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"},{"line_number":830,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6a5e6013","line":827,"range":{"start_line":811,"start_character":0,"end_line":827,"end_character":5},"updated":"2017-01-23 02:17:58.000000000","message":"let\u0027s try to stick to one style of aggregation..","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":808,"context_line":"class ShareSnapshotInstanceAccessMapping(BASE, ManilaBase):"},{"line_number":809,"context_line":"    \"\"\"Represents access to individual share snapshot instances.\"\"\""},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    STATE_QUEUED_TO_APPLY \u003d constants.ACCESS_STATE_QUEUED_TO_APPLY"},{"line_number":812,"context_line":"    STATE_ACTIVE \u003d constants.ACCESS_STATE_ACTIVE"},{"line_number":813,"context_line":"    STATE_QUEUED_TO_DENY \u003d constants.ACCESS_STATE_QUEUED_TO_DENY"},{"line_number":814,"context_line":"    STATE_DELETED \u003d constants.STATUS_DELETED"},{"line_number":815,"context_line":"    STATUS_ERROR \u003d constants.ACCESS_STATE_ERROR"},{"line_number":816,"context_line":"    STATE_APPLYING \u003d constants.ACCESS_STATE_APPLYING"},{"line_number":817,"context_line":"    STATE_DENYING \u003d constants.ACCESS_STATE_DENYING"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    STATE_PRIORITIES \u003d {"},{"line_number":820,"context_line":"        STATE_ACTIVE: 0,"},{"line_number":821,"context_line":"        STATE_QUEUED_TO_APPLY: 1,"},{"line_number":822,"context_line":"        STATE_APPLYING: 2,"},{"line_number":823,"context_line":"        STATUS_ERROR: 3,"},{"line_number":824,"context_line":"        STATE_DELETED: 4,"},{"line_number":825,"context_line":"        STATE_DENYING: 5,"},{"line_number":826,"context_line":"        STATE_QUEUED_TO_DENY: 6,"},{"line_number":827,"context_line":"    }"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"},{"line_number":830,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_4faeff81","line":827,"range":{"start_line":811,"start_character":0,"end_line":827,"end_character":5},"in_reply_to":"5a3905b3_6a5e6013","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":825,"context_line":"        STATE_DENYING: 5,"},{"line_number":826,"context_line":"        STATE_QUEUED_TO_DENY: 6,"},{"line_number":827,"context_line":"    }"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"},{"line_number":830,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":831,"context_line":"    deleted \u003d Column(String(36), default\u003d\u0027False\u0027)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_eaa2504a","line":828,"range":{"start_line":828,"start_character":0,"end_line":828,"end_character":0},"updated":"2017-01-23 02:17:58.000000000","message":"take a look at the cleanup in the share instance access map model, you could use a method to set the snapshot access mapping data in this model. It reduces unnecessary round trips to the database for Get, set and update calls.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":825,"context_line":"        STATE_DENYING: 5,"},{"line_number":826,"context_line":"        STATE_QUEUED_TO_DENY: 6,"},{"line_number":827,"context_line":"    }"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_access_map\u0027"},{"line_number":830,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":831,"context_line":"    deleted \u003d Column(String(36), default\u003d\u0027False\u0027)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_efe08b98","line":828,"range":{"start_line":828,"start_character":0,"end_line":828,"end_character":0},"in_reply_to":"5a3905b3_eaa2504a","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":832,"context_line":"    share_snapshot_instance_id \u003d Column(String(36), ForeignKey("},{"line_number":833,"context_line":"        \u0027share_snapshot_instances.id\u0027))"},{"line_number":834,"context_line":"    access_id \u003d Column(String(36), ForeignKey(\u0027share_snapshot_access_map.id\u0027))"},{"line_number":835,"context_line":"    state \u003d Column(Enum(STATE_QUEUED_TO_APPLY, STATE_ACTIVE,"},{"line_number":836,"context_line":"                        STATE_QUEUED_TO_DENY, STATE_DELETED, STATUS_ERROR),"},{"line_number":837,"context_line":"                   default\u003dSTATE_QUEUED_TO_APPLY)"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_8a62ac3c","line":836,"range":{"start_line":835,"start_character":24,"end_line":836,"end_character":73},"updated":"2017-01-23 02:17:58.000000000","message":"constants.ACCESS_STATES","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":832,"context_line":"    share_snapshot_instance_id \u003d Column(String(36), ForeignKey("},{"line_number":833,"context_line":"        \u0027share_snapshot_instances.id\u0027))"},{"line_number":834,"context_line":"    access_id \u003d Column(String(36), ForeignKey(\u0027share_snapshot_access_map.id\u0027))"},{"line_number":835,"context_line":"    state \u003d Column(Enum(STATE_QUEUED_TO_APPLY, STATE_ACTIVE,"},{"line_number":836,"context_line":"                        STATE_QUEUED_TO_DENY, STATE_DELETED, STATUS_ERROR),"},{"line_number":837,"context_line":"                   default\u003dSTATE_QUEUED_TO_APPLY)"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2f15343f","line":836,"range":{"start_line":835,"start_character":24,"end_line":836,"end_character":73},"in_reply_to":"5a3905b3_8a62ac3c","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":837,"context_line":"                   default\u003dSTATE_QUEUED_TO_APPLY)"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"class ShareSnapshotInstanceExportLocations(BASE, ManilaBase):"},{"line_number":841,"context_line":"    \"\"\"Represents export locations of share snapshot instances.\"\"\""},{"line_number":842,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_export_locations\u0027"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_aaa208fb","line":840,"range":{"start_line":840,"start_character":41,"end_line":840,"end_character":42},"updated":"2017-01-23 02:17:58.000000000","message":"this is a single export location model.. should not be a plural.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":837,"context_line":"                   default\u003dSTATE_QUEUED_TO_APPLY)"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"class ShareSnapshotInstanceExportLocations(BASE, ManilaBase):"},{"line_number":841,"context_line":"    \"\"\"Represents export locations of share snapshot instances.\"\"\""},{"line_number":842,"context_line":"    __tablename__ \u003d \u0027share_snapshot_instance_export_locations\u0027"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_9453a138","line":840,"range":{"start_line":840,"start_character":41,"end_line":840,"end_character":42},"in_reply_to":"5a3905b3_aaa208fb","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"cfb8e147ba570712f79965782a62a98b8d8a6817","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    @property"},{"line_number":211,"context_line":"    def export_locations(self):"},{"line_number":212,"context_line":"        # TODO(gouthamr): Return AZ specific export locations for replicated"},{"line_number":213,"context_line":"        # snapshots."},{"line_number":214,"context_line":"        # NOTE(gouthamr): For a replicated snapshot, export locations of the"},{"line_number":215,"context_line":"        # \u0027active\u0027 instances are chosen, if \u0027available\u0027."},{"line_number":216,"context_line":"        all_export_locations \u003d []"},{"line_number":217,"context_line":"        select_instances \u003d list(filter("}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_22bc38ba","line":214,"range":{"start_line":213,"start_character":10,"end_line":214,"end_character":52},"updated":"2017-01-24 09:25:02.000000000","message":"Mistakenly changed?","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    @property"},{"line_number":211,"context_line":"    def export_locations(self):"},{"line_number":212,"context_line":"        # TODO(gouthamr): Return AZ specific export locations for replicated"},{"line_number":213,"context_line":"        # snapshots."},{"line_number":214,"context_line":"        # NOTE(gouthamr): For a replicated snapshot, export locations of the"},{"line_number":215,"context_line":"        # \u0027active\u0027 instances are chosen, if \u0027available\u0027."},{"line_number":216,"context_line":"        all_export_locations \u003d []"},{"line_number":217,"context_line":"        select_instances \u003d list(filter("}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_c82e33a4","line":214,"range":{"start_line":213,"start_character":10,"end_line":214,"end_character":52},"in_reply_to":"5a3905b3_22bc38ba","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e30d719b22cd11b0ee026b474656f44fbaf71995","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    @property"},{"line_number":211,"context_line":"    def export_locations(self):"},{"line_number":212,"context_line":"        # TODO(gouthamr): Return AZ specific export locations for replicated"},{"line_number":213,"context_line":"        # snapshots."},{"line_number":214,"context_line":"        # NOTE(gouthamr): For a replicated share, export locations of the"},{"line_number":215,"context_line":"        # \u0027active\u0027 instances are chosen, if \u0027available\u0027."},{"line_number":216,"context_line":"        all_export_locations \u003d []"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_5c8f4975","line":213,"range":{"start_line":213,"start_character":10,"end_line":213,"end_character":19},"updated":"2017-01-24 18:57:29.000000000","message":"Mistaken update.","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ce12e7dde2fba820623fb086b6b1e6170ae95e19","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    @property"},{"line_number":211,"context_line":"    def export_locations(self):"},{"line_number":212,"context_line":"        # TODO(gouthamr): Return AZ specific export locations for replicated"},{"line_number":213,"context_line":"        # snapshots."},{"line_number":214,"context_line":"        # NOTE(gouthamr): For a replicated share, export locations of the"},{"line_number":215,"context_line":"        # \u0027active\u0027 instances are chosen, if \u0027available\u0027."},{"line_number":216,"context_line":"        all_export_locations \u003d []"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_c7636240","line":213,"range":{"start_line":213,"start_character":10,"end_line":213,"end_character":19},"in_reply_to":"5a3905b3_5c8f4975","updated":"2017-01-24 19:31:56.000000000","message":"Done","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"}],"manila/share/api.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"    def snapshot_allow_access(self, ctx, snapshot, access_type, access_to):"},{"line_number":1478,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1479,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":"        values \u003d {"},{"line_number":1482,"context_line":"            \u0027share_snapshot_id\u0027: snapshot[\u0027id\u0027],"},{"line_number":1483,"context_line":"            \u0027access_type\u0027: access_type,"},{"line_number":1484,"context_line":"            \u0027access_to\u0027: access_to,"},{"line_number":1485,"context_line":"        }"},{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"        access \u003d self.db.share_snapshot_access_create(ctx, values)"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1490,"context_line":"            host \u003d snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_e35fe40c","line":1487,"range":{"start_line":1479,"start_character":8,"end_line":1487,"end_character":66},"updated":"2016-07-26 18:41:59.000000000","message":"what if snapshot status is different than available?","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"    def snapshot_allow_access(self, ctx, snapshot, access_type, access_to):"},{"line_number":1478,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1479,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":"        values \u003d {"},{"line_number":1482,"context_line":"            \u0027share_snapshot_id\u0027: snapshot[\u0027id\u0027],"},{"line_number":1483,"context_line":"            \u0027access_type\u0027: access_type,"},{"line_number":1484,"context_line":"            \u0027access_to\u0027: access_to,"},{"line_number":1485,"context_line":"        }"},{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"        access \u003d self.db.share_snapshot_access_create(ctx, values)"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1490,"context_line":"            host \u003d snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c21f6306","line":1487,"range":{"start_line":1479,"start_character":8,"end_line":1487,"end_character":66},"in_reply_to":"dada55a8_e35fe40c","updated":"2016-08-01 17:48:24.000000000","message":"You\u0027re right, I missed that. I also realized I forgot to check if the rule already exists. Will include those two checks in next patch.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"        access \u003d self.db.share_snapshot_access_create(ctx, values)"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1490,"context_line":"            host \u003d snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027]"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"            self.share_rpcapi.snapshot_allow_access(ctx,"},{"line_number":1493,"context_line":"                                                    snapshot_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_e3bb640d","line":1490,"range":{"start_line":1489,"start_character":8,"end_line":1490,"end_character":62},"updated":"2016-07-26 18:41:59.000000000","message":"this is usually done in rpcapi","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"        access \u003d self.db.share_snapshot_access_create(ctx, values)"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1490,"context_line":"            host \u003d snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027]"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"            self.share_rpcapi.snapshot_allow_access(ctx,"},{"line_number":1493,"context_line":"                                                    snapshot_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_a878622c","line":1490,"range":{"start_line":1489,"start_character":8,"end_line":1490,"end_character":62},"in_reply_to":"dada55a8_e3bb640d","updated":"2016-08-01 17:48:24.000000000","message":"Yep, removed.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"        access \u003d self.db.share_snapshot_access_create(ctx, values)"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1490,"context_line":"            host \u003d snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027]"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"            self.share_rpcapi.snapshot_allow_access(ctx,"},{"line_number":1493,"context_line":"                                                    snapshot_instance[\u0027id\u0027],"},{"line_number":1494,"context_line":"                                                    access[\u0027id\u0027], host)"},{"line_number":1495,"context_line":""},{"line_number":1496,"context_line":"        return {"},{"line_number":1497,"context_line":"            \u0027snapshot_id\u0027: snapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_1a2c8449","line":1494,"range":{"start_line":1489,"start_character":0,"end_line":1494,"end_character":71},"updated":"2016-07-25 01:15:50.000000000","message":"snapshot replicas may not allow access changes from the secondary host... these snapshot instances\u0027 access state will be set to ERROR; is this what is intended?","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"        access \u003d self.db.share_snapshot_access_create(ctx, values)"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1490,"context_line":"            host \u003d snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027]"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"            self.share_rpcapi.snapshot_allow_access(ctx,"},{"line_number":1493,"context_line":"                                                    snapshot_instance[\u0027id\u0027],"},{"line_number":1494,"context_line":"                                                    access[\u0027id\u0027], host)"},{"line_number":1495,"context_line":""},{"line_number":1496,"context_line":"        return {"},{"line_number":1497,"context_line":"            \u0027snapshot_id\u0027: snapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c2f803c6","line":1494,"range":{"start_line":1489,"start_character":0,"end_line":1494,"end_character":71},"in_reply_to":"dada55a8_1a2c8449","updated":"2016-08-01 17:48:24.000000000","message":"As discussed on IRC, we\u0027ll leave this up for the drivers to decide what to do.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"097bf8ae5d0fd53d6d0ac277eaacd70483d1b89a","unresolved":false,"context_lines":[{"line_number":1514,"context_line":"        \"\"\"Returns all access rules for share snapshot.\"\"\""},{"line_number":1515,"context_line":"        rules \u003d self.db.share_snapshot_access_get_all_for_share_snapshot("},{"line_number":1516,"context_line":"            context, snapshot[\u0027id\u0027])"},{"line_number":1517,"context_line":"        return [{\u0027id\u0027: rule.id,"},{"line_number":1518,"context_line":"                 \u0027access_type\u0027: rule.access_type,"},{"line_number":1519,"context_line":"                 \u0027access_to\u0027: rule.access_to,"},{"line_number":1520,"context_line":"                 \u0027state\u0027: rule.state,"},{"line_number":1521,"context_line":"                 } for rule in rules]"},{"line_number":1522,"context_line":""},{"line_number":1523,"context_line":"    def snapshot_access_get(self, context, access_id):"},{"line_number":1524,"context_line":"        \"\"\"Returns snapshot access rule with the id.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_5add5c41","line":1521,"range":{"start_line":1517,"start_character":15,"end_line":1521,"end_character":37},"updated":"2016-07-25 01:15:50.000000000","message":"This should be done in a view builder..","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":1514,"context_line":"        \"\"\"Returns all access rules for share snapshot.\"\"\""},{"line_number":1515,"context_line":"        rules \u003d self.db.share_snapshot_access_get_all_for_share_snapshot("},{"line_number":1516,"context_line":"            context, snapshot[\u0027id\u0027])"},{"line_number":1517,"context_line":"        return [{\u0027id\u0027: rule.id,"},{"line_number":1518,"context_line":"                 \u0027access_type\u0027: rule.access_type,"},{"line_number":1519,"context_line":"                 \u0027access_to\u0027: rule.access_to,"},{"line_number":1520,"context_line":"                 \u0027state\u0027: rule.state,"},{"line_number":1521,"context_line":"                 } for rule in rules]"},{"line_number":1522,"context_line":""},{"line_number":1523,"context_line":"    def snapshot_access_get(self, context, access_id):"},{"line_number":1524,"context_line":"        \"\"\"Returns snapshot access rule with the id.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_a76e0bc7","line":1521,"range":{"start_line":1517,"start_character":15,"end_line":1521,"end_character":37},"in_reply_to":"dada55a8_5add5c41","updated":"2016-08-01 17:48:24.000000000","message":"Done","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":"        if snapshot[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE:"},{"line_number":1482,"context_line":"            msg \u003d (_(\"Share snapshot status must be %s\") %"},{"line_number":1483,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1484,"context_line":"            raise exception.InvalidShareSnapshot(reason\u003dmsg)"},{"line_number":1485,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_f56e31fe","line":1482,"range":{"start_line":1482,"start_character":54,"end_line":1482,"end_character":55},"updated":"2016-08-02 11:38:42.000000000","message":"period","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6ae85c3f29ca4dbb1d3e85b99392299eb4724cf2","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":"        if snapshot[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE:"},{"line_number":1482,"context_line":"            msg \u003d (_(\"Share snapshot status must be %s\") %"},{"line_number":1483,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1484,"context_line":"            raise exception.InvalidShareSnapshot(reason\u003dmsg)"},{"line_number":1485,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_d9387f40","line":1482,"range":{"start_line":1482,"start_character":54,"end_line":1482,"end_character":55},"in_reply_to":"bacf61ea_f56e31fe","updated":"2016-08-19 19:28:20.000000000","message":"Done","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def snapshot_allow_access(self, ctx, snapshot, access_type, access_to):"},{"line_number":1675,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1676,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        if snapshot[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE:"},{"line_number":1679,"context_line":"            msg \u003d (_(\"Share snapshot status must be %s.\") %"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_1ffeb4ad","line":1676,"range":{"start_line":1676,"start_character":8,"end_line":1676,"end_character":66},"updated":"2016-12-16 12:33:01.000000000","message":"you are doing share_snapshot_get again?","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def snapshot_allow_access(self, ctx, snapshot, access_type, access_to):"},{"line_number":1675,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1676,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        if snapshot[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE:"},{"line_number":1679,"context_line":"            msg \u003d (_(\"Share snapshot status must be %s.\") %"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_c728e088","line":1676,"range":{"start_line":1676,"start_character":8,"end_line":1676,"end_character":66},"in_reply_to":"1a6eadb0_1ffeb4ad","updated":"2016-12-16 21:14:09.000000000","message":"Yes. Refreshing the model to make sure all fields are populated.","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def snapshot_allow_access(self, ctx, snapshot, access_type, access_to):"},{"line_number":1675,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1676,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        if snapshot[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE:"},{"line_number":1679,"context_line":"            msg \u003d (_(\"Share snapshot status must be %s.\") %"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_b67c8fb6","line":1676,"range":{"start_line":1676,"start_character":8,"end_line":1676,"end_character":66},"in_reply_to":"1a6eadb0_c728e088","updated":"2016-12-23 18:01:08.000000000","message":"this is the share/API, you are receiving a request to allow access, and you are not doing any operation on the snapshot model in the api/v2/share_snapshots","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":1684,"context_line":"            ctx, snapshot[\u0027id\u0027], access_type, access_to)"},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"        if len(access_list) \u003e 0:"},{"line_number":1687,"context_line":"            raise exception.ShareAccessExists(access_type\u003daccess_type,"},{"line_number":1688,"context_line":"                                              access\u003daccess_to)"},{"line_number":1689,"context_line":""},{"line_number":1690,"context_line":"        values \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_bfb2204a","line":1687,"range":{"start_line":1687,"start_character":28,"end_line":1687,"end_character":45},"updated":"2016-12-16 12:33:01.000000000","message":"ShareSnapshotAccess","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":1684,"context_line":"            ctx, snapshot[\u0027id\u0027], access_type, access_to)"},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"        if len(access_list) \u003e 0:"},{"line_number":1687,"context_line":"            raise exception.ShareAccessExists(access_type\u003daccess_type,"},{"line_number":1688,"context_line":"                                              access\u003daccess_to)"},{"line_number":1689,"context_line":""},{"line_number":1690,"context_line":"        values \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_871c286b","line":1687,"range":{"start_line":1687,"start_character":28,"end_line":1687,"end_character":45},"in_reply_to":"1a6eadb0_bfb2204a","updated":"2016-12-16 21:14:09.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":1704,"context_line":""},{"line_number":1705,"context_line":"    def snapshot_deny_access(self, ctx, snapshot, access):"},{"line_number":1706,"context_line":"        \"\"\"Deny access to a share snapshot.\"\"\""},{"line_number":1707,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1708,"context_line":""},{"line_number":1709,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1710,"context_line":"            self.share_rpcapi.snapshot_deny_access(ctx,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_7faa4886","line":1707,"range":{"start_line":1707,"start_character":8,"end_line":1707,"end_character":66},"updated":"2016-12-16 12:33:01.000000000","message":"you are doing share_snapshot_get again?","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":1704,"context_line":""},{"line_number":1705,"context_line":"    def snapshot_deny_access(self, ctx, snapshot, access):"},{"line_number":1706,"context_line":"        \"\"\"Deny access to a share snapshot.\"\"\""},{"line_number":1707,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1708,"context_line":""},{"line_number":1709,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1710,"context_line":"            self.share_rpcapi.snapshot_deny_access(ctx,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_16446372","line":1707,"range":{"start_line":1707,"start_character":8,"end_line":1707,"end_character":66},"in_reply_to":"1a6eadb0_7faa4886","updated":"2016-12-23 18:01:08.000000000","message":"same as above","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            constants.ExtraSpecs.CREATE_SHARE_FROM_SNAPSHOT_SUPPORT)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            snapshot_support \u003d strutils.bool_from_string("},{"line_number":276,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":277,"context_line":"                    constants.ExtraSpecs.SNAPSHOT_SUPPORT,"},{"line_number":278,"context_line":"                    snapshot_support_default)"},{"line_number":279,"context_line":"                if share_type else snapshot_support_default,"},{"line_number":280,"context_line":"                strict\u003dTrue)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"            create_share_from_snapshot_support \u003d strutils.bool_from_string("},{"line_number":283,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":284,"context_line":"                    constants.ExtraSpecs.CREATE_SHARE_FROM_SNAPSHOT_SUPPORT,"},{"line_number":285,"context_line":"                    create_share_from_snapshot_support_default)"},{"line_number":286,"context_line":"                if share_type else create_share_from_snapshot_support_default,"},{"line_number":287,"context_line":"                strict\u003dTrue)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            replication_type \u003d share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":290,"context_line":"                \u0027replication_type\u0027) if share_type else None"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"            mount_snapshot_support \u003d strutils.bool_from_string("},{"line_number":293,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":294,"context_line":"                    \u0027mount_snapshot_support\u0027, False) if share_type else False,"},{"line_number":295,"context_line":"                strict\u003dTrue)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        except ValueError as e:"},{"line_number":298,"context_line":"            raise exception.InvalidParameterValue(six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_5ff47e86","line":295,"range":{"start_line":275,"start_character":12,"end_line":295,"end_character":28},"updated":"2016-12-18 19:26:24.000000000","message":"All the boolean extra-spec keys in this must use parse_boolean_extra_spec from share_types in order to support the \u003cis\u003e true/false semantics that was introduced in the scheduler.","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7d1dccf373a8e78680862237223df24553dd692d","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            constants.ExtraSpecs.CREATE_SHARE_FROM_SNAPSHOT_SUPPORT)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            snapshot_support \u003d strutils.bool_from_string("},{"line_number":276,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":277,"context_line":"                    constants.ExtraSpecs.SNAPSHOT_SUPPORT,"},{"line_number":278,"context_line":"                    snapshot_support_default)"},{"line_number":279,"context_line":"                if share_type else snapshot_support_default,"},{"line_number":280,"context_line":"                strict\u003dTrue)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"            create_share_from_snapshot_support \u003d strutils.bool_from_string("},{"line_number":283,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":284,"context_line":"                    constants.ExtraSpecs.CREATE_SHARE_FROM_SNAPSHOT_SUPPORT,"},{"line_number":285,"context_line":"                    create_share_from_snapshot_support_default)"},{"line_number":286,"context_line":"                if share_type else create_share_from_snapshot_support_default,"},{"line_number":287,"context_line":"                strict\u003dTrue)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            replication_type \u003d share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":290,"context_line":"                \u0027replication_type\u0027) if share_type else None"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"            mount_snapshot_support \u003d strutils.bool_from_string("},{"line_number":293,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":294,"context_line":"                    \u0027mount_snapshot_support\u0027, False) if share_type else False,"},{"line_number":295,"context_line":"                strict\u003dTrue)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        except ValueError as e:"},{"line_number":298,"context_line":"            raise exception.InvalidParameterValue(six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":22,"id":"da4df55a_e5356346","line":295,"range":{"start_line":275,"start_character":12,"end_line":295,"end_character":28},"in_reply_to":"1a6eadb0_2ab45533","updated":"2016-12-23 17:52:04.000000000","message":"Actually I fixed this on rebase","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            constants.ExtraSpecs.CREATE_SHARE_FROM_SNAPSHOT_SUPPORT)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            snapshot_support \u003d strutils.bool_from_string("},{"line_number":276,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":277,"context_line":"                    constants.ExtraSpecs.SNAPSHOT_SUPPORT,"},{"line_number":278,"context_line":"                    snapshot_support_default)"},{"line_number":279,"context_line":"                if share_type else snapshot_support_default,"},{"line_number":280,"context_line":"                strict\u003dTrue)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"            create_share_from_snapshot_support \u003d strutils.bool_from_string("},{"line_number":283,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":284,"context_line":"                    constants.ExtraSpecs.CREATE_SHARE_FROM_SNAPSHOT_SUPPORT,"},{"line_number":285,"context_line":"                    create_share_from_snapshot_support_default)"},{"line_number":286,"context_line":"                if share_type else create_share_from_snapshot_support_default,"},{"line_number":287,"context_line":"                strict\u003dTrue)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            replication_type \u003d share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":290,"context_line":"                \u0027replication_type\u0027) if share_type else None"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"            mount_snapshot_support \u003d strutils.bool_from_string("},{"line_number":293,"context_line":"                share_type.get(\u0027extra_specs\u0027, {}).get("},{"line_number":294,"context_line":"                    \u0027mount_snapshot_support\u0027, False) if share_type else False,"},{"line_number":295,"context_line":"                strict\u003dTrue)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        except ValueError as e:"},{"line_number":298,"context_line":"            raise exception.InvalidParameterValue(six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_2ab45533","line":295,"range":{"start_line":275,"start_character":12,"end_line":295,"end_character":28},"in_reply_to":"1a6eadb0_5ff47e86","updated":"2016-12-23 17:51:33.000000000","message":"I will look into this in a later patchset, feel free to -1 again to remind me. I am adding a FIXME","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":1671,"context_line":"                     \" New size: %(size)s\") % {\u0027id\u0027: share[\u0027id\u0027],"},{"line_number":1672,"context_line":"                                               \u0027size\u0027: new_size})"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def snapshot_allow_access(self, ctx, snapshot, access_type, access_to):"},{"line_number":1675,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1676,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1677,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_52cab56f","line":1674,"range":{"start_line":1674,"start_character":36,"end_line":1674,"end_character":39},"updated":"2016-12-18 19:26:24.000000000","message":"other methods in this file use \"context\"","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d021bdaac1a82df19ed14c07ca5b227922e83bfa","unresolved":false,"context_lines":[{"line_number":1671,"context_line":"                     \" New size: %(size)s\") % {\u0027id\u0027: share[\u0027id\u0027],"},{"line_number":1672,"context_line":"                                               \u0027size\u0027: new_size})"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def snapshot_allow_access(self, ctx, snapshot, access_type, access_to):"},{"line_number":1675,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1676,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1677,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_d6ed8b8f","line":1674,"range":{"start_line":1674,"start_character":36,"end_line":1674,"end_character":39},"in_reply_to":"1a6eadb0_52cab56f","updated":"2016-12-20 16:10:32.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1676,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        if snapshot[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE:"},{"line_number":1679,"context_line":"            msg \u003d (_(\"Share snapshot status must be %s.\") %"},{"line_number":1680,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1681,"context_line":"            raise exception.InvalidShareSnapshot(reason\u003dmsg)"},{"line_number":1682,"context_line":""},{"line_number":1683,"context_line":"        access_list \u003d self.db.share_snapshot_access_get_all_by_type_and_access("},{"line_number":1684,"context_line":"            ctx, snapshot[\u0027id\u0027], access_type, access_to)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_f2b2e105","line":1681,"range":{"start_line":1678,"start_character":0,"end_line":1681,"end_character":60},"updated":"2016-12-18 19:26:24.000000000","message":"some snapshot instances can be in conflicting states, i.e, still creating, or deleting. Access transactions must be disallowed in that case.","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"        \"\"\"Allow access to a share snapshot.\"\"\""},{"line_number":1676,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        if snapshot[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE:"},{"line_number":1679,"context_line":"            msg \u003d (_(\"Share snapshot status must be %s.\") %"},{"line_number":1680,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1681,"context_line":"            raise exception.InvalidShareSnapshot(reason\u003dmsg)"},{"line_number":1682,"context_line":""},{"line_number":1683,"context_line":"        access_list \u003d self.db.share_snapshot_access_get_all_by_type_and_access("},{"line_number":1684,"context_line":"            ctx, snapshot[\u0027id\u0027], access_type, access_to)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_bab9b77b","line":1681,"range":{"start_line":1678,"start_character":0,"end_line":1681,"end_character":60},"in_reply_to":"1a6eadb0_f2b2e105","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":1706,"context_line":"        \"\"\"Deny access to a share snapshot.\"\"\""},{"line_number":1707,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1708,"context_line":""},{"line_number":1709,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1710,"context_line":"            self.share_rpcapi.snapshot_deny_access(ctx,"},{"line_number":1711,"context_line":"                                                   snapshot_instance,"},{"line_number":1712,"context_line":"                                                   access)"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"    def snapshot_access_get_all(self, context, snapshot):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_32945943","line":1711,"range":{"start_line":1709,"start_character":0,"end_line":1711,"end_character":60},"updated":"2016-12-18 19:26:24.000000000","message":"same comment as above. need to check the \u0027status\u0027 of all snapshot instances before allowing this action","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":1706,"context_line":"        \"\"\"Deny access to a share snapshot.\"\"\""},{"line_number":1707,"context_line":"        snapshot \u003d self.db.share_snapshot_get(ctx, snapshot[\u0027id\u0027])"},{"line_number":1708,"context_line":""},{"line_number":1709,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1710,"context_line":"            self.share_rpcapi.snapshot_deny_access(ctx,"},{"line_number":1711,"context_line":"                                                   snapshot_instance,"},{"line_number":1712,"context_line":"                                                   access)"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"    def snapshot_access_get_all(self, context, snapshot):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_9ab4fbf2","line":1711,"range":{"start_line":1709,"start_character":0,"end_line":1711,"end_character":60},"in_reply_to":"1a6eadb0_32945943","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":1722,"context_line":"        rule \u003d self.db.share_snapshot_access_get(context, access_id)"},{"line_number":1723,"context_line":"        return rule"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"    def snapshot_export_locations_get(self, context, snapshot):"},{"line_number":1726,"context_line":"        export_locations \u003d []"},{"line_number":1727,"context_line":""},{"line_number":1728,"context_line":"        for si in snapshot.instances:"},{"line_number":1729,"context_line":"            si_els \u003d self.db.share_snapshot_instance_export_locations_get("},{"line_number":1730,"context_line":"                context, si[\u0027id\u0027])"},{"line_number":1731,"context_line":"            export_locations.extend(si_els)"},{"line_number":1732,"context_line":""},{"line_number":1733,"context_line":"        return export_locations"},{"line_number":1734,"context_line":""},{"line_number":1735,"context_line":"    def snapshot_export_location_get(self, context, el_id):"},{"line_number":1736,"context_line":"        return self.db.share_snapshot_instance_export_location_get(context,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_5291d551","line":1733,"range":{"start_line":1725,"start_character":0,"end_line":1733,"end_character":31},"updated":"2016-12-18 19:26:24.000000000","message":"You could move this to the database layer and remove these database access methods from this file... the database handler can be used directly to call these methods across all services","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":1722,"context_line":"        rule \u003d self.db.share_snapshot_access_get(context, access_id)"},{"line_number":1723,"context_line":"        return rule"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"    def snapshot_export_locations_get(self, context, snapshot):"},{"line_number":1726,"context_line":"        export_locations \u003d []"},{"line_number":1727,"context_line":""},{"line_number":1728,"context_line":"        for si in snapshot.instances:"},{"line_number":1729,"context_line":"            si_els \u003d self.db.share_snapshot_instance_export_locations_get("},{"line_number":1730,"context_line":"                context, si[\u0027id\u0027])"},{"line_number":1731,"context_line":"            export_locations.extend(si_els)"},{"line_number":1732,"context_line":""},{"line_number":1733,"context_line":"        return export_locations"},{"line_number":1734,"context_line":""},{"line_number":1735,"context_line":"    def snapshot_export_location_get(self, context, el_id):"},{"line_number":1736,"context_line":"        return self.db.share_snapshot_instance_export_location_get(context,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_7a663f2a","line":1733,"range":{"start_line":1725,"start_character":0,"end_line":1733,"end_character":31},"in_reply_to":"1a6eadb0_5291d551","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":1847,"context_line":""},{"line_number":1848,"context_line":"        access \u003d self.db.share_snapshot_access_create(context, values)"},{"line_number":1849,"context_line":""},{"line_number":1850,"context_line":"        if any(instance[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"},{"line_number":1851,"context_line":"               for instance in snapshot.instances):"},{"line_number":1852,"context_line":"            msg \u003d (_(\"Status of all share snapshot instances must be %s.\") %"},{"line_number":1853,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1854,"context_line":"            raise exception.InvalidShareSnapshotInstance(reason\u003dmsg)"},{"line_number":1855,"context_line":""},{"line_number":1856,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1857,"context_line":"            self.share_rpcapi.snapshot_update_access("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2dc4728f","line":1854,"range":{"start_line":1850,"start_character":0,"end_line":1854,"end_character":68},"updated":"2017-01-23 02:17:58.000000000","message":"You must check this before you create the database row.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":1847,"context_line":""},{"line_number":1848,"context_line":"        access \u003d self.db.share_snapshot_access_create(context, values)"},{"line_number":1849,"context_line":""},{"line_number":1850,"context_line":"        if any(instance[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"},{"line_number":1851,"context_line":"               for instance in snapshot.instances):"},{"line_number":1852,"context_line":"            msg \u003d (_(\"Status of all share snapshot instances must be %s.\") %"},{"line_number":1853,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1854,"context_line":"            raise exception.InvalidShareSnapshotInstance(reason\u003dmsg)"},{"line_number":1855,"context_line":""},{"line_number":1856,"context_line":"        for snapshot_instance in snapshot.instances:"},{"line_number":1857,"context_line":"            self.share_rpcapi.snapshot_update_access("}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_154c0a9d","line":1854,"range":{"start_line":1850,"start_character":0,"end_line":1854,"end_character":68},"in_reply_to":"5a3905b3_2dc4728f","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":1864,"context_line":""},{"line_number":1865,"context_line":"        if any(instance[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"},{"line_number":1866,"context_line":"               for instance in snapshot.instances):"},{"line_number":1867,"context_line":"            msg \u003d (_(\"Status of all share snapshot instances must be %s.\") %"},{"line_number":1868,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1869,"context_line":"            raise exception.InvalidShareSnapshotInstance(reason\u003dmsg)"},{"line_number":1870,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_cd3f6e85","line":1867,"range":{"start_line":1867,"start_character":22,"end_line":1867,"end_character":67},"updated":"2017-01-23 02:17:58.000000000","message":"Lets make the error messages for snapshot-access-allow and snapshot-access-deny match that of the shares","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":1864,"context_line":""},{"line_number":1865,"context_line":"        if any(instance[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"},{"line_number":1866,"context_line":"               for instance in snapshot.instances):"},{"line_number":1867,"context_line":"            msg \u003d (_(\"Status of all share snapshot instances must be %s.\") %"},{"line_number":1868,"context_line":"                   constants.STATUS_AVAILABLE)"},{"line_number":1869,"context_line":"            raise exception.InvalidShareSnapshotInstance(reason\u003dmsg)"},{"line_number":1870,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_380c9bec","line":1867,"range":{"start_line":1867,"start_character":22,"end_line":1867,"end_character":67},"in_reply_to":"5a3905b3_cd3f6e85","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c80d51c1698af86091d30227ff220714f5ccde93","unresolved":false,"context_lines":[{"line_number":1890,"context_line":"    def snapshot_export_locations_get(self, context, snapshot):"},{"line_number":1891,"context_line":"        return self.db.share_snapshot_export_locations_get(context, snapshot)"},{"line_number":1892,"context_line":""},{"line_number":1893,"context_line":"    def snapshot_export_location_get(self, context, el_id):"},{"line_number":1894,"context_line":"        return self.db.share_snapshot_instance_export_location_get(context,"},{"line_number":1895,"context_line":"                                                                   el_id)"}],"source_content_type":"text/x-python","patch_set":56,"id":"5a3905b3_255d2b15","line":1893,"range":{"start_line":1893,"start_character":8,"end_line":1893,"end_character":36},"updated":"2017-01-24 05:15:07.000000000","message":"nit: might be more clear to call this function snapshot_export_location_get_by_id.\n\nI initially thought this function name is exactly the same as the one above and finally realized the only difference is \"s\":).","commit_id":"142b2d3a405c9073e5c3d2a35598c5babf72523b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd7e63451dbfd804f5d87ac8a740fb2f92def4e6","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"    def snapshot_export_locations_get(self, context, snapshot):"},{"line_number":1897,"context_line":"        return self.db.share_snapshot_export_locations_get(context, snapshot)"},{"line_number":1898,"context_line":""},{"line_number":1899,"context_line":"    def snapshot_export_location_get(self, context, el_id):"},{"line_number":1900,"context_line":"        return self.db.share_snapshot_instance_export_location_get(context,"},{"line_number":1901,"context_line":"                                                                   el_id)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_6532d3a8","line":1899,"range":{"start_line":1899,"start_character":8,"end_line":1899,"end_character":36},"updated":"2017-01-24 05:17:19.000000000","message":"I don\u0027t know why I was looking at patch set 56.  Copied the comments to here.\n\nnit: might be more clear to call this function snapshot_export_location_get_by_id.\n\nI initially thought this function name is exactly the same as the one above and finally realized the only difference is \"s\":).","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"    def snapshot_export_locations_get(self, context, snapshot):"},{"line_number":1897,"context_line":"        return self.db.share_snapshot_export_locations_get(context, snapshot)"},{"line_number":1898,"context_line":""},{"line_number":1899,"context_line":"    def snapshot_export_location_get(self, context, el_id):"},{"line_number":1900,"context_line":"        return self.db.share_snapshot_instance_export_location_get(context,"},{"line_number":1901,"context_line":"                                                                   el_id)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_280b37d7","line":1899,"range":{"start_line":1899,"start_character":8,"end_line":1899,"end_character":36},"in_reply_to":"5a3905b3_6532d3a8","updated":"2017-01-24 12:05:00.000000000","message":"I liked your suggestion Xing, but I grepped the code and I see it is not common at all to use \"_by_id\", so I\u0027d prefer to leave as is for consistency.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"manila/share/driver.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":447,"context_line":"        raise NotImplementedError()"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":450,"context_line":"        \"\"\"Is called to create snapshot."},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        :param context: Current context"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_a4bf69ce","line":449,"range":{"start_line":449,"start_character":4,"end_line":449,"end_character":68},"updated":"2016-08-02 11:38:42.000000000","message":"How about add the description about export_location. Let the vendor driver maintainer know how to return the export_location and what is the export_location for snapshot.  or is_admin_only?","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":447,"context_line":"        raise NotImplementedError()"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":450,"context_line":"        \"\"\"Is called to create snapshot."},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        :param context: Current context"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_4d75ffc8","line":449,"range":{"start_line":449,"start_character":4,"end_line":449,"end_character":68},"in_reply_to":"bacf61ea_a4bf69ce","updated":"2016-08-12 00:39:32.000000000","message":"indeed, the driver interface and docstrings should be updated","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":555,"context_line":"        raise NotImplementedError()"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":558,"context_line":"        \"\"\"Is called to create snapshot."},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        :param context: Current context"},{"line_number":561,"context_line":"        :param snapshot: Snapshot model. Share model could be"},{"line_number":562,"context_line":"            retrieved through snapshot[\u0027share\u0027]."},{"line_number":563,"context_line":"        :param share_server: Share server model or None."},{"line_number":564,"context_line":"        \"\"\""},{"line_number":565,"context_line":"        raise NotImplementedError()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":568,"context_line":"        \"\"\"Is called to remove share.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_ff1f38b4","line":565,"range":{"start_line":557,"start_character":2,"end_line":565,"end_character":35},"updated":"2016-12-16 12:33:01.000000000","message":"please update this docstring to inform what the driver has to return if it supports mountable snapshot","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":808,"context_line":"        UnmanageInvalidShare exception, specifying a reason for the failure."},{"line_number":809,"context_line":"        \"\"\""},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    def manage_existing_snapshot(self, snapshot, driver_options):"},{"line_number":812,"context_line":"        \"\"\"Brings an existing snapshot under Manila management."},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        If provided snapshot is not valid, then raise a"},{"line_number":815,"context_line":"        ManageInvalidShareSnapshot exception, specifying a reason for"},{"line_number":816,"context_line":"        the failure."},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"        :param snapshot: ShareSnapshotInstance model with ShareSnapshot data."},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        Example::"},{"line_number":821,"context_line":"            {"},{"line_number":822,"context_line":"            \u0027id\u0027: \u003cinstance id\u003e,"},{"line_number":823,"context_line":"            \u0027snapshot_id\u0027: \u003c snapshot id\u003e,"},{"line_number":824,"context_line":"            \u0027provider_location\u0027: \u003clocation\u003e,"},{"line_number":825,"context_line":"            ..."},{"line_number":826,"context_line":"            }"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        :param driver_options: Optional driver-specific options provided"},{"line_number":829,"context_line":"            by admin."},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        Example::"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"            {"},{"line_number":834,"context_line":"            \u0027key\u0027: \u0027value\u0027,"},{"line_number":835,"context_line":"            ..."},{"line_number":836,"context_line":"            }"},{"line_number":837,"context_line":""},{"line_number":838,"context_line":"        :return: model_update dictionary with required key \u0027size\u0027,"},{"line_number":839,"context_line":"            which should contain size of the share snapshot."},{"line_number":840,"context_line":"        \"\"\""},{"line_number":841,"context_line":"        raise NotImplementedError()"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    def unmanage_snapshot(self, snapshot):"},{"line_number":844,"context_line":"        \"\"\"Removes the specified snapshot from Manila management."}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_ff765804","line":841,"range":{"start_line":811,"start_character":3,"end_line":841,"end_character":35},"updated":"2016-12-16 12:33:01.000000000","message":"please update this docstring to inform what drivers have to return when supporting mountable snapshots","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2051,"context_line":""},{"line_number":2052,"context_line":"    def snapshot_allow_access(self, context, snapshot, access,"},{"line_number":2053,"context_line":"                              share_server\u003dNone):"},{"line_number":2054,"context_line":"        \"\"\"Allow access to the snapshot."},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"        As on update_access, drivers must be mindful of this call for share"},{"line_number":2057,"context_line":"        replicas."}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_bfd4e0eb","line":2054,"range":{"start_line":2054,"start_character":8,"end_line":2054,"end_character":40},"updated":"2016-12-16 12:33:01.000000000","message":"describe the parameters please","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":2051,"context_line":""},{"line_number":2052,"context_line":"    def snapshot_allow_access(self, context, snapshot, access,"},{"line_number":2053,"context_line":"                              share_server\u003dNone):"},{"line_number":2054,"context_line":"        \"\"\"Allow access to the snapshot."},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"        As on update_access, drivers must be mindful of this call for share"},{"line_number":2057,"context_line":"        replicas."}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_690adf8b","line":2054,"range":{"start_line":2054,"start_character":8,"end_line":2054,"end_character":40},"in_reply_to":"1a6eadb0_bfd4e0eb","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2060,"context_line":""},{"line_number":2061,"context_line":"    def snapshot_deny_access(self, context, snapshot, access,"},{"line_number":2062,"context_line":"                             share_server\u003dNone):"},{"line_number":2063,"context_line":"        \"\"\"Deny access to the snapshot."},{"line_number":2064,"context_line":""},{"line_number":2065,"context_line":"        As on update_access, drivers must be mindful of this call for share"},{"line_number":2066,"context_line":"        replicas."}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_ffdad815","line":2063,"range":{"start_line":2063,"start_character":8,"end_line":2063,"end_character":39},"updated":"2016-12-16 12:33:01.000000000","message":"same as above","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":2060,"context_line":""},{"line_number":2061,"context_line":"    def snapshot_deny_access(self, context, snapshot, access,"},{"line_number":2062,"context_line":"                             share_server\u003dNone):"},{"line_number":2063,"context_line":"        \"\"\"Deny access to the snapshot."},{"line_number":2064,"context_line":""},{"line_number":2065,"context_line":"        As on update_access, drivers must be mindful of this call for share"},{"line_number":2066,"context_line":"        replicas."}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_c9f93382","line":2063,"range":{"start_line":2063,"start_character":8,"end_line":2063,"end_character":39},"in_reply_to":"1a6eadb0_ffdad815","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":2049,"context_line":"        \"\"\""},{"line_number":2050,"context_line":"        return None"},{"line_number":2051,"context_line":""},{"line_number":2052,"context_line":"    def snapshot_allow_access(self, context, snapshot, access,"},{"line_number":2053,"context_line":"                              share_server\u003dNone):"},{"line_number":2054,"context_line":"        \"\"\"Allow access to the snapshot."},{"line_number":2055,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_5278f52b","line":2052,"range":{"start_line":2052,"start_character":8,"end_line":2052,"end_character":29},"updated":"2016-12-18 19:26:24.000000000","message":"Have you thought about snapshot_update_access. Curious why you want to implement allow/deny and pass rules over RPC","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":2049,"context_line":"        \"\"\""},{"line_number":2050,"context_line":"        return None"},{"line_number":2051,"context_line":""},{"line_number":2052,"context_line":"    def snapshot_allow_access(self, context, snapshot, access,"},{"line_number":2053,"context_line":"                              share_server\u003dNone):"},{"line_number":2054,"context_line":"        \"\"\"Allow access to the snapshot."},{"line_number":2055,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_49b7e3d7","line":2052,"range":{"start_line":2052,"start_character":8,"end_line":2052,"end_character":29},"in_reply_to":"1a6eadb0_5278f52b","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":2053,"context_line":"                              share_server\u003dNone):"},{"line_number":2054,"context_line":"        \"\"\"Allow access to the snapshot."},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"        As on update_access, drivers must be mindful of this call for share"},{"line_number":2057,"context_line":"        replicas."},{"line_number":2058,"context_line":"        \"\"\""},{"line_number":2059,"context_line":"        raise NotImplementedError()"},{"line_number":2060,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_327b792b","line":2057,"range":{"start_line":2056,"start_character":29,"end_line":2057,"end_character":17},"updated":"2016-12-18 19:26:24.000000000","message":"What about scenarios when you have a mountable snapshot with some access rules and create a replica later... \n\nThe way replication interfaces are coded is they pass all the information required by the replica during the creation: this includes snapshot instances for all the snapshots that already exist on the source share, access rules that need to be applied on the replica, etc. Maybe you could do the same here by passing access rules down in the create_replicated_snapshot and update_replicated_snapshot methods so that the drivers can apply access rules on the replicas...","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":2053,"context_line":"                              share_server\u003dNone):"},{"line_number":2054,"context_line":"        \"\"\"Allow access to the snapshot."},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"        As on update_access, drivers must be mindful of this call for share"},{"line_number":2057,"context_line":"        replicas."},{"line_number":2058,"context_line":"        \"\"\""},{"line_number":2059,"context_line":"        raise NotImplementedError()"},{"line_number":2060,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_e9cfcf53","line":2057,"range":{"start_line":2056,"start_character":29,"end_line":2057,"end_character":17},"in_reply_to":"1a6eadb0_327b792b","updated":"2016-12-23 17:51:33.000000000","message":"I think it is better to invoke update_access only on replicas which replication type are different than \u0027dr\u0027, after replica creation is complete","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            retrieved through snapshot[\u0027share\u0027]."},{"line_number":624,"context_line":"        :param share_server: Share server model or None."},{"line_number":625,"context_line":"        :return: None or a dictionary with key \u0027export_locations\u0027 containing"},{"line_number":626,"context_line":"            a list of export locations, if supporting mountable snapshots."},{"line_number":627,"context_line":"        \"\"\""},{"line_number":628,"context_line":"        raise NotImplementedError()"},{"line_number":629,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_8d6006a7","line":626,"range":{"start_line":626,"start_character":43,"end_line":626,"end_character":73},"updated":"2017-01-23 02:17:58.000000000","message":"nit: snapshots can be mounted.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            retrieved through snapshot[\u0027share\u0027]."},{"line_number":624,"context_line":"        :param share_server: Share server model or None."},{"line_number":625,"context_line":"        :return: None or a dictionary with key \u0027export_locations\u0027 containing"},{"line_number":626,"context_line":"            a list of export locations, if supporting mountable snapshots."},{"line_number":627,"context_line":"        \"\"\""},{"line_number":628,"context_line":"        raise NotImplementedError()"},{"line_number":629,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_cf566f29","line":626,"range":{"start_line":626,"start_character":43,"end_line":626,"end_character":73},"in_reply_to":"5a3905b3_8d6006a7","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        :return: model_update dictionary with required key \u0027size\u0027,"},{"line_number":939,"context_line":"            which should contain size of the share snapshot, and key"},{"line_number":940,"context_line":"            \u0027export_locations\u0027 containing a list of export locations, if"},{"line_number":941,"context_line":"            supporting mountable snapshots."},{"line_number":942,"context_line":"        \"\"\""},{"line_number":943,"context_line":"        raise NotImplementedError()"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_ed5b4af4","line":941,"range":{"start_line":940,"start_character":70,"end_line":941,"end_character":42},"updated":"2017-01-23 02:17:58.000000000","message":"same","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        :return: model_update dictionary with required key \u0027size\u0027,"},{"line_number":939,"context_line":"            which should contain size of the share snapshot, and key"},{"line_number":940,"context_line":"            \u0027export_locations\u0027 containing a list of export locations, if"},{"line_number":941,"context_line":"            supporting mountable snapshots."},{"line_number":942,"context_line":"        \"\"\""},{"line_number":943,"context_line":"        raise NotImplementedError()"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6f3e5bdb","line":941,"range":{"start_line":940,"start_character":70,"end_line":941,"end_character":42},"in_reply_to":"5a3905b3_ed5b4af4","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":2207,"context_line":"        \"\"\"Update access rules for given snapshot."},{"line_number":2208,"context_line":""},{"line_number":2209,"context_line":"        Drivers should support 2 different cases in this method:"},{"line_number":2210,"context_line":"        1. Recovery after error - \u0027access_rules\u0027 contains all access_rules,"},{"line_number":2211,"context_line":"        \u0027add_rules\u0027 and \u0027delete_rules\u0027 shall be empty. Driver should clear any"},{"line_number":2212,"context_line":"        existent access rules and apply all access rules for given snapshot."},{"line_number":2213,"context_line":"        This recovery is made at driver start up."},{"line_number":2214,"context_line":""},{"line_number":2215,"context_line":"        2. Adding/Deleting of several access rules - \u0027access_rules\u0027 contains"},{"line_number":2216,"context_line":"        all access_rules, \u0027add_rules\u0027 and \u0027delete_rules\u0027 contain rules which"},{"line_number":2217,"context_line":"        should be added/deleted. Driver can ignore rules in \u0027access_rules\u0027 and"},{"line_number":2218,"context_line":"        apply only rules from \u0027add_rules\u0027 and \u0027delete_rules\u0027."},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"        :param context: Current context"},{"line_number":2221,"context_line":"        :param snapshot: Snapshot model with snapshot data."}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2dd1d2fa","line":2218,"range":{"start_line":2210,"start_character":0,"end_line":2218,"end_character":61},"updated":"2017-01-23 02:17:58.000000000","message":"access_rules should make sense to those back ends that can make bulk access updates. \n\nadd_rules and delete_rules must make sense to back ends that can not make bulk access rule changes. \n\nThose back ends that can\u0027t make bulk atomic access rule updates must however expect scenarios when add_rules and delete_rules can be [] -\u003e In such a situation, back ends must ensure that the rules in access_rules are adhered to, on the back end. \n\nAlso note that add_rules may pass a rule that has already been added. Don\u0027t error out. delete_rules may pass a rule that has never been added on the back end. Don\u0027t error out.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":2207,"context_line":"        \"\"\"Update access rules for given snapshot."},{"line_number":2208,"context_line":""},{"line_number":2209,"context_line":"        Drivers should support 2 different cases in this method:"},{"line_number":2210,"context_line":"        1. Recovery after error - \u0027access_rules\u0027 contains all access_rules,"},{"line_number":2211,"context_line":"        \u0027add_rules\u0027 and \u0027delete_rules\u0027 shall be empty. Driver should clear any"},{"line_number":2212,"context_line":"        existent access rules and apply all access rules for given snapshot."},{"line_number":2213,"context_line":"        This recovery is made at driver start up."},{"line_number":2214,"context_line":""},{"line_number":2215,"context_line":"        2. Adding/Deleting of several access rules - \u0027access_rules\u0027 contains"},{"line_number":2216,"context_line":"        all access_rules, \u0027add_rules\u0027 and \u0027delete_rules\u0027 contain rules which"},{"line_number":2217,"context_line":"        should be added/deleted. Driver can ignore rules in \u0027access_rules\u0027 and"},{"line_number":2218,"context_line":"        apply only rules from \u0027add_rules\u0027 and \u0027delete_rules\u0027."},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"        :param context: Current context"},{"line_number":2221,"context_line":"        :param snapshot: Snapshot model with snapshot data."}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_b2c34c88","line":2218,"range":{"start_line":2210,"start_character":0,"end_line":2218,"end_character":61},"in_reply_to":"5a3905b3_2dd1d2fa","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":2218,"context_line":"        apply only rules from \u0027add_rules\u0027 and \u0027delete_rules\u0027."},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"        :param context: Current context"},{"line_number":2221,"context_line":"        :param snapshot: Snapshot model with snapshot data."},{"line_number":2222,"context_line":"        :param access_rules: All access rules for given snapshot"},{"line_number":2223,"context_line":"        :param add_rules: Empty List or List of access rules which should be"},{"line_number":2224,"context_line":"               added. access_rules already contains these rules."}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_0dd17623","line":2221,"range":{"start_line":2221,"start_character":25,"end_line":2221,"end_character":58},"updated":"2017-01-23 02:17:58.000000000","message":"?","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":2218,"context_line":"        apply only rules from \u0027add_rules\u0027 and \u0027delete_rules\u0027."},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"        :param context: Current context"},{"line_number":2221,"context_line":"        :param snapshot: Snapshot model with snapshot data."},{"line_number":2222,"context_line":"        :param access_rules: All access rules for given snapshot"},{"line_number":2223,"context_line":"        :param add_rules: Empty List or List of access rules which should be"},{"line_number":2224,"context_line":"               added. access_rules already contains these rules."}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_f25074d6","line":2221,"range":{"start_line":2221,"start_character":25,"end_line":2221,"end_character":58},"in_reply_to":"5a3905b3_0dd17623","updated":"2017-01-23 19:06:08.000000000","message":"same as update_access","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/share/drivers/helpers.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self._ssh_exec(server, cmd)"},{"line_number":325,"context_line":"        self._sync_nfs_temp_and_perm_files(server)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def snapshot_deny_access(self, server, snapshot_name, access_type,"},{"line_number":328,"context_line":"                             access_to):"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        local_path \u003d os.path.join(self.configuration.share_mount_path,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_f4115105","line":327,"range":{"start_line":327,"start_character":4,"end_line":327,"end_character":28},"updated":"2016-11-17 17:39:41.000000000","message":"Why this one is not sync\u0027ed?","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self._ssh_exec(server, cmd)"},{"line_number":325,"context_line":"        self._sync_nfs_temp_and_perm_files(server)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def snapshot_deny_access(self, server, snapshot_name, access_type,"},{"line_number":328,"context_line":"                             access_to):"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        local_path \u003d os.path.join(self.configuration.share_mount_path,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_f21c9879","line":327,"range":{"start_line":327,"start_character":4,"end_line":327,"end_character":28},"in_reply_to":"7a77a97e_f4115105","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                              access_to):"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if access_type !\u003d \u0027user\u0027:"},{"line_number":587,"context_line":"            msg \u003d _(\u0027only user access type allowed\u0027)"},{"line_number":588,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_df527c66","line":587,"range":{"start_line":587,"start_character":49,"end_line":587,"end_character":51},"updated":"2016-12-16 12:33:01.000000000","message":"period","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                              access_to):"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if access_type !\u003d \u0027user\u0027:"},{"line_number":587,"context_line":"            msg \u003d _(\u0027only user access type allowed\u0027)"},{"line_number":588,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_6738ecd3","line":587,"range":{"start_line":587,"start_character":49,"end_line":587,"end_character":51},"in_reply_to":"1a6eadb0_df527c66","updated":"2016-12-16 21:14:09.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                all_users.remove(access_to)"},{"line_number":606,"context_line":"                self._set_valid_users(server, all_users, snapshot_name, \u0027ro\u0027)"},{"line_number":607,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":608,"context_line":"            LOG.warning(_LW(\"Access already does not exist.\"))"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_92c0cd2c","line":608,"range":{"start_line":608,"start_character":29,"end_line":608,"end_character":58},"updated":"2016-12-18 19:26:24.000000000","message":"this should be logged at debug level\n\nUser %s did not have access to snapshot %s.","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                all_users.remove(access_to)"},{"line_number":606,"context_line":"                self._set_valid_users(server, all_users, snapshot_name, \u0027ro\u0027)"},{"line_number":607,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":608,"context_line":"            LOG.warning(_LW(\"Access already does not exist.\"))"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_8a1d6964","line":608,"range":{"start_line":608,"start_character":29,"end_line":608,"end_character":58},"in_reply_to":"1a6eadb0_92c0cd2c","updated":"2016-12-23 17:51:33.000000000","message":"I believe a warning is better in this case because it is an unexpected situation.","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"}],"manila/share/drivers/lvm.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        device_name \u003d self._get_local_path(snapshot)"},{"line_number":359,"context_line":"        self._mount_device(snapshot, device_name)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        return {\u0027export_location\u0027: export}"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":364,"context_line":"        self._remove_export(context, snapshot)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_f4b6b1f7","line":361,"range":{"start_line":361,"start_character":8,"end_line":361,"end_character":42},"updated":"2016-11-17 17:39:41.000000000","message":"It should be list/tuple of export locations only.","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        device_name \u003d self._get_local_path(snapshot)"},{"line_number":359,"context_line":"        self._mount_device(snapshot, device_name)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        return {\u0027export_location\u0027: export}"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":364,"context_line":"        self._remove_export(context, snapshot)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_0cd01453","line":361,"range":{"start_line":361,"start_character":8,"end_line":361,"end_character":42},"in_reply_to":"7a77a97e_f4b6b1f7","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        self._extend_container(share, device_name, new_size)"},{"line_number":363,"context_line":"        self._execute(\u0027resize2fs\u0027, device_name, run_as_root\u003dTrue)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":366,"context_line":"        self._remove_export(context, snapshot)"},{"line_number":367,"context_line":"        # First we merge the snapshot LV and the share LV"},{"line_number":368,"context_line":"        # This won\u0027t actually do anything until the LV is reactivated"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_6dd75aed","line":365,"range":{"start_line":365,"start_character":0,"end_line":365,"end_character":71},"updated":"2017-01-23 02:17:58.000000000","message":"Changes to this method must be done in a separate patch, as a bug fix..","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        self._extend_container(share, device_name, new_size)"},{"line_number":363,"context_line":"        self._execute(\u0027resize2fs\u0027, device_name, run_as_root\u003dTrue)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":366,"context_line":"        self._remove_export(context, snapshot)"},{"line_number":367,"context_line":"        # First we merge the snapshot LV and the share LV"},{"line_number":368,"context_line":"        # This won\u0027t actually do anything until the LV is reactivated"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_3233dcac","line":365,"range":{"start_line":365,"start_character":0,"end_line":365,"end_character":71},"in_reply_to":"5a3905b3_6dd75aed","updated":"2017-01-23 19:06:08.000000000","message":"they only make sense in mountable snapshots context, which break revert_to_snapshot when introduced.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                               add_rules, delete_rules, share_server\u003dNone):"},{"line_number":409,"context_line":"        \"\"\"Update access rules for given snapshot."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        Drivers should support 2 different cases in this method:"},{"line_number":412,"context_line":"        1. Recovery after error - \u0027access_rules\u0027 contains all access_rules,"},{"line_number":413,"context_line":"        \u0027add_rules\u0027 and \u0027delete_rules\u0027 shall be empty. Driver should clear any"},{"line_number":414,"context_line":"        existent access rules and apply all access rules for given snapshot."},{"line_number":415,"context_line":"        This recovery is made at driver start up."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        2. Adding/Deleting of several access rules - \u0027access_rules\u0027 contains"},{"line_number":418,"context_line":"        all access_rules, \u0027add_rules\u0027 and \u0027delete_rules\u0027 contain rules which"},{"line_number":419,"context_line":"        should be added/deleted. Driver can ignore rules in \u0027access_rules\u0027 and"},{"line_number":420,"context_line":"        apply only rules from \u0027add_rules\u0027 and \u0027delete_rules\u0027."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        :param context: Current context"},{"line_number":423,"context_line":"        :param snapshot: Snapshot model with snapshot data."},{"line_number":424,"context_line":"        :param access_rules: All access rules for given snapshot"},{"line_number":425,"context_line":"        :param add_rules: Empty List or List of access rules which should be"},{"line_number":426,"context_line":"               added. access_rules already contains these rules."},{"line_number":427,"context_line":"        :param delete_rules: Empty List or List of access rules which should be"},{"line_number":428,"context_line":"               removed. access_rules doesn\u0027t contain these rules."},{"line_number":429,"context_line":"        :param share_server: None or Share server model"},{"line_number":430,"context_line":"        \"\"\""},{"line_number":431,"context_line":"        helper \u003d self._get_helper(snapshot[\u0027share\u0027])"},{"line_number":432,"context_line":"        for rule in (access_rules + add_rules + delete_rules):"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_ad0b028d","line":429,"range":{"start_line":411,"start_character":8,"end_line":429,"end_character":55},"updated":"2017-01-23 02:17:58.000000000","message":"?","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                               add_rules, delete_rules, share_server\u003dNone):"},{"line_number":409,"context_line":"        \"\"\"Update access rules for given snapshot."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        Drivers should support 2 different cases in this method:"},{"line_number":412,"context_line":"        1. Recovery after error - \u0027access_rules\u0027 contains all access_rules,"},{"line_number":413,"context_line":"        \u0027add_rules\u0027 and \u0027delete_rules\u0027 shall be empty. Driver should clear any"},{"line_number":414,"context_line":"        existent access rules and apply all access rules for given snapshot."},{"line_number":415,"context_line":"        This recovery is made at driver start up."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        2. Adding/Deleting of several access rules - \u0027access_rules\u0027 contains"},{"line_number":418,"context_line":"        all access_rules, \u0027add_rules\u0027 and \u0027delete_rules\u0027 contain rules which"},{"line_number":419,"context_line":"        should be added/deleted. Driver can ignore rules in \u0027access_rules\u0027 and"},{"line_number":420,"context_line":"        apply only rules from \u0027add_rules\u0027 and \u0027delete_rules\u0027."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        :param context: Current context"},{"line_number":423,"context_line":"        :param snapshot: Snapshot model with snapshot data."},{"line_number":424,"context_line":"        :param access_rules: All access rules for given snapshot"},{"line_number":425,"context_line":"        :param add_rules: Empty List or List of access rules which should be"},{"line_number":426,"context_line":"               added. access_rules already contains these rules."},{"line_number":427,"context_line":"        :param delete_rules: Empty List or List of access rules which should be"},{"line_number":428,"context_line":"               removed. access_rules doesn\u0027t contain these rules."},{"line_number":429,"context_line":"        :param share_server: None or Share server model"},{"line_number":430,"context_line":"        \"\"\""},{"line_number":431,"context_line":"        helper \u003d self._get_helper(snapshot[\u0027share\u0027])"},{"line_number":432,"context_line":"        for rule in (access_rules + add_rules + delete_rules):"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_32967c3f","line":429,"range":{"start_line":411,"start_character":8,"end_line":429,"end_character":55},"in_reply_to":"5a3905b3_ad0b028d","updated":"2017-01-23 19:06:08.000000000","message":"same as update_access","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        \"\"\""},{"line_number":431,"context_line":"        helper \u003d self._get_helper(snapshot[\u0027share\u0027])"},{"line_number":432,"context_line":"        for rule in (access_rules + add_rules + delete_rules):"},{"line_number":433,"context_line":"            rule[\u0027access_level\u0027] \u003d \u0027ro\u0027"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        helper.update_access(self.share_server,"},{"line_number":436,"context_line":"                             snapshot[\u0027name\u0027], access_rules,"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2df8f27a","line":433,"range":{"start_line":433,"start_character":12,"end_line":433,"end_character":32},"updated":"2017-01-23 02:17:58.000000000","message":"you\u0027re passed a reference to rules.. adding a property to the rule object is not recommended. make a dictionary.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        \"\"\""},{"line_number":431,"context_line":"        helper \u003d self._get_helper(snapshot[\u0027share\u0027])"},{"line_number":432,"context_line":"        for rule in (access_rules + add_rules + delete_rules):"},{"line_number":433,"context_line":"            rule[\u0027access_level\u0027] \u003d \u0027ro\u0027"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        helper.update_access(self.share_server,"},{"line_number":436,"context_line":"                             snapshot[\u0027name\u0027], access_rules,"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_32511c37","line":433,"range":{"start_line":433,"start_character":12,"end_line":433,"end_character":32},"in_reply_to":"5a3905b3_2df8f27a","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b26fb8aea1c76d0be266be2131b5bd960653fc70","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        self._execute(\u0027resize2fs\u0027, device_name, run_as_root\u003dTrue)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":366,"context_line":"        self._remove_export(context, snapshot)"},{"line_number":367,"context_line":"        # First we merge the snapshot LV and the share LV"},{"line_number":368,"context_line":"        # This won\u0027t actually do anything until the LV is reactivated"},{"line_number":369,"context_line":"        snap_lv_name \u003d \"%s/%s\" % (self.configuration.lvm_share_volume_group,"},{"line_number":370,"context_line":"                                  snapshot[\u0027name\u0027])"},{"line_number":371,"context_line":"        self._execute(\u0027lvconvert\u0027, \u0027--merge\u0027, snap_lv_name, run_as_root\u003dTrue)"},{"line_number":372,"context_line":"        # Unmount the share so we can deactivate it"},{"line_number":373,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":374,"context_line":"        self._unmount_device(share)"},{"line_number":375,"context_line":"        # Deactivate the share LV"},{"line_number":376,"context_line":"        share_lv_name \u003d \"%s/%s\" % (self.configuration.lvm_share_volume_group,"},{"line_number":377,"context_line":"                                   share[\u0027name\u0027])"},{"line_number":378,"context_line":"        self._execute(\u0027lvchange\u0027, \u0027-an\u0027, share_lv_name, run_as_root\u003dTrue)"},{"line_number":379,"context_line":"        # Reactivate the share LV. This will trigger the merge and delete the"},{"line_number":380,"context_line":"        # snapshot."},{"line_number":381,"context_line":"        self._execute(\u0027lvchange\u0027, \u0027-ay\u0027, share_lv_name, run_as_root\u003dTrue)"},{"line_number":382,"context_line":"        # Now recreate the snapshot that was destroyed by the merge"},{"line_number":383,"context_line":"        self._create_snapshot(context, snapshot)"},{"line_number":384,"context_line":"        # Finally we can mount the share again"},{"line_number":385,"context_line":"        device_name \u003d self._get_local_path(share)"},{"line_number":386,"context_line":"        self._mount_device(share, device_name)"},{"line_number":387,"context_line":"        device_name \u003d self._get_local_path(snapshot)"},{"line_number":388,"context_line":"        self._mount_device(snapshot, device_name)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":391,"context_line":"        self._create_snapshot(context, snapshot)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_28a7b7bd","line":388,"range":{"start_line":366,"start_character":8,"end_line":388,"end_character":49},"updated":"2017-01-24 10:02:16.000000000","message":"It looks like as separate bugfix.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        self._execute(\u0027resize2fs\u0027, device_name, run_as_root\u003dTrue)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":366,"context_line":"        self._remove_export(context, snapshot)"},{"line_number":367,"context_line":"        # First we merge the snapshot LV and the share LV"},{"line_number":368,"context_line":"        # This won\u0027t actually do anything until the LV is reactivated"},{"line_number":369,"context_line":"        snap_lv_name \u003d \"%s/%s\" % (self.configuration.lvm_share_volume_group,"},{"line_number":370,"context_line":"                                  snapshot[\u0027name\u0027])"},{"line_number":371,"context_line":"        self._execute(\u0027lvconvert\u0027, \u0027--merge\u0027, snap_lv_name, run_as_root\u003dTrue)"},{"line_number":372,"context_line":"        # Unmount the share so we can deactivate it"},{"line_number":373,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":374,"context_line":"        self._unmount_device(share)"},{"line_number":375,"context_line":"        # Deactivate the share LV"},{"line_number":376,"context_line":"        share_lv_name \u003d \"%s/%s\" % (self.configuration.lvm_share_volume_group,"},{"line_number":377,"context_line":"                                   share[\u0027name\u0027])"},{"line_number":378,"context_line":"        self._execute(\u0027lvchange\u0027, \u0027-an\u0027, share_lv_name, run_as_root\u003dTrue)"},{"line_number":379,"context_line":"        # Reactivate the share LV. This will trigger the merge and delete the"},{"line_number":380,"context_line":"        # snapshot."},{"line_number":381,"context_line":"        self._execute(\u0027lvchange\u0027, \u0027-ay\u0027, share_lv_name, run_as_root\u003dTrue)"},{"line_number":382,"context_line":"        # Now recreate the snapshot that was destroyed by the merge"},{"line_number":383,"context_line":"        self._create_snapshot(context, snapshot)"},{"line_number":384,"context_line":"        # Finally we can mount the share again"},{"line_number":385,"context_line":"        device_name \u003d self._get_local_path(share)"},{"line_number":386,"context_line":"        self._mount_device(share, device_name)"},{"line_number":387,"context_line":"        device_name \u003d self._get_local_path(snapshot)"},{"line_number":388,"context_line":"        self._mount_device(snapshot, device_name)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":391,"context_line":"        self._create_snapshot(context, snapshot)"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_28509731","line":388,"range":{"start_line":366,"start_character":8,"end_line":388,"end_character":49},"in_reply_to":"5a3905b3_28a7b7bd","updated":"2017-01-24 12:05:00.000000000","message":"see response to Goutham\u0027s comment in previous patchsets","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"manila/share/manager.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":1976,"context_line":"            self.db.share_snapshot_instance_export_location_delete(context,"},{"line_number":1977,"context_line":"                                                                   el[\u0027id\u0027])"},{"line_number":1978,"context_line":"        except exception.NotFound:"},{"line_number":1979,"context_line":"            LOG.info(_LI(\"Snapshot does not have export location. Moving on.\"))"},{"line_number":1980,"context_line":""},{"line_number":1981,"context_line":"        try:"},{"line_number":1982,"context_line":"            self.driver.delete_snapshot(context, snapshot_instance,"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_a3de8c6a","line":1979,"range":{"start_line":1979,"start_character":16,"end_line":1979,"end_character":20},"updated":"2016-07-26 18:41:59.000000000","message":"debug?","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":1976,"context_line":"            self.db.share_snapshot_instance_export_location_delete(context,"},{"line_number":1977,"context_line":"                                                                   el[\u0027id\u0027])"},{"line_number":1978,"context_line":"        except exception.NotFound:"},{"line_number":1979,"context_line":"            LOG.info(_LI(\"Snapshot does not have export location. Moving on.\"))"},{"line_number":1980,"context_line":""},{"line_number":1981,"context_line":"        try:"},{"line_number":1982,"context_line":"            self.driver.delete_snapshot(context, snapshot_instance,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_b3cad19f","line":1979,"range":{"start_line":1979,"start_character":16,"end_line":1979,"end_character":20},"in_reply_to":"dada55a8_a3de8c6a","updated":"2016-08-01 17:48:24.000000000","message":"Yep, I think debug makes more sense...","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":1934,"context_line":"            }"},{"line_number":1935,"context_line":""},{"line_number":1936,"context_line":"            self.db.share_snapshot_instance_export_location_create(context,"},{"line_number":1937,"context_line":"                                                                   values)"},{"line_number":1938,"context_line":""},{"line_number":1939,"context_line":"        if model_update.get(\u0027status\u0027) in (None, constants.STATUS_AVAILABLE):"},{"line_number":1940,"context_line":"            model_update[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_9f8d4e33","line":1937,"range":{"start_line":1937,"start_character":67,"end_line":1937,"end_character":73},"updated":"2016-08-02 11:38:42.000000000","message":"How about is_admin_only?  You already added it in ShareSnapshotInstanceExportLocations model.","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":1967,"context_line":"        rules \u003d self.db.share_snapshot_access_get_all_for_share_snapshot("},{"line_number":1968,"context_line":"            context, snapshot_instance[\u0027snapshot_id\u0027])"},{"line_number":1969,"context_line":""},{"line_number":1970,"context_line":"        for rule in rules:"},{"line_number":1971,"context_line":"            self.snapshot_deny_access(context, snapshot_instance_id,"},{"line_number":1972,"context_line":"                                      rule[\u0027id\u0027])"},{"line_number":1973,"context_line":""},{"line_number":1974,"context_line":"        try:"},{"line_number":1975,"context_line":"            el \u003d self.db.share_snapshot_instance_export_location_get("}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_8d525733","line":1972,"range":{"start_line":1970,"start_character":8,"end_line":1972,"end_character":49},"updated":"2016-08-12 00:39:32.000000000","message":"what if this fails? I assume we need the same try/except treatment as in delete_share_instance","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":2953,"context_line":""},{"line_number":2954,"context_line":"        return snapshot_instance_ref"},{"line_number":2955,"context_line":""},{"line_number":2956,"context_line":"    def snapshot_allow_access(self, context, snapshot_instance_id, access_id):"},{"line_number":2957,"context_line":"        snapshot_instance \u003d self.db.share_snapshot_instance_get("},{"line_number":2958,"context_line":"            context, snapshot_instance_id)"},{"line_number":2959,"context_line":"        access \u003d self.db.share_snapshot_access_get(context, access_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_e90dbc8f","line":2956,"range":{"start_line":2956,"start_character":3,"end_line":2956,"end_character":32},"updated":"2016-08-02 11:38:42.000000000","message":"please add unit test for this function, thanks","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"68ad3c424d7025e156b5724185a8c5fa670650a3","unresolved":false,"context_lines":[{"line_number":2970,"context_line":"            self.db.share_snapshot_instance_access_update_state("},{"line_number":2971,"context_line":"                context, mapping[\u0027id\u0027], constants.STATUS_ACTIVE)"},{"line_number":2972,"context_line":"        except Exception:"},{"line_number":2973,"context_line":"            self.db.share_snapshot_instance_access_update_state("},{"line_number":2974,"context_line":"                context, mapping[\u0027id\u0027], constants.STATUS_ERROR)"},{"line_number":2975,"context_line":""},{"line_number":2976,"context_line":"    def snapshot_deny_access(self, context, snapshot_instance_id, access_id):"},{"line_number":2977,"context_line":"        snapshot_instance \u003d self.db.share_snapshot_instance_get("}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_b03330f5","line":2974,"range":{"start_line":2973,"start_character":12,"end_line":2974,"end_character":63},"updated":"2016-08-12 00:39:32.000000000","message":"so you are swalling whatever exception the driver throws and just setting the status to error. How about logging the error and a friendly message? Same below\n\nSee other cases such as extend/shrink about swalling vs raising the exception.","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"809da61762a63b7332b93ba6355b70159ac7932f","unresolved":false,"context_lines":[{"line_number":2973,"context_line":"            self.db.share_snapshot_instance_access_update_state("},{"line_number":2974,"context_line":"                context, mapping[\u0027id\u0027], constants.STATUS_ERROR)"},{"line_number":2975,"context_line":""},{"line_number":2976,"context_line":"    def snapshot_deny_access(self, context, snapshot_instance_id, access_id):"},{"line_number":2977,"context_line":"        snapshot_instance \u003d self.db.share_snapshot_instance_get("},{"line_number":2978,"context_line":"            context, snapshot_instance_id)"},{"line_number":2979,"context_line":"        access \u003d self.db.share_snapshot_access_get(context, access_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_090bf07d","line":2976,"range":{"start_line":2976,"start_character":4,"end_line":2976,"end_character":77},"updated":"2016-08-02 11:38:42.000000000","message":"please add unit test for this function, thanks","commit_id":"6d6762d50b628c1292c754201e28724a9c2d604f"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":2247,"context_line":"                    snapshot_instance_id,"},{"line_number":2248,"context_line":"                    {\u0027status\u0027: constants.STATUS_ERROR})"},{"line_number":2249,"context_line":""},{"line_number":2250,"context_line":"        snapshot_export_location \u003d model_update.pop(\u0027export_location\u0027, None)"},{"line_number":2251,"context_line":""},{"line_number":2252,"context_line":"        if snapshot_export_location is not None:"},{"line_number":2253,"context_line":"            values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_1497ad48","line":2250,"range":{"start_line":2250,"start_character":8,"end_line":2250,"end_character":76},"updated":"2016-11-17 17:39:41.000000000","message":"Only plural should be used.","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":2247,"context_line":"                    snapshot_instance_id,"},{"line_number":2248,"context_line":"                    {\u0027status\u0027: constants.STATUS_ERROR})"},{"line_number":2249,"context_line":""},{"line_number":2250,"context_line":"        snapshot_export_location \u003d model_update.pop(\u0027export_location\u0027, None)"},{"line_number":2251,"context_line":""},{"line_number":2252,"context_line":"        if snapshot_export_location is not None:"},{"line_number":2253,"context_line":"            values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_2cd5d042","line":2250,"range":{"start_line":2250,"start_character":8,"end_line":2250,"end_character":76},"in_reply_to":"7a77a97e_1497ad48","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2259,"context_line":""},{"line_number":2260,"context_line":"        snapshot_export_locations \u003d model_update.pop(\u0027export_locations\u0027, None)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        if snapshot_export_locations is not None:"},{"line_number":2263,"context_line":"            for el in snapshot_export_locations:"},{"line_number":2264,"context_line":"                values \u003d {"},{"line_number":2265,"context_line":"                    \u0027share_snapshot_instance_id\u0027: snapshot_instance_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_1ae2422f","line":2262,"range":{"start_line":2262,"start_character":36,"end_line":2262,"end_character":48},"updated":"2016-12-16 12:33:01.000000000","message":"this will work if the list returned is empty, so I guess this could be refactored to \"if snapshot_export_locations:\"","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":2259,"context_line":""},{"line_number":2260,"context_line":"        snapshot_export_locations \u003d model_update.pop(\u0027export_locations\u0027, None)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        if snapshot_export_locations is not None:"},{"line_number":2263,"context_line":"            for el in snapshot_export_locations:"},{"line_number":2264,"context_line":"                values \u003d {"},{"line_number":2265,"context_line":"                    \u0027share_snapshot_instance_id\u0027: snapshot_instance_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_e7523c12","line":2262,"range":{"start_line":2262,"start_character":36,"end_line":2262,"end_character":48},"in_reply_to":"1a6eadb0_1ae2422f","updated":"2016-12-16 21:14:09.000000000","message":"If the list is empty, the for will not iterate.","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2301,"context_line":"        rules \u003d self.db.share_snapshot_access_get_all_for_share_snapshot("},{"line_number":2302,"context_line":"            context, snapshot_instance[\u0027snapshot_id\u0027])"},{"line_number":2303,"context_line":""},{"line_number":2304,"context_line":"        for rule in rules:"},{"line_number":2305,"context_line":"            self.snapshot_deny_access(context, snapshot_instance_id,"},{"line_number":2306,"context_line":"                                      rule[\u0027id\u0027])"},{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":"        try:"},{"line_number":2309,"context_line":"            els \u003d self.db.share_snapshot_instance_export_locations_get("}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_daf7ead0","line":2306,"range":{"start_line":2304,"start_character":8,"end_line":2306,"end_character":49},"updated":"2016-12-16 12:33:01.000000000","message":"what if it fails? need a try catch here","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":2301,"context_line":"        rules \u003d self.db.share_snapshot_access_get_all_for_share_snapshot("},{"line_number":2302,"context_line":"            context, snapshot_instance[\u0027snapshot_id\u0027])"},{"line_number":2303,"context_line":""},{"line_number":2304,"context_line":"        for rule in rules:"},{"line_number":2305,"context_line":"            self.snapshot_deny_access(context, snapshot_instance_id,"},{"line_number":2306,"context_line":"                                      rule[\u0027id\u0027])"},{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":"        try:"},{"line_number":2309,"context_line":"            els \u003d self.db.share_snapshot_instance_export_locations_get("}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_a7b84412","line":2306,"range":{"start_line":2304,"start_character":8,"end_line":2306,"end_character":49},"in_reply_to":"1a6eadb0_daf7ead0","updated":"2016-12-16 21:14:09.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d74e792c6cc1cc241fbdea54a5f8d11fd0bfcdad","unresolved":false,"context_lines":[{"line_number":2313,"context_line":"                self.db.share_snapshot_instance_export_location_delete("},{"line_number":2314,"context_line":"                    context, el[\u0027id\u0027])"},{"line_number":2315,"context_line":"        except exception.NotFound:"},{"line_number":2316,"context_line":"            LOG.debug(\"Snapshot does not have export location. Moving on.\")"},{"line_number":2317,"context_line":""},{"line_number":2318,"context_line":"        try:"},{"line_number":2319,"context_line":"            self.driver.delete_snapshot(context, snapshot_instance,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_1a67a2b7","line":2316,"range":{"start_line":2316,"start_character":53,"end_line":2316,"end_character":61},"updated":"2016-12-16 12:33:01.000000000","message":"locations","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"e389dd8c41174a85a05c84cb7757f178748f67db","unresolved":false,"context_lines":[{"line_number":2313,"context_line":"                self.db.share_snapshot_instance_export_location_delete("},{"line_number":2314,"context_line":"                    context, el[\u0027id\u0027])"},{"line_number":2315,"context_line":"        except exception.NotFound:"},{"line_number":2316,"context_line":"            LOG.debug(\"Snapshot does not have export location. Moving on.\")"},{"line_number":2317,"context_line":""},{"line_number":2318,"context_line":"        try:"},{"line_number":2319,"context_line":"            self.driver.delete_snapshot(context, snapshot_instance,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_c739c0a5","line":2316,"range":{"start_line":2316,"start_character":53,"end_line":2316,"end_character":61},"in_reply_to":"1a6eadb0_1a67a2b7","updated":"2016-12-16 21:14:09.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":2257,"context_line":"                    snapshot_instance_id,"},{"line_number":2258,"context_line":"                    {\u0027status\u0027: constants.STATUS_ERROR})"},{"line_number":2259,"context_line":""},{"line_number":2260,"context_line":"        snapshot_export_locations \u003d model_update.pop(\u0027export_locations\u0027, None)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        if snapshot_export_locations is not None:"},{"line_number":2263,"context_line":"            for el in snapshot_export_locations:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_72da5119","line":2260,"range":{"start_line":2260,"start_character":73,"end_line":2260,"end_character":77},"updated":"2016-12-18 19:26:24.000000000","message":"[]","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":2257,"context_line":"                    snapshot_instance_id,"},{"line_number":2258,"context_line":"                    {\u0027status\u0027: constants.STATUS_ERROR})"},{"line_number":2259,"context_line":""},{"line_number":2260,"context_line":"        snapshot_export_locations \u003d model_update.pop(\u0027export_locations\u0027, None)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        if snapshot_export_locations is not None:"},{"line_number":2263,"context_line":"            for el in snapshot_export_locations:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_a946b778","line":2260,"range":{"start_line":2260,"start_character":73,"end_line":2260,"end_character":77},"in_reply_to":"1a6eadb0_72da5119","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":2259,"context_line":""},{"line_number":2260,"context_line":"        snapshot_export_locations \u003d model_update.pop(\u0027export_locations\u0027, None)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        if snapshot_export_locations is not None:"},{"line_number":2263,"context_line":"            for el in snapshot_export_locations:"},{"line_number":2264,"context_line":"                values \u003d {"},{"line_number":2265,"context_line":"                    \u0027share_snapshot_instance_id\u0027: snapshot_instance_id,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_b2022971","line":2262,"range":{"start_line":2262,"start_character":0,"end_line":2262,"end_character":49},"updated":"2016-12-18 19:26:24.000000000","message":"not necessary if you use [] as default above","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":2259,"context_line":""},{"line_number":2260,"context_line":"        snapshot_export_locations \u003d model_update.pop(\u0027export_locations\u0027, None)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        if snapshot_export_locations is not None:"},{"line_number":2263,"context_line":"            for el in snapshot_export_locations:"},{"line_number":2264,"context_line":"                values \u003d {"},{"line_number":2265,"context_line":"                    \u0027share_snapshot_instance_id\u0027: snapshot_instance_id,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_0956cb29","line":2262,"range":{"start_line":2262,"start_character":0,"end_line":2262,"end_character":49},"in_reply_to":"1a6eadb0_b2022971","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":2310,"context_line":"                    \u0027rule\u0027: rule[\u0027id\u0027],"},{"line_number":2311,"context_line":"                    \u0027snapshot\u0027: snapshot_instance[\u0027snapshot_id\u0027],"},{"line_number":2312,"context_line":"                }"},{"line_number":2313,"context_line":"                LOG.warning(_LW(\"The driver was unable to remove the rule\""},{"line_number":2314,"context_line":"                                \"%(rule)s for snapshot %(snapshot)s. \""},{"line_number":2315,"context_line":"                                \"Moving on.\"), args)"},{"line_number":2316,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_32f7f98d","line":2313,"range":{"start_line":2313,"start_character":69,"end_line":2313,"end_character":73},"updated":"2016-12-18 19:26:24.000000000","message":"missing space","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":2310,"context_line":"                    \u0027rule\u0027: rule[\u0027id\u0027],"},{"line_number":2311,"context_line":"                    \u0027snapshot\u0027: snapshot_instance[\u0027snapshot_id\u0027],"},{"line_number":2312,"context_line":"                }"},{"line_number":2313,"context_line":"                LOG.warning(_LW(\"The driver was unable to remove the rule\""},{"line_number":2314,"context_line":"                                \"%(rule)s for snapshot %(snapshot)s. \""},{"line_number":2315,"context_line":"                                \"Moving on.\"), args)"},{"line_number":2316,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_a93dd7de","line":2313,"range":{"start_line":2313,"start_character":69,"end_line":2313,"end_character":73},"in_reply_to":"1a6eadb0_32f7f98d","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"                                \"Moving on.\"), args)"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        try:"},{"line_number":2318,"context_line":"            els \u003d self.db.share_snapshot_instance_export_locations_get("},{"line_number":2319,"context_line":"                context, snapshot_instance_id)"},{"line_number":2320,"context_line":""},{"line_number":2321,"context_line":"            for el in els:"},{"line_number":2322,"context_line":"                self.db.share_snapshot_instance_export_location_delete("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_92ee0db3","line":2319,"range":{"start_line":2318,"start_character":0,"end_line":2319,"end_character":46},"updated":"2016-12-18 19:26:24.000000000","message":"as noted in the db implementation, share_snapshot_instance_export_locations_get should not raise an exception if there are no export locations.","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"                                \"Moving on.\"), args)"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        try:"},{"line_number":2318,"context_line":"            els \u003d self.db.share_snapshot_instance_export_locations_get("},{"line_number":2319,"context_line":"                context, snapshot_instance_id)"},{"line_number":2320,"context_line":""},{"line_number":2321,"context_line":"            for el in els:"},{"line_number":2322,"context_line":"                self.db.share_snapshot_instance_export_location_delete("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_092deba7","line":2319,"range":{"start_line":2318,"start_character":0,"end_line":2319,"end_character":46},"in_reply_to":"1a6eadb0_92ee0db3","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":3324,"context_line":"                    \u0027access\u0027: access_id,"},{"line_number":3325,"context_line":"                    \u0027snapshot\u0027: snapshot_instance_id"},{"line_number":3326,"context_line":"                }"},{"line_number":3327,"context_line":"                LOG.error(_LE(\"Failed to allow access %(access)s to snapshot\""},{"line_number":3328,"context_line":"                          \"%(snapshot)s\"), payload)"},{"line_number":3329,"context_line":""},{"line_number":3330,"context_line":"                self.db.share_snapshot_instance_access_update_state("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_d215e59b","line":3327,"range":{"start_line":3327,"start_character":68,"end_line":3327,"end_character":76},"updated":"2016-12-18 19:26:24.000000000","message":"missing space","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":3324,"context_line":"                    \u0027access\u0027: access_id,"},{"line_number":3325,"context_line":"                    \u0027snapshot\u0027: snapshot_instance_id"},{"line_number":3326,"context_line":"                }"},{"line_number":3327,"context_line":"                LOG.error(_LE(\"Failed to allow access %(access)s to snapshot\""},{"line_number":3328,"context_line":"                          \"%(snapshot)s\"), payload)"},{"line_number":3329,"context_line":""},{"line_number":3330,"context_line":"                self.db.share_snapshot_instance_access_update_state("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_242f2e89","line":3327,"range":{"start_line":3327,"start_character":68,"end_line":3327,"end_character":76},"in_reply_to":"1a6eadb0_d215e59b","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71e33a09416aa2b2d5e104e1f2c04719cd0321cb","unresolved":false,"context_lines":[{"line_number":3352,"context_line":"                    \u0027access\u0027: access_id,"},{"line_number":3353,"context_line":"                    \u0027snapshot\u0027: snapshot_instance_id"},{"line_number":3354,"context_line":"                }"},{"line_number":3355,"context_line":"                LOG.error(_LE(\"Failed to deny access %(access)s to snapshot\""},{"line_number":3356,"context_line":"                          \"%(snapshot)s\"), payload)"},{"line_number":3357,"context_line":"                self.db.share_snapshot_instance_access_update_state("},{"line_number":3358,"context_line":"                    context, mapping[\u0027id\u0027], constants.STATUS_ERROR)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_f20ae178","line":3355,"range":{"start_line":3355,"start_character":67,"end_line":3355,"end_character":75},"updated":"2016-12-18 19:26:24.000000000","message":"missing space","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"004469ec10fb40a9c5ccc3a02a571f4c2028d431","unresolved":false,"context_lines":[{"line_number":3352,"context_line":"                    \u0027access\u0027: access_id,"},{"line_number":3353,"context_line":"                    \u0027snapshot\u0027: snapshot_instance_id"},{"line_number":3354,"context_line":"                }"},{"line_number":3355,"context_line":"                LOG.error(_LE(\"Failed to deny access %(access)s to snapshot\""},{"line_number":3356,"context_line":"                          \"%(snapshot)s\"), payload)"},{"line_number":3357,"context_line":"                self.db.share_snapshot_instance_access_update_state("},{"line_number":3358,"context_line":"                    context, mapping[\u0027id\u0027], constants.STATUS_ERROR)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_444eea6f","line":3355,"range":{"start_line":3355,"start_character":67,"end_line":3355,"end_character":75},"in_reply_to":"1a6eadb0_f20ae178","updated":"2016-12-23 17:51:33.000000000","message":"Done","commit_id":"21a88c2b0d48fa74c445e47c742b380bcd595f0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                    share_snapshot_instance_access_get_all_for_instance("},{"line_number":359,"context_line":"                        ctxt, snap[\u0027id\u0027]))"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"                # NOTE(ganso): We don\u0027t invoke invoke update_access for"},{"line_number":362,"context_line":"                # snapshots if we don\u0027t have invalid rules or pending updates"},{"line_number":363,"context_line":"                if any(m[\u0027state\u0027] in (constants.STATE_DENYING,"},{"line_number":364,"context_line":"                                      constants.STATE_QUEUED_TO_DENY,"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_b4aaef17","line":361,"range":{"start_line":361,"start_character":47,"end_line":361,"end_character":53},"updated":"2017-01-12 18:15:27.000000000","message":"double \"invoke\"","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                    share_snapshot_instance_access_get_all_for_instance("},{"line_number":359,"context_line":"                        ctxt, snap[\u0027id\u0027]))"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"                # NOTE(ganso): We don\u0027t invoke invoke update_access for"},{"line_number":362,"context_line":"                # snapshots if we don\u0027t have invalid rules or pending updates"},{"line_number":363,"context_line":"                if any(m[\u0027state\u0027] in (constants.STATE_DENYING,"},{"line_number":364,"context_line":"                                      constants.STATE_QUEUED_TO_DENY,"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_7ee001fb","line":361,"range":{"start_line":361,"start_character":47,"end_line":361,"end_character":53},"in_reply_to":"9a57fde8_b4aaef17","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"229d36e0e90c451f84d8d56c0845b9f185bca1d0","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                        LOG.exception(_LE("},{"line_number":373,"context_line":"                            \"Unexpected error occurred while updating \""},{"line_number":374,"context_line":"                            \"access rules for snapshot instance %(s_id)s.\"),"},{"line_number":375,"context_line":"                            {\u0027s_id\u0027: snap[\u0027id\u0027], \u0027e\u0027: e})"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        self.publish_service_capabilities(ctxt)"},{"line_number":378,"context_line":"        LOG.info(_LI(\"Finished initialization of driver: \u0027%(driver)s\""}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_7a13125d","line":375,"range":{"start_line":375,"start_character":47,"end_line":375,"end_character":55},"updated":"2017-01-19 12:44:55.000000000","message":"Redundant.","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"            for snap in snapshot_instances:"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"                mappings \u003d ("},{"line_number":357,"context_line":"                    self.db."},{"line_number":358,"context_line":"                    share_snapshot_instance_access_get_all_for_instance("},{"line_number":359,"context_line":"                        ctxt, snap[\u0027id\u0027]))"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"                # NOTE(ganso): We don\u0027t invoke update_access for snapshots if"},{"line_number":362,"context_line":"                # we don\u0027t have invalid rules or pending updates"},{"line_number":363,"context_line":"                if any(m[\u0027state\u0027] in (constants.ACCESS_STATE_DENYING,"},{"line_number":364,"context_line":"                                      constants.ACCESS_STATE_QUEUED_TO_DENY,"},{"line_number":365,"context_line":"                                      constants.ACCESS_STATE_APPLYING,"},{"line_number":366,"context_line":"                                      constants.ACCESS_STATE_QUEUED_TO_APPLY)"},{"line_number":367,"context_line":"                       for m in mappings):"},{"line_number":368,"context_line":"                    try:"},{"line_number":369,"context_line":"                        self.snapshot_access_helper.update_access_rules("},{"line_number":370,"context_line":"                            ctxt, snap[\u0027id\u0027], share_server)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_8d7ba6f4","line":367,"range":{"start_line":356,"start_character":0,"end_line":367,"end_character":42},"updated":"2017-01-23 02:17:58.000000000","message":"this is the thing you can avoid if you just relate the models to give you all the data you need.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"            for snap in snapshot_instances:"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"                mappings \u003d ("},{"line_number":357,"context_line":"                    self.db."},{"line_number":358,"context_line":"                    share_snapshot_instance_access_get_all_for_instance("},{"line_number":359,"context_line":"                        ctxt, snap[\u0027id\u0027]))"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"                # NOTE(ganso): We don\u0027t invoke update_access for snapshots if"},{"line_number":362,"context_line":"                # we don\u0027t have invalid rules or pending updates"},{"line_number":363,"context_line":"                if any(m[\u0027state\u0027] in (constants.ACCESS_STATE_DENYING,"},{"line_number":364,"context_line":"                                      constants.ACCESS_STATE_QUEUED_TO_DENY,"},{"line_number":365,"context_line":"                                      constants.ACCESS_STATE_APPLYING,"},{"line_number":366,"context_line":"                                      constants.ACCESS_STATE_QUEUED_TO_APPLY)"},{"line_number":367,"context_line":"                       for m in mappings):"},{"line_number":368,"context_line":"                    try:"},{"line_number":369,"context_line":"                        self.snapshot_access_helper.update_access_rules("},{"line_number":370,"context_line":"                            ctxt, snap[\u0027id\u0027], share_server)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_358e58d0","line":367,"range":{"start_line":356,"start_character":0,"end_line":367,"end_character":42},"in_reply_to":"5a3905b3_8d7ba6f4","updated":"2017-01-23 19:06:08.000000000","message":"we need at least one call, nothing to change here","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/share/rpcapi.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"5d84809a727a61c768e837bba12adb0123f2ab88","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                                 \u0027migration_get_progress\u0027,"},{"line_number":321,"context_line":"                                 share_id\u003dshare[\u0027id\u0027])"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def snapshot_allow_access(self, context, snapshot_instance_id, access_id,"},{"line_number":324,"context_line":"                              host):"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":327,"context_line":"        call_context \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.12\u0027)"},{"line_number":328,"context_line":"        call_context.cast(context,"},{"line_number":329,"context_line":"                          \u0027snapshot_allow_access\u0027,"},{"line_number":330,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance_id,"},{"line_number":331,"context_line":"                          access_id\u003daccess_id)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def snapshot_deny_access(self, context, snapshot_instance_id, access_id,"},{"line_number":334,"context_line":"                             host):"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":337,"context_line":"        call_context \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.12\u0027)"},{"line_number":338,"context_line":"        call_context.cast(context,"},{"line_number":339,"context_line":"                          \u0027snapshot_deny_access\u0027,"},{"line_number":340,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance_id,"},{"line_number":341,"context_line":"                          access_id\u003daccess_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_43435013","line":341,"range":{"start_line":323,"start_character":4,"end_line":341,"end_character":46},"updated":"2016-07-26 18:41:59.000000000","message":"why don\u0027t you receive the snapshot_instance model and extract the host here?","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a06f5474d1a14e1184cee52f6c946804812ef503","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                                 \u0027migration_get_progress\u0027,"},{"line_number":321,"context_line":"                                 share_id\u003dshare[\u0027id\u0027])"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def snapshot_allow_access(self, context, snapshot_instance_id, access_id,"},{"line_number":324,"context_line":"                              host):"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":327,"context_line":"        call_context \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.12\u0027)"},{"line_number":328,"context_line":"        call_context.cast(context,"},{"line_number":329,"context_line":"                          \u0027snapshot_allow_access\u0027,"},{"line_number":330,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance_id,"},{"line_number":331,"context_line":"                          access_id\u003daccess_id)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def snapshot_deny_access(self, context, snapshot_instance_id, access_id,"},{"line_number":334,"context_line":"                             host):"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":337,"context_line":"        call_context \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.12\u0027)"},{"line_number":338,"context_line":"        call_context.cast(context,"},{"line_number":339,"context_line":"                          \u0027snapshot_deny_access\u0027,"},{"line_number":340,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance_id,"},{"line_number":341,"context_line":"                          access_id\u003daccess_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_4889e625","line":341,"range":{"start_line":323,"start_character":4,"end_line":341,"end_character":46},"in_reply_to":"dada55a8_43435013","updated":"2016-08-01 17:48:24.000000000","message":"Yep, definitely better. Done.","commit_id":"26ffe19a616a048ed4791034964117c36c8294af"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            migration_get_driver_info()"},{"line_number":60,"context_line":"        1.11 - Add create_replicated_snapshot() and"},{"line_number":61,"context_line":"            delete_replicated_snapshot() methods"},{"line_number":62,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":63,"context_line":"        1.12 - Add provide_share_server(), create_share_server() and"},{"line_number":64,"context_line":"            migration_driver_recovery(), remove migration_get_driver_info(),"},{"line_number":65,"context_line":"            update migration_cancel(), migration_complete() and"},{"line_number":66,"context_line":"            migration_get_progress method signature, rename"},{"line_number":67,"context_line":"            migration_get_info() to connection_get_info()"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":"        1.12 - Add snapshot_allow_access() and"},{"line_number":70,"context_line":"            snapshot_deny_access() methods"},{"line_number":71,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 6d6762d... Add mountable snapshots support"},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_9489fd28","line":71,"range":{"start_line":62,"start_character":0,"end_line":71,"end_character":50},"updated":"2016-11-17 17:39:41.000000000","message":"Merge conflict artifacts. + Should be 1.13","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            migration_get_driver_info()"},{"line_number":60,"context_line":"        1.11 - Add create_replicated_snapshot() and"},{"line_number":61,"context_line":"            delete_replicated_snapshot() methods"},{"line_number":62,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":63,"context_line":"        1.12 - Add provide_share_server(), create_share_server() and"},{"line_number":64,"context_line":"            migration_driver_recovery(), remove migration_get_driver_info(),"},{"line_number":65,"context_line":"            update migration_cancel(), migration_complete() and"},{"line_number":66,"context_line":"            migration_get_progress method signature, rename"},{"line_number":67,"context_line":"            migration_get_info() to connection_get_info()"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":"        1.12 - Add snapshot_allow_access() and"},{"line_number":70,"context_line":"            snapshot_deny_access() methods"},{"line_number":71,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 6d6762d... Add mountable snapshots support"},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_cc037cb7","line":71,"range":{"start_line":62,"start_character":0,"end_line":71,"end_character":50},"in_reply_to":"7a77a97e_9489fd28","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def snapshot_allow_access(self, context, snapshot_instance, access):"},{"line_number":351,"context_line":"        host \u003d utils.extract_host(snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027])"},{"line_number":352,"context_line":"        call_context \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.12\u0027)"},{"line_number":353,"context_line":"        call_context.cast(context,"},{"line_number":354,"context_line":"                          \u0027snapshot_allow_access\u0027,"},{"line_number":355,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_f49b1164","line":352,"range":{"start_line":352,"start_character":65,"end_line":352,"end_character":69},"updated":"2016-11-17 17:39:41.000000000","message":"1.13","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def snapshot_allow_access(self, context, snapshot_instance, access):"},{"line_number":351,"context_line":"        host \u003d utils.extract_host(snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027])"},{"line_number":352,"context_line":"        call_context \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.12\u0027)"},{"line_number":353,"context_line":"        call_context.cast(context,"},{"line_number":354,"context_line":"                          \u0027snapshot_allow_access\u0027,"},{"line_number":355,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_acf640d5","line":352,"range":{"start_line":352,"start_character":65,"end_line":352,"end_character":69},"in_reply_to":"7a77a97e_f49b1164","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def snapshot_deny_access(self, context, snapshot_instance, access):"},{"line_number":359,"context_line":"        host \u003d utils.extract_host(snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027])"},{"line_number":360,"context_line":"        call_context \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.12\u0027)"},{"line_number":361,"context_line":"        call_context.cast(context,"},{"line_number":362,"context_line":"                          \u0027snapshot_deny_access\u0027,"},{"line_number":363,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_34a2e999","line":360,"range":{"start_line":360,"start_character":65,"end_line":360,"end_character":69},"updated":"2016-11-17 17:39:41.000000000","message":"1.13","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"586056ea6dd98502a95e7b8010b8aba4f266ab5d","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def snapshot_deny_access(self, context, snapshot_instance, access):"},{"line_number":359,"context_line":"        host \u003d utils.extract_host(snapshot_instance[\u0027share_instance\u0027][\u0027host\u0027])"},{"line_number":360,"context_line":"        call_context \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.12\u0027)"},{"line_number":361,"context_line":"        call_context.cast(context,"},{"line_number":362,"context_line":"                          \u0027snapshot_deny_access\u0027,"},{"line_number":363,"context_line":"                          snapshot_instance_id\u003dsnapshot_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_ec0038ad","line":360,"range":{"start_line":360,"start_character":65,"end_line":360,"end_character":69},"in_reply_to":"7a77a97e_34a2e999","updated":"2016-11-23 11:36:33.000000000","message":"Done","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"}],"manila/share/snapshot_access.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                             delete_all_rules\u003dNone, share_server\u003dNone):"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # NOTE(ganso): First let\u0027s get all the rules and the mappings"},{"line_number":60,"context_line":"        rules \u003d self.db.share_snapshot_access_get_all_for_snapshot_instance("},{"line_number":61,"context_line":"            context, snapshot_instance[\u0027id\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        mappings \u003d self.db.share_snapshot_instance_access_get_all_for_instance("},{"line_number":64,"context_line":"            context, snapshot_instance[\u0027id\u0027])"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        add_rules \u003d []"},{"line_number":67,"context_line":"        add_mappings \u003d []"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_cdcf6e27","line":64,"range":{"start_line":60,"start_character":0,"end_line":64,"end_character":45},"updated":"2017-01-23 02:17:58.000000000","message":"unnecessary round trip -\u003e you should get all the info you need at once.","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                             delete_all_rules\u003dNone, share_server\u003dNone):"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # NOTE(ganso): First let\u0027s get all the rules and the mappings"},{"line_number":60,"context_line":"        rules \u003d self.db.share_snapshot_access_get_all_for_snapshot_instance("},{"line_number":61,"context_line":"            context, snapshot_instance[\u0027id\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        mappings \u003d self.db.share_snapshot_instance_access_get_all_for_instance("},{"line_number":64,"context_line":"            context, snapshot_instance[\u0027id\u0027])"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        add_rules \u003d []"},{"line_number":67,"context_line":"        add_mappings \u003d []"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_fb491f32","line":64,"range":{"start_line":60,"start_character":0,"end_line":64,"end_character":45},"in_reply_to":"5a3905b3_cdcf6e27","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    context, mapping[\u0027id\u0027], constants.STATUS_ACTIVE)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        except Exception:"},{"line_number":144,"context_line":"            # NOTE(ganso): if we failed, we set all the new rules to ERROR"},{"line_number":145,"context_line":"            for mapping in add_mappings + delete_mappings:"},{"line_number":146,"context_line":"                self.db.share_snapshot_instance_access_update_state("},{"line_number":147,"context_line":"                    context, mapping[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_2d02b23d","line":144,"range":{"start_line":144,"start_character":56,"end_line":144,"end_character":59},"updated":"2017-01-23 02:17:58.000000000","message":"transitional","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    context, mapping[\u0027id\u0027], constants.STATUS_ACTIVE)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        except Exception:"},{"line_number":144,"context_line":"            # NOTE(ganso): if we failed, we set all the new rules to ERROR"},{"line_number":145,"context_line":"            for mapping in add_mappings + delete_mappings:"},{"line_number":146,"context_line":"                self.db.share_snapshot_instance_access_update_state("},{"line_number":147,"context_line":"                    context, mapping[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_551e925f","line":144,"range":{"start_line":144,"start_character":56,"end_line":144,"end_character":59},"in_reply_to":"5a3905b3_2d02b23d","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}],"manila/tests/api/v2/test_share_snapshot_export_locations.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b3833e6b9f8a5a001143f33953a42de36990177c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.assertSubDictMatch("},{"line_number":97,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027)"},{"line_number":100,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":101,"context_line":"        self.assertRaises("},{"line_number":102,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_d3ac288e","line":99,"range":{"start_line":99,"start_character":4,"end_line":99,"end_character":41},"updated":"2017-01-24 10:20:13.000000000","message":"same as in https://review.openstack.org/#/c/345526/59/manila/tests/api/v2/test_share_snapshot_instance_export_locations.py","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.assertSubDictMatch("},{"line_number":97,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027)"},{"line_number":100,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":101,"context_line":"        self.assertRaises("},{"line_number":102,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_2eefbf1e","line":99,"range":{"start_line":99,"start_character":4,"end_line":99,"end_character":41},"in_reply_to":"5a3905b3_d3ac288e","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2a02b29f91bcdcb3693cbf0225e15297ecff9d75","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.assertSubDictMatch("},{"line_number":97,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":100,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":101,"context_line":"        self.assertRaises("},{"line_number":102,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_7ca6c554","line":99,"range":{"start_line":99,"start_character":45,"end_line":99,"end_character":47},"updated":"2017-01-24 19:14:48.000000000","message":"31","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ce12e7dde2fba820623fb086b6b1e6170ae95e19","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.assertSubDictMatch("},{"line_number":97,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":100,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":101,"context_line":"        self.assertRaises("},{"line_number":102,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_07872ad8","line":99,"range":{"start_line":99,"start_character":45,"end_line":99,"end_character":47},"in_reply_to":"5a3905b3_7ca6c554","updated":"2017-01-24 19:31:56.000000000","message":"Done","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2a02b29f91bcdcb3693cbf0225e15297ecff9d75","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            self.snapshot_instance[\u0027id\u0027],"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":109,"context_line":"    def test_show_with_unsupported_version(self, version):"},{"line_number":110,"context_line":"        self.assertRaises("},{"line_number":111,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_9c61b114","line":108,"range":{"start_line":108,"start_character":45,"end_line":108,"end_character":47},"updated":"2017-01-24 19:14:48.000000000","message":"31","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ce12e7dde2fba820623fb086b6b1e6170ae95e19","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            self.snapshot_instance[\u0027id\u0027],"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":109,"context_line":"    def test_show_with_unsupported_version(self, version):"},{"line_number":110,"context_line":"        self.assertRaises("},{"line_number":111,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_276c2636","line":108,"range":{"start_line":108,"start_character":45,"end_line":108,"end_character":47},"in_reply_to":"5a3905b3_9c61b114","updated":"2017-01-24 19:31:56.000000000","message":"Done","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"}],"manila/tests/api/v2/test_share_snapshot_instance_export_locations.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0c3fd9e27b74955f338fc528f6f8db1c433ceb56","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertSubDictMatch("},{"line_number":94,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027)"},{"line_number":97,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":98,"context_line":"        self.assertRaises("},{"line_number":99,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_d39ee861","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":41},"updated":"2017-01-24 10:19:18.000000000","message":"this","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertSubDictMatch("},{"line_number":94,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027)"},{"line_number":97,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":98,"context_line":"        self.assertRaises("},{"line_number":99,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_4e56cb06","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":41},"in_reply_to":"5a3905b3_d39ee861","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0c3fd9e27b74955f338fc528f6f8db1c433ceb56","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            self.snapshot_instance[\u0027id\u0027],"},{"line_number":103,"context_line":"        )"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027)"},{"line_number":106,"context_line":"    def test_show_with_unsupported_version(self, version):"},{"line_number":107,"context_line":"        self.assertRaises("},{"line_number":108,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_7384540a","line":105,"range":{"start_line":105,"start_character":3,"end_line":105,"end_character":41},"updated":"2017-01-24 10:19:18.000000000","message":"and this should also cover \"border\" cases.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            self.snapshot_instance[\u0027id\u0027],"},{"line_number":103,"context_line":"        )"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027)"},{"line_number":106,"context_line":"    def test_show_with_unsupported_version(self, version):"},{"line_number":107,"context_line":"        self.assertRaises("},{"line_number":108,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_2e533f18","line":105,"range":{"start_line":105,"start_character":3,"end_line":105,"end_character":41},"in_reply_to":"5a3905b3_7384540a","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a461ac4ee9a183b8f5e0c170b29f6b560a04a7c2","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertSubDictMatch("},{"line_number":94,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":97,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":98,"context_line":"        self.assertRaises("},{"line_number":99,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_3c735de9","line":96,"range":{"start_line":96,"start_character":45,"end_line":96,"end_character":47},"updated":"2017-01-24 19:15:29.000000000","message":"31","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ce12e7dde2fba820623fb086b6b1e6170ae95e19","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertSubDictMatch("},{"line_number":94,"context_line":"            {\u0027share_snapshot_export_location\u0027: self.values}, out)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":97,"context_line":"    def test_list_with_unsupported_version(self, version):"},{"line_number":98,"context_line":"        self.assertRaises("},{"line_number":99,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_67762e08","line":96,"range":{"start_line":96,"start_character":45,"end_line":96,"end_character":47},"in_reply_to":"5a3905b3_3c735de9","updated":"2017-01-24 19:31:56.000000000","message":"Done","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a461ac4ee9a183b8f5e0c170b29f6b560a04a7c2","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            self.snapshot_instance[\u0027id\u0027],"},{"line_number":103,"context_line":"        )"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":106,"context_line":"    def test_show_with_unsupported_version(self, version):"},{"line_number":107,"context_line":"        self.assertRaises("},{"line_number":108,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_7c7de5b0","line":105,"range":{"start_line":105,"start_character":45,"end_line":105,"end_character":47},"updated":"2017-01-24 19:15:29.000000000","message":"31","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ce12e7dde2fba820623fb086b6b1e6170ae95e19","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            self.snapshot_instance[\u0027id\u0027],"},{"line_number":103,"context_line":"        )"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @ddt.data(\u00271.0\u0027, \u00272.0\u0027, \u00272.5\u0027, \u00272.8\u0027, \u00272.30\u0027)"},{"line_number":106,"context_line":"    def test_show_with_unsupported_version(self, version):"},{"line_number":107,"context_line":"        self.assertRaises("},{"line_number":108,"context_line":"            exception.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":61,"id":"5a3905b3_47693225","line":105,"range":{"start_line":105,"start_character":45,"end_line":105,"end_character":47},"in_reply_to":"5a3905b3_7c7de5b0","updated":"2017-01-24 19:31:56.000000000","message":"Done","commit_id":"d2780f5c352e832dfb0a21891ca39630d7e2a954"}],"manila/tests/db/sqlalchemy/test_api.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d3c923db12046df43f2393ae18ca54b355012e32","unresolved":false,"context_lines":[{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"        self.assertSubDictMatch(values, actual_result.to_dict())"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"    def test_share_snapshot_export_locations_get(self):"},{"line_number":1227,"context_line":"        db_api.share_snapshot_export_locations_get("},{"line_number":1228,"context_line":"            self.ctxt, self.snapshot_1[\u0027id\u0027])"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"    def test_share_snapshot_instance_export_locations_get(self):"},{"line_number":1231,"context_line":"        db_api.share_snapshot_instance_export_locations_get_all("},{"line_number":1232,"context_line":"            self.ctxt, self.snapshot_instances[0].id)"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"class ShareExportLocationsDatabaseAPITestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_c8571324","line":1232,"range":{"start_line":1226,"start_character":4,"end_line":1232,"end_character":53},"updated":"2017-01-24 10:09:12.000000000","message":"It is not tests. You do not verify here anything.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"        self.assertSubDictMatch(values, actual_result.to_dict())"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"    def test_share_snapshot_export_locations_get(self):"},{"line_number":1227,"context_line":"        db_api.share_snapshot_export_locations_get("},{"line_number":1228,"context_line":"            self.ctxt, self.snapshot_1[\u0027id\u0027])"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"    def test_share_snapshot_instance_export_locations_get(self):"},{"line_number":1231,"context_line":"        db_api.share_snapshot_instance_export_locations_get_all("},{"line_number":1232,"context_line":"            self.ctxt, self.snapshot_instances[0].id)"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"class ShareExportLocationsDatabaseAPITestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_7b5c264b","line":1232,"range":{"start_line":1226,"start_character":4,"end_line":1232,"end_character":53},"in_reply_to":"5a3905b3_c8571324","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"manila/tests/share/drivers/dummy.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"229d36e0e90c451f84d8d56c0845b9f185bca1d0","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        return self._create_share(share, share_server\u003dshare_server)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _create_snapshot(self, snapshot, share_server\u003dNone):"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        snapshot_name \u003d self._get_snapshot_name(snapshot)"},{"line_number":212,"context_line":"        mountpoint \u003d \"/path/to/fake/snapshot/%s\" % snapshot_name"},{"line_number":213,"context_line":"        self.private_storage.update("}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_9aac3eef","line":210,"updated":"2017-01-19 12:44:55.000000000","message":"Why new empty line?","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        return self._create_share(share, share_server\u003dshare_server)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _create_snapshot(self, snapshot, share_server\u003dNone):"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        snapshot_name \u003d self._get_snapshot_name(snapshot)"},{"line_number":212,"context_line":"        mountpoint \u003d \"/path/to/fake/snapshot/%s\" % snapshot_name"},{"line_number":213,"context_line":"        self.private_storage.update("}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_ce927657","line":210,"in_reply_to":"5a3905b3_9aac3eef","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"229d36e0e90c451f84d8d56c0845b9f185bca1d0","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            }"},{"line_number":218,"context_line":"        )"},{"line_number":219,"context_line":"        return {"},{"line_number":220,"context_line":"            \"provider_location\": snapshot_name,"},{"line_number":221,"context_line":"            \"export_locations\": self._generate_export_locations("},{"line_number":222,"context_line":"                mountpoint, share_server\u003dshare_server)"},{"line_number":223,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_3a7c2a72","line":220,"range":{"start_line":220,"start_character":33,"end_line":220,"end_character":46},"updated":"2017-01-19 12:44:55.000000000","message":"s/snapshot_name/mountpoint/ ?","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b7afce10cd6c1e991c38dc649993346095d1873d","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            }"},{"line_number":218,"context_line":"        )"},{"line_number":219,"context_line":"        return {"},{"line_number":220,"context_line":"            \"provider_location\": snapshot_name,"},{"line_number":221,"context_line":"            \"export_locations\": self._generate_export_locations("},{"line_number":222,"context_line":"                mountpoint, share_server\u003dshare_server)"},{"line_number":223,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a3905b3_6e99826e","line":220,"range":{"start_line":220,"start_character":33,"end_line":220,"end_character":46},"in_reply_to":"5a3905b3_3a7c2a72","updated":"2017-01-19 17:38:02.000000000","message":"Done","commit_id":"77d55ec7bebf77ba118824698b041d988b0bf178"}],"manila/tests/share/test_manager.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5ac07b774ea94d4b88706d2b782fe465c923e7a5","unresolved":false,"context_lines":[{"line_number":5130,"context_line":""},{"line_number":5131,"context_line":"        self.share_manager.driver.unmanage_snapshot.assert_called_once_with("},{"line_number":5132,"context_line":"            snapshot.instance)"},{"line_number":5133,"context_line":"        (self.share_manager.snapshot_access_helper.update_access_rules."},{"line_number":5134,"context_line":"         assert_called_once_with(utils.IsAMatcher(context.RequestContext),"},{"line_number":5135,"context_line":"                                 snapshot.instance[\u0027id\u0027],"},{"line_number":5136,"context_line":"                                 delete_all_rules\u003dTrue, share_server\u003dNone))"},{"line_number":5137,"context_line":"        mock_snapshot_instance_destroy_call.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_13bf9061","line":5134,"range":{"start_line":5133,"start_character":9,"end_line":5134,"end_character":33},"updated":"2017-01-24 10:26:31.000000000","message":"To avoid such ugly constructions, use assignement of var names for mocked objects as you did in other modules.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":5130,"context_line":""},{"line_number":5131,"context_line":"        self.share_manager.driver.unmanage_snapshot.assert_called_once_with("},{"line_number":5132,"context_line":"            snapshot.instance)"},{"line_number":5133,"context_line":"        (self.share_manager.snapshot_access_helper.update_access_rules."},{"line_number":5134,"context_line":"         assert_called_once_with(utils.IsAMatcher(context.RequestContext),"},{"line_number":5135,"context_line":"                                 snapshot.instance[\u0027id\u0027],"},{"line_number":5136,"context_line":"                                 delete_all_rules\u003dTrue, share_server\u003dNone))"},{"line_number":5137,"context_line":"        mock_snapshot_instance_destroy_call.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_ce8f1b73","line":5134,"range":{"start_line":5133,"start_character":9,"end_line":5134,"end_character":33},"in_reply_to":"5a3905b3_13bf9061","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5ac07b774ea94d4b88706d2b782fe465c923e7a5","unresolved":false,"context_lines":[{"line_number":5140,"context_line":"            utils.IsAMatcher(context.RequestContext), snapshot[\u0027id\u0027])"},{"line_number":5141,"context_line":"        mock_get_share_server.assert_called_once_with("},{"line_number":5142,"context_line":"            utils.IsAMatcher(context.RequestContext), snapshot[\u0027share\u0027])"},{"line_number":5143,"context_line":"        (self.share_manager.db.share_snapshot_instance_get."},{"line_number":5144,"context_line":"         assert_called_once_with(utils.IsAMatcher(context.RequestContext),"},{"line_number":5145,"context_line":"                                 snapshot.instance[\u0027id\u0027],"},{"line_number":5146,"context_line":"                                 with_share_data\u003dTrue))"},{"line_number":5147,"context_line":"        if quota_error:"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_d3a98825","line":5144,"range":{"start_line":5143,"start_character":9,"end_line":5144,"end_character":33},"updated":"2017-01-24 10:26:31.000000000","message":"ditto","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":5140,"context_line":"            utils.IsAMatcher(context.RequestContext), snapshot[\u0027id\u0027])"},{"line_number":5141,"context_line":"        mock_get_share_server.assert_called_once_with("},{"line_number":5142,"context_line":"            utils.IsAMatcher(context.RequestContext), snapshot[\u0027share\u0027])"},{"line_number":5143,"context_line":"        (self.share_manager.db.share_snapshot_instance_get."},{"line_number":5144,"context_line":"         assert_called_once_with(utils.IsAMatcher(context.RequestContext),"},{"line_number":5145,"context_line":"                                 snapshot.instance[\u0027id\u0027],"},{"line_number":5146,"context_line":"                                 with_share_data\u003dTrue))"},{"line_number":5147,"context_line":"        if quota_error:"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_ee8a1763","line":5144,"range":{"start_line":5143,"start_character":9,"end_line":5144,"end_character":33},"in_reply_to":"5a3905b3_d3a98825","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"manila/tests/test_exception.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"140686cb20446205f440b9de25729f102083b6dc","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        access \u003d \"fake_access\""},{"line_number":132,"context_line":"        e \u003d exception.ShareSnapshotAccessExists(access_type\u003daccess_type,"},{"line_number":133,"context_line":"                                                access\u003daccess)"},{"line_number":134,"context_line":"        self.assertEqual(500, e.code)"},{"line_number":135,"context_line":"        self.assertIn(access_type, e.msg)"},{"line_number":136,"context_line":"        self.assertIn(access, e.msg)"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"7a3c09a3_6b2724ca","line":134,"range":{"start_line":134,"start_character":8,"end_line":134,"end_character":37},"updated":"2017-01-17 18:38:54.000000000","message":"Handled exceptions should not have \"5xx\" error codes. Never.","commit_id":"8f26ef0e5dd134df7d3bd68e88082ecea9aa0608"}],"manila_tempest_tests/config.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                     \"careful enabling this opt.\"),"},{"line_number":197,"context_line":"    cfg.BoolOpt(\"run_mount_snapshot_tests\","},{"line_number":198,"context_line":"                default\u003dFalse,"},{"line_number":199,"context_line":"                help\u003d\"Enable or disable mount snapshot tests.\"),"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    cfg.StrOpt(\"image_with_share_tools\","},{"line_number":202,"context_line":"               default\u003d\"manila-service-image\","}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_2eadf69a","line":199,"range":{"start_line":199,"start_character":40,"end_line":199,"end_character":45},"updated":"2016-12-16 17:41:35.000000000","message":"mountable","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                     \"careful enabling this opt.\"),"},{"line_number":197,"context_line":"    cfg.BoolOpt(\"run_mount_snapshot_tests\","},{"line_number":198,"context_line":"                default\u003dFalse,"},{"line_number":199,"context_line":"                help\u003d\"Enable or disable mount snapshot tests.\"),"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    cfg.StrOpt(\"image_with_share_tools\","},{"line_number":202,"context_line":"               default\u003d\"manila-service-image\","}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_ea9ff000","line":199,"range":{"start_line":199,"start_character":40,"end_line":199,"end_character":45},"in_reply_to":"1a6eadb0_2eadf69a","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"}],"manila_tempest_tests/services/share/v2/json/shares_client.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"################"},{"line_number":1317,"context_line":""},{"line_number":1318,"context_line":"    def create_snapshot_access_rule(self, snapshot_id, access_type\u003d\"ip\","},{"line_number":1319,"context_line":"                                    access_to\u003d\"0.0.0.0\"):"},{"line_number":1320,"context_line":"        body \u003d {"},{"line_number":1321,"context_line":"            \"allow_access\": {"},{"line_number":1322,"context_line":"                \"access_type\": access_type,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_8ea9aa26","line":1319,"range":{"start_line":1319,"start_character":46,"end_line":1319,"end_character":55},"updated":"2016-12-16 17:41:35.000000000","message":"0.0.0.0/0","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"################"},{"line_number":1317,"context_line":""},{"line_number":1318,"context_line":"    def create_snapshot_access_rule(self, snapshot_id, access_type\u003d\"ip\","},{"line_number":1319,"context_line":"                                    access_to\u003d\"0.0.0.0\"):"},{"line_number":1320,"context_line":"        body \u003d {"},{"line_number":1321,"context_line":"            \"allow_access\": {"},{"line_number":1322,"context_line":"                \"access_type\": access_type,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_cabf8c5e","line":1319,"range":{"start_line":1319,"start_character":46,"end_line":1319,"end_character":55},"in_reply_to":"1a6eadb0_8ea9aa26","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"}],"manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":30,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":31,"context_line":"                      \"Mountable snapshots tests are disabled.\")"},{"line_number":32,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_afb9ba30","line":29,"range":{"start_line":29,"start_character":27,"end_line":29,"end_character":40},"updated":"2017-01-12 18:15:27.000000000","message":"lt","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":30,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":31,"context_line":"                      \"Mountable snapshots tests are disabled.\")"},{"line_number":32,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_5e0a657a","line":29,"range":{"start_line":29,"start_character":27,"end_line":29,"end_character":40},"in_reply_to":"9a57fde8_afb9ba30","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":30,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":31,"context_line":"                      \"Mountable snapshots tests are disabled.\")"},{"line_number":32,"context_line":"@ddt.ddt"},{"line_number":33,"context_line":"class SnapshotExportLocationsTest(base.BaseSharesMixedTest):"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_0f872662","line":30,"range":{"start_line":30,"start_character":22,"end_line":30,"end_character":57},"updated":"2017-01-12 18:15:27.000000000","message":"CONF.share.run_mount_snapshot_tests and CONF.share.run_snapshot_tests","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":30,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":31,"context_line":"                      \"Mountable snapshots tests are disabled.\")"},{"line_number":32,"context_line":"@ddt.ddt"},{"line_number":33,"context_line":"class SnapshotExportLocationsTest(base.BaseSharesMixedTest):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_3e1919d8","line":30,"range":{"start_line":30,"start_character":22,"end_line":30,"end_character":57},"in_reply_to":"9a57fde8_0f872662","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                    export_location[\u0027share_snapshot_instance_id\u0027]))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":85,"context_line":"    def test_get_snapshot_export_location(self):"},{"line_number":86,"context_line":"        export_locations \u003d ("},{"line_number":87,"context_line":"            self.admin_client.list_share_snapshot_export_locations("},{"line_number":88,"context_line":"                self.snapshot[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_2f586afa","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":41},"updated":"2017-01-12 18:15:27.000000000","message":"Should be separate test cases for \"list\" and \"get\" commands. \"get\" test case will include \"list\" and \"get\" API calls.","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                    export_location[\u0027share_snapshot_instance_id\u0027]))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":85,"context_line":"    def test_get_snapshot_export_location(self):"},{"line_number":86,"context_line":"        export_locations \u003d ("},{"line_number":87,"context_line":"            self.admin_client.list_share_snapshot_export_locations("},{"line_number":88,"context_line":"                self.snapshot[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_3ec3d9ee","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":41},"in_reply_to":"9a57fde8_2f586afa","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":85,"context_line":"    def test_get_snapshot_export_location(self):"},{"line_number":86,"context_line":"        export_locations \u003d ("},{"line_number":87,"context_line":"            self.admin_client.list_share_snapshot_export_locations("},{"line_number":88,"context_line":"                self.snapshot[\u0027id\u0027]))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for export_location in export_locations:"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_0fd56642","line":87,"range":{"start_line":87,"start_character":30,"end_line":87,"end_character":66},"updated":"2017-01-12 18:15:27.000000000","message":"this","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":85,"context_line":"    def test_get_snapshot_export_location(self):"},{"line_number":86,"context_line":"        export_locations \u003d ("},{"line_number":87,"context_line":"            self.admin_client.list_share_snapshot_export_locations("},{"line_number":88,"context_line":"                self.snapshot[\u0027id\u0027]))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for export_location in export_locations:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_9e568d5a","line":87,"range":{"start_line":87,"start_character":30,"end_line":87,"end_character":66},"in_reply_to":"9a57fde8_0fd56642","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    def test_get_snapshot_instance_export_location(self):"},{"line_number":97,"context_line":"        for snapshot_instance in self.snapshot_instances:"},{"line_number":98,"context_line":"            export_locations \u003d ("},{"line_number":99,"context_line":"                self.admin_client.list_snapshot_instance_export_locations("},{"line_number":100,"context_line":"                    snapshot_instance[\u0027id\u0027]))"},{"line_number":101,"context_line":"            for el in export_locations:"},{"line_number":102,"context_line":"                el \u003d self.admin_client.get_snapshot_instance_export_location("}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_6f4b522c","line":99,"range":{"start_line":99,"start_character":34,"end_line":99,"end_character":73},"updated":"2017-01-12 18:15:27.000000000","message":"and this are inconsistent namings. In one case you use \"share_snapshot\" and other \"snapshot\"","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    def test_get_snapshot_instance_export_location(self):"},{"line_number":97,"context_line":"        for snapshot_instance in self.snapshot_instances:"},{"line_number":98,"context_line":"            export_locations \u003d ("},{"line_number":99,"context_line":"                self.admin_client.list_snapshot_instance_export_locations("},{"line_number":100,"context_line":"                    snapshot_instance[\u0027id\u0027]))"},{"line_number":101,"context_line":"            for el in export_locations:"},{"line_number":102,"context_line":"                el \u003d self.admin_client.get_snapshot_instance_export_location("}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_7e5d6178","line":99,"range":{"start_line":99,"start_character":34,"end_line":99,"end_character":73},"in_reply_to":"9a57fde8_6f4b522c","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"}],"manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":28,"context_line":"                      \"Mountable snapshots tests are disabled.\")"},{"line_number":29,"context_line":"class SnapshotExportLocationsNegativeTest(base.BaseSharesMixedTest):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_af1a9a15","line":28,"range":{"start_line":26,"start_character":0,"end_line":28,"end_character":64},"updated":"2017-01-12 18:15:27.000000000","message":"same as in https://review.openstack.org/#/c/345526/38/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":28,"context_line":"                      \"Mountable snapshots tests are disabled.\")"},{"line_number":29,"context_line":"class SnapshotExportLocationsNegativeTest(base.BaseSharesMixedTest):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_41da844d","line":28,"range":{"start_line":26,"start_character":0,"end_line":28,"end_character":64},"in_reply_to":"9a57fde8_af1a9a15","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"dd48d2307f98259b5ec65c5a8f76c4c9427fbc7e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.snapshot[\u0027id\u0027]"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":65,"context_line":"    def test_get_snapshot_export_location_by_member(self):"},{"line_number":66,"context_line":"        export_locations \u003d ("},{"line_number":67,"context_line":"            self.admin_client.list_share_snapshot_export_locations("},{"line_number":68,"context_line":"                self.snapshot[\u0027id\u0027]))"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        for export_location in export_locations:"},{"line_number":71,"context_line":"            if export_location[\u0027is_admin_only\u0027]:"},{"line_number":72,"context_line":"                continue"},{"line_number":73,"context_line":"            self.assertRaises("},{"line_number":74,"context_line":"                lib_exc.NotFound,"},{"line_number":75,"context_line":"                self.member_client.get_snapshot_export_location,"},{"line_number":76,"context_line":"                self.snapshot[\u0027id\u0027],"},{"line_number":77,"context_line":"                export_location[\u0027id\u0027]"},{"line_number":78,"context_line":"            )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":81,"context_line":"    # shares_client"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_cf46febe","line":78,"range":{"start_line":64,"start_character":4,"end_line":78,"end_character":13},"updated":"2017-01-12 18:15:27.000000000","message":"This test will fail when member and admin are configured from the same project. You should use \"isolated_creds\" to test that user from other project does not have access. The same in other such places.","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.snapshot[\u0027id\u0027]"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":65,"context_line":"    def test_get_snapshot_export_location_by_member(self):"},{"line_number":66,"context_line":"        export_locations \u003d ("},{"line_number":67,"context_line":"            self.admin_client.list_share_snapshot_export_locations("},{"line_number":68,"context_line":"                self.snapshot[\u0027id\u0027]))"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        for export_location in export_locations:"},{"line_number":71,"context_line":"            if export_location[\u0027is_admin_only\u0027]:"},{"line_number":72,"context_line":"                continue"},{"line_number":73,"context_line":"            self.assertRaises("},{"line_number":74,"context_line":"                lib_exc.NotFound,"},{"line_number":75,"context_line":"                self.member_client.get_snapshot_export_location,"},{"line_number":76,"context_line":"                self.snapshot[\u0027id\u0027],"},{"line_number":77,"context_line":"                export_location[\u0027id\u0027]"},{"line_number":78,"context_line":"            )"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":81,"context_line":"    # shares_client"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_e1561029","line":78,"range":{"start_line":64,"start_character":4,"end_line":78,"end_character":13},"in_reply_to":"9a57fde8_cf46febe","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c4c6d8a1db036470718a1b71b734b34a3a98a04a","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            \"fake-inexistent-snapshot-instance-id\","},{"line_number":131,"context_line":"        )"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":134,"context_line":"    def test_list_inexistent_snapshot_instance_export_locations_by_member("},{"line_number":135,"context_line":"            self):"},{"line_number":136,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_8e28b39b","line":133,"range":{"start_line":133,"start_character":37,"end_line":133,"end_character":57},"updated":"2017-01-24 10:48:31.000000000","message":"wrong tag","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            \"fake-inexistent-snapshot-instance-id\","},{"line_number":131,"context_line":"        )"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":134,"context_line":"    def test_list_inexistent_snapshot_instance_export_locations_by_member("},{"line_number":135,"context_line":"            self):"},{"line_number":136,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_e29dcbbc","line":133,"range":{"start_line":133,"start_character":37,"end_line":133,"end_character":57},"in_reply_to":"5a3905b3_8e28b39b","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"manila_tempest_tests/tests/api/admin/test_snapshot_manage.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                         \"provider_location\"]"},{"line_number":102,"context_line":"        if utils.is_microversion_ge(version, \u00272.17\u0027):"},{"line_number":103,"context_line":"            expected_keys.extend([\"user_id\", \"project_id\"])"},{"line_number":104,"context_line":"        if utils.is_microversion_ge(version, \u00272.20\u0027):"},{"line_number":105,"context_line":"            expected_keys.append(\"export_location\")"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        actual_keys \u003d snapshot.keys()"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_14cc0d69","line":104,"range":{"start_line":104,"start_character":46,"end_line":104,"end_character":50},"updated":"2016-11-17 17:39:41.000000000","message":"2.23","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        if utils.is_microversion_ge(version, \u00272.17\u0027):"},{"line_number":103,"context_line":"            expected_keys.extend([\"user_id\", \"project_id\"])"},{"line_number":104,"context_line":"        if utils.is_microversion_ge(version, \u00272.20\u0027):"},{"line_number":105,"context_line":"            expected_keys.append(\"export_location\")"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        actual_keys \u003d snapshot.keys()"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_d4e455e1","line":105,"range":{"start_line":105,"start_character":34,"end_line":105,"end_character":49},"updated":"2016-11-17 17:39:41.000000000","message":"Only plural","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"}],"manila_tempest_tests/tests/api/test_shares_actions.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                         \"description\", \"id\", \"share_size\", \"size\"]"},{"line_number":415,"context_line":"        if version and utils.is_microversion_ge(version, \u00272.17\u0027):"},{"line_number":416,"context_line":"            expected_keys.extend([\"user_id\", \"project_id\"])"},{"line_number":417,"context_line":"        if version and utils.is_microversion_ge(version, \u00272.20\u0027):"},{"line_number":418,"context_line":"            expected_keys.append(\"export_location\")"},{"line_number":419,"context_line":"        actual_keys \u003d snapshot.keys()"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_34d029f6","line":417,"range":{"start_line":417,"start_character":58,"end_line":417,"end_character":62},"updated":"2016-11-17 17:39:41.000000000","message":"2.23","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4553434bb283cbf957fe3d3761e4f71e5f27b145","unresolved":false,"context_lines":[{"line_number":489,"context_line":"                         \"share_size\", \"size\"]"},{"line_number":490,"context_line":"        if version and utils.is_microversion_ge(version, \u00272.17\u0027):"},{"line_number":491,"context_line":"            expected_keys.extend([\"user_id\", \"project_id\"])"},{"line_number":492,"context_line":"        if version and utils.is_microversion_ge(version, \u00272.20\u0027):"},{"line_number":493,"context_line":"            expected_keys.append(\"export_location\")"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        # strict key check"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_74d621f2","line":492,"range":{"start_line":492,"start_character":58,"end_line":492,"end_character":62},"updated":"2016-11-17 17:39:41.000000000","message":"2.23","commit_id":"456e890458dea1c9aa74fae35b540fbcb20741b6"}],"manila_tempest_tests/tests/api/test_snapshot_rules.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_5123b355","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":53},"updated":"2016-12-16 17:41:35.000000000","message":"not being used","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_ea6d3005","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":53},"in_reply_to":"1a6eadb0_5123b355","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":28,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":29,"context_line":"@ddt.ddt"},{"line_number":30,"context_line":"class ShareIpRulesForNFSTest(base.BaseSharesTest):"},{"line_number":31,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_2e14164b","line":28,"range":{"start_line":28,"start_character":23,"end_line":28,"end_character":28},"updated":"2016-12-16 17:41:35.000000000","message":"Mountable","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":28,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":29,"context_line":"@ddt.ddt"},{"line_number":30,"context_line":"class ShareIpRulesForNFSTest(base.BaseSharesTest):"},{"line_number":31,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_d1d2635b","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":59},"updated":"2016-12-16 17:41:35.000000000","message":"also skip if microversion is not supported","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":28,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":29,"context_line":"@ddt.ddt"},{"line_number":30,"context_line":"class ShareIpRulesForNFSTest(base.BaseSharesTest):"},{"line_number":31,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_0a7194e0","line":28,"range":{"start_line":28,"start_character":23,"end_line":28,"end_character":28},"in_reply_to":"1a6eadb0_2e14164b","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":28,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":29,"context_line":"@ddt.ddt"},{"line_number":30,"context_line":"class ShareIpRulesForNFSTest(base.BaseSharesTest):"},{"line_number":31,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_e509e32d","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":59},"in_reply_to":"1a6eadb0_d1d2635b","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        super(ShareIpRulesForNFSTest, cls).resource_setup()"},{"line_number":36,"context_line":"        if not (cls.protocol in CONF.share.enable_protocols and"},{"line_number":37,"context_line":"                cls.protocol in CONF.share.enable_ip_rules_for_protocols):"},{"line_number":38,"context_line":"            msg \u003d \"IP rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":39,"context_line":"            raise cls.skipException(msg)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_111f7b5b","line":38,"range":{"start_line":38,"start_character":60,"end_line":38,"end_character":62},"updated":"2016-12-16 17:41:35.000000000","message":"period","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        super(ShareIpRulesForNFSTest, cls).resource_setup()"},{"line_number":36,"context_line":"        if not (cls.protocol in CONF.share.enable_protocols and"},{"line_number":37,"context_line":"                cls.protocol in CONF.share.enable_ip_rules_for_protocols):"},{"line_number":38,"context_line":"            msg \u003d \"IP rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":39,"context_line":"            raise cls.skipException(msg)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_4a08fc2d","line":38,"range":{"start_line":38,"start_character":60,"end_line":38,"end_character":62},"in_reply_to":"1a6eadb0_111f7b5b","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            raise cls.skipException(msg)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":42,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":43,"context_line":"        cls.access_type \u003d \"ip\""},{"line_number":44,"context_line":"        cls.access_to \u003d \"2.2.2.2\""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_51449348","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":75},"updated":"2016-12-16 17:41:35.000000000","message":"need an assert that it has export locations","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":67,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":68,"context_line":"@ddt.ddt"},{"line_number":69,"context_line":"class ShareUserRulesForCIFSTest(base.BaseSharesTest):"},{"line_number":70,"context_line":"    protocol \u003d \"cifs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_31a7170c","line":67,"range":{"start_line":67,"start_character":23,"end_line":67,"end_character":28},"updated":"2016-12-16 17:41:35.000000000","message":"Mountable","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":67,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":68,"context_line":"@ddt.ddt"},{"line_number":69,"context_line":"class ShareUserRulesForCIFSTest(base.BaseSharesTest):"},{"line_number":70,"context_line":"    protocol \u003d \"cifs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_f1d59f42","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":59},"updated":"2016-12-16 17:41:35.000000000","message":"also skip if microversion is not supported","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":67,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":68,"context_line":"@ddt.ddt"},{"line_number":69,"context_line":"class ShareUserRulesForCIFSTest(base.BaseSharesTest):"},{"line_number":70,"context_line":"    protocol \u003d \"cifs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_8a02e409","line":67,"range":{"start_line":67,"start_character":23,"end_line":67,"end_character":28},"in_reply_to":"1a6eadb0_31a7170c","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":67,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":68,"context_line":"@ddt.ddt"},{"line_number":69,"context_line":"class ShareUserRulesForCIFSTest(base.BaseSharesTest):"},{"line_number":70,"context_line":"    protocol \u003d \"cifs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_a5ffdbff","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":59},"in_reply_to":"1a6eadb0_f1d59f42","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        super(ShareUserRulesForCIFSTest, cls).resource_setup()"},{"line_number":75,"context_line":"        if not (cls.protocol in CONF.share.enable_protocols and"},{"line_number":76,"context_line":"                cls.protocol in CONF.share.enable_user_rules_for_protocols):"},{"line_number":77,"context_line":"            msg \u003d \"User rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":80,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_71ad0fe8","line":77,"range":{"start_line":77,"start_character":63,"end_line":77,"end_character":64},"updated":"2016-12-16 17:41:35.000000000","message":"period","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        super(ShareUserRulesForCIFSTest, cls).resource_setup()"},{"line_number":75,"context_line":"        if not (cls.protocol in CONF.share.enable_protocols and"},{"line_number":76,"context_line":"                cls.protocol in CONF.share.enable_user_rules_for_protocols):"},{"line_number":77,"context_line":"            msg \u003d \"User rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":80,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_651ed364","line":77,"range":{"start_line":77,"start_character":63,"end_line":77,"end_character":64},"in_reply_to":"1a6eadb0_71ad0fe8","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                cls.protocol in CONF.share.enable_user_rules_for_protocols):"},{"line_number":77,"context_line":"            msg \u003d \"User rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":80,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":81,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":82,"context_line":"        cls.access_to \u003d \"user\""},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_918f0b74","line":80,"range":{"start_line":79,"start_character":3,"end_line":80,"end_character":75},"updated":"2016-12-16 17:41:35.000000000","message":"you should do this in a base class, it is the same for NFS and CIFS.","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                cls.protocol in CONF.share.enable_user_rules_for_protocols):"},{"line_number":77,"context_line":"            msg \u003d \"User rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":80,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":81,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":82,"context_line":"        cls.access_to \u003d \"user\""},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_e5f3a308","line":80,"range":{"start_line":79,"start_character":3,"end_line":80,"end_character":75},"in_reply_to":"1a6eadb0_918f0b74","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":80,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":81,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":82,"context_line":"        cls.access_to \u003d \"user\""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":85,"context_line":"    def test_create_delete_access_rules(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_51e01329","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":30},"updated":"2016-12-16 17:41:35.000000000","message":"you should read value from configuration","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":80,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":81,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":82,"context_line":"        cls.access_to \u003d \"user\""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":85,"context_line":"    def test_create_delete_access_rules(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_e520039e","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":30},"in_reply_to":"1a6eadb0_51e01329","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"e727a6e9012cb3f5e4cf20ec725e16a2cd12a8c2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BaseShareSnapshotRulesTest(base.BaseSharesTest):"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"da4df55a_284bbfca","line":24,"updated":"2016-12-23 18:55:19.000000000","message":"need to create share snapshot export locations tests and share snapshot instance export locations tests","commit_id":"2054b0734cd371c619b16efdba4c1d07569c2404"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"30bf232460c2e63f19406ce2692a751cd6267d27","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest import config"},{"line_number":18,"context_line":"from tempest import test"},{"line_number":19,"context_line":"import testtools"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_0f9ac614","line":20,"updated":"2017-01-12 18:18:05.000000000","message":"from testtools import testcase as tc","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest import config"},{"line_number":18,"context_line":"from tempest import test"},{"line_number":19,"context_line":"import testtools"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_61078018","line":20,"in_reply_to":"9a57fde8_0f9ac614","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"30bf232460c2e63f19406ce2692a751cd6267d27","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":38,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":39,"context_line":"                      \u0027Mountable snapshots tests are disabled.\u0027)"},{"line_number":40,"context_line":"@ddt.ddt"},{"line_number":41,"context_line":"class ShareSnapshotIpRulesForNFSTest(BaseShareSnapshotRulesTest):"},{"line_number":42,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_cf743eff","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":64},"updated":"2017-01-12 18:18:05.000000000","message":"same as in https://review.openstack.org/#/c/345526/38/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":38,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":39,"context_line":"                      \u0027Mountable snapshots tests are disabled.\u0027)"},{"line_number":40,"context_line":"@ddt.ddt"},{"line_number":41,"context_line":"class ShareSnapshotIpRulesForNFSTest(BaseShareSnapshotRulesTest):"},{"line_number":42,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_21281886","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":64},"in_reply_to":"9a57fde8_cf743eff","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"30bf232460c2e63f19406ce2692a751cd6267d27","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cls.access_type \u003d \"ip\""},{"line_number":55,"context_line":"        cls.access_to \u003d \"2.2.2.2\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":58,"context_line":"    @ddt.data(\"1.1.1.1\", \"1.2.3.4/32\")"},{"line_number":59,"context_line":"    def test_create_delete_access_rules(self, access_to):"},{"line_number":60,"context_line":"        # create rule"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_efbbc273","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":58},"updated":"2017-01-12 18:18:05.000000000","message":"@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cls.access_type \u003d \"ip\""},{"line_number":55,"context_line":"        cls.access_to \u003d \"2.2.2.2\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":58,"context_line":"    @ddt.data(\"1.1.1.1\", \"1.2.3.4/32\")"},{"line_number":59,"context_line":"    def test_create_delete_access_rules(self, access_to):"},{"line_number":60,"context_line":"        # create rule"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_c1403437","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":58},"in_reply_to":"9a57fde8_efbbc273","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"30bf232460c2e63f19406ce2692a751cd6267d27","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":94,"context_line":"        cls.access_to \u003d CONF.share.username_for_user_rules"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":97,"context_line":"    def test_create_delete_access_rules(self):"},{"line_number":98,"context_line":"        # create rule"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_efed828f","line":95,"updated":"2017-01-12 18:18:05.000000000","message":"This test class is broken. You do not create neither share nor snapshot.","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":94,"context_line":"        cls.access_to \u003d CONF.share.username_for_user_rules"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":97,"context_line":"    def test_create_delete_access_rules(self):"},{"line_number":98,"context_line":"        # create rule"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_817f0c65","line":95,"in_reply_to":"9a57fde8_efed828f","updated":"2017-01-16 22:54:47.000000000","message":"in fact it is not, it is creating in the base class, the NFS subclass was doing it twice","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"30bf232460c2e63f19406ce2692a751cd6267d27","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":94,"context_line":"        cls.access_to \u003d CONF.share.username_for_user_rules"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":97,"context_line":"    def test_create_delete_access_rules(self):"},{"line_number":98,"context_line":"        # create rule"},{"line_number":99,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_4fbbee72","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":58},"updated":"2017-01-12 18:18:05.000000000","message":"@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":94,"context_line":"        cls.access_to \u003d CONF.share.username_for_user_rules"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":97,"context_line":"    def test_create_delete_access_rules(self):"},{"line_number":98,"context_line":"        # create rule"},{"line_number":99,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_01479c4b","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":58},"in_reply_to":"9a57fde8_4fbbee72","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"cbe8fbf14b837d7a7d233934aa6e4b286e38e400","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        cls.snapshot \u003d cls.create_snapshot_wait_for_active(cls.share[\u0027id\u0027])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@base.skip_if_microversion_not_supported(\"2.27\")"},{"line_number":38,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests and"},{"line_number":39,"context_line":"                      CONF.share.run_snapshot_tests,"},{"line_number":40,"context_line":"                      \u0027Mountable snapshots tests are disabled.\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a3c09a3_8be61013","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":48},"updated":"2017-01-17 18:32:50.000000000","message":"This one was part of comment in [1] too. Same in other such places.\n\n[1] https://review.openstack.org/#/c/345526/38..41/manila_tempest_tests/tests/api/test_snapshot_rules.py","commit_id":"8f26ef0e5dd134df7d3bd68e88082ecea9aa0608"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"43fbdff92305e3844328f9679ae0abb6d47fe6a0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.snapshot[\u0027id\u0027], self.access_type, access_to)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        for key in (\u0027deleted\u0027, \u0027deleted_at\u0027, \u0027instance_mappings\u0027):"},{"line_number":64,"context_line":"            self.assertNotIn(key, rule.keys())"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":67,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_a26103d5","line":64,"range":{"start_line":64,"start_character":34,"end_line":64,"end_character":45},"updated":"2017-01-24 10:53:29.000000000","message":"It is not py3 compatible","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            self.snapshot[\u0027id\u0027], self.access_type, access_to)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        for key in (\u0027deleted\u0027, \u0027deleted_at\u0027, \u0027instance_mappings\u0027):"},{"line_number":64,"context_line":"            self.assertNotIn(key, rule.keys())"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":67,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_e265cb1d","line":64,"range":{"start_line":64,"start_character":34,"end_line":64,"end_character":45},"in_reply_to":"5a3905b3_a26103d5","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"43fbdff92305e3844328f9679ae0abb6d47fe6a0","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":93,"context_line":"        cls.access_to \u003d CONF.share.username_for_user_rules"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)"},{"line_number":96,"context_line":"    def test_create_delete_access_rules(self):"},{"line_number":97,"context_line":"        # create rule"},{"line_number":98,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("},{"line_number":99,"context_line":"            self.snapshot[\u0027id\u0027], self.access_type, self.access_to)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        for key in (\u0027deleted\u0027, \u0027deleted_at\u0027, \u0027instance_mappings\u0027):"},{"line_number":102,"context_line":"            self.assertNotIn(key, rule.keys())"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":105,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # delete rule and wait for deletion"},{"line_number":108,"context_line":"        self.shares_v2_client.delete_snapshot_access_rule(self.snapshot[\u0027id\u0027],"},{"line_number":109,"context_line":"                                                          rule[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_deletion("},{"line_number":111,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_82c24783","line":111,"range":{"start_line":95,"start_character":4,"end_line":111,"end_character":44},"updated":"2017-01-24 10:53:29.000000000","message":"It duplicates above test. Could be made as private method, which can be called by these two classes expecting specific data on input.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        cls.access_type \u003d \"user\""},{"line_number":93,"context_line":"        cls.access_to \u003d CONF.share.username_for_user_rules"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)"},{"line_number":96,"context_line":"    def test_create_delete_access_rules(self):"},{"line_number":97,"context_line":"        # create rule"},{"line_number":98,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("},{"line_number":99,"context_line":"            self.snapshot[\u0027id\u0027], self.access_type, self.access_to)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        for key in (\u0027deleted\u0027, \u0027deleted_at\u0027, \u0027instance_mappings\u0027):"},{"line_number":102,"context_line":"            self.assertNotIn(key, rule.keys())"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":105,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # delete rule and wait for deletion"},{"line_number":108,"context_line":"        self.shares_v2_client.delete_snapshot_access_rule(self.snapshot[\u0027id\u0027],"},{"line_number":109,"context_line":"                                                          rule[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_deletion("},{"line_number":111,"context_line":"            self.snapshot[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_6229dbe5","line":111,"range":{"start_line":95,"start_character":4,"end_line":111,"end_character":44},"in_reply_to":"5a3905b3_82c24783","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"manila_tempest_tests/tests/api/test_snapshot_rules_negative.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_3128f732","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":53},"updated":"2016-12-16 17:41:35.000000000","message":"not being used","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_65e89311","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":53},"in_reply_to":"1a6eadb0_3128f732","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":29,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":30,"context_line":"@ddt.ddt"},{"line_number":31,"context_line":"class ShareIpRulesForNFSNegativeTest(base.BaseSharesTest):"},{"line_number":32,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_91bd4b04","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":59},"updated":"2016-12-16 17:41:35.000000000","message":"Also skip if microversion not supported","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":29,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":30,"context_line":"@ddt.ddt"},{"line_number":31,"context_line":"class ShareIpRulesForNFSNegativeTest(base.BaseSharesTest):"},{"line_number":32,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_51c73395","line":29,"range":{"start_line":29,"start_character":23,"end_line":29,"end_character":28},"updated":"2016-12-16 17:41:35.000000000","message":"Mountable","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":29,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":30,"context_line":"@ddt.ddt"},{"line_number":31,"context_line":"class ShareIpRulesForNFSNegativeTest(base.BaseSharesTest):"},{"line_number":32,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_a5d0bb54","line":29,"range":{"start_line":29,"start_character":23,"end_line":29,"end_character":28},"in_reply_to":"1a6eadb0_51c73395","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LATEST_MICROVERSION \u003d CONF.share.max_api_microversion"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":29,"context_line":"                      \u0027Mount snapshot tests are disabled.\u0027)"},{"line_number":30,"context_line":"@ddt.ddt"},{"line_number":31,"context_line":"class ShareIpRulesForNFSNegativeTest(base.BaseSharesTest):"},{"line_number":32,"context_line":"    protocol \u003d \"nfs\""}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_e5cac3a0","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":59},"in_reply_to":"1a6eadb0_91bd4b04","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        super(ShareIpRulesForNFSNegativeTest, cls).resource_setup()"},{"line_number":37,"context_line":"        if not (cls.protocol in CONF.share.enable_protocols and"},{"line_number":38,"context_line":"                cls.protocol in CONF.share.enable_ip_rules_for_protocols):"},{"line_number":39,"context_line":"            msg \u003d \"IP rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":40,"context_line":"            raise cls.skipException(msg)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # create share"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_91546bca","line":39,"range":{"start_line":39,"start_character":60,"end_line":39,"end_character":62},"updated":"2016-12-16 17:41:35.000000000","message":"period","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        super(ShareIpRulesForNFSNegativeTest, cls).resource_setup()"},{"line_number":37,"context_line":"        if not (cls.protocol in CONF.share.enable_protocols and"},{"line_number":38,"context_line":"                cls.protocol in CONF.share.enable_ip_rules_for_protocols):"},{"line_number":39,"context_line":"            msg \u003d \"IP rule tests for %s protocol are disabled\" % cls.protocol"},{"line_number":40,"context_line":"            raise cls.skipException(msg)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # create share"}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_05cee7b3","line":39,"range":{"start_line":39,"start_character":60,"end_line":39,"end_character":62},"in_reply_to":"1a6eadb0_91546bca","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d830e782a6ff695b6f446322ee62eea013c0e3e8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            raise cls.skipException(msg)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # create share"},{"line_number":43,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":44,"context_line":"        cls.snap \u003d cls.create_snapshot_wait_for_active(cls.share[\"id\"])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @test.attr(type\u003d[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])"},{"line_number":47,"context_line":"    @ddt.data(\"1.2.3.256\", \"1.1.1.-\", \"1.2.3.4/33\", \"1.2.3.*\", \"1.2.3.*/23\","}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_f1311fa3","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":71},"updated":"2016-12-16 17:41:35.000000000","message":"could also be in the base class","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7b590f976f23868448e8f4f2c1ed8593da23c410","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            raise cls.skipException(msg)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # create share"},{"line_number":43,"context_line":"        cls.share \u003d cls.create_share(cls.protocol)"},{"line_number":44,"context_line":"        cls.snap \u003d cls.create_snapshot_wait_for_active(cls.share[\"id\"])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @test.attr(type\u003d[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])"},{"line_number":47,"context_line":"    @ddt.data(\"1.2.3.256\", \"1.1.1.-\", \"1.2.3.4/33\", \"1.2.3.*\", \"1.2.3.*/23\","}],"source_content_type":"text/x-python","patch_set":21,"id":"da4df55a_254ccb41","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":71},"in_reply_to":"1a6eadb0_f1311fa3","updated":"2016-12-23 18:01:08.000000000","message":"Done","commit_id":"bedea7e4ef8c9a462c1601015e8afa8c6eb755fc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4bd0f8fcd3f80a15531a7b4afd4a70f31dca5ea0","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":19,"context_line":"from tempest import test"},{"line_number":20,"context_line":"import testtools"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":23,"context_line":"from manila_tempest_tests.tests.api import test_snapshot_rules"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_6f77d2d4","line":21,"updated":"2017-01-12 18:18:50.000000000","message":"from testtools import testcase as tc","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":19,"context_line":"from tempest import test"},{"line_number":20,"context_line":"import testtools"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from manila_tempest_tests.tests.api import base"},{"line_number":23,"context_line":"from manila_tempest_tests.tests.api import test_snapshot_rules"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_e101b0b0","line":21,"in_reply_to":"9a57fde8_6f77d2d4","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4bd0f8fcd3f80a15531a7b4afd4a70f31dca5ea0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"CONF \u003d config.CONF"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":29,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":30,"context_line":"                      \u0027Mountable snapshots tests are disabled.\u0027)"},{"line_number":31,"context_line":"@ddt.ddt"},{"line_number":32,"context_line":"class ShareIpRulesForNFSNegativeTest("},{"line_number":33,"context_line":"        test_snapshot_rules.BaseShareSnapshotRulesTest):"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_0f4f2693","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":64},"updated":"2017-01-12 18:18:50.000000000","message":"same as in https://review.openstack.org/#/c/345526/38/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"CONF \u003d config.CONF"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":29,"context_line":"@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,"},{"line_number":30,"context_line":"                      \u0027Mountable snapshots tests are disabled.\u0027)"},{"line_number":31,"context_line":"@ddt.ddt"},{"line_number":32,"context_line":"class ShareIpRulesForNFSNegativeTest("},{"line_number":33,"context_line":"        test_snapshot_rules.BaseShareSnapshotRulesTest):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_01ff9caa","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":64},"in_reply_to":"9a57fde8_0f4f2693","updated":"2017-01-16 22:54:47.000000000","message":"Done","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4bd0f8fcd3f80a15531a7b4afd4a70f31dca5ea0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"},{"line_number":54,"context_line":"                          self.snap[\"id\"], \"ip\", target)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @test.attr(type\u003d[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])"},{"line_number":57,"context_line":"    def test_create_duplicate_of_ip_rule(self):"},{"line_number":58,"context_line":"        # test data"},{"line_number":59,"context_line":"        access_type \u003d \"ip\""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a57fde8_0f6806f5","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":67},"updated":"2017-01-12 18:18:50.000000000","message":"@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"10f4b1ceb902e1f175a0443ed8068a16373768b8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"},{"line_number":54,"context_line":"                          self.snap[\"id\"], \"ip\", target)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @test.attr(type\u003d[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])"},{"line_number":57,"context_line":"    def test_create_duplicate_of_ip_rule(self):"},{"line_number":58,"context_line":"        # test data"},{"line_number":59,"context_line":"        access_type \u003d \"ip\""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_413364ab","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":67},"in_reply_to":"9a57fde8_0f6806f5","updated":"2017-01-16 22:54:47.000000000","message":"It is TAG_NEGATIVE","commit_id":"e35ae542c35aca292d88289884c6c7bcfefdca09"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                      CONF.share.run_snapshot_tests,"},{"line_number":31,"context_line":"                      \u0027Mountable snapshots tests are disabled.\u0027)"},{"line_number":32,"context_line":"@ddt.ddt"},{"line_number":33,"context_line":"class ShareIpRulesForNFSNegativeTest("},{"line_number":34,"context_line":"        test_snapshot_rules.BaseShareSnapshotRulesTest):"},{"line_number":35,"context_line":"    protocol \u003d \"nfs\""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_4b337414","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":11},"updated":"2017-01-23 02:17:58.000000000","message":"Snapshot","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                      CONF.share.run_snapshot_tests,"},{"line_number":31,"context_line":"                      \u0027Mountable snapshots tests are disabled.\u0027)"},{"line_number":32,"context_line":"@ddt.ddt"},{"line_number":33,"context_line":"class ShareIpRulesForNFSNegativeTest("},{"line_number":34,"context_line":"        test_snapshot_rules.BaseShareSnapshotRulesTest):"},{"line_number":35,"context_line":"    protocol \u003d \"nfs\""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"5a3905b3_321f5c6d","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":11},"in_reply_to":"5a3905b3_4b337414","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"663a5132d9ebff25e26e3090b2319d7a587f705a","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":50,"context_line":"    @ddt.data(\"1.2.3.256\", \"1.1.1.-\", \"1.2.3.4/33\", \"1.2.3.*\", \"1.2.3.*/23\","},{"line_number":51,"context_line":"              \"1.2.3.1|23\", \"1.2.3.1/\",  \"1.2.3.1/-1\")"},{"line_number":52,"context_line":"    def test_create_access_rule_ip_with_wrong_target(self, target):"},{"line_number":53,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":54,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_425a1ff3","line":51,"updated":"2017-01-24 10:58:28.000000000","message":"Add \"correct IPv6\" that is not allowed here?","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)"},{"line_number":50,"context_line":"    @ddt.data(\"1.2.3.256\", \"1.1.1.-\", \"1.2.3.4/33\", \"1.2.3.*\", \"1.2.3.*/23\","},{"line_number":51,"context_line":"              \"1.2.3.1|23\", \"1.2.3.1/\",  \"1.2.3.1/-1\")"},{"line_number":52,"context_line":"    def test_create_access_rule_ip_with_wrong_target(self, target):"},{"line_number":53,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":54,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_457069a4","line":51,"in_reply_to":"5a3905b3_425a1ff3","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"663a5132d9ebff25e26e3090b2319d7a587f705a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        access_type \u003d \"ip\""},{"line_number":61,"context_line":"        access_to \u003d \"1.2.3.4\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # create rule"},{"line_number":64,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("},{"line_number":65,"context_line":"            self.snap[\u0027id\u0027], access_type, access_to)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":68,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # try create duplicate of rule"},{"line_number":71,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":72,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"},{"line_number":73,"context_line":"                          self.snap[\"id\"], access_type, access_to)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # delete rule and wait for deletion"},{"line_number":76,"context_line":"        self.shares_v2_client.delete_snapshot_access_rule(self.snap[\u0027id\u0027],"},{"line_number":77,"context_line":"                                                          rule[\u0027id\u0027])"},{"line_number":78,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_deletion("},{"line_number":79,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_02d9f756","line":79,"range":{"start_line":63,"start_character":8,"end_line":79,"end_character":40},"updated":"2017-01-24 10:58:28.000000000","message":"Better to do it twice. It will test completely the approach for soft-deletion of DB records and unique constraints.\n\nFor example, in case we write not entity ID to \"deleted\" field in DB, but \"True\", then we will catch this bug having two iterations of creating same rule.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        access_type \u003d \"ip\""},{"line_number":61,"context_line":"        access_to \u003d \"1.2.3.4\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # create rule"},{"line_number":64,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("},{"line_number":65,"context_line":"            self.snap[\u0027id\u0027], access_type, access_to)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":68,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # try create duplicate of rule"},{"line_number":71,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":72,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"},{"line_number":73,"context_line":"                          self.snap[\"id\"], access_type, access_to)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # delete rule and wait for deletion"},{"line_number":76,"context_line":"        self.shares_v2_client.delete_snapshot_access_rule(self.snap[\u0027id\u0027],"},{"line_number":77,"context_line":"                                                          rule[\u0027id\u0027])"},{"line_number":78,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_deletion("},{"line_number":79,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_bb520e33","line":79,"range":{"start_line":63,"start_character":8,"end_line":79,"end_character":40},"in_reply_to":"5a3905b3_02d9f756","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"67a4c67d90232fd53252a5c1f64a167b69d30cb3","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        access_type \u003d \"ip\""},{"line_number":61,"context_line":"        access_to \u003d \"1.2.3.4\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # create rule"},{"line_number":64,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("},{"line_number":65,"context_line":"            self.snap[\u0027id\u0027], access_type, access_to)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":68,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # try create duplicate of rule"},{"line_number":71,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":72,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"},{"line_number":73,"context_line":"                          self.snap[\"id\"], access_type, access_to)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # delete rule and wait for deletion"},{"line_number":76,"context_line":"        self.shares_v2_client.delete_snapshot_access_rule(self.snap[\u0027id\u0027],"},{"line_number":77,"context_line":"                                                          rule[\u0027id\u0027])"},{"line_number":78,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_deletion("},{"line_number":79,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_e214eba0","line":79,"range":{"start_line":63,"start_character":8,"end_line":79,"end_character":40},"in_reply_to":"5a3905b3_02d9f756","updated":"2017-01-24 11:00:48.000000000","message":"and deleting twice too, of course.","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"076ccab5bc4d106ae26ae068dace5326cf9e3d83","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        access_type \u003d \"ip\""},{"line_number":61,"context_line":"        access_to \u003d \"1.2.3.4\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # create rule"},{"line_number":64,"context_line":"        rule \u003d self.shares_v2_client.create_snapshot_access_rule("},{"line_number":65,"context_line":"            self.snap[\u0027id\u0027], access_type, access_to)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_status("},{"line_number":68,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # try create duplicate of rule"},{"line_number":71,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":72,"context_line":"                          self.shares_v2_client.create_snapshot_access_rule,"},{"line_number":73,"context_line":"                          self.snap[\"id\"], access_type, access_to)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # delete rule and wait for deletion"},{"line_number":76,"context_line":"        self.shares_v2_client.delete_snapshot_access_rule(self.snap[\u0027id\u0027],"},{"line_number":77,"context_line":"                                                          rule[\u0027id\u0027])"},{"line_number":78,"context_line":"        self.shares_v2_client.wait_for_snapshot_access_rule_deletion("},{"line_number":79,"context_line":"            self.snap[\u0027id\u0027], rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_db335a12","line":79,"range":{"start_line":63,"start_character":8,"end_line":79,"end_character":40},"in_reply_to":"5a3905b3_e214eba0","updated":"2017-01-24 12:05:00.000000000","message":"Done","commit_id":"13475fa04d16f907c4eb13a62da0c7a88eec3c60"}],"releasenotes/notes/share-mount-snapshots-b52bf3433d1e7afb.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3c46ef2c99f59bcc32d68cff1c23f1751d90a026","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added mountable snapshots feature to manila. Access rules"},{"line_number":4,"context_line":"    can now be allowed and denied to snapshots of shares created"},{"line_number":5,"context_line":"    with a share type that supports this feature."},{"line_number":6,"context_line":"  - Added mountable snapshots support to the LVM driver."}],"source_content_type":"text/x-yaml","patch_set":55,"id":"5a3905b3_0b57ac26","line":3,"range":{"start_line":3,"start_character":56,"end_line":3,"end_character":61},"updated":"2017-01-23 02:17:58.000000000","message":"remove","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"561976c1c636c740ca6f9988d4187e14dddc5eeb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added mountable snapshots feature to manila. Access rules"},{"line_number":4,"context_line":"    can now be allowed and denied to snapshots of shares created"},{"line_number":5,"context_line":"    with a share type that supports this feature."},{"line_number":6,"context_line":"  - Added mountable snapshots support to the LVM driver."}],"source_content_type":"text/x-yaml","patch_set":55,"id":"5a3905b3_d2045819","line":3,"range":{"start_line":3,"start_character":56,"end_line":3,"end_character":61},"in_reply_to":"5a3905b3_0b57ac26","updated":"2017-01-23 19:06:08.000000000","message":"Done","commit_id":"5fec055238d65c25be2bc68761709e87d424b645"}]}
