)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Manage and unmanage snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add APIs to support manage and unmanage share snapshots."},{"line_number":10,"context_line":"Also add support in the Generic driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I87a066173c85d969607d132accd9f0e9bd49c235"},{"line_number":13,"context_line":"Implements: blueprint manage-unmanage-snapshot"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"5a710552_a66dca99","line":10,"updated":"2015-12-16 13:29:55.000000000","message":"Please add APIImpact Flag.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d1cc12ec8788cd7303f497ddcbb6477cc94b25e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Manage and unmanage snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add APIs to support manage and unmanage share snapshots."},{"line_number":10,"context_line":"Also add support in the Generic driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I87a066173c85d969607d132accd9f0e9bd49c235"},{"line_number":13,"context_line":"Implements: blueprint manage-unmanage-snapshot"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3a7e1126_1ab881c7","line":10,"updated":"2015-12-19 14:50:02.000000000","message":"Please add an APIImpact flag on your next patch :)\n\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references","commit_id":"092fb9924149d86824770e28237e13723d3573b8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ac0ad61194b725964be7b8a900cf4f0dbe6db9f6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Manage and unmanage snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add APIs to support manage and unmanage share snapshots."},{"line_number":10,"context_line":"Also add support in the Generic driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact"},{"line_number":13,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1a7b0d38_f43717ae","line":10,"updated":"2015-12-24 15:50:49.000000000","message":"Please add more details, like following:\n\n- support only for DHSS\u003dFalse driver mode\n- bump of microversion\n\n...","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9339b6b69ab4d64917f595230ee3118f6d346f3a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Manage and unmanage snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add APIs to support manage and unmanage share snapshots."},{"line_number":10,"context_line":"Also add support in the Generic driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact"},{"line_number":13,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"fa69d971_0a945035","line":10,"in_reply_to":"1a7b0d38_f43717ae","updated":"2015-12-30 01:00:34.000000000","message":"Done","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add APIs to support manage and unmanage share snapshots."},{"line_number":10,"context_line":"Also add support in the Generic driver."},{"line_number":11,"context_line":"This only supports for DHSS\u003dFalse driver mode."},{"line_number":12,"context_line":"Also need to bump microversion to 2.9."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"APIImpact"},{"line_number":15,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a68dd71_4cdd016e","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":37},"updated":"2016-01-22 16:36:14.000000000","message":"Not 2.9 anymore. Better to remove number at all.","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add APIs to support manage and unmanage share snapshots."},{"line_number":10,"context_line":"Also add support in the Generic driver."},{"line_number":11,"context_line":"This only supports for DHSS\u003dFalse driver mode."},{"line_number":12,"context_line":"Also need to bump microversion to 2.9."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"APIImpact"},{"line_number":15,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a68dd71_4b0f1e37","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":37},"in_reply_to":"9a68dd71_4cdd016e","updated":"2016-01-23 03:51:00.000000000","message":"Done","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"}],"doc/source/devref/share_back_ends_feature_support_mapping.rst":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b82fe436720bd93f21a4c8e4fe7edc641228b733","unresolved":false,"context_lines":[{"line_number":35,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":36,"context_line":"|      Generic (Cinder as back-end)      | DHSS \u003d True (J) \u0026 False (K) |           K           |       L      |       L      |            J           |              J             |     DHSS \u003d False (M)     |"},{"line_number":37,"context_line":"+----------------------------------------+-----------------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|       NetApp Clustered Data ONTAP      | DHSS \u003d True (J) \u0026 False (K) |           L           |       L      |       L      |            J           |              J             |            \\\u003d            |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":40,"context_line":"|                 EMC VNX                |        DHSS \u003d True (J)      |          \\-           |      \\-      |       \\-     |            J           |              J             |            \\\u003d            |"},{"line_number":41,"context_line":"+----------------------------------------+-----------------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":31,"id":"5a5ae5dd_9d077b81","line":38,"range":{"start_line":38,"start_character":192,"end_line":38,"end_character":194},"updated":"2016-02-06 19:21:31.000000000","message":"\\\u003d ?\n\nMaybe \\- ?\n\nSame below.","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"835ae5faa83e10278861452fadb7cacfbdfa42b9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":36,"context_line":"|      Generic (Cinder as back-end)      | DHSS \u003d True (J) \u0026 False (K) |           K           |       L      |       L      |            J           |              J             |     DHSS \u003d False (M)     |"},{"line_number":37,"context_line":"+----------------------------------------+-----------------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|       NetApp Clustered Data ONTAP      | DHSS \u003d True (J) \u0026 False (K) |           L           |       L      |       L      |            J           |              J             |            \\\u003d            |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":40,"context_line":"|                 EMC VNX                |        DHSS \u003d True (J)      |          \\-           |      \\-      |       \\-     |            J           |              J             |            \\\u003d            |"},{"line_number":41,"context_line":"+----------------------------------------+-----------------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":31,"id":"5a5ae5dd_f1b8182c","line":38,"range":{"start_line":38,"start_character":192,"end_line":38,"end_character":194},"in_reply_to":"5a5ae5dd_9d077b81","updated":"2016-02-07 05:52:07.000000000","message":"Oops:). Done.","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"}],"etc/manila/policy.json":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8bfe839770c27e8a211475e364aea54c93f5ef0b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    \"share_snapshot:get_snapshot\": \"rule:default\","},{"line_number":53,"context_line":"    \"share_snapshot:get_all_snapshots\": \"rule:default\","},{"line_number":54,"context_line":"    \"share_snapshot:snapshot_update\": \"rule:default\","},{"line_number":55,"context_line":"    \"share_snapshot:manage_snapshot\": \"rule:admin_api\","},{"line_number":56,"context_line":"    \"share_snapshot:unmanage_snapshot\": \"rule:admin_api\","},{"line_number":57,"context_line":"    \"share_snapshot:force_delete\": \"rule:admin_api\","},{"line_number":58,"context_line":"    \"share_snapshot:reset_status\": \"rule:admin_api\","},{"line_number":59,"context_line":""}],"source_content_type":"application/json","patch_set":39,"id":"3a57f1b5_f4c36887","line":56,"range":{"start_line":55,"start_character":4,"end_line":56,"end_character":57},"updated":"2016-02-11 16:31:58.000000000","message":"One more API should be covered and have \"admin\" default rule too.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef5dcd54b0c64a16e93ad10e3ec3e2243b0a8a58","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    \"share_snapshot:get_snapshot\": \"rule:default\","},{"line_number":53,"context_line":"    \"share_snapshot:get_all_snapshots\": \"rule:default\","},{"line_number":54,"context_line":"    \"share_snapshot:snapshot_update\": \"rule:default\","},{"line_number":55,"context_line":"    \"share_snapshot:manage_snapshot\": \"rule:admin_api\","},{"line_number":56,"context_line":"    \"share_snapshot:unmanage_snapshot\": \"rule:admin_api\","},{"line_number":57,"context_line":"    \"share_snapshot:force_delete\": \"rule:admin_api\","},{"line_number":58,"context_line":"    \"share_snapshot:reset_status\": \"rule:admin_api\","},{"line_number":59,"context_line":""}],"source_content_type":"application/json","patch_set":39,"id":"3a57f1b5_cf600ed2","line":56,"range":{"start_line":55,"start_character":4,"end_line":56,"end_character":57},"in_reply_to":"3a57f1b5_f4c36887","updated":"2016-02-11 22:03:09.000000000","message":"Done","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    \"share_snapshot:get_snapshot\": \"rule:default\","},{"line_number":53,"context_line":"    \"share_snapshot:get_all_snapshots\": \"rule:default\","},{"line_number":54,"context_line":"    \"share_snapshot:snapshot_update\": \"rule:default\","},{"line_number":55,"context_line":"    \"share_snapshot:manage_snapshot\": \"rule:admin_api\","},{"line_number":56,"context_line":"    \"share_snapshot:unmanage_snapshot\": \"rule:admin_api\","},{"line_number":57,"context_line":"    \"share_snapshot:force_delete\": \"rule:admin_api\","},{"line_number":58,"context_line":"    \"share_snapshot:reset_status\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":54,"id":"dae33548_f81c6779","line":55,"range":{"start_line":55,"start_character":20,"end_line":55,"end_character":35},"updated":"2016-02-15 07:08:45.000000000","message":"nit: since policies are scoped by the resource, you can just have these to be, for consistency:\n\n \n    \"share_snapshot:manage\": \"rule:admin_api\",\n    \"share_snapshot:unmanage\":\"rule:admin_api\",","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    \"share_snapshot:get_snapshot\": \"rule:default\","},{"line_number":53,"context_line":"    \"share_snapshot:get_all_snapshots\": \"rule:default\","},{"line_number":54,"context_line":"    \"share_snapshot:snapshot_update\": \"rule:default\","},{"line_number":55,"context_line":"    \"share_snapshot:manage_snapshot\": \"rule:admin_api\","},{"line_number":56,"context_line":"    \"share_snapshot:unmanage_snapshot\": \"rule:admin_api\","},{"line_number":57,"context_line":"    \"share_snapshot:force_delete\": \"rule:admin_api\","},{"line_number":58,"context_line":"    \"share_snapshot:reset_status\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":54,"id":"dae33548_c8787ff5","line":55,"range":{"start_line":55,"start_character":20,"end_line":55,"end_character":35},"in_reply_to":"dae33548_f81c6779","updated":"2016-02-16 06:23:43.000000000","message":"We already have \"share_snapshot:create_snapshot\", \"share_snapshot:delete_snapshot\", so I think \"share_snapshot:manage_snapshot\" and \"share_snapshot:unmanage_snapshot\" are more consistent with existing policies.","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"}],"manila/api/openstack/api_version_request.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8bfe839770c27e8a211475e364aea54c93f5ef0b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    * 2.9  - Add export locations API"},{"line_number":58,"context_line":"    * 2.10 - Field \u0027access_rules_status\u0027 was added to shares and share"},{"line_number":59,"context_line":"             instances."},{"line_number":60,"context_line":"    * 2.11 - Manage/unmanage snapshot API."},{"line_number":61,"context_line":"\"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_14f16401","line":60,"range":{"start_line":60,"start_character":13,"end_line":60,"end_character":42},"updated":"2016-02-11 16:31:58.000000000","message":"Not the only change.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef5dcd54b0c64a16e93ad10e3ec3e2243b0a8a58","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    * 2.9  - Add export locations API"},{"line_number":58,"context_line":"    * 2.10 - Field \u0027access_rules_status\u0027 was added to shares and share"},{"line_number":59,"context_line":"             instances."},{"line_number":60,"context_line":"    * 2.11 - Manage/unmanage snapshot API."},{"line_number":61,"context_line":"\"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_8f9d36be","line":60,"range":{"start_line":60,"start_character":13,"end_line":60,"end_character":42},"in_reply_to":"3a57f1b5_14f16401","updated":"2016-02-11 22:03:09.000000000","message":"Done","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"}],"manila/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8bfe839770c27e8a211475e364aea54c93f5ef0b","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"2.11"},{"line_number":83,"context_line":"----"},{"line_number":84,"context_line":"  Share snapshot manage and unmanage API."}],"source_content_type":"text/x-rst","patch_set":39,"id":"3a57f1b5_b4b41035","line":84,"range":{"start_line":84,"start_character":2,"end_line":84,"end_character":41},"updated":"2016-02-11 16:31:58.000000000","message":"Now it is not the only API added.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef5dcd54b0c64a16e93ad10e3ec3e2243b0a8a58","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"2.11"},{"line_number":83,"context_line":"----"},{"line_number":84,"context_line":"  Share snapshot manage and unmanage API."}],"source_content_type":"text/x-rst","patch_set":39,"id":"3a57f1b5_4fa3be00","line":84,"range":{"start_line":84,"start_character":2,"end_line":84,"end_character":41},"in_reply_to":"3a57f1b5_b4b41035","updated":"2016-02-11 22:03:09.000000000","message":"Done","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"}],"manila/api/v1/router.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        mapper.resource(\"snapshot_manage\","},{"line_number":115,"context_line":"                        # TODO(xyang): Move to shares controller and"},{"line_number":116,"context_line":"                        # remove this."},{"line_number":117,"context_line":"                        \"os-share-manage-snapshot\","},{"line_number":118,"context_line":"                        controller\u003dself.resources[\"snapshot_manage\"])"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self.resources[\"snapshot_unmanage\"] \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_dffc9040","line":117,"updated":"2015-11-25 09:51:05.000000000","message":"Valerie\u0027s patch(es) removes(/s) all os- extensions. Do we want this to say \"share-manage-snapshot\" instead or \"snapshot-manage\" like \"share-manage\"?","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"30e170a432d830e468710a78db04bd2627b6f478","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        mapper.resource(\"snapshot_manage\","},{"line_number":115,"context_line":"                        # TODO(xyang): Move to shares controller and"},{"line_number":116,"context_line":"                        # remove this."},{"line_number":117,"context_line":"                        \"os-share-manage-snapshot\","},{"line_number":118,"context_line":"                        controller\u003dself.resources[\"snapshot_manage\"])"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self.resources[\"snapshot_unmanage\"] \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_f645c9b2","line":117,"in_reply_to":"9a8ffd7b_dffc9040","updated":"2015-12-10 04:29:16.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        mapper.resource(\"snapshot_unmanage\","},{"line_number":123,"context_line":"                        # TODO(xyang): Move to shares controller and"},{"line_number":124,"context_line":"                        # remove this."},{"line_number":125,"context_line":"                        \"os-share-unmanage-snapshot\","},{"line_number":126,"context_line":"                        controller\u003dself.resources[\"snapshot_unmanage\"],"},{"line_number":127,"context_line":"                        member\u003d{\u0027unmanage\u0027: \u0027POST\u0027})"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_9f4a8882","line":125,"updated":"2015-11-25 09:51:05.000000000","message":"same as above","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"30e170a432d830e468710a78db04bd2627b6f478","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        mapper.resource(\"snapshot_unmanage\","},{"line_number":123,"context_line":"                        # TODO(xyang): Move to shares controller and"},{"line_number":124,"context_line":"                        # remove this."},{"line_number":125,"context_line":"                        \"os-share-unmanage-snapshot\","},{"line_number":126,"context_line":"                        controller\u003dself.resources[\"snapshot_unmanage\"],"},{"line_number":127,"context_line":"                        member\u003d{\u0027unmanage\u0027: \u0027POST\u0027})"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_961325b8","line":125,"in_reply_to":"9a8ffd7b_9f4a8882","updated":"2015-12-10 04:29:16.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"}],"manila/api/v1/share_snapshots.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":78,"context_line":"    def manage(self, req, body):"},{"line_number":79,"context_line":"        return self._manage(req, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":82,"context_line":"    @wsgi.action(\u0027unmanage\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_71b79ed8","line":79,"updated":"2015-12-16 13:29:55.000000000","message":"These functions need to be moved to\n\nmanila/api/v2/share_snapshots.py","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8ede2e9fa1a795dfb244c9270b314b164becabf3","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":78,"context_line":"    def manage(self, req, body):"},{"line_number":79,"context_line":"        return self._manage(req, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":82,"context_line":"    @wsgi.action(\u0027unmanage\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_e36f3629","line":79,"in_reply_to":"5a710552_03e7e211","updated":"2015-12-16 16:29:41.000000000","message":"Xing, this is the case when it is time to create v2. \"manage snapshot\" is only v2-thing.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"38cf684c1b99949ade0bc9fc0d2a958836ee16ca","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":78,"context_line":"    def manage(self, req, body):"},{"line_number":79,"context_line":"        return self._manage(req, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":82,"context_line":"    @wsgi.action(\u0027unmanage\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_03e7e211","line":79,"in_reply_to":"5a710552_1d5663ce","updated":"2015-12-16 16:24:36.000000000","message":"That would need to be created, with a copy of this controller. I guess vponomaryov will be able to answer this better. Adding him to this review","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5d008665fecb27bf8d25818e6f6c2871c3b3c58a","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":78,"context_line":"    def manage(self, req, body):"},{"line_number":79,"context_line":"        return self._manage(req, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":82,"context_line":"    @wsgi.action(\u0027unmanage\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_1d5663ce","line":79,"in_reply_to":"5a710552_71b79ed8","updated":"2015-12-16 15:55:20.000000000","message":"There\u0027s no manila/api/v2/share_snapshots.py.  That\u0027s why I put them here along with other functions.  Let me know if I missed anything.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":78,"context_line":"    def manage(self, req, body):"},{"line_number":79,"context_line":"        return self._manage(req, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.9\u0027)"},{"line_number":82,"context_line":"    @wsgi.action(\u0027unmanage\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_80416aab","line":79,"in_reply_to":"5a710552_e36f3629","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                snapshot[\u0027instances\u0027][0][\u0027id\u0027])"},{"line_number":62,"context_line":"            snapshot[\u0027private_storage\u0027] \u003d private_storage"},{"line_number":63,"context_line":"        except Exception:"},{"line_number":64,"context_line":"            pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return self._view_builder.detail(req, snapshot)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_0cff09ab","line":64,"range":{"start_line":64,"start_character":12,"end_line":64,"end_character":16},"updated":"2016-01-22 16:36:14.000000000","message":"No even logging? Complete hiding of results?","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                snapshot[\u0027instances\u0027][0][\u0027id\u0027])"},{"line_number":62,"context_line":"            snapshot[\u0027private_storage\u0027] \u003d private_storage"},{"line_number":63,"context_line":"        except Exception:"},{"line_number":64,"context_line":"            pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return self._view_builder.detail(req, snapshot)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_ab157a49","line":64,"range":{"start_line":64,"start_character":12,"end_line":64,"end_character":16},"in_reply_to":"9a68dd71_0cff09ab","updated":"2016-01-23 03:51:00.000000000","message":"Done","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b82fe436720bd93f21a4c8e4fe7edc641228b733","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                context, new_host,"},{"line_number":64,"context_line":"                snapshot[\u0027instances\u0027][0][\u0027id\u0027])"},{"line_number":65,"context_line":"            snapshot[\u0027private_storage\u0027] \u003d private_storage"},{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            LOG.info(_LI(\"Cannot get private_storage for snapshot \""},{"line_number":68,"context_line":"                         \"with id: %s\"), id, context\u003dcontext)"},{"line_number":69,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_ddf17396","line":66,"range":{"start_line":66,"start_character":15,"end_line":66,"end_character":25},"updated":"2016-02-06 19:21:31.000000000","message":"You catch here completely ALL exceptions and then hide it. Better to catch expected set of exceptions.","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"835ae5faa83e10278861452fadb7cacfbdfa42b9","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                context, new_host,"},{"line_number":64,"context_line":"                snapshot[\u0027instances\u0027][0][\u0027id\u0027])"},{"line_number":65,"context_line":"            snapshot[\u0027private_storage\u0027] \u003d private_storage"},{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            LOG.info(_LI(\"Cannot get private_storage for snapshot \""},{"line_number":68,"context_line":"                         \"with id: %s\"), id, context\u003dcontext)"},{"line_number":69,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_31eb10e1","line":66,"range":{"start_line":66,"start_character":15,"end_line":66,"end_character":25},"in_reply_to":"5a5ae5dd_ddf17396","updated":"2016-02-07 05:52:07.000000000","message":"Removed the try-except.","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b82fe436720bd93f21a4c8e4fe7edc641228b733","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            LOG.info(_LI(\"Cannot get private_storage for snapshot \""},{"line_number":68,"context_line":"                         \"with id: %s\"), id, context\u003dcontext)"},{"line_number":69,"context_line":"            pass"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        return self._view_builder.detail(req, snapshot)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_fdec6fbc","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":16},"updated":"2016-02-06 19:21:31.000000000","message":"redundant","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"835ae5faa83e10278861452fadb7cacfbdfa42b9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            LOG.info(_LI(\"Cannot get private_storage for snapshot \""},{"line_number":68,"context_line":"                         \"with id: %s\"), id, context\u003dcontext)"},{"line_number":69,"context_line":"            pass"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        return self._view_builder.detail(req, snapshot)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_f1f018cb","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":16},"in_reply_to":"5a5ae5dd_fdec6fbc","updated":"2016-02-07 05:52:07.000000000","message":"Done","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        except exception.NotFound:"},{"line_number":56,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            instances \u003d snapshot.get(\u0027instances\u0027)"},{"line_number":60,"context_line":"            if instances:"},{"line_number":61,"context_line":"                snapshot[\u0027provider_location\u0027] \u003d ("},{"line_number":62,"context_line":"                    instances[0].get(\u0027provider_location\u0027))"},{"line_number":63,"context_line":"        except KeyError:"},{"line_number":64,"context_line":"            LOG.info(_LI(\"Cannot get provider_location for snapshot \""},{"line_number":65,"context_line":"                         \"with id: %s\"), id)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        return self._view_builder.detail(req, snapshot)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_b33ac096","line":65,"range":{"start_line":58,"start_character":8,"end_line":65,"end_character":44},"updated":"2016-02-21 22:56:04.000000000","message":"1) this is in the /v1/share_snapshots.py file.. Are you sure you want this here?\n2) KeyError will not be raised since you\u0027re using dict.get()\n3) Please set provider_location as a @property in the snapshot model.. not in the DB layer or in the API layer or in the ViewBuilder","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e50c4f2abe35be35e14c642c686cd5a3b21a409","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        except exception.NotFound:"},{"line_number":56,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            instances \u003d snapshot.get(\u0027instances\u0027)"},{"line_number":60,"context_line":"            if instances:"},{"line_number":61,"context_line":"                snapshot[\u0027provider_location\u0027] \u003d ("},{"line_number":62,"context_line":"                    instances[0].get(\u0027provider_location\u0027))"},{"line_number":63,"context_line":"        except KeyError:"},{"line_number":64,"context_line":"            LOG.info(_LI(\"Cannot get provider_location for snapshot \""},{"line_number":65,"context_line":"                         \"with id: %s\"), id)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        return self._view_builder.detail(req, snapshot)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_00e726ad","line":65,"range":{"start_line":58,"start_character":8,"end_line":65,"end_character":44},"in_reply_to":"bae84128_b33ac096","updated":"2016-02-24 17:52:54.000000000","message":"+1\n\n\"provider_location\" should be reference attr in Snapshot model.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        except exception.NotFound:"},{"line_number":56,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            instances \u003d snapshot.get(\u0027instances\u0027)"},{"line_number":60,"context_line":"            if instances:"},{"line_number":61,"context_line":"                snapshot[\u0027provider_location\u0027] \u003d ("},{"line_number":62,"context_line":"                    instances[0].get(\u0027provider_location\u0027))"},{"line_number":63,"context_line":"        except KeyError:"},{"line_number":64,"context_line":"            LOG.info(_LI(\"Cannot get provider_location for snapshot \""},{"line_number":65,"context_line":"                         \"with id: %s\"), id)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        return self._view_builder.detail(req, snapshot)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_d0919648","line":65,"range":{"start_line":58,"start_character":8,"end_line":65,"end_character":44},"in_reply_to":"bae84128_b33ac096","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        super(ShareSnapshotsController, self).__init__()"},{"line_number":213,"context_line":"        self.share_api \u003d share.API()"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"},{"line_number":216,"context_line":"    def snapshot_reset_status_legacy(self, req, id, body):"},{"line_number":217,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_93f21cd1","line":215,"range":{"start_line":215,"start_character":4,"end_line":215,"end_character":35},"updated":"2016-02-21 22:56:04.000000000","message":"missing microversion decorator?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"feffbaf4685a97f2bdf58507dd6cea4fbc93dd7e","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        super(ShareSnapshotsController, self).__init__()"},{"line_number":213,"context_line":"        self.share_api \u003d share.API()"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"},{"line_number":216,"context_line":"    def snapshot_reset_status_legacy(self, req, id, body):"},{"line_number":217,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_5bc88922","line":215,"range":{"start_line":215,"start_character":4,"end_line":215,"end_character":35},"in_reply_to":"bae84128_93f21cd1","updated":"2016-02-22 16:33:49.000000000","message":"Ignore that, you probably don\u0027t need it. only /v1 or 1.0 requests will be directed here..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def snapshot_reset_status_legacy(self, req, id, body):"},{"line_number":217,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @wsgi.action(\u0027os-force_delete\u0027)"},{"line_number":220,"context_line":"    def snapshot_force_delete_legacy(self, req, id, body):"},{"line_number":221,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_73edd8ee","line":219,"range":{"start_line":219,"start_character":3,"end_line":219,"end_character":35},"updated":"2016-02-21 22:56:04.000000000","message":"same...","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/api/v1/snapshot_manage.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":81,"context_line":"                                                          driver_options)"},{"line_number":82,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":83,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":84,"context_line":"        except exception.ManilaException as e:"},{"line_number":85,"context_line":"            raise exc.HTTPConflict(explanation\u003dsix.text_type(e))"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_69b6168c","line":83,"updated":"2015-11-25 09:51:05.000000000","message":"This would go away if you removed the policy check from manila/share/api.py","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afcf38f4810966541bd04bf911582ff5d9f5ffa","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":81,"context_line":"                                                          driver_options)"},{"line_number":82,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":83,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":84,"context_line":"        except exception.ManilaException as e:"},{"line_number":85,"context_line":"            raise exc.HTTPConflict(explanation\u003dsix.text_type(e))"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_21d786c0","line":83,"in_reply_to":"9a8ffd7b_69b6168c","updated":"2015-12-11 05:12:14.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                                          driver_options)"},{"line_number":82,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":83,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":84,"context_line":"        except exception.ManilaException as e:"},{"line_number":85,"context_line":"            raise exc.HTTPConflict(explanation\u003dsix.text_type(e))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        return self._view_builder.detail("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_ba52fa11","line":84,"updated":"2015-11-25 09:51:05.000000000","message":"this exception isn\u0027t raised in share/api.py. \n\nexception.ShareNotFound is raised instead which should be interpreted as exc.HTTPNotFound() here.","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afcf38f4810966541bd04bf911582ff5d9f5ffa","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                                          driver_options)"},{"line_number":82,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":83,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":84,"context_line":"        except exception.ManilaException as e:"},{"line_number":85,"context_line":"            raise exc.HTTPConflict(explanation\u003dsix.text_type(e))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        return self._view_builder.detail("}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_01784ac3","line":84,"in_reply_to":"9a8ffd7b_ba52fa11","updated":"2015-12-11 05:12:14.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":37,"context_line":"          }"},{"line_number":38,"context_line":"        }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        See the appropriate Manila drivers\u0027 implementations of the"},{"line_number":41,"context_line":"        manage_snapshot method to find out the accepted format of"},{"line_number":42,"context_line":"        \u0027driver_options\u0027."},{"line_number":43,"context_line":"        For example,in LVM driver, it will be the snapshot id in Cinder:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_0ca0eaf3","line":40,"updated":"2015-12-14 21:09:36.000000000","message":"Make it \"driver\u0027s implementation\" (singular).  I think \"the appropriate\" suggests you\u0027ll look at that one and the singular version is just more readable anyway.","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":37,"context_line":"          }"},{"line_number":38,"context_line":"        }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        See the appropriate Manila drivers\u0027 implementations of the"},{"line_number":41,"context_line":"        manage_snapshot method to find out the accepted format of"},{"line_number":42,"context_line":"        \u0027driver_options\u0027."},{"line_number":43,"context_line":"        For example,in LVM driver, it will be the snapshot id in Cinder:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_a703e30e","line":40,"in_reply_to":"5a710552_0ca0eaf3","updated":"2015-12-15 05:12:24.000000000","message":"Done","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        See the appropriate Manila drivers\u0027 implementations of the"},{"line_number":41,"context_line":"        manage_snapshot method to find out the accepted format of"},{"line_number":42,"context_line":"        \u0027driver_options\u0027."},{"line_number":43,"context_line":"        For example,in LVM driver, it will be the snapshot id in Cinder:"},{"line_number":44,"context_line":"        {\u0027volume_snapshot_id\u0027: \u0027xxx\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_6cddee6f","line":41,"updated":"2015-12-14 21:09:36.000000000","message":"maybe? s/accepted/excepted/","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        See the appropriate Manila drivers\u0027 implementations of the"},{"line_number":41,"context_line":"        manage_snapshot method to find out the accepted format of"},{"line_number":42,"context_line":"        \u0027driver_options\u0027."},{"line_number":43,"context_line":"        For example,in LVM driver, it will be the snapshot id in Cinder:"},{"line_number":44,"context_line":"        {\u0027volume_snapshot_id\u0027: \u0027xxx\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_3aff0a03","line":41,"in_reply_to":"5a710552_6cddee6f","updated":"2015-12-15 05:12:24.000000000","message":"Done","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5a710552_66a282b0","updated":"2015-12-16 13:29:55.000000000","message":"This file should be \n\nmanila/api/v2/snapshot_manage.py\n\n\nSince we\u0027re using v2 URLs now and this is introducing new APIs under v2...","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3a7e1126_404702bc","in_reply_to":"5a710552_66a282b0","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from manila import exception"},{"line_number":20,"context_line":"from manila.i18n import _"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"MIN_SUPPORTED_API_VERSION \u003d \u00272.9\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class SnapshotManageMixin(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_a6a06aa0","line":22,"updated":"2015-12-16 13:29:55.000000000","message":"+1 :) Makes it so much more easier to read/change.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":73,"context_line":"                                                          driver_options)"},{"line_number":74,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":75,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":76,"context_line":"        except (exception.ShareNotFound, exception.ShareSnapshotNotFound) as e:"},{"line_number":77,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_317d966e","line":74,"updated":"2015-12-16 13:29:55.000000000","message":"We can safely remove this if you remove the policy check from #L381\n\nhttps://review.openstack.org/#/c/249542/9/manila/share/api.py","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5d008665fecb27bf8d25818e6f6c2871c3b3c58a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":73,"context_line":"                                                          driver_options)"},{"line_number":74,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":75,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":76,"context_line":"        except (exception.ShareNotFound, exception.ShareSnapshotNotFound) as e:"},{"line_number":77,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_dd221b52","line":74,"in_reply_to":"5a710552_317d966e","updated":"2015-12-16 15:55:20.000000000","message":"I removed them but then added them back because they are there for share manage functions.  I can remove them again if you insist.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"38cf684c1b99949ade0bc9fc0d2a958836ee16ca","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":73,"context_line":"                                                          driver_options)"},{"line_number":74,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":75,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":76,"context_line":"        except (exception.ShareNotFound, exception.ShareSnapshotNotFound) as e:"},{"line_number":77,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_e0cc0c6c","line":74,"in_reply_to":"5a710552_dd221b52","updated":"2015-12-16 16:24:36.000000000","message":"Oh.. that seems vestigial, we can file a bug and remove those if they exist on the API layer.. because two file load+lookups will slow down things..","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":73,"context_line":"                                                          driver_options)"},{"line_number":74,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":75,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":76,"context_line":"        except (exception.ShareNotFound, exception.ShareSnapshotNotFound) as e:"},{"line_number":77,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_00149a9d","line":74,"in_reply_to":"5a710552_e0cc0c6c","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _validate_manage_parameters(self, context, body):"},{"line_number":82,"context_line":"        if not (body and self.is_valid_body(body, \u0027snapshot\u0027)):"},{"line_number":83,"context_line":"            msg \u003d _(\"Snapshot entity not found in request body\")"},{"line_number":84,"context_line":"            raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        required_parameters \u003d (\u0027share_id\u0027, \u0027driver_options\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_06c7fe45","line":83,"updated":"2015-12-16 13:29:55.000000000","message":"missing period","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _validate_manage_parameters(self, context, body):"},{"line_number":82,"context_line":"        if not (body and self.is_valid_body(body, \u0027snapshot\u0027)):"},{"line_number":83,"context_line":"            msg \u003d _(\"Snapshot entity not found in request body\")"},{"line_number":84,"context_line":"            raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        required_parameters \u003d (\u0027share_id\u0027, \u0027driver_options\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_80288ae3","line":83,"in_reply_to":"5a710552_06c7fe45","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for parameter in required_parameters:"},{"line_number":91,"context_line":"            if parameter not in data:"},{"line_number":92,"context_line":"                msg \u003d _(\"Required parameter %s not found\") % parameter"},{"line_number":93,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":94,"context_line":"            if not data.get(parameter):"},{"line_number":95,"context_line":"                msg \u003d _(\"Required parameter %s is empty\") % parameter"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_862f6ef5","line":92,"updated":"2015-12-16 13:29:55.000000000","message":"missing period","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for parameter in required_parameters:"},{"line_number":91,"context_line":"            if parameter not in data:"},{"line_number":92,"context_line":"                msg \u003d _(\"Required parameter %s not found\") % parameter"},{"line_number":93,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":94,"context_line":"            if not data.get(parameter):"},{"line_number":95,"context_line":"                msg \u003d _(\"Required parameter %s is empty\") % parameter"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_007b3af6","line":92,"in_reply_to":"5a710552_862f6ef5","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                msg \u003d _(\"Required parameter %s not found\") % parameter"},{"line_number":93,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":94,"context_line":"            if not data.get(parameter):"},{"line_number":95,"context_line":"                msg \u003d _(\"Required parameter %s is empty\") % parameter"},{"line_number":96,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_2636ba52","line":95,"updated":"2015-12-16 13:29:55.000000000","message":"missing period","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                msg \u003d _(\"Required parameter %s not found\") % parameter"},{"line_number":93,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":94,"context_line":"            if not data.get(parameter):"},{"line_number":95,"context_line":"                msg \u003d _(\"Required parameter %s is empty\") % parameter"},{"line_number":96,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_2080b6bf","line":95,"in_reply_to":"5a710552_2636ba52","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"}],"manila/api/v1/snapshot_unmanage.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":44,"context_line":"            if share.get(\u0027share_server_id\u0027):"},{"line_number":45,"context_line":"                msg \u003d _(\"Operation \u0027unmanage_snapshot\u0027 is not supported for \""},{"line_number":46,"context_line":"                        \"snapshots of shares that are created on top of share\""},{"line_number":47,"context_line":"                        \" servers (created with share-networks).\")"},{"line_number":48,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":49,"context_line":"            elif snapshot[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_4fbb440f","line":46,"updated":"2015-12-14 21:09:36.000000000","message":"? s/on top of/with/  -- Unless you really like \u0027on top of\u0027 or see it as being consistent with other uses.","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                        \" servers (created with share-networks).\")"},{"line_number":48,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":49,"context_line":"            elif snapshot[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":50,"context_line":"                msg \u003d _(\"Snapshot with transitional state can not be \""},{"line_number":51,"context_line":"                        \"unmanaged. Snapshot \u0027%(s_id)s\u0027 is in \u0027%(state)s\u0027 \""},{"line_number":52,"context_line":"                        \"state.\") % dict(state\u003dsnapshot[\u0027status\u0027],"},{"line_number":53,"context_line":"                                         s_id\u003dsnapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_6f4ba02c","line":50,"updated":"2015-12-14 21:09:36.000000000","message":"s/can not/cannot/","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                        \" servers (created with share-networks).\")"},{"line_number":48,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":49,"context_line":"            elif snapshot[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":50,"context_line":"                msg \u003d _(\"Snapshot with transitional state can not be \""},{"line_number":51,"context_line":"                        \"unmanaged. Snapshot \u0027%(s_id)s\u0027 is in \u0027%(state)s\u0027 \""},{"line_number":52,"context_line":"                        \"state.\") % dict(state\u003dsnapshot[\u0027status\u0027],"},{"line_number":53,"context_line":"                                         s_id\u003dsnapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_3a262abb","line":50,"in_reply_to":"5a710552_6f4ba02c","updated":"2015-12-15 05:12:24.000000000","message":"Done","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5a710552_867d2ee9","updated":"2015-12-16 13:29:55.000000000","message":"This file should be\n\nmanila/api/v2/snapshot_unmanage.py\n\nSince we\u0027re using v2 URLs now and this is introducing new APIs under v2...","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3a7e1126_e085cece","in_reply_to":"5a710552_867d2ee9","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\"Unmanage a share snapshot.\"\"\""},{"line_number":35,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        LOG.info(_LI(\"Unmanage share snapshot with id: %s\"), id,"},{"line_number":38,"context_line":"                 context\u003dcontext)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_86644e49","line":37,"updated":"2015-12-16 13:29:55.000000000","message":"missing period","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\"Unmanage a share snapshot.\"\"\""},{"line_number":35,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        LOG.info(_LI(\"Unmanage share snapshot with id: %s\"), id,"},{"line_number":38,"context_line":"                 context\u003dcontext)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_a06ca635","line":37,"in_reply_to":"5a710552_86644e49","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"            self.share_api.unmanage_snapshot(context, snapshot)"},{"line_number":57,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":58,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":59,"context_line":"        except (exception.ShareSnapshotNotFound, exception.ShareNotFound) as e:"},{"line_number":60,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_31103601","line":57,"updated":"2015-12-16 13:29:55.000000000","message":"We can safely remove this if you remove the policy check from #L403\n\n\nhttps://review.openstack.org/#/c/249542/9/manila/share/api.py","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"            self.share_api.unmanage_snapshot(context, snapshot)"},{"line_number":57,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":58,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":59,"context_line":"        except (exception.ShareSnapshotNotFound, exception.ShareNotFound) as e:"},{"line_number":60,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_4075c2f7","line":57,"in_reply_to":"5a710552_31103601","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"}],"manila/api/v2/driver_private_data.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"f3fc1567a92721a04c60d183ce5a228657015c07","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class DriverPrivateDataController(wsgi.Controller):"},{"line_number":25,"context_line":"    \"\"\"Driver private data API controller."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Used only by API v2 starting from microversion 2.11."},{"line_number":28,"context_line":"    Registered under API URL \u0027driver_private_data\u0027."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    resource_name \u003d \"driver_private_data\""}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_2e3f72d7","line":28,"range":{"start_line":27,"start_character":4,"end_line":28,"end_character":51},"updated":"2016-02-11 16:28:37.000000000","message":"Some newcomer admin will have question, \"when do I need this API?\" So, better to place here some \"why\" explanations than \"how\".","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01b4095078cc66b8d7dcbf83ce3ef5c641d1291c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class DriverPrivateDataController(wsgi.Controller):"},{"line_number":25,"context_line":"    \"\"\"Driver private data API controller."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Used only by API v2 starting from microversion 2.11."},{"line_number":28,"context_line":"    Registered under API URL \u0027driver_private_data\u0027."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    resource_name \u003d \"driver_private_data\""}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_342340a9","line":28,"range":{"start_line":27,"start_character":4,"end_line":28,"end_character":51},"in_reply_to":"3a57f1b5_2e3f72d7","updated":"2016-02-11 16:29:12.000000000","message":"Sure.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef5dcd54b0c64a16e93ad10e3ec3e2243b0a8a58","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class DriverPrivateDataController(wsgi.Controller):"},{"line_number":25,"context_line":"    \"\"\"Driver private data API controller."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Used only by API v2 starting from microversion 2.11."},{"line_number":28,"context_line":"    Registered under API URL \u0027driver_private_data\u0027."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    resource_name \u003d \"driver_private_data\""}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_4f55fef7","line":28,"range":{"start_line":27,"start_character":4,"end_line":28,"end_character":51},"in_reply_to":"3a57f1b5_342340a9","updated":"2016-02-11 22:03:09.000000000","message":"Done","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"}],"manila/api/v2/router.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                       \"/{project_id}/snapshots/manage\","},{"line_number":174,"context_line":"                       controller\u003dself.resources[\"snapshots\"],"},{"line_number":175,"context_line":"                       action\u003d\"manage\","},{"line_number":176,"context_line":"                       conditions\u003d{\"method\": [\"POST\"]})"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.resources[\"share_metadata\"] \u003d share_metadata.create_resource()"},{"line_number":179,"context_line":"        share_metadata_controller \u003d self.resources[\"share_metadata\"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_8f6a8c19","line":176,"updated":"2015-12-14 21:09:36.000000000","message":"This is inconsistent with share-manage as it doesn\u0027t create snapshot_(un)manage resources.  Is that not needed here because we skipped os- stuff?","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                       \"/{project_id}/snapshots/manage\","},{"line_number":174,"context_line":"                       controller\u003dself.resources[\"snapshots\"],"},{"line_number":175,"context_line":"                       action\u003d\"manage\","},{"line_number":176,"context_line":"                       conditions\u003d{\"method\": [\"POST\"]})"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.resources[\"share_metadata\"] \u003d share_metadata.create_resource()"},{"line_number":179,"context_line":"        share_metadata_controller \u003d self.resources[\"share_metadata\"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_7ac4b23f","line":176,"in_reply_to":"5a710552_8f6a8c19","updated":"2015-12-15 05:12:24.000000000","message":"Yes. It is not needed.  ShareSnapshotController in share_snapshots.py is set up differently from ShareController in shares.py.  snapshot_manage and snapshot_unmanage don\u0027t have create_resource() and is using ShareSnapshotController (I\u0027m trying to be consistent with other methods for snapshots).  share_manage and share_unmanage have create_resource() and each has its own controller.","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"}],"manila/api/v2/share_snapshots.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5ff88d26f087bd3247391552068280a524a9d289","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            elif snapshot[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":64,"context_line":"                msg \u003d _(\"Snapshot with transitional state cannot be \""},{"line_number":65,"context_line":"                        \"unmanaged. Snapshot \u0027%(s_id)s\u0027 is in \u0027%(state)s\u0027 \""},{"line_number":66,"context_line":"                        \"state.\") % dict(state\u003dsnapshot[\u0027status\u0027],"},{"line_number":67,"context_line":"                                         s_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":68,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            self.share_api.unmanage_snapshot(context, snapshot)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_0d4e5696","line":67,"range":{"start_line":66,"start_character":36,"end_line":67,"end_character":61},"updated":"2015-12-24 19:02:15.000000000","message":"You could avoid dict() constructor and use dict comprehension instead.. Recent manila fix:\n\nhttps://github.com/openstack/manila/commit/51069d5390683007ad612b15a882626326bd2d53","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9339b6b69ab4d64917f595230ee3118f6d346f3a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            elif snapshot[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":64,"context_line":"                msg \u003d _(\"Snapshot with transitional state cannot be \""},{"line_number":65,"context_line":"                        \"unmanaged. Snapshot \u0027%(s_id)s\u0027 is in \u0027%(state)s\u0027 \""},{"line_number":66,"context_line":"                        \"state.\") % dict(state\u003dsnapshot[\u0027status\u0027],"},{"line_number":67,"context_line":"                                         s_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":68,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            self.share_api.unmanage_snapshot(context, snapshot)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_f4620516","line":67,"range":{"start_line":66,"start_character":36,"end_line":67,"end_character":61},"in_reply_to":"1a7b0d38_0d4e5696","updated":"2015-12-30 01:00:34.000000000","message":"Done","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        See the appropriate Manila driver\u0027s implementation of the"},{"line_number":90,"context_line":"        manage_snapshot method to find out the expected format of"},{"line_number":91,"context_line":"        \u0027driver_options\u0027."},{"line_number":92,"context_line":"        For example,in LVM driver, it will be the snapshot id in Cinder:"},{"line_number":93,"context_line":"        {\u0027volume_snapshot_id\u0027: \u0027xxx\u0027}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_fecfdb7c","line":92,"range":{"start_line":92,"start_character":19,"end_line":92,"end_character":20},"updated":"2016-01-20 11:40:11.000000000","message":"Please add space after comma.","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        See the appropriate Manila driver\u0027s implementation of the"},{"line_number":90,"context_line":"        manage_snapshot method to find out the expected format of"},{"line_number":91,"context_line":"        \u0027driver_options\u0027."},{"line_number":92,"context_line":"        For example,in LVM driver, it will be the snapshot id in Cinder:"},{"line_number":93,"context_line":"        {\u0027volume_snapshot_id\u0027: \u0027xxx\u0027}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_9d0905e0","line":92,"range":{"start_line":92,"start_character":19,"end_line":92,"end_character":20},"in_reply_to":"ba63e191_fecfdb7c","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        See the appropriate Manila driver\u0027s implementation of the"},{"line_number":90,"context_line":"        manage_snapshot method to find out the expected format of"},{"line_number":91,"context_line":"        \u0027driver_options\u0027."},{"line_number":92,"context_line":"        For example, in LVM driver, it will be the snapshot id in Cinder:"},{"line_number":93,"context_line":"        {\u0027volume_snapshot_id\u0027: \u0027xxx\u0027}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_4cce6183","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":73},"updated":"2016-01-22 16:36:14.000000000","message":"Maybe \"Generic\" driver?","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        See the appropriate Manila driver\u0027s implementation of the"},{"line_number":90,"context_line":"        manage_snapshot method to find out the expected format of"},{"line_number":91,"context_line":"        \u0027driver_options\u0027."},{"line_number":92,"context_line":"        For example, in LVM driver, it will be the snapshot id in Cinder:"},{"line_number":93,"context_line":"        {\u0027volume_snapshot_id\u0027: \u0027xxx\u0027}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_86074d17","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":73},"in_reply_to":"9a68dd71_4cce6183","updated":"2016-01-23 03:51:00.000000000","message":"Done","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b82fe436720bd93f21a4c8e4fe7edc641228b733","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ShareSnapshotsController(share_snapshots.ShareSnapshotMixin,"},{"line_number":36,"context_line":"                               wsgi.Controller, wsgi.AdminActionsMixin):"},{"line_number":37,"context_line":"    \"\"\"The Share Snapshots API controller for the OpenStack API.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    resource_name \u003d \u0027share_snapshot\u0027"},{"line_number":40,"context_line":"    _view_builder_class \u003d snapshot_views.ViewBuilder"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_9d153b9d","line":37,"range":{"start_line":37,"start_character":27,"end_line":37,"end_character":30},"updated":"2016-02-06 19:21:31.000000000","message":"APIv2","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"835ae5faa83e10278861452fadb7cacfbdfa42b9","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ShareSnapshotsController(share_snapshots.ShareSnapshotMixin,"},{"line_number":36,"context_line":"                               wsgi.Controller, wsgi.AdminActionsMixin):"},{"line_number":37,"context_line":"    \"\"\"The Share Snapshots API controller for the OpenStack API.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    resource_name \u003d \u0027share_snapshot\u0027"},{"line_number":40,"context_line":"    _view_builder_class \u003d snapshot_views.ViewBuilder"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_b1bdc0d9","line":37,"range":{"start_line":37,"start_character":27,"end_line":37,"end_character":30},"in_reply_to":"5a5ae5dd_9d153b9d","updated":"2016-02-07 05:52:07.000000000","message":"Done","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f64bed4bf54e214240ed4844b3a5532e131ae085","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        driver_options \u003d snapshot_data.get(\u0027driver_options\u0027, {})"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":123,"context_line":"                                                          driver_options)"},{"line_number":124,"context_line":"        except (exception.ShareNotFound, exception.ShareSnapshotNotFound) as e:"},{"line_number":125,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_d624a461","line":122,"range":{"start_line":122,"start_character":42,"end_line":122,"end_character":57},"updated":"2016-02-09 04:25:18.000000000","message":"What happens if the user attempts to manage a snapshot of a replicated share?","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"415e7717d02dc0ec3cbe7aeb7017db9993f9dcec","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        driver_options \u003d snapshot_data.get(\u0027driver_options\u0027, {})"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            snapshot_ref \u003d self.share_api.manage_snapshot(context, snapshot,"},{"line_number":123,"context_line":"                                                          driver_options)"},{"line_number":124,"context_line":"        except (exception.ShareNotFound, exception.ShareSnapshotNotFound) as e:"},{"line_number":125,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_671c18c2","line":122,"range":{"start_line":122,"start_character":42,"end_line":122,"end_character":57},"in_reply_to":"5a5ae5dd_d624a461","updated":"2016-02-09 06:10:24.000000000","message":"Good question.  Let me think about it and may need to discuss with you.","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(ShareSnapshotsController, self).__init__()"},{"line_number":44,"context_line":"        self.share_api \u003d share.API()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"},{"line_number":47,"context_line":"    def _unmanage(self, req, id, body\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Unmanage a share snapshot.\"\"\""},{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_a31ab06c","line":46,"range":{"start_line":46,"start_character":30,"end_line":46,"end_character":51},"updated":"2016-02-15 07:08:45.000000000","message":"\u0027unmanage\u0027 \n\nif you make the policy.json change","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(ShareSnapshotsController, self).__init__()"},{"line_number":44,"context_line":"        self.share_api \u003d share.API()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"},{"line_number":47,"context_line":"    def _unmanage(self, req, id, body\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Unmanage a share snapshot.\"\"\""},{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_6850535f","line":46,"range":{"start_line":46,"start_character":30,"end_line":46,"end_character":51},"in_reply_to":"dae33548_a31ab06c","updated":"2016-02-16 06:23:43.000000000","message":"Please see my explanation in policy.json.","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.share_api \u003d share.API()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"},{"line_number":47,"context_line":"    def _unmanage(self, req, id, body\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Unmanage a share snapshot.\"\"\""},{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_2381804b","line":47,"range":{"start_line":47,"start_character":29,"end_line":47,"end_character":31},"updated":"2016-02-15 07:08:45.000000000","message":"since we\u0027re redefining the action method here, could you rename this to be snapshot_id? It can stay as id on line L#175","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.share_api \u003d share.API()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"},{"line_number":47,"context_line":"    def _unmanage(self, req, id, body\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Unmanage a share snapshot.\"\"\""},{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_68acd335","line":47,"range":{"start_line":47,"start_character":29,"end_line":47,"end_character":31},"in_reply_to":"dae33548_2381804b","updated":"2016-02-16 06:23:43.000000000","message":"Why does this need to be renamed?  Why can\u0027t it be same name as the unmanaged on Line 175?","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.info(_LI(\"Unmanage share snapshot with id: %s.\"), id,"},{"line_number":52,"context_line":"                 context\u003dcontext)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_c3b9b430","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"updated":"2016-02-15 07:08:45.000000000","message":"It looks like the logger picks up the usage context all the time; we don\u0027t need to pass it as a kwarg:\n\n    \n   http://docs.openstack.org/developer/oslo.log/usage.html#passing-context","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.info(_LI(\"Unmanage share snapshot with id: %s.\"), id,"},{"line_number":52,"context_line":"                 context\u003dcontext)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_e84d839a","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":32},"in_reply_to":"dae33548_c3b9b430","updated":"2016-02-16 06:23:43.000000000","message":"Done","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    def snapshot_force_delete(self, req, id, body):"},{"line_number":167,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\u00272.12\u0027)"},{"line_number":170,"context_line":"    def manage(self, req, body):"},{"line_number":171,"context_line":"        return self._manage(req, body)"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_1e1493f3","line":169,"range":{"start_line":169,"start_character":38,"end_line":169,"end_character":40},"updated":"2016-02-15 07:08:45.000000000","message":"@wsgi.response(202)","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    def snapshot_force_delete(self, req, id, body):"},{"line_number":167,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\u00272.12\u0027)"},{"line_number":170,"context_line":"    def manage(self, req, body):"},{"line_number":171,"context_line":"        return self._manage(req, body)"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_a8541b21","line":169,"range":{"start_line":169,"start_character":38,"end_line":169,"end_character":40},"in_reply_to":"dae33548_1e1493f3","updated":"2016-02-16 06:23:43.000000000","message":"Done","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6a440ae2d20dbb80c91c517caddb4b600ba0fe01","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            msg \u003d _(\"Snapshot entity not found in request body.\")"},{"line_number":134,"context_line":"            raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        required_parameter \u003d \u0027share_id\u0027"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        data \u003d body[\u0027snapshot\u0027]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_152708cb","line":136,"range":{"start_line":136,"start_character":8,"end_line":136,"end_character":26},"updated":"2016-02-16 19:14:19.000000000","message":"Even though it\u0027s non-standard, there will have to be *something* in the driver_options field.  Maybe you can at least check that driver_options is present and is not empty.","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c668a51c3fb97b2d6b4676806378ca3deba1289","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            msg \u003d _(\"Snapshot entity not found in request body.\")"},{"line_number":134,"context_line":"            raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        required_parameter \u003d \u0027share_id\u0027"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        data \u003d body[\u0027snapshot\u0027]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_1dda6617","line":136,"range":{"start_line":136,"start_character":8,"end_line":136,"end_character":26},"in_reply_to":"dae33548_152708cb","updated":"2016-02-17 07:44:12.000000000","message":"Addressed with provider_location.","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"c42fad6a50eb1ad93c03edaa5c3fe1da552b5bd1","unresolved":false,"context_lines":[{"line_number":82,"context_line":"         \"snapshot\":"},{"line_number":83,"context_line":"          {"},{"line_number":84,"context_line":"           \"share_id\": \u003cManila share id\u003e,"},{"line_number":85,"context_line":"           \"driver_options\": \u003cDriver-specific dicts to the existing snapshot\u003e,"},{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"dae33548_29f46384","line":85,"updated":"2016-02-16 19:44:14.000000000","message":"I would like to see provider_location added as an additional input here. If you look at how manage-share works, the export_location is a required input and driver_options is purely optional. That seems like a better API design.\n\nIf we add provider_location as an explicitly required input, then driver_options becomes purely optional again, and I think the interface is clearer (and more consistent).","commit_id":"c0594db72289cb5d5b773828111c21c6cb5a7ed2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3d842de9479e6e3307004349ca041b652fa30e03","unresolved":false,"context_lines":[{"line_number":82,"context_line":"         \"snapshot\":"},{"line_number":83,"context_line":"          {"},{"line_number":84,"context_line":"           \"share_id\": \u003cManila share id\u003e,"},{"line_number":85,"context_line":"           \"driver_options\": \u003cDriver-specific dicts to the existing snapshot\u003e,"},{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"dae33548_77800647","line":85,"in_reply_to":"dae33548_097ebfad","updated":"2016-02-16 20:17:34.000000000","message":"Sure.   I can make provider_location required and driver_options optional.  However, driver_options won\u0027t be used in tempest tests just as in the manage share case.","commit_id":"c0594db72289cb5d5b773828111c21c6cb5a7ed2"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f7b780af51a9881b047ba7114bc3ad28bb61925e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"         \"snapshot\":"},{"line_number":83,"context_line":"          {"},{"line_number":84,"context_line":"           \"share_id\": \u003cManila share id\u003e,"},{"line_number":85,"context_line":"           \"driver_options\": \u003cDriver-specific dicts to the existing snapshot\u003e,"},{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"dae33548_097ebfad","line":85,"in_reply_to":"dae33548_29f46384","updated":"2016-02-16 19:49:08.000000000","message":"+1\ndriver_options should be a dict that passes unmolested from the API to the driver.\nAdding provider_location as a string parameter to the snapshot_manage API keeps us from doing strange things to serialize dicts into that field, and it mirrors the provider_location in the snapshot object, so it all appears clean and consistent.  Testing becomes easy: create snapshot, save the provider_location field, unmanage snapshot, manage snapshot with the saved provider_location value.","commit_id":"c0594db72289cb5d5b773828111c21c6cb5a7ed2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"10b7fdc8d26eeafe11ebaf0f3eca4ab6eff2f670","unresolved":false,"context_lines":[{"line_number":82,"context_line":"         \"snapshot\":"},{"line_number":83,"context_line":"          {"},{"line_number":84,"context_line":"           \"share_id\": \u003cManila share id\u003e,"},{"line_number":85,"context_line":"           \"driver_options\": \u003cDriver-specific dicts to the existing snapshot\u003e,"},{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"dae33548_bdc9ba5b","line":85,"in_reply_to":"dae33548_77800647","updated":"2016-02-17 07:33:51.000000000","message":"Done","commit_id":"c0594db72289cb5d5b773828111c21c6cb5a7ed2"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.info(_LI(\"Unmanage share snapshot with id: %s.\"), id,"},{"line_number":52,"context_line":"                 context\u003dcontext)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_95a4cba6","line":52,"range":{"start_line":52,"start_character":16,"end_line":52,"end_character":33},"updated":"2016-02-21 08:20:42.000000000","message":"Why context?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.info(_LI(\"Unmanage share snapshot with id: %s.\"), id,"},{"line_number":52,"context_line":"                 context\u003dcontext)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_303d622b","line":52,"range":{"start_line":52,"start_character":16,"end_line":52,"end_character":33},"in_reply_to":"bae84128_336eb096","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.info(_LI(\"Unmanage share snapshot with id: %s.\"), id,"},{"line_number":52,"context_line":"                 context\u003dcontext)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            snapshot \u003d self.share_api.get_snapshot(context, id)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_336eb096","line":52,"range":{"start_line":52,"start_character":16,"end_line":52,"end_character":33},"in_reply_to":"bae84128_95a4cba6","updated":"2016-02-21 22:56:04.000000000","message":"+1 \nthe logger picks up the usage context all the time; we don\u0027t need to pass it as a kwarg:\n    \n   http://docs.openstack.org/developer/oslo.log/usage.html#passing-context","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                     \u0027s_id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":68,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            self.share_api.unmanage_snapshot(context, snapshot)"},{"line_number":71,"context_line":"        except (exception.ShareSnapshotNotFound, exception.ShareNotFound) as e:"},{"line_number":72,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_5e309be8","line":70,"range":{"start_line":70,"start_character":45,"end_line":70,"end_character":62},"updated":"2016-02-21 22:56:04.000000000","message":"Pass the share here to avoid checking the DB again..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                     \u0027s_id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":68,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            self.share_api.unmanage_snapshot(context, snapshot)"},{"line_number":71,"context_line":"        except (exception.ShareSnapshotNotFound, exception.ShareNotFound) as e:"},{"line_number":72,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_6ba41f4a","line":70,"range":{"start_line":70,"start_character":45,"end_line":70,"end_character":62},"in_reply_to":"bae84128_5e309be8","updated":"2016-02-24 20:50:57.000000000","message":"I\u0027ll pass in host directly.  There\u0027s no need to pass the share as API only needs the host.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":82,"context_line":"         \"snapshot\":"},{"line_number":83,"context_line":"          {"},{"line_number":84,"context_line":"           \"share_id\": \u003cManila share id\u003e,"},{"line_number":85,"context_line":"           \"provider_location\": \u003cA string parameter identifies the snapshot\u003e"},{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_534c1442","line":85,"range":{"start_line":85,"start_character":51,"end_line":85,"end_character":52},"updated":"2016-02-21 22:56:04.000000000","message":"Suggest using:\n\n    \u003cA string parameter that identifies the snapshot on the backend\u003e","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":82,"context_line":"         \"snapshot\":"},{"line_number":83,"context_line":"          {"},{"line_number":84,"context_line":"           \"share_id\": \u003cManila share id\u003e,"},{"line_number":85,"context_line":"           \"provider_location\": \u003cA string parameter identifies the snapshot\u003e"},{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_5d991e78","line":85,"range":{"start_line":85,"start_character":51,"end_line":85,"end_character":52},"in_reply_to":"bae84128_534c1442","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"},{"line_number":90,"context_line":"            name              A name for the new snapshot."},{"line_number":91,"context_line":"            description       A description for the new snapshot."},{"line_number":92,"context_line":"            driver_options    Driver specific dicts to the existing snapshot."}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_95cb2b53","line":89,"range":{"start_line":89,"start_character":26,"end_line":89,"end_character":28},"updated":"2016-02-21 08:20:42.000000000","message":"nit s/to/in/","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":86,"context_line":"          }"},{"line_number":87,"context_line":"        }"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"},{"line_number":90,"context_line":"            name              A name for the new snapshot."},{"line_number":91,"context_line":"            description       A description for the new snapshot."},{"line_number":92,"context_line":"            driver_options    Driver specific dicts to the existing snapshot."}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_bd914a49","line":89,"range":{"start_line":89,"start_character":26,"end_line":89,"end_character":28},"in_reply_to":"bae84128_95cb2b53","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"},{"line_number":90,"context_line":"            name              A name for the new snapshot."},{"line_number":91,"context_line":"            description       A description for the new snapshot."},{"line_number":92,"context_line":"            driver_options    Driver specific dicts to the existing snapshot."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_d5c5b33c","line":92,"range":{"start_line":92,"start_character":46,"end_line":92,"end_character":54},"updated":"2016-02-21 08:20:42.000000000","message":"? s/dicts to/dict for/","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        Optional elements to \u0027snapshot\u0027 are:"},{"line_number":90,"context_line":"            name              A name for the new snapshot."},{"line_number":91,"context_line":"            description       A description for the new snapshot."},{"line_number":92,"context_line":"            driver_options    Driver specific dicts to the existing snapshot."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_bddf8a0b","line":92,"range":{"start_line":92,"start_character":46,"end_line":92,"end_character":54},"in_reply_to":"bae84128_d5c5b33c","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e50c4f2abe35be35e14c642c686cd5a3b21a409","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # represented in DB as \u0027display_name\u0027 and \u0027display_description\u0027"},{"line_number":101,"context_line":"        # appropriately."},{"line_number":102,"context_line":"        name \u003d snapshot_data.get(\u0027display_name\u0027,"},{"line_number":103,"context_line":"                                 snapshot_data.get(\u0027name\u0027, None))"},{"line_number":104,"context_line":"        description \u003d snapshot_data.get("},{"line_number":105,"context_line":"            \u0027display_description\u0027, snapshot_data.get(\u0027description\u0027, None))"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_0043a66d","line":103,"range":{"start_line":103,"start_character":57,"end_line":103,"end_character":63},"updated":"2016-02-24 17:52:54.000000000","message":"None is redundant.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # represented in DB as \u0027display_name\u0027 and \u0027display_description\u0027"},{"line_number":101,"context_line":"        # appropriately."},{"line_number":102,"context_line":"        name \u003d snapshot_data.get(\u0027display_name\u0027,"},{"line_number":103,"context_line":"                                 snapshot_data.get(\u0027name\u0027, None))"},{"line_number":104,"context_line":"        description \u003d snapshot_data.get("},{"line_number":105,"context_line":"            \u0027display_description\u0027, snapshot_data.get(\u0027description\u0027, None))"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_554a8628","line":103,"range":{"start_line":103,"start_character":57,"end_line":103,"end_character":63},"in_reply_to":"bae84128_0043a66d","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e50c4f2abe35be35e14c642c686cd5a3b21a409","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        name \u003d snapshot_data.get(\u0027display_name\u0027,"},{"line_number":103,"context_line":"                                 snapshot_data.get(\u0027name\u0027, None))"},{"line_number":104,"context_line":"        description \u003d snapshot_data.get("},{"line_number":105,"context_line":"            \u0027display_description\u0027, snapshot_data.get(\u0027description\u0027, None))"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        snapshot \u003d {"},{"line_number":108,"context_line":"            \u0027share_id\u0027: snapshot_data[\u0027share_id\u0027],"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_205a2a51","line":105,"range":{"start_line":105,"start_character":66,"end_line":105,"end_character":72},"updated":"2016-02-24 17:52:54.000000000","message":"None is redundant.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        name \u003d snapshot_data.get(\u0027display_name\u0027,"},{"line_number":103,"context_line":"                                 snapshot_data.get(\u0027name\u0027, None))"},{"line_number":104,"context_line":"        description \u003d snapshot_data.get("},{"line_number":105,"context_line":"            \u0027display_description\u0027, snapshot_data.get(\u0027description\u0027, None))"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        snapshot \u003d {"},{"line_number":108,"context_line":"            \u0027share_id\u0027: snapshot_data[\u0027share_id\u0027],"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_95540ecb","line":105,"range":{"start_line":105,"start_character":66,"end_line":105,"end_character":72},"in_reply_to":"bae84128_205a2a51","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d60522c606a2d0c6c083ea427d6f3ce2b947160c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                               wsgi.Controller, wsgi.AdminActionsMixin):"},{"line_number":37,"context_line":"    \"\"\"The Share Snapshots API V2 controller for the OpenStack API.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    resource_name \u003d \u0027share_snapshot\u0027"},{"line_number":40,"context_line":"    _view_builder_class \u003d snapshot_views.ViewBuilder"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self):"},{"line_number":43,"context_line":"        super(ShareSnapshotsController, self).__init__()"},{"line_number":44,"context_line":"        self.share_api \u003d share.API()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"},{"line_number":47,"context_line":"    def _unmanage(self, req, id, body\u003dNone):"}],"source_content_type":"text/x-python","patch_set":69,"id":"9aed3d3a_f32ad82b","line":44,"range":{"start_line":39,"start_character":4,"end_line":44,"end_character":36},"updated":"2016-02-25 17:53:27.000000000","message":"These could stay in mixin class and be inherited. Right now you define it in both class that inheririt mixin.","commit_id":"739037eee6a22dc8a3a9eb4a0541aa9347beefd5"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"3bcc0958c83e6331040e241b9cbfe8c4bd5d9eb4","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        return data"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.6\u0027)"},{"line_number":146,"context_line":"    @wsgi.action(\u0027os-reset_status\u0027)"},{"line_number":147,"context_line":"    def snapshot_reset_status_legacy(self, req, id, body):"},{"line_number":148,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027)"},{"line_number":151,"context_line":"    @wsgi.action(\u0027reset_status\u0027)"}],"source_content_type":"text/x-python","patch_set":69,"id":"9aed3d3a_d3c6b415","line":148,"range":{"start_line":145,"start_character":4,"end_line":148,"end_character":48},"updated":"2016-02-25 17:59:35.000000000","message":"this","commit_id":"739037eee6a22dc8a3a9eb4a0541aa9347beefd5"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"3bcc0958c83e6331040e241b9cbfe8c4bd5d9eb4","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def snapshot_reset_status(self, req, id, body):"},{"line_number":153,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.6\u0027)"},{"line_number":156,"context_line":"    @wsgi.action(\u0027os-force_delete\u0027)"},{"line_number":157,"context_line":"    def snapshot_force_delete_legacy(self, req, id, body):"},{"line_number":158,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027)"},{"line_number":161,"context_line":"    @wsgi.action(\u0027force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":69,"id":"9aed3d3a_93aa6c18","line":158,"range":{"start_line":155,"start_character":4,"end_line":158,"end_character":48},"updated":"2016-02-25 17:59:35.000000000","message":"and this could be inherited too.\n\nSo, would be better to do following:\n\n- create new class - this, inherit here v1 one. \n- move v2-only APIs from old module -here.","commit_id":"739037eee6a22dc8a3a9eb4a0541aa9347beefd5"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"294e9e92e66dd7433926f02751ed999bcfd9a2cc","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ShareSnapshotsController(share_snapshots.ShareSnapshotsController):"},{"line_number":36,"context_line":"    \"\"\"The Share Snapshots API V2 controller for the OpenStack API.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_746504e0","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":30},"updated":"2016-02-25 21:47:07.000000000","message":"Xing made this change when Valeriy asked for a subclass.  Problem is, microversions require the API Controller to be a direct subclass of wsgi.Controller.  This code looks fine, but it doesn\u0027t work as expected.  I think Xing had it right at Patch Set 65, which directly followed the pattern Valeriy established in shares.py.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4b0a4e50685081e9c9936a8fc585d7a49267d5ca","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ShareSnapshotsController(share_snapshots.ShareSnapshotsController):"},{"line_number":36,"context_line":"    \"\"\"The Share Snapshots API V2 controller for the OpenStack API.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_7710664f","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":30},"in_reply_to":"9aed3d3a_746504e0","updated":"2016-02-25 22:05:21.000000000","message":"And, need to add that class too.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d4708d8fb49850b8fa49273a0d0248e723f2502","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ShareSnapshotsController(share_snapshots.ShareSnapshotsController):"},{"line_number":36,"context_line":"    \"\"\"The Share Snapshots API V2 controller for the OpenStack API.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @wsgi.Controller.authorize(\u0027unmanage_snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_5499e06d","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":30},"in_reply_to":"9aed3d3a_746504e0","updated":"2016-02-26 02:46:43.000000000","message":"Unit test test_manage_version_not_found in api/v2/test_share_snapshot.py doesn\u0027t work as expected any more after this change.  Basically the manage snapshot api accepts all unsupported version with this patch.  Thanks Clinton for the clarification!  I\u0027ll change it back.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"}],"manila/api/v2/shares.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        \"\"\"Add share access rule.\"\"\""},{"line_number":83,"context_line":"        return self._allow_access(req, id, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.8\u0027)"},{"line_number":86,"context_line":"    @wsgi.action(\u0027allow_access\u0027)"},{"line_number":87,"context_line":"    def allow_access(self, req, id, body):"},{"line_number":88,"context_line":"        \"\"\"Add share access rule.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_6fb0808c","line":85,"updated":"2015-12-14 21:09:36.000000000","message":"Endiing allow_access support?","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        \"\"\"Add share access rule.\"\"\""},{"line_number":83,"context_line":"        return self._allow_access(req, id, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.8\u0027)"},{"line_number":86,"context_line":"    @wsgi.action(\u0027allow_access\u0027)"},{"line_number":87,"context_line":"    def allow_access(self, req, id, body):"},{"line_number":88,"context_line":"        \"\"\"Add share access rule.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_9aef1eb0","line":85,"in_reply_to":"5a710552_6fb0808c","updated":"2015-12-15 05:12:24.000000000","message":"Oops!  This is a mistake.  I was messing around with the code but forgot to remove this.  Thanks for catching this!","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\"Remove share access rule.\"\"\""},{"line_number":95,"context_line":"        return self._deny_access(req, id, body)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.8\u0027)"},{"line_number":98,"context_line":"    @wsgi.action(\u0027deny_access\u0027)"},{"line_number":99,"context_line":"    def deny_access(self, req, id, body):"},{"line_number":100,"context_line":"        \"\"\"Remove share access rule.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_6f7720d5","line":97,"updated":"2015-12-14 21:09:36.000000000","message":"ending deny access support?","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\"Remove share access rule.\"\"\""},{"line_number":95,"context_line":"        return self._deny_access(req, id, body)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.8\u0027)"},{"line_number":98,"context_line":"    @wsgi.action(\u0027deny_access\u0027)"},{"line_number":99,"context_line":"    def deny_access(self, req, id, body):"},{"line_number":100,"context_line":"        \"\"\"Remove share access rule.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_5a30d656","line":97,"in_reply_to":"5a710552_6f7720d5","updated":"2015-12-15 05:12:24.000000000","message":"Same as above.","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"}],"manila/api/views/share_snapshots.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                \u0027size\u0027: snapshot.get(\u0027size\u0027),"},{"line_number":54,"context_line":"                \u0027share_proto\u0027: snapshot.get(\u0027share_proto\u0027),"},{"line_number":55,"context_line":"                \u0027links\u0027: self._get_links(request, snapshot[\u0027id\u0027]),"},{"line_number":56,"context_line":"                \u0027private_storage\u0027: snapshot.get(\u0027private_storage\u0027),"},{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_ecf07593","line":56,"range":{"start_line":56,"start_character":16,"end_line":56,"end_character":67},"updated":"2016-01-22 16:36:14.000000000","message":"Should be added only for newer microversion, examples are here: https://github.com/openstack/manila/blob/dcbdcf35/manila/api/views/shares.py#L23","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                \u0027size\u0027: snapshot.get(\u0027size\u0027),"},{"line_number":54,"context_line":"                \u0027share_proto\u0027: snapshot.get(\u0027share_proto\u0027),"},{"line_number":55,"context_line":"                \u0027links\u0027: self._get_links(request, snapshot[\u0027id\u0027]),"},{"line_number":56,"context_line":"                \u0027private_storage\u0027: snapshot.get(\u0027private_storage\u0027),"},{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_86fc2d73","line":56,"range":{"start_line":56,"start_character":16,"end_line":56,"end_character":67},"in_reply_to":"9a68dd71_ecf07593","updated":"2016-01-23 03:51:00.000000000","message":"Done","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f64bed4bf54e214240ed4844b3a5532e131ae085","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return {\u0027snapshot\u0027: snapshot_dict}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.11\")"},{"line_number":65,"context_line":"    def add_private_storage_field(self, snapshot_dict, snapshot):"},{"line_number":66,"context_line":"        snapshot_dict[\u0027private_storage\u0027] \u003d snapshot.get(\u0027private_storage\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _list_view(self, func, request, snapshots):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_33baeac1","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":33},"updated":"2016-02-09 04:25:18.000000000","message":"Why would the snapshot APIs return driver private data?","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"415e7717d02dc0ec3cbe7aeb7017db9993f9dcec","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return {\u0027snapshot\u0027: snapshot_dict}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.11\")"},{"line_number":65,"context_line":"    def add_private_storage_field(self, snapshot_dict, snapshot):"},{"line_number":66,"context_line":"        snapshot_dict[\u0027private_storage\u0027] \u003d snapshot.get(\u0027private_storage\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _list_view(self, func, request, snapshots):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_fccdffb7","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":33},"in_reply_to":"5a5ae5dd_33baeac1","updated":"2016-02-09 06:10:24.000000000","message":"I need this for tempest tests.  In the tempest tests, I create a share, unmanage it, and then manage it again.  I need to know driver_options in private data to manage snapshot.\n\nhttps://review.openstack.org/#/c/249542/34/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"39e520ed537cd19c9b5bf7f7c75b43d584a41b4f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return {\u0027snapshot\u0027: snapshot_dict}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.11\")"},{"line_number":65,"context_line":"    def add_private_storage_field(self, snapshot_dict, snapshot):"},{"line_number":66,"context_line":"        snapshot_dict[\u0027private_storage\u0027] \u003d snapshot.get(\u0027private_storage\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _list_view(self, func, request, snapshots):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a57f1b5_67cbcc73","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":33},"updated":"2016-02-09 17:42:19.000000000","message":"I appreciate you wanted to thoroughly test this feature, but I think returning driver private data via the REST interface is going to be a non-starter.  This is information that only drivers should care about, and tenants definitely shouldn\u0027t see it.  And changing code solely to facilitate test logic isn\u0027t a good rationale anyway.\n\nThere was talk at one point about adding an admin-only API to read driver private data, if only to prevent admins from having to read the DB while troubleshooting issues.  That might be a way forward.\n\nBut there\u0027s a larger question here.  Upstream Tempest tests for a given feature are supposed to be usable by all drivers that support that feature.  Snapshot-manage requires a --driver-options argument to uniquely identify the snapshot to be managed, and the keys in that dictionary are going to be backend-specific.  How can you write a Tempest test that will work everywhere?","commit_id":"0b005f9bfc498cbbe3ea6440573f57236195f64e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"003d13b7ce6a19a0ae21a9e1bbf0bc5201ce511c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return {\u0027snapshot\u0027: snapshot_dict}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.11\")"},{"line_number":65,"context_line":"    def add_private_storage_field(self, snapshot_dict, snapshot):"},{"line_number":66,"context_line":"        snapshot_dict[\u0027private_storage\u0027] \u003d snapshot.get(\u0027private_storage\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _list_view(self, func, request, snapshots):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a57f1b5_0df1d9cd","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":33},"in_reply_to":"3a57f1b5_67cbcc73","updated":"2016-02-09 18:16:03.000000000","message":"The REST API needs driver_options and only driver knows how to parse driver_options.  So I believe the tempest I added currently should work for other drivers.  Please let me know if it doesn\u0027t work for you.\n\nWill have to talk to you more about this.","commit_id":"0b005f9bfc498cbbe3ea6440573f57236195f64e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"402207d90b6b156ee7f59b6e1b559244c131a397","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.11\")"},{"line_number":65,"context_line":"    def add_private_storage_field(self, snapshot_dict, snapshot):"},{"line_number":66,"context_line":"        snapshot_dict[\u0027private_storage\u0027] \u003d snapshot.get(\u0027private_storage\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _list_view(self, func, request, snapshots):"},{"line_number":69,"context_line":"        \"\"\"Provide a view for a list of share snapshots.\"\"\""}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_b4d650ef","line":66,"range":{"start_line":66,"start_character":57,"end_line":66,"end_character":72},"updated":"2016-02-11 16:35:54.000000000","message":"Are you sure that it is good idea to rename? In one place we have one naming in another place some other naming?","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"68c0cc38aad84ccff70d3465aa00e181a87a262c","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.11\")"},{"line_number":65,"context_line":"    def add_private_storage_field(self, snapshot_dict, snapshot):"},{"line_number":66,"context_line":"        snapshot_dict[\u0027private_storage\u0027] \u003d snapshot.get(\u0027private_storage\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _list_view(self, func, request, snapshots):"},{"line_number":69,"context_line":"        \"\"\"Provide a view for a list of share snapshots.\"\"\""}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_31e587db","line":66,"range":{"start_line":66,"start_character":57,"end_line":66,"end_character":72},"in_reply_to":"3a57f1b5_5deb7f13","updated":"2016-02-11 20:01:35.000000000","message":"I need to remove this in my next patch.  We don\u0027t need this any more now we have driver_private_data API.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"9056bc16dbd56b82f6735f819ed2af599608d873","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.11\")"},{"line_number":65,"context_line":"    def add_private_storage_field(self, snapshot_dict, snapshot):"},{"line_number":66,"context_line":"        snapshot_dict[\u0027private_storage\u0027] \u003d snapshot.get(\u0027private_storage\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _list_view(self, func, request, snapshots):"},{"line_number":69,"context_line":"        \"\"\"Provide a view for a list of share snapshots.\"\"\""}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_5deb7f13","line":66,"range":{"start_line":66,"start_character":57,"end_line":66,"end_character":72},"in_reply_to":"3a57f1b5_b4d650ef","updated":"2016-02-11 17:16:08.000000000","message":"I don\u0027t understand why this is still here, since we\u0027re adding a separate API to get driver private data.  I\u0027m guessing Xing just hasn\u0027t gotten around to removing it yet.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # NOTE(xyang): Only retrieve provider_location for admin."},{"line_number":61,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"},{"line_number":62,"context_line":"        if context.is_admin:"},{"line_number":63,"context_line":"            self.update_versioned_resource_dict(request, snapshot_dict,"},{"line_number":64,"context_line":"                                                snapshot)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return {\u0027snapshot\u0027: snapshot_dict}"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_836dec34","line":64,"range":{"start_line":63,"start_character":12,"end_line":64,"end_character":57},"updated":"2016-02-15 07:08:45.000000000","message":"Seems wrong to perform this check to call the version modifier. It would be great to pass the context down to the modifier and perform this check there, or as a hack, \n\n    \n    self.update_versioned_resource_dict(request, snapshot_dict, snapshot)\n \n    if not context.is_admin:\n        self._detail_version_modifiers.remove(\"add_provider_location_field\")","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # NOTE(xyang): Only retrieve provider_location for admin."},{"line_number":61,"context_line":"        context \u003d request.environ[\u0027manila.context\u0027]"},{"line_number":62,"context_line":"        if context.is_admin:"},{"line_number":63,"context_line":"            self.update_versioned_resource_dict(request, snapshot_dict,"},{"line_number":64,"context_line":"                                                snapshot)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return {\u0027snapshot\u0027: snapshot_dict}"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_7364c8e4","line":64,"range":{"start_line":63,"start_character":12,"end_line":64,"end_character":57},"in_reply_to":"dae33548_836dec34","updated":"2016-02-16 06:23:43.000000000","message":"Right now there\u0027s only one version modifier that needs this admin check so this should be fine.  I want to see if this change in views/share_snapshot.py is acceptable first.","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"}],"manila/db/migrations/alembic/versions/eb6d5544cbbd_add_provider_location_to_share_snapshot_instances.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"\"\"add provider_location to share_snapshot_instances"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Revision ID: eb6d5544cbbd"},{"line_number":16,"context_line":"Revises: 293fac1130ca"},{"line_number":17,"context_line":"Create Date: 2016-02-12 22:25:39.594545"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_f54d579a","line":16,"range":{"start_line":16,"start_character":9,"end_line":16,"end_character":21},"updated":"2016-02-21 08:20:42.000000000","message":"down revision changed","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e50c4f2abe35be35e14c642c686cd5a3b21a409","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"\"\"add provider_location to share_snapshot_instances"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Revision ID: eb6d5544cbbd"},{"line_number":16,"context_line":"Revises: 293fac1130ca"},{"line_number":17,"context_line":"Create Date: 2016-02-12 22:25:39.594545"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_6351dcd8","line":16,"range":{"start_line":16,"start_character":9,"end_line":16,"end_character":21},"in_reply_to":"bae84128_f54d579a","updated":"2016-02-24 17:52:54.000000000","message":"+1","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"\"\"add provider_location to share_snapshot_instances"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Revision ID: eb6d5544cbbd"},{"line_number":16,"context_line":"Revises: 293fac1130ca"},{"line_number":17,"context_line":"Create Date: 2016-02-12 22:25:39.594545"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_fd0ab277","line":16,"range":{"start_line":16,"start_character":9,"end_line":16,"end_character":21},"in_reply_to":"bae84128_f54d579a","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/db/migrations/alembic/versions/eb6d5544cbbd_add_provider_location_to_share_snapshots.py":[{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"512a0daa4b0f0db5fc3acb43b838b65905a83180","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# revision identifiers, used by Alembic."},{"line_number":22,"context_line":"revision \u003d \u0027eb6d5544cbbd\u0027"},{"line_number":23,"context_line":"down_revision \u003d \u0027293fac1130ca\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from alembic import op"},{"line_number":26,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":61,"id":"dae33548_0c8e7fcf","line":23,"range":{"start_line":23,"start_character":17,"end_line":23,"end_character":29},"updated":"2016-02-18 01:08:57.000000000","message":"This is no longer correct since Valeriy\u0027s admin LIF patch merged.  I think this should be \u00275155c7077f99\u0027.","commit_id":"dc537577e9b66c2e5fb8b5cd7fc7803265054db8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0a703aef8a19e3a9a42a19089dfbca8fe313e252","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# revision identifiers, used by Alembic."},{"line_number":22,"context_line":"revision \u003d \u0027eb6d5544cbbd\u0027"},{"line_number":23,"context_line":"down_revision \u003d \u0027293fac1130ca\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from alembic import op"},{"line_number":26,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":61,"id":"dae33548_632c7699","line":23,"range":{"start_line":23,"start_character":17,"end_line":23,"end_character":29},"in_reply_to":"dae33548_0c8e7fcf","updated":"2016-02-18 03:42:49.000000000","message":"Fixed.  Thanks.","commit_id":"dc537577e9b66c2e5fb8b5cd7fc7803265054db8"}],"manila/db/sqlalchemy/models.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e50c4f2abe35be35e14c642c686cd5a3b21a409","unresolved":false,"context_lines":[{"line_number":602,"context_line":"    def progress(self):"},{"line_number":603,"context_line":"        if self.instance:"},{"line_number":604,"context_line":"            return self.instance.progress"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    @property"},{"line_number":607,"context_line":"    def instance(self):"},{"line_number":608,"context_line":"        if len(self.instances) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_03b3b00b","line":605,"updated":"2016-02-24 17:52:54.000000000","message":"@property\ndef provider_location(self):\n    if self.instance:\n        return self.instance.provider_location","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":602,"context_line":"    def progress(self):"},{"line_number":603,"context_line":"        if self.instance:"},{"line_number":604,"context_line":"            return self.instance.progress"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    @property"},{"line_number":607,"context_line":"    def instance(self):"},{"line_number":608,"context_line":"        if len(self.instances) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_d50336bd","line":605,"in_reply_to":"bae84128_03b3b00b","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/exception.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"class ManageInvalidShareSnapshot(InvalidShareSnapshot):"},{"line_number":447,"context_line":"    message \u003d _(\"Manage existing share snapshot failed due to \""},{"line_number":448,"context_line":"                \"invalid share snapshot: %(reason)s\")"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"class UnmanageInvalidShareSnapshot(InvalidShareSnapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_da557ec6","line":448,"updated":"2015-11-25 09:51:05.000000000","message":"Missing period","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"30e170a432d830e468710a78db04bd2627b6f478","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"class ManageInvalidShareSnapshot(InvalidShareSnapshot):"},{"line_number":447,"context_line":"    message \u003d _(\"Manage existing share snapshot failed due to \""},{"line_number":448,"context_line":"                \"invalid share snapshot: %(reason)s\")"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"class UnmanageInvalidShareSnapshot(InvalidShareSnapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_bed75aec","line":448,"in_reply_to":"9a8ffd7b_da557ec6","updated":"2015-12-10 04:29:16.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":450,"context_line":""},{"line_number":451,"context_line":"class UnmanageInvalidShareSnapshot(InvalidShareSnapshot):"},{"line_number":452,"context_line":"    message \u003d _(\"Unmanage existing share snapshot failed due to \""},{"line_number":453,"context_line":"                \"invalid share snapshot: %(reason)s\")"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class ShareMetadataNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_fa52c2dc","line":453,"updated":"2015-11-25 09:51:05.000000000","message":"Missing period","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"30e170a432d830e468710a78db04bd2627b6f478","unresolved":false,"context_lines":[{"line_number":450,"context_line":""},{"line_number":451,"context_line":"class UnmanageInvalidShareSnapshot(InvalidShareSnapshot):"},{"line_number":452,"context_line":"    message \u003d _(\"Unmanage existing share snapshot failed due to \""},{"line_number":453,"context_line":"                \"invalid share snapshot: %(reason)s\")"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class ShareMetadataNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_7e081292","line":453,"in_reply_to":"9a8ffd7b_fa52c2dc","updated":"2015-12-10 04:29:16.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"}],"manila/share/api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        # for driver_handles_share_servers\u003dTrue mode"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def manage_snapshot(self, context, snapshot_data, driver_options):"},{"line_number":381,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027manage\u0027)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        try:"},{"line_number":384,"context_line":"            share \u003d self.db.share_get(context, snapshot_data[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_e9fc4640","line":381,"updated":"2015-11-25 09:51:05.000000000","message":"This is being done in wsgi.Controller.authorize which you\u0027ve used in the api... \n\t\nmanila/api/v1/snapshot_manage.py","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afcf38f4810966541bd04bf911582ff5d9f5ffa","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        # for driver_handles_share_servers\u003dTrue mode"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def manage_snapshot(self, context, snapshot_data, driver_options):"},{"line_number":381,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027manage\u0027)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        try:"},{"line_number":384,"context_line":"            share \u003d self.db.share_get(context, snapshot_data[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_2cca1da2","line":381,"in_reply_to":"9a8ffd7b_e9fc4640","updated":"2015-12-11 05:12:14.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":404,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027unmanage\u0027)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":407,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_2926cece","line":404,"updated":"2015-11-25 09:51:05.000000000","message":"This is being done in wsgi.Controller.authorize which you have used in the api...\n\nmanila/api/v1/snapshot_unmanage.py","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9afcf38f4810966541bd04bf911582ff5d9f5ffa","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":404,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027unmanage\u0027)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":407,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_4ccd29b6","line":404,"in_reply_to":"9a8ffd7b_2926cece","updated":"2015-12-11 05:12:14.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        # for driver_handles_share_servers\u003dTrue mode"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def manage_snapshot(self, context, snapshot_data, driver_options):"},{"line_number":381,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027manage_snapshot\u0027)"},{"line_number":382,"context_line":"        try:"},{"line_number":383,"context_line":"            share \u003d self.db.share_get(context, snapshot_data[\u0027share_id\u0027])"},{"line_number":384,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_f1b06e45","line":381,"updated":"2015-12-16 13:29:55.000000000","message":"This policy check is redundant here. Its already being done in the Mixin:\n\nhttps://review.openstack.org/#/c/249542/9/manila/api/v1/snapshot_manage.py \n\n#L27","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        # for driver_handles_share_servers\u003dTrue mode"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def manage_snapshot(self, context, snapshot_data, driver_options):"},{"line_number":381,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027manage_snapshot\u0027)"},{"line_number":382,"context_line":"        try:"},{"line_number":383,"context_line":"            share \u003d self.db.share_get(context, snapshot_data[\u0027share_id\u0027])"},{"line_number":384,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_60723e13","line":381,"in_reply_to":"5a710552_f1b06e45","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2fc9f13bd76db00d735f5e741e385c77d57d82dc","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    def manage_snapshot(self, context, snapshot_data, driver_options):"},{"line_number":381,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027manage_snapshot\u0027)"},{"line_number":382,"context_line":"        try:"},{"line_number":383,"context_line":"            share \u003d self.db.share_get(context, snapshot_data[\u0027share_id\u0027])"},{"line_number":384,"context_line":"        except exception.NotFound:"},{"line_number":385,"context_line":"            raise exception.ShareNotFound(share_id\u003dsnapshot_data[\u0027share_id\u0027])"},{"line_number":386,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_bac5e33c","line":383,"updated":"2015-12-16 11:59:15.000000000","message":"Why not check the already exist snapshot in OpenStack Manila? How to deal with that I manage the same snapshot twice? Driver don\u0027t know which snapshot has been managed by Manila.\n\nHow about add get all snapshot on the specified share, and then check whether the current snapshot already exist.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    def manage_snapshot(self, context, snapshot_data, driver_options):"},{"line_number":381,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027manage_snapshot\u0027)"},{"line_number":382,"context_line":"        try:"},{"line_number":383,"context_line":"            share \u003d self.db.share_get(context, snapshot_data[\u0027share_id\u0027])"},{"line_number":384,"context_line":"        except exception.NotFound:"},{"line_number":385,"context_line":"            raise exception.ShareNotFound(share_id\u003dsnapshot_data[\u0027share_id\u0027])"},{"line_number":386,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_a053466a","line":383,"in_reply_to":"5a710552_bac5e33c","updated":"2015-12-19 02:39:15.000000000","message":"Actually at API layer we won\u0027t know.  The unique identifier is provided by each driver in driver_options.  We don\u0027t have a common way to figure out whether a snapshot is already managed or not in the API.  Only driver knows whether it is managed or not.  I\u0027ll add a check in the Generic driver.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":403,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027unmanage_snapshot\u0027)"},{"line_number":404,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":405,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"},{"line_number":406,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_update(context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_f14cee43","line":403,"updated":"2015-12-16 13:29:55.000000000","message":"This policy check is redundant here. Its already being done in the Mixin:\n\nhttps://review.openstack.org/#/c/249542/9/manila/api/v1/snapshot_unmanage.py\n\n#L32","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":403,"context_line":"        policy.check_policy(context, \u0027share_snapshot\u0027, \u0027unmanage_snapshot\u0027)"},{"line_number":404,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":405,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"},{"line_number":406,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_update(context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_00c9fa25","line":403,"in_reply_to":"5a710552_f14cee43","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f64bed4bf54e214240ed4844b3a5532e131ae085","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            \u0027project_id\u0027: context.project_id,"},{"line_number":413,"context_line":"            \u0027status\u0027: constants.STATUS_MANAGING,"},{"line_number":414,"context_line":"            \u0027share_size\u0027: share[\u0027size\u0027],"},{"line_number":415,"context_line":"            \u0027progress\u0027: \u00270%\u0027,"},{"line_number":416,"context_line":"            \u0027share_proto\u0027: share[\u0027share_proto\u0027]"},{"line_number":417,"context_line":"        })"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_732b8295","line":415,"range":{"start_line":415,"start_character":13,"end_line":415,"end_character":21},"updated":"2016-02-09 04:25:18.000000000","message":"At what point does this get updated to 100%?\n\nIn the share manager, the progress field is updated to 100% after a normal snapshot creation, so shouldn\u0027t it end up that way after a manage operation, too?","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"415e7717d02dc0ec3cbe7aeb7017db9993f9dcec","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            \u0027project_id\u0027: context.project_id,"},{"line_number":413,"context_line":"            \u0027status\u0027: constants.STATUS_MANAGING,"},{"line_number":414,"context_line":"            \u0027share_size\u0027: share[\u0027size\u0027],"},{"line_number":415,"context_line":"            \u0027progress\u0027: \u00270%\u0027,"},{"line_number":416,"context_line":"            \u0027share_proto\u0027: share[\u0027share_proto\u0027]"},{"line_number":417,"context_line":"        })"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_5c5453c9","line":415,"range":{"start_line":415,"start_character":13,"end_line":415,"end_character":21},"in_reply_to":"5a5ae5dd_732b8295","updated":"2016-02-09 06:10:24.000000000","message":"Good point.","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":553,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":554,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"},{"line_number":555,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_update(context,"},{"line_number":556,"context_line":"                                                     snapshot[\u0027id\u0027],"},{"line_number":557,"context_line":"                                                     update_data)"},{"line_number":558,"context_line":"        try:"},{"line_number":559,"context_line":"            share \u003d self.db.share_get(context, snapshot_ref[\u0027share_id\u0027])"},{"line_number":560,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_034a7c83","line":557,"range":{"start_line":553,"start_character":8,"end_line":557,"end_character":65},"updated":"2016-02-15 07:08:45.000000000","message":"If you move this check below the try except block, you will not be stuck in UNMANAGING when the share itself is non-existent. \n\nElse, you should set the status to Error within the except block.","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":553,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":554,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"},{"line_number":555,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_update(context,"},{"line_number":556,"context_line":"                                                     snapshot[\u0027id\u0027],"},{"line_number":557,"context_line":"                                                     update_data)"},{"line_number":558,"context_line":"        try:"},{"line_number":559,"context_line":"            share \u003d self.db.share_get(context, snapshot_ref[\u0027share_id\u0027])"},{"line_number":560,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_5359c4fd","line":557,"range":{"start_line":553,"start_character":8,"end_line":557,"end_character":65},"in_reply_to":"dae33548_034a7c83","updated":"2016-02-16 06:23:43.000000000","message":"Done","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6a440ae2d20dbb80c91c517caddb4b600ba0fe01","unresolved":false,"context_lines":[{"line_number":523,"context_line":"            context, snapshot_data[\u0027share_id\u0027])"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        for existing_snap in existing_snapshots:"},{"line_number":526,"context_line":"            if driver_options in existing_snap[\u0027provider_location\u0027]:"},{"line_number":527,"context_line":"                msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":528,"context_line":"                        \"already managed for driver options \""},{"line_number":529,"context_line":"                        \"%(driver_options)s when trying to \""}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_c4104cab","line":526,"range":{"start_line":526,"start_character":12,"end_line":526,"end_character":68},"updated":"2016-02-16 19:14:19.000000000","message":"driver_options is a dict.  How can you check if a dict is \"in\" a string?","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c668a51c3fb97b2d6b4676806378ca3deba1289","unresolved":false,"context_lines":[{"line_number":523,"context_line":"            context, snapshot_data[\u0027share_id\u0027])"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        for existing_snap in existing_snapshots:"},{"line_number":526,"context_line":"            if driver_options in existing_snap[\u0027provider_location\u0027]:"},{"line_number":527,"context_line":"                msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":528,"context_line":"                        \"already managed for driver options \""},{"line_number":529,"context_line":"                        \"%(driver_options)s when trying to \""}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_3d32ca5f","line":526,"range":{"start_line":526,"start_character":12,"end_line":526,"end_character":68},"in_reply_to":"dae33548_c4104cab","updated":"2016-02-17 07:44:12.000000000","message":"Checking provider_location which is a string now.","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"bc905e537ec467907d8f9b3e91d673c37eba63a5","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        existing_snapshots \u003d self.db.share_snapshot_get_all_for_share("},{"line_number":523,"context_line":"            context, snapshot_data[\u0027share_id\u0027])"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        for existing_snap in existing_snapshots:"},{"line_number":526,"context_line":"            if (snapshot_data[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":527,"context_line":"                    existing_snap[\u0027provider_location\u0027]):"},{"line_number":528,"context_line":"                msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":529,"context_line":"                        \"already managed for provider location \""},{"line_number":530,"context_line":"                        \"%(provider_location)s when trying to \""}],"source_content_type":"text/x-python","patch_set":61,"id":"dae33548_f85f9ee2","line":527,"range":{"start_line":525,"start_character":8,"end_line":527,"end_character":56},"updated":"2016-02-17 23:03:31.000000000","message":"Very nice.  Much better to do this here in the synchronous API layer than way down in the drivers.","commit_id":"dc537577e9b66c2e5fb8b5cd7fc7803265054db8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            for inst in existing_snap.get(\u0027instances\u0027):"},{"line_number":527,"context_line":"                if (snapshot_data[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":528,"context_line":"                        inst[\u0027provider_location\u0027]):"},{"line_number":529,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":530,"context_line":"                            \"already managed for provider location \""},{"line_number":531,"context_line":"                            \"%(provider_location)s when trying to \""},{"line_number":532,"context_line":"                            \"manage snapshot.\") % {"},{"line_number":533,"context_line":"                        \u0027share_snapshot_id\u0027: existing_snap[\u0027id\u0027],"},{"line_number":534,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":535,"context_line":"                            snapshot_data[\u0027provider_location\u0027],"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_13a0cc42","line":532,"range":{"start_line":529,"start_character":29,"end_line":532,"end_character":45},"updated":"2016-02-21 22:56:04.000000000","message":"suggestion: you can remove \" when trying to manage snapshot\" to enhance the readability of this message going out of the REST API... because this is in the HTTP Response to the manage request, it is obvious that the failure occurred during the manage call.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            for inst in existing_snap.get(\u0027instances\u0027):"},{"line_number":527,"context_line":"                if (snapshot_data[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":528,"context_line":"                        inst[\u0027provider_location\u0027]):"},{"line_number":529,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":530,"context_line":"                            \"already managed for provider location \""},{"line_number":531,"context_line":"                            \"%(provider_location)s when trying to \""},{"line_number":532,"context_line":"                            \"manage snapshot.\") % {"},{"line_number":533,"context_line":"                        \u0027share_snapshot_id\u0027: existing_snap[\u0027id\u0027],"},{"line_number":534,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":535,"context_line":"                            snapshot_data[\u0027provider_location\u0027],"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_40b2d54c","line":532,"range":{"start_line":529,"start_character":29,"end_line":532,"end_character":45},"in_reply_to":"bae84128_13a0cc42","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":534,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":535,"context_line":"                            snapshot_data[\u0027provider_location\u0027],"},{"line_number":536,"context_line":"                    }"},{"line_number":537,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":538,"context_line":"                        reason\u003dmsg)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        snapshot_data.update({"},{"line_number":541,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_de3e6bd9","line":538,"range":{"start_line":537,"start_character":20,"end_line":538,"end_character":35},"updated":"2016-02-21 22:56:04.000000000","message":"Question: Would this be a better behavior over Returning the existing snapshot with a status 200?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":534,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":535,"context_line":"                            snapshot_data[\u0027provider_location\u0027],"},{"line_number":536,"context_line":"                    }"},{"line_number":537,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":538,"context_line":"                        reason\u003dmsg)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        snapshot_data.update({"},{"line_number":541,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_201eb10b","line":538,"range":{"start_line":537,"start_character":20,"end_line":538,"end_character":35},"in_reply_to":"bae84128_de3e6bd9","updated":"2016-02-24 20:50:57.000000000","message":"No.  If this provider_location is already managed, then there is already a snapshot id associated with it.  It is cleaner to fail the current manage operation.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":546,"context_line":"            \u0027share_proto\u0027: share[\u0027share_proto\u0027]"},{"line_number":547,"context_line":"        })"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        snapshot \u003d self.db.share_snapshot_create(context, snapshot_data)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        self.share_rpcapi.manage_snapshot(context, snapshot, share[\u0027host\u0027],"},{"line_number":552,"context_line":"                                          driver_options)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_deb78bf3","line":549,"range":{"start_line":549,"start_character":8,"end_line":549,"end_character":72},"updated":"2016-02-21 22:56:04.000000000","message":"This step will not be reached if the exception on line 537 is raised.\n\nso you can safely remove the check in the manager.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":546,"context_line":"            \u0027share_proto\u0027: share[\u0027share_proto\u0027]"},{"line_number":547,"context_line":"        })"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        snapshot \u003d self.db.share_snapshot_create(context, snapshot_data)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        self.share_rpcapi.manage_snapshot(context, snapshot, share[\u0027host\u0027],"},{"line_number":552,"context_line":"                                          driver_options)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_8057bd24","line":549,"range":{"start_line":549,"start_character":8,"end_line":549,"end_character":72},"in_reply_to":"bae84128_deb78bf3","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":556,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":557,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"},{"line_number":558,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_update(context,"},{"line_number":559,"context_line":"                                                     snapshot[\u0027id\u0027],"},{"line_number":560,"context_line":"                                                     update_data)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_9eece32a","line":557,"range":{"start_line":557,"start_character":23,"end_line":557,"end_character":58},"updated":"2016-02-21 22:56:04.000000000","message":"set terminated_at while removing from DB, not here?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def unmanage_snapshot(self, context, snapshot):"},{"line_number":556,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"},{"line_number":557,"context_line":"                       \u0027terminated_at\u0027: timeutils.utcnow()}"},{"line_number":558,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_update(context,"},{"line_number":559,"context_line":"                                                     snapshot[\u0027id\u0027],"},{"line_number":560,"context_line":"                                                     update_data)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_d3423d0e","line":557,"range":{"start_line":557,"start_character":23,"end_line":557,"end_character":58},"in_reply_to":"bae84128_9eece32a","updated":"2016-02-24 20:50:57.000000000","message":"This behaves the same as unmanage share.  I\u0027m trying to be consistent.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":559,"context_line":"                                                     snapshot[\u0027id\u0027],"},{"line_number":560,"context_line":"                                                     update_data)"},{"line_number":561,"context_line":"        try:"},{"line_number":562,"context_line":"            share \u003d self.db.share_get(context, snapshot_ref[\u0027share_id\u0027])"},{"line_number":563,"context_line":"        except exception.NotFound:"},{"line_number":564,"context_line":"            update_data \u003d {\u0027status\u0027: constants.STATUS_ERROR}"},{"line_number":565,"context_line":"            self.db.share_snapshot_update(context,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_9e29838c","line":562,"range":{"start_line":562,"start_character":12,"end_line":562,"end_character":72},"updated":"2016-02-21 22:56:04.000000000","message":"This check is being performed in the top level method for this API.. \n\nLine 57 of https://review.openstack.org/#/c/249542/64/manila/api/v2/share_snapshots.py\n\nDo you really need this check twice? (I mean, there\u0027s really no expectation of latency between these two calls, they\u0027re both within m-api)","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":559,"context_line":"                                                     snapshot[\u0027id\u0027],"},{"line_number":560,"context_line":"                                                     update_data)"},{"line_number":561,"context_line":"        try:"},{"line_number":562,"context_line":"            share \u003d self.db.share_get(context, snapshot_ref[\u0027share_id\u0027])"},{"line_number":563,"context_line":"        except exception.NotFound:"},{"line_number":564,"context_line":"            update_data \u003d {\u0027status\u0027: constants.STATUS_ERROR}"},{"line_number":565,"context_line":"            self.db.share_snapshot_update(context,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_33756963","line":562,"range":{"start_line":562,"start_character":12,"end_line":562,"end_character":72},"in_reply_to":"bae84128_9e29838c","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"31d71dc270a4f295679702cb445f6ca34569af61","unresolved":false,"context_lines":[{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        self.share_rpcapi.manage_snapshot(context, snapshot, share[\u0027host\u0027],"},{"line_number":551,"context_line":"                                          driver_options)"},{"line_number":552,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def unmanage_snapshot(self, context, snapshot, host):"},{"line_number":555,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_9e626cd7","line":552,"range":{"start_line":552,"start_character":15,"end_line":552,"end_character":66},"updated":"2016-02-25 20:24:45.000000000","message":"Is there any specific reason you need to update the model of a snapshot you just created? the RPC call is asynchronous so the model updated here should be exactly the same as the one returned in share_snapshot_create.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f01fd80e5fe8cd0314141ee145f16b75f5a45a03","unresolved":false,"context_lines":[{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        self.share_rpcapi.manage_snapshot(context, snapshot, share[\u0027host\u0027],"},{"line_number":551,"context_line":"                                          driver_options)"},{"line_number":552,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def unmanage_snapshot(self, context, snapshot, host):"},{"line_number":555,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_d1906298","line":552,"range":{"start_line":552,"start_character":15,"end_line":552,"end_character":66},"in_reply_to":"9aed3d3a_9e626cd7","updated":"2016-02-25 21:26:41.000000000","message":"This may not be needed.  I do a get trying to retrieve provider_location, but I don\u0027t think it is populated at this point yet.  I think this can be removed.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d4708d8fb49850b8fa49273a0d0248e723f2502","unresolved":false,"context_lines":[{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        self.share_rpcapi.manage_snapshot(context, snapshot, share[\u0027host\u0027],"},{"line_number":551,"context_line":"                                          driver_options)"},{"line_number":552,"context_line":"        return self.db.share_snapshot_get(context, snapshot[\u0027id\u0027])"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def unmanage_snapshot(self, context, snapshot, host):"},{"line_number":555,"context_line":"        update_data \u003d {\u0027status\u0027: constants.STATUS_UNMANAGING,"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_d755f2c6","line":552,"range":{"start_line":552,"start_character":15,"end_line":552,"end_character":66},"in_reply_to":"9aed3d3a_d1906298","updated":"2016-02-26 02:46:43.000000000","message":"Done","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"}],"manila/share/driver.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b7be103d1c83e072e09a20997fce31789ef054ee","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        If provided share snapshot cannot be unmanaged, then raise an"},{"line_number":742,"context_line":"        UnmanageInvalidShareSnapshot exception, specifying a reason for"},{"line_number":743,"context_line":"        the failure."},{"line_number":744,"context_line":"        \"\"\""},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":747,"context_line":"        \"\"\"Extends size of existing share."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_1a21c64d","line":744,"updated":"2015-11-25 09:51:05.000000000","message":"Is this meant to raise a NotImplementedError() too?","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"330fe31955268a650715046249352ae9b184f58f","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        If provided share snapshot cannot be unmanaged, then raise an"},{"line_number":742,"context_line":"        UnmanageInvalidShareSnapshot exception, specifying a reason for"},{"line_number":743,"context_line":"        the failure."},{"line_number":744,"context_line":"        \"\"\""},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":747,"context_line":"        \"\"\"Extends size of existing share."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_bf8a8819","line":744,"in_reply_to":"9a8ffd7b_1a21c64d","updated":"2015-11-26 18:02:42.000000000","message":"Unmanage is no-op. The driver may not need to do anything, Manila manager removes from DB.","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"92374aa47ba38fa09c9157277b5e787eeb88e88b","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        If provided share snapshot cannot be unmanaged, then raise an"},{"line_number":742,"context_line":"        UnmanageInvalidShareSnapshot exception, specifying a reason for"},{"line_number":743,"context_line":"        the failure."},{"line_number":744,"context_line":"        \"\"\""},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":747,"context_line":"        \"\"\"Extends size of existing share."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_24e3e7a5","line":744,"in_reply_to":"9a8ffd7b_bf8a8819","updated":"2015-11-27 02:06:26.000000000","message":"Ah. Makes sense. Thanks!","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        the failure."},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":739,"context_line":"        :param driver_options: Driver-specific options provided by admin."},{"line_number":740,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":741,"context_line":"        :return: share_update dictionary with required key \u0027size\u0027,"},{"line_number":742,"context_line":"                 which should contain size of the share snapshot."}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_1e742fcd","line":739,"range":{"start_line":739,"start_character":72,"end_line":739,"end_character":73},"updated":"2016-01-20 11:40:11.000000000","message":"Remove for consistency.","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        the failure."},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":739,"context_line":"        :param driver_options: Driver-specific options provided by admin."},{"line_number":740,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":741,"context_line":"        :return: share_update dictionary with required key \u0027size\u0027,"},{"line_number":742,"context_line":"                 which should contain size of the share snapshot."}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_5d2aad2d","line":739,"range":{"start_line":739,"start_character":72,"end_line":739,"end_character":73},"in_reply_to":"ba63e191_1e742fcd","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":739,"context_line":"        :param driver_options: Driver-specific options provided by admin."},{"line_number":740,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":741,"context_line":"        :return: share_update dictionary with required key \u0027size\u0027,"},{"line_number":742,"context_line":"                 which should contain size of the share snapshot."},{"line_number":743,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_7e4beb87","line":740,"range":{"start_line":740,"start_character":67,"end_line":740,"end_character":68},"updated":"2016-01-20 11:40:11.000000000","message":"Same.","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":739,"context_line":"        :param driver_options: Driver-specific options provided by admin."},{"line_number":740,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":741,"context_line":"        :return: share_update dictionary with required key \u0027size\u0027,"},{"line_number":742,"context_line":"                 which should contain size of the share snapshot."},{"line_number":743,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_1d1d150f","line":740,"range":{"start_line":740,"start_character":67,"end_line":740,"end_character":68},"in_reply_to":"ba63e191_7e4beb87","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        :param driver_options: Driver-specific options provided by admin."},{"line_number":740,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":741,"context_line":"        :return: share_update dictionary with required key \u0027size\u0027,"},{"line_number":742,"context_line":"                 which should contain size of the share snapshot."},{"line_number":743,"context_line":"        \"\"\""},{"line_number":744,"context_line":"        raise NotImplementedError()"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_3e45736f","line":742,"range":{"start_line":742,"start_character":64,"end_line":742,"end_character":65},"updated":"2016-01-20 11:40:11.000000000","message":"Same","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        :param driver_options: Driver-specific options provided by admin."},{"line_number":740,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":741,"context_line":"        :return: share_update dictionary with required key \u0027size\u0027,"},{"line_number":742,"context_line":"                 which should contain size of the share snapshot."},{"line_number":743,"context_line":"        \"\"\""},{"line_number":744,"context_line":"        raise NotImplementedError()"},{"line_number":745,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_bd1ba91a","line":742,"range":{"start_line":742,"start_character":64,"end_line":742,"end_character":65},"in_reply_to":"ba63e191_3e45736f","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":812,"context_line":"        ManageInvalidShareSnapshot exception, specifying a reason for"},{"line_number":813,"context_line":"        the failure."},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":816,"context_line":"        :param driver_options: Driver-specific options provided by admin"},{"line_number":817,"context_line":"        :return: model_update dictionary with required key \u0027size\u0027,"},{"line_number":818,"context_line":"                 which should contain size of the share snapshot."}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_def66bf8","line":815,"range":{"start_line":815,"start_character":25,"end_line":815,"end_character":38},"updated":"2016-02-21 22:56:04.000000000","message":"ShareSnapshotInstanceModel with ShareSnapshot data.. \n\ncould you give an example instead, would be mighty helpful for driver maintainers..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":812,"context_line":"        ManageInvalidShareSnapshot exception, specifying a reason for"},{"line_number":813,"context_line":"        the failure."},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":816,"context_line":"        :param driver_options: Driver-specific options provided by admin"},{"line_number":817,"context_line":"        :return: model_update dictionary with required key \u0027size\u0027,"},{"line_number":818,"context_line":"                 which should contain size of the share snapshot."}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_f3fca173","line":815,"range":{"start_line":815,"start_character":25,"end_line":815,"end_character":38},"in_reply_to":"bae84128_def66bf8","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        the failure."},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":816,"context_line":"        :param driver_options: Driver-specific options provided by admin"},{"line_number":817,"context_line":"        :return: model_update dictionary with required key \u0027size\u0027,"},{"line_number":818,"context_line":"                 which should contain size of the share snapshot."},{"line_number":819,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_7ee8ff10","line":816,"range":{"start_line":816,"start_character":15,"end_line":816,"end_character":72},"updated":"2016-02-21 22:56:04.000000000","message":"Could you provide an example?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        the failure."},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        :param snapshot: ShareSnapshot model"},{"line_number":816,"context_line":"        :param driver_options: Driver-specific options provided by admin"},{"line_number":817,"context_line":"        :return: model_update dictionary with required key \u0027size\u0027,"},{"line_number":818,"context_line":"                 which should contain size of the share snapshot."},{"line_number":819,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_d6218b9f","line":816,"range":{"start_line":816,"start_character":15,"end_line":816,"end_character":72},"in_reply_to":"bae84128_7ee8ff10","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/share/drivers/generic.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: export_locations}"},{"line_number":915,"context_line":""},{"line_number":916,"context_line":"    def manage_existing_snapshot(self, snapshot, driver_options):"},{"line_number":917,"context_line":"        \"\"\"Manage existing share snapshot to manila."},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"        Generic driver accepts only one driver_option \u0027volume_snapshot_id\u0027."},{"line_number":920,"context_line":"        If an administrator provides this option, then appropriate Cinder"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_4a3492dd","line":917,"updated":"2015-12-14 21:09:36.000000000","message":"s/to/with/","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: export_locations}"},{"line_number":915,"context_line":""},{"line_number":916,"context_line":"    def manage_existing_snapshot(self, snapshot, driver_options):"},{"line_number":917,"context_line":"        \"\"\"Manage existing share snapshot to manila."},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"        Generic driver accepts only one driver_option \u0027volume_snapshot_id\u0027."},{"line_number":920,"context_line":"        If an administrator provides this option, then appropriate Cinder"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_ba6d3a34","line":917,"in_reply_to":"5a710552_4a3492dd","updated":"2015-12-15 05:12:24.000000000","message":"Done","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        \"\"\""},{"line_number":927,"context_line":"        volume_snapshot \u003d None"},{"line_number":928,"context_line":"        snapshot_size \u003d 0"},{"line_number":929,"context_line":"        if \u0027volume_snapshot_id\u0027 in driver_options:"},{"line_number":930,"context_line":"            try:"},{"line_number":931,"context_line":"                volume_snapshot \u003d self.volume_api.get_snapshot("},{"line_number":932,"context_line":"                    self.admin_context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_0ad0ca52","line":929,"updated":"2015-12-14 21:09:36.000000000","message":"else fail","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        \"\"\""},{"line_number":927,"context_line":"        volume_snapshot \u003d None"},{"line_number":928,"context_line":"        snapshot_size \u003d 0"},{"line_number":929,"context_line":"        if \u0027volume_snapshot_id\u0027 in driver_options:"},{"line_number":930,"context_line":"            try:"},{"line_number":931,"context_line":"                volume_snapshot \u003d self.volume_api.get_snapshot("},{"line_number":932,"context_line":"                    self.admin_context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_dde4c00e","line":929,"in_reply_to":"5a710552_0ad0ca52","updated":"2015-12-15 05:12:24.000000000","message":"Done","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c8a77069fbb1d2f0020f8d7b1b228a6ac9e8bc36","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":937,"context_line":"                        reason\u003dsix.text_type(e))"},{"line_number":938,"context_line":""},{"line_number":939,"context_line":"        if volume_snapshot:"},{"line_number":940,"context_line":"            self.private_storage.update("},{"line_number":941,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":942,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_aa48962e","line":939,"updated":"2015-12-14 21:09:36.000000000","message":"Not sure why this if would ever be false, but if it can be false, then it should throw an error, right?","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea555e0634020571640b05e607b4e487045cb570","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":937,"context_line":"                        reason\u003dsix.text_type(e))"},{"line_number":938,"context_line":""},{"line_number":939,"context_line":"        if volume_snapshot:"},{"line_number":940,"context_line":"            self.private_storage.update("},{"line_number":941,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":942,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_7df10ccd","line":939,"in_reply_to":"5a710552_aa48962e","updated":"2015-12-15 05:12:24.000000000","message":"Done","commit_id":"71ba65254aac35b169d00b7b1e4e893b73577cab"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        volume snapshot will be managed by Manila as well."},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        :param snapshot: Snapshot data"},{"line_number":926,"context_line":"        :param driver_options: dict with \u0027volume_snapshot_id\u0027 option."},{"line_number":927,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":928,"context_line":"        :return: dict with share snapshot size, example: {\u0027size\u0027: 1}"},{"line_number":929,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_1e22efb9","line":926,"range":{"start_line":926,"start_character":68,"end_line":926,"end_character":69},"updated":"2016-01-20 11:40:11.000000000","message":"Remove","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        volume snapshot will be managed by Manila as well."},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        :param snapshot: Snapshot data"},{"line_number":926,"context_line":"        :param driver_options: dict with \u0027volume_snapshot_id\u0027 option."},{"line_number":927,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":928,"context_line":"        :return: dict with share snapshot size, example: {\u0027size\u0027: 1}"},{"line_number":929,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_3dded93f","line":926,"range":{"start_line":926,"start_character":68,"end_line":926,"end_character":69},"in_reply_to":"ba63e191_1e22efb9","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        :param snapshot: Snapshot data"},{"line_number":926,"context_line":"        :param driver_options: dict with \u0027volume_snapshot_id\u0027 option."},{"line_number":927,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":928,"context_line":"        :return: dict with share snapshot size, example: {\u0027size\u0027: 1}"},{"line_number":929,"context_line":"        \"\"\""},{"line_number":930,"context_line":"        volume_snapshot \u003d None"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_de2bf792","line":927,"range":{"start_line":927,"start_character":67,"end_line":927,"end_character":68},"updated":"2016-01-20 11:40:11.000000000","message":"Remove","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        :param snapshot: Snapshot data"},{"line_number":926,"context_line":"        :param driver_options: dict with \u0027volume_snapshot_id\u0027 option."},{"line_number":927,"context_line":"        :param existing_snapshots: Existing snapshots for the share."},{"line_number":928,"context_line":"        :return: dict with share snapshot size, example: {\u0027size\u0027: 1}"},{"line_number":929,"context_line":"        \"\"\""},{"line_number":930,"context_line":"        volume_snapshot \u003d None"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_5de14dfd","line":927,"range":{"start_line":927,"start_character":67,"end_line":927,"end_character":68},"in_reply_to":"ba63e191_de2bf792","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":936,"context_line":"        :return: dict with share snapshot size, example: {\u0027size\u0027: 1}"},{"line_number":937,"context_line":"        \"\"\""},{"line_number":938,"context_line":"        volume_snapshot \u003d None"},{"line_number":939,"context_line":"        snapshot_size \u003d 0"},{"line_number":940,"context_line":"        if \u0027volume_snapshot_id\u0027 in driver_options:"},{"line_number":941,"context_line":"            try:"},{"line_number":942,"context_line":"                volume_snapshot \u003d self.volume_api.get_snapshot("}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_acc91d28","line":939,"range":{"start_line":939,"start_character":24,"end_line":939,"end_character":25},"updated":"2016-01-22 16:36:14.000000000","message":"Why zero? Why not size of source share?","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":936,"context_line":"        :return: dict with share snapshot size, example: {\u0027size\u0027: 1}"},{"line_number":937,"context_line":"        \"\"\""},{"line_number":938,"context_line":"        volume_snapshot \u003d None"},{"line_number":939,"context_line":"        snapshot_size \u003d 0"},{"line_number":940,"context_line":"        if \u0027volume_snapshot_id\u0027 in driver_options:"},{"line_number":941,"context_line":"            try:"},{"line_number":942,"context_line":"                volume_snapshot \u003d self.volume_api.get_snapshot("}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_a6eb7177","line":939,"range":{"start_line":939,"start_character":24,"end_line":939,"end_character":25},"in_reply_to":"9a68dd71_acc91d28","updated":"2016-01-23 03:51:00.000000000","message":"You are right.  I forgot we have share_size in snapshot.  Done.","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":943,"context_line":"            except exception.VolumeSnapshotNotFound as e:"},{"line_number":944,"context_line":"                raise exception.ManageInvalidShareSnapshot("},{"line_number":945,"context_line":"                    reason\u003dsix.text_type(e))"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"        for existing_snap in existing_snapshots:"},{"line_number":948,"context_line":"            vol_snap_id \u003d self.private_storage.get("},{"line_number":949,"context_line":"                existing_snap.instance[\u0027id\u0027], \u0027volume_snapshot_id\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_50916a98","line":946,"updated":"2016-02-04 01:24:48.000000000","message":"Check \"if volume_snapshot\" here.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":943,"context_line":"            except exception.VolumeSnapshotNotFound as e:"},{"line_number":944,"context_line":"                raise exception.ManageInvalidShareSnapshot("},{"line_number":945,"context_line":"                    reason\u003dsix.text_type(e))"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"        for existing_snap in existing_snapshots:"},{"line_number":948,"context_line":"            vol_snap_id \u003d self.private_storage.get("},{"line_number":949,"context_line":"                existing_snap.instance[\u0027id\u0027], \u0027volume_snapshot_id\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_877d62b3","line":946,"in_reply_to":"5a5ae5dd_50916a98","updated":"2016-02-04 04:00:20.000000000","message":"Done","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        for existing_snap in existing_snapshots:"},{"line_number":948,"context_line":"            vol_snap_id \u003d self.private_storage.get("},{"line_number":949,"context_line":"                existing_snap.instance[\u0027id\u0027], \u0027volume_snapshot_id\u0027)"},{"line_number":950,"context_line":"            if (volume_snapshot and"},{"line_number":951,"context_line":"                    vol_snap_id \u003d\u003d driver_options[\u0027volume_snapshot_id\u0027]):"},{"line_number":952,"context_line":"                msg \u003d _(\"A share snapshot %(share_snapshot_id)s is already \""},{"line_number":953,"context_line":"                        \"managed for volume_snapshot_id %(volume_snapshot_id)s\""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_70e34634","line":950,"range":{"start_line":950,"start_character":16,"end_line":950,"end_character":31},"updated":"2016-02-04 01:24:48.000000000","message":"Make sure volume_snapshot is valid before you get into this for loop (and remove the \u0027volume_snapshot and\u0027)","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        for existing_snap in existing_snapshots:"},{"line_number":948,"context_line":"            vol_snap_id \u003d self.private_storage.get("},{"line_number":949,"context_line":"                existing_snap.instance[\u0027id\u0027], \u0027volume_snapshot_id\u0027)"},{"line_number":950,"context_line":"            if (volume_snapshot and"},{"line_number":951,"context_line":"                    vol_snap_id \u003d\u003d driver_options[\u0027volume_snapshot_id\u0027]):"},{"line_number":952,"context_line":"                msg \u003d _(\"A share snapshot %(share_snapshot_id)s is already \""},{"line_number":953,"context_line":"                        \"managed for volume_snapshot_id %(volume_snapshot_id)s\""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_274b4e89","line":950,"range":{"start_line":950,"start_character":16,"end_line":950,"end_character":31},"in_reply_to":"5a5ae5dd_70e34634","updated":"2016-02-04 04:00:20.000000000","message":"Done","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                    vol_snap_id \u003d\u003d driver_options[\u0027volume_snapshot_id\u0027]):"},{"line_number":952,"context_line":"                msg \u003d _(\"A share snapshot %(share_snapshot_id)s is already \""},{"line_number":953,"context_line":"                        \"managed for volume_snapshot_id %(volume_snapshot_id)s\""},{"line_number":954,"context_line":"                        \" when trying to manage snapshot %(snapshot_id)s.\") % {"},{"line_number":955,"context_line":"                    \u0027share_snapshot_id\u0027: existing_snap[\u0027id\u0027],"},{"line_number":956,"context_line":"                    \u0027volume_snapshot_id\u0027: driver_options[\u0027volume_snapshot_id\u0027],"},{"line_number":957,"context_line":"                    \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_303b8e9e","line":954,"updated":"2016-02-04 01:24:48.000000000","message":"This message reads odd, but I guess it\u0027s OK. Packed with info.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":959,"context_line":"                raise exception.ManageInvalidShareSnapshot("},{"line_number":960,"context_line":"                    reason\u003dmsg)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"        if volume_snapshot:"},{"line_number":963,"context_line":"            snapshot_size \u003d volume_snapshot[\u0027size\u0027]"},{"line_number":964,"context_line":"            self.private_storage.update("},{"line_number":965,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_b0e3fe04","line":962,"range":{"start_line":962,"start_character":11,"end_line":962,"end_character":26},"updated":"2016-02-04 01:24:48.000000000","message":"This if won\u0027t be needed if you move the test up and take advantage of that here.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":959,"context_line":"                raise exception.ManageInvalidShareSnapshot("},{"line_number":960,"context_line":"                    reason\u003dmsg)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"        if volume_snapshot:"},{"line_number":963,"context_line":"            snapshot_size \u003d volume_snapshot[\u0027size\u0027]"},{"line_number":964,"context_line":"            self.private_storage.update("},{"line_number":965,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_07489286","line":962,"range":{"start_line":962,"start_character":11,"end_line":962,"end_character":26},"in_reply_to":"5a5ae5dd_b0e3fe04","updated":"2016-02-04 04:00:20.000000000","message":"Done","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":963,"context_line":"            snapshot_size \u003d volume_snapshot[\u0027size\u0027]"},{"line_number":964,"context_line":"            self.private_storage.update("},{"line_number":965,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        return {\u0027size\u0027: snapshot_size}"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    def _get_mount_stats_by_index(self, mount_path, server_details, index,"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_50ae4a86","line":966,"updated":"2016-02-04 01:24:48.000000000","message":"if volume_snapshot was empty/none/false above. Then code was skipped and this size:0 is returned. Shouldn\u0027t that be an error instead.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":963,"context_line":"            snapshot_size \u003d volume_snapshot[\u0027size\u0027]"},{"line_number":964,"context_line":"            self.private_storage.update("},{"line_number":965,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        return {\u0027size\u0027: snapshot_size}"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    def _get_mount_stats_by_index(self, mount_path, server_details, index,"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_429f58b4","line":966,"in_reply_to":"5a5ae5dd_50ae4a86","updated":"2016-02-04 04:00:20.000000000","message":"After this is returned to the manager, if size is 0, the manager will use the size of the share.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"31fcb8fc9aa324e82900e6bbd7d39d5dc431e001","unresolved":false,"context_lines":[{"line_number":966,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        return {\u0027size\u0027: snapshot_size}"},{"line_number":969,"context_line":""},{"line_number":970,"context_line":"    def _get_mount_stats_by_index(self, mount_path, server_details, index,"},{"line_number":971,"context_line":"                                  block_size\u003d\u0027G\u0027):"},{"line_number":972,"context_line":"        \"\"\"Get mount stats using df shell command."}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_345d8079","line":969,"updated":"2016-02-11 16:38:22.000000000","message":"Unmanage operation should remove DB records for unmanaged snapshot.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"68c0cc38aad84ccff70d3465aa00e181a87a262c","unresolved":false,"context_lines":[{"line_number":966,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        return {\u0027size\u0027: snapshot_size}"},{"line_number":969,"context_line":""},{"line_number":970,"context_line":"    def _get_mount_stats_by_index(self, mount_path, server_details, index,"},{"line_number":971,"context_line":"                                  block_size\u003d\u0027G\u0027):"},{"line_number":972,"context_line":"        \"\"\"Get mount stats using df shell command."}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_d14433b8","line":969,"in_reply_to":"3a57f1b5_345d8079","updated":"2016-02-11 20:01:35.000000000","message":"Sure.","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef5dcd54b0c64a16e93ad10e3ec3e2243b0a8a58","unresolved":false,"context_lines":[{"line_number":966,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        return {\u0027size\u0027: snapshot_size}"},{"line_number":969,"context_line":""},{"line_number":970,"context_line":"    def _get_mount_stats_by_index(self, mount_path, server_details, index,"},{"line_number":971,"context_line":"                                  block_size\u003d\u0027G\u0027):"},{"line_number":972,"context_line":"        \"\"\"Get mount stats using df shell command."}],"source_content_type":"text/x-python","patch_set":39,"id":"3a57f1b5_4f6c1ed0","line":969,"in_reply_to":"3a57f1b5_d14433b8","updated":"2016-02-11 22:03:09.000000000","message":"Done","commit_id":"83a7796e1467fab47df981e8f04d65e2d6c655d1"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":749,"context_line":"                volume_snapshot[\u0027id\u0027])"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"            # NOTE(xyang): We should look at whether we still need to save"},{"line_number":752,"context_line":"            # volume_snapshot_id in private_storage later, now that is saved"},{"line_number":753,"context_line":"            # provider_location."},{"line_number":754,"context_line":"            self.private_storage.update("},{"line_number":755,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_f850ae0c","line":752,"range":{"start_line":752,"start_character":52,"end_line":752,"end_character":57},"updated":"2016-02-21 08:20:42.000000000","message":"read to clean this up yet?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":749,"context_line":"                volume_snapshot[\u0027id\u0027])"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"            # NOTE(xyang): We should look at whether we still need to save"},{"line_number":752,"context_line":"            # volume_snapshot_id in private_storage later, now that is saved"},{"line_number":753,"context_line":"            # provider_location."},{"line_number":754,"context_line":"            self.private_storage.update("},{"line_number":755,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_76619fd2","line":752,"range":{"start_line":752,"start_character":52,"end_line":752,"end_character":57},"in_reply_to":"bae84128_f850ae0c","updated":"2016-02-24 20:50:57.000000000","message":"I don\u0027t want to expand the scope of this patch.  It is already getting very big.  Removing this now could introduce other bugs.  So I won\u0027t do it now.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"            # NOTE(xyang): We should look at whether we still need to save"},{"line_number":752,"context_line":"            # volume_snapshot_id in private_storage later, now that is saved"},{"line_number":753,"context_line":"            # provider_location."},{"line_number":754,"context_line":"            self.private_storage.update("},{"line_number":755,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":756,"context_line":"            # NOTE(xyang): Need to update provider_location in the db so"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_5821da9e","line":753,"updated":"2016-02-21 08:20:42.000000000","message":"nit s/provider_location/in provider_location/ ?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"            # NOTE(xyang): We should look at whether we still need to save"},{"line_number":752,"context_line":"            # volume_snapshot_id in private_storage later, now that is saved"},{"line_number":753,"context_line":"            # provider_location."},{"line_number":754,"context_line":"            self.private_storage.update("},{"line_number":755,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":756,"context_line":"            # NOTE(xyang): Need to update provider_location in the db so"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_b684c75d","line":753,"in_reply_to":"bae84128_5821da9e","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":751,"context_line":"            # NOTE(xyang): We should look at whether we still need to save"},{"line_number":752,"context_line":"            # volume_snapshot_id in private_storage later, now that is saved"},{"line_number":753,"context_line":"            # provider_location."},{"line_number":754,"context_line":"            self.private_storage.update("},{"line_number":755,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":756,"context_line":"            # NOTE(xyang): Need to update provider_location in the db so"},{"line_number":757,"context_line":"            # that it can be used in manage/unmanage snapshot tempest tests."},{"line_number":758,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_c316e857","line":755,"range":{"start_line":754,"start_character":12,"end_line":755,"end_character":78},"updated":"2016-02-24 18:16:58.000000000","message":"I do not insist, but lines 754-755 now duplicate things that are solved with \"provider_location\".","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":751,"context_line":"            # NOTE(xyang): We should look at whether we still need to save"},{"line_number":752,"context_line":"            # volume_snapshot_id in private_storage later, now that is saved"},{"line_number":753,"context_line":"            # provider_location."},{"line_number":754,"context_line":"            self.private_storage.update("},{"line_number":755,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":756,"context_line":"            # NOTE(xyang): Need to update provider_location in the db so"},{"line_number":757,"context_line":"            # that it can be used in manage/unmanage snapshot tempest tests."},{"line_number":758,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_557ba629","line":755,"range":{"start_line":754,"start_character":12,"end_line":755,"end_character":78},"in_reply_to":"bae84128_c316e857","updated":"2016-02-24 20:50:57.000000000","message":"I don\u0027t want to introduce any potential bugs by removing this.  This was there before.  I\u0027d rather do this after my patch is merged.  That\u0027s why I added a NOTE above so we can come back to this.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":950,"context_line":""},{"line_number":951,"context_line":"        if volume_snapshot:"},{"line_number":952,"context_line":"            snapshot_size \u003d volume_snapshot[\u0027size\u0027]"},{"line_number":953,"context_line":"            # NOTE(xyang): volume_snapshot_id is saved in private_storage"},{"line_number":954,"context_line":"            # in create_snapshot, so saving it here too for consistency."},{"line_number":955,"context_line":"            # We should look at whether we still need to save it in"},{"line_number":956,"context_line":"            # private_storage later."},{"line_number":957,"context_line":"            self.private_storage.update("},{"line_number":958,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":959,"context_line":"            # NOTE(xyang): provider_location is needed to test"},{"line_number":960,"context_line":"            # unmanage_snapshot in tempest."},{"line_number":961,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_2636c2e7","line":958,"range":{"start_line":953,"start_character":12,"end_line":958,"end_character":78},"updated":"2016-02-24 18:16:58.000000000","message":"Looks like it is redundant. \"provider_location\" solves mentioned concern.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":950,"context_line":""},{"line_number":951,"context_line":"        if volume_snapshot:"},{"line_number":952,"context_line":"            snapshot_size \u003d volume_snapshot[\u0027size\u0027]"},{"line_number":953,"context_line":"            # NOTE(xyang): volume_snapshot_id is saved in private_storage"},{"line_number":954,"context_line":"            # in create_snapshot, so saving it here too for consistency."},{"line_number":955,"context_line":"            # We should look at whether we still need to save it in"},{"line_number":956,"context_line":"            # private_storage later."},{"line_number":957,"context_line":"            self.private_storage.update("},{"line_number":958,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":959,"context_line":"            # NOTE(xyang): provider_location is needed to test"},{"line_number":960,"context_line":"            # unmanage_snapshot in tempest."},{"line_number":961,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_75c06a2b","line":958,"range":{"start_line":953,"start_character":12,"end_line":958,"end_character":78},"in_reply_to":"bae84128_2636c2e7","updated":"2016-02-24 20:50:57.000000000","message":"I\u0027ll remove this after this patch is merged.  It is added to be consistent with create_snapshot.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":956,"context_line":"            # private_storage later."},{"line_number":957,"context_line":"            self.private_storage.update("},{"line_number":958,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":959,"context_line":"            # NOTE(xyang): provider_location is needed to test"},{"line_number":960,"context_line":"            # unmanage_snapshot in tempest."},{"line_number":961,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"        model_update[\u0027size\u0027] \u003d snapshot_size"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_c6cef6b6","line":960,"range":{"start_line":959,"start_character":27,"end_line":960,"end_character":43},"updated":"2016-02-24 18:16:58.000000000","message":"Actually it is not main idea. Also, we should not say anything about testing tools. Here we should say that \"provider_location\" is used for keeping mapping of a snapshot to its name on storage and prevent manage of same snapshot twice.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":956,"context_line":"            # private_storage later."},{"line_number":957,"context_line":"            self.private_storage.update("},{"line_number":958,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":959,"context_line":"            # NOTE(xyang): provider_location is needed to test"},{"line_number":960,"context_line":"            # unmanage_snapshot in tempest."},{"line_number":961,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"        model_update[\u0027size\u0027] \u003d snapshot_size"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_d5db3620","line":960,"range":{"start_line":959,"start_character":27,"end_line":960,"end_character":43},"in_reply_to":"bae84128_c6cef6b6","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"31d71dc270a4f295679702cb445f6ca34569af61","unresolved":false,"context_lines":[{"line_number":954,"context_line":"            # in create_snapshot, so saving it here too for consistency."},{"line_number":955,"context_line":"            # We should look at whether we still need to save it in"},{"line_number":956,"context_line":"            # private_storage later."},{"line_number":957,"context_line":"            self.private_storage.update("},{"line_number":958,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":959,"context_line":"            # NOTE(xyang): provider_location is used to map a Manila snapshot"},{"line_number":960,"context_line":"            # to its name on the storage backend and prevent managing of the"},{"line_number":961,"context_line":"            # same snapshot twice."},{"line_number":962,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"        model_update[\u0027size\u0027] \u003d snapshot_size"},{"line_number":965,"context_line":"        return model_update"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_7c021040","line":962,"range":{"start_line":957,"start_character":11,"end_line":962,"end_character":69},"updated":"2016-02-25 20:24:45.000000000","message":"I am not convinced that provider_location is needed if we are using private storage for the same purpose. I know that provider_location can be validated in API layer instead of here, but can\u0027t we let the validation be performed here?\n\nI found the comment that Ben suggested adding this column, so it can be obtained from tempest tests, but why is this necessary here and not in \"manage share\" feature?","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"89971c4f03c6528bccb68628221b868bd60493d2","unresolved":false,"context_lines":[{"line_number":954,"context_line":"            # in create_snapshot, so saving it here too for consistency."},{"line_number":955,"context_line":"            # We should look at whether we still need to save it in"},{"line_number":956,"context_line":"            # private_storage later."},{"line_number":957,"context_line":"            self.private_storage.update("},{"line_number":958,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":959,"context_line":"            # NOTE(xyang): provider_location is used to map a Manila snapshot"},{"line_number":960,"context_line":"            # to its name on the storage backend and prevent managing of the"},{"line_number":961,"context_line":"            # same snapshot twice."},{"line_number":962,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"        model_update[\u0027size\u0027] \u003d snapshot_size"},{"line_number":965,"context_line":"        return model_update"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_45992c6e","line":962,"range":{"start_line":957,"start_character":11,"end_line":962,"end_character":69},"in_reply_to":"9aed3d3a_11ff6a02","updated":"2016-02-25 23:05:05.000000000","message":"I see, if private storage usage is going to be removed from implementation, this makes sense.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f01fd80e5fe8cd0314141ee145f16b75f5a45a03","unresolved":false,"context_lines":[{"line_number":954,"context_line":"            # in create_snapshot, so saving it here too for consistency."},{"line_number":955,"context_line":"            # We should look at whether we still need to save it in"},{"line_number":956,"context_line":"            # private_storage later."},{"line_number":957,"context_line":"            self.private_storage.update("},{"line_number":958,"context_line":"                snapshot[\u0027id\u0027], {\u0027volume_snapshot_id\u0027: volume_snapshot[\u0027id\u0027]})"},{"line_number":959,"context_line":"            # NOTE(xyang): provider_location is used to map a Manila snapshot"},{"line_number":960,"context_line":"            # to its name on the storage backend and prevent managing of the"},{"line_number":961,"context_line":"            # same snapshot twice."},{"line_number":962,"context_line":"            model_update[\u0027provider_location\u0027] \u003d volume_snapshot[\u0027id\u0027]"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"        model_update[\u0027size\u0027] \u003d snapshot_size"},{"line_number":965,"context_line":"        return model_update"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_11ff6a02","line":962,"range":{"start_line":957,"start_character":11,"end_line":962,"end_character":69},"in_reply_to":"9aed3d3a_7c021040","updated":"2016-02-25 21:26:41.000000000","message":"We need to come back and remove private storage if there is no other side effects.  I don\u0027t want to increase the scope of this patch by removing private storage now and introducing any potential bugs because of its removal.  So this will be a future TODO item.\n\nmanage share can use export location which is common for all drivers.  Snapshot doesn\u0027t have such a thing.  Provider location is introduced to provide a common way to manage snapshot.  Private storage means to be hidden from users.  So we should not require drivers to use it.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"}],"manila/share/manager.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"330fe31955268a650715046249352ae9b184f58f","unresolved":false,"context_lines":[{"line_number":896,"context_line":"            snapshot_update \u003d ("},{"line_number":897,"context_line":"                self.driver.manage_existing_snapshot(snapshot_instance,"},{"line_number":898,"context_line":"                                                     driver_options)"},{"line_number":899,"context_line":"                or {}"},{"line_number":900,"context_line":"            )"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_3f61b805","line":899,"updated":"2015-11-26 18:02:42.000000000","message":"wouldn\u0027t this trigger the exception below?","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"30e170a432d830e468710a78db04bd2627b6f478","unresolved":false,"context_lines":[{"line_number":896,"context_line":"            snapshot_update \u003d ("},{"line_number":897,"context_line":"                self.driver.manage_existing_snapshot(snapshot_instance,"},{"line_number":898,"context_line":"                                                     driver_options)"},{"line_number":899,"context_line":"                or {}"},{"line_number":900,"context_line":"            )"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_96bd656a","line":899,"in_reply_to":"9a8ffd7b_3f61b805","updated":"2015-12-10 04:29:16.000000000","message":"Done","commit_id":"755e3be76b784bf90c6960a770672812b60ae348"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"da3b64f6f31c4798f6a8dd49b7cc151bfb9482b8","unresolved":false,"context_lines":[{"line_number":871,"context_line":"                {\u0027status\u0027: constants.STATUS_MANAGE_ERROR, \u0027size\u0027: 1})"},{"line_number":872,"context_line":"            raise"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    @utils.require_driver_initialized"},{"line_number":875,"context_line":"    def manage_snapshot(self, context, snapshot_id, driver_options):"},{"line_number":876,"context_line":"        context \u003d context.elevated()"},{"line_number":877,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_get(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a7e1126_e0edfcef","line":874,"range":{"start_line":874,"start_character":5,"end_line":874,"end_character":10},"updated":"2015-12-18 08:05:10.000000000","message":"Decorator \"@add_hooks\" is lost.","commit_id":"4a234a51a9540343a2506b6d4f2329a8efd12935"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"da3b64f6f31c4798f6a8dd49b7cc151bfb9482b8","unresolved":false,"context_lines":[{"line_number":996,"context_line":"                             {\u0027status\u0027: constants.STATUS_UNMANAGED,"},{"line_number":997,"context_line":"                              \u0027deleted\u0027: True})"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"    @utils.require_driver_initialized"},{"line_number":1000,"context_line":"    def unmanage_snapshot(self, context, snapshot_id):"},{"line_number":1001,"context_line":"        context \u003d context.elevated()"},{"line_number":1002,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_get(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a7e1126_40b5f0eb","line":999,"range":{"start_line":999,"start_character":15,"end_line":999,"end_character":16},"updated":"2015-12-18 08:05:10.000000000","message":"Decorator \"@add_hooks\" is lost.","commit_id":"4a234a51a9540343a2506b6d4f2329a8efd12935"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5ff88d26f087bd3247391552068280a524a9d289","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"            LOG.warning(_LW(\"Failed to update quota usages: %s.\"),"},{"line_number":1056,"context_line":"                        six.text_type(e))"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        self.db.share_snapshot_update(context, snapshot_id,"},{"line_number":1059,"context_line":"                                      {\u0027status\u0027: constants.STATUS_UNMANAGED,"},{"line_number":1060,"context_line":"                                       \u0027deleted\u0027: True})"},{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    @add_hooks"},{"line_number":1063,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_c8235ca6","line":1060,"range":{"start_line":1058,"start_character":8,"end_line":1060,"end_character":56},"updated":"2015-12-24 19:02:15.000000000","message":"We should prefer soft deleting the snapshot from the database instead.. \n\n    self.db.share_snapshot_destroy()\n\n\nReference: This new bug fix: https://review.openstack.org/#/c/259972/ for share_unmanage","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9339b6b69ab4d64917f595230ee3118f6d346f3a","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"            LOG.warning(_LW(\"Failed to update quota usages: %s.\"),"},{"line_number":1056,"context_line":"                        six.text_type(e))"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        self.db.share_snapshot_update(context, snapshot_id,"},{"line_number":1059,"context_line":"                                      {\u0027status\u0027: constants.STATUS_UNMANAGED,"},{"line_number":1060,"context_line":"                                       \u0027deleted\u0027: True})"},{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    @add_hooks"},{"line_number":1063,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_547e71af","line":1060,"range":{"start_line":1058,"start_character":8,"end_line":1060,"end_character":56},"in_reply_to":"1a7b0d38_c8235ca6","updated":"2015-12-30 01:00:34.000000000","message":"Done","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"6f223526ca3fd65dd4602b62a22f2b1622cc7779","unresolved":false,"context_lines":[{"line_number":907,"context_line":"                or {}"},{"line_number":908,"context_line":"            )"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":911,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":912,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":913,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"da6ed579_188dbed5","line":910,"range":{"start_line":910,"start_character":15,"end_line":910,"end_character":69},"updated":"2016-01-15 08:33:13.000000000","message":"Maybe it\u0027s better to use \"not (A and B)\".","commit_id":"cb23ed061bff9d162b4c84dd0fa9aade9c0c5b11"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"23ce50ceeabfbcb4638e9ca97e8bf6c1cd7d8513","unresolved":false,"context_lines":[{"line_number":907,"context_line":"                or {}"},{"line_number":908,"context_line":"            )"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":911,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":912,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":913,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_1dff5535","line":910,"range":{"start_line":910,"start_character":15,"end_line":910,"end_character":69},"in_reply_to":"da6ed579_188dbed5","updated":"2016-01-22 05:53:56.000000000","message":"I think what I have is more explicit.","commit_id":"cb23ed061bff9d162b4c84dd0fa9aade9c0c5b11"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"6f223526ca3fd65dd4602b62a22f2b1622cc7779","unresolved":false,"context_lines":[{"line_number":1037,"context_line":"        except exception.InvalidShare as e:"},{"line_number":1038,"context_line":"            status \u003d {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR}"},{"line_number":1039,"context_line":"            self.db.share_snapshot_update(context, snapshot_id, status)"},{"line_number":1040,"context_line":"            LOG.error(_LE(\"Share snapshot can not be unmanaged: %s.\"),"},{"line_number":1041,"context_line":"                      six.text_type(e))"},{"line_number":1042,"context_line":"            return"},{"line_number":1043,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da6ed579_9ba448ba","line":1040,"range":{"start_line":1040,"start_character":42,"end_line":1040,"end_character":49},"updated":"2016-01-15 08:33:13.000000000","message":"s/can not/cannot","commit_id":"cb23ed061bff9d162b4c84dd0fa9aade9c0c5b11"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"23ce50ceeabfbcb4638e9ca97e8bf6c1cd7d8513","unresolved":false,"context_lines":[{"line_number":1037,"context_line":"        except exception.InvalidShare as e:"},{"line_number":1038,"context_line":"            status \u003d {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR}"},{"line_number":1039,"context_line":"            self.db.share_snapshot_update(context, snapshot_id, status)"},{"line_number":1040,"context_line":"            LOG.error(_LE(\"Share snapshot can not be unmanaged: %s.\"),"},{"line_number":1041,"context_line":"                      six.text_type(e))"},{"line_number":1042,"context_line":"            return"},{"line_number":1043,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_ddf8dd4b","line":1040,"range":{"start_line":1040,"start_character":42,"end_line":1040,"end_character":49},"in_reply_to":"da6ed579_9ba448ba","updated":"2016-01-22 05:53:56.000000000","message":"Done","commit_id":"cb23ed061bff9d162b4c84dd0fa9aade9c0c5b11"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":921,"context_line":"                or {}"},{"line_number":922,"context_line":"            )"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":925,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":926,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":927,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_70a6e654","line":924,"range":{"start_line":924,"start_character":15,"end_line":924,"end_character":37},"updated":"2016-02-04 01:24:48.000000000","message":"remove \u0027not shapshot_update or\u0027 it doesn\u0027t add anything","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":921,"context_line":"                or {}"},{"line_number":922,"context_line":"            )"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":925,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":926,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":927,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_47644a48","line":924,"range":{"start_line":924,"start_character":15,"end_line":924,"end_character":37},"in_reply_to":"5a5ae5dd_70a6e654","updated":"2016-02-04 04:00:20.000000000","message":"Done","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":922,"context_line":"            )"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":925,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":926,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":927,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":928,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_f07096de","line":925,"range":{"start_line":925,"start_character":16,"end_line":925,"end_character":69},"updated":"2016-02-04 01:24:48.000000000","message":"this line doesn\u0027t do anything","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":922,"context_line":"            )"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":925,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":926,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":927,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":928,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_e75a1683","line":925,"range":{"start_line":925,"start_character":16,"end_line":925,"end_character":69},"in_reply_to":"5a5ae5dd_f07096de","updated":"2016-02-04 04:00:20.000000000","message":"Hmm, I don\u0027t know why it was there.  Cleaned up the code here.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":923,"context_line":""},{"line_number":924,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":925,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":926,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":927,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"            self._update_quota_usages(context, project_id, {"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_707d86b0","line":926,"range":{"start_line":926,"start_character":16,"end_line":926,"end_character":47},"updated":"2016-02-04 01:24:48.000000000","message":"Don\u0027t need this because the if not snapshot_update.get(\u0027size\u0027) handles this.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":923,"context_line":""},{"line_number":924,"context_line":"            if not snapshot_update or not snapshot_update.get(\u0027size\u0027):"},{"line_number":925,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_update.get(\u0027size\u0027)"},{"line_number":926,"context_line":"                if not snapshot_update[\u0027size\u0027]:"},{"line_number":927,"context_line":"                    snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"            self._update_quota_usages(context, project_id, {"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_a755fe50","line":926,"range":{"start_line":926,"start_character":16,"end_line":926,"end_character":47},"in_reply_to":"5a5ae5dd_707d86b0","updated":"2016-02-04 04:00:20.000000000","message":"Done","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":928,"context_line":""},{"line_number":929,"context_line":"            self._update_quota_usages(context, project_id, {"},{"line_number":930,"context_line":"                \"snapshots\": 1,"},{"line_number":931,"context_line":"                \"snapshot_gigabytes\": snapshot_update[\u0027size\u0027],"},{"line_number":932,"context_line":"            })"},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"            snapshot_update.update({"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_d0123a62","line":931,"updated":"2016-02-04 01:24:48.000000000","message":"FYI - this should be gibibytes, but I think inside the code we\u0027ll keep using gigabytes (which is incorrect or at least ambiguous).","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d281a739b8a9018610f011476afcdc2ba704e49a","unresolved":false,"context_lines":[{"line_number":928,"context_line":""},{"line_number":929,"context_line":"            self._update_quota_usages(context, project_id, {"},{"line_number":930,"context_line":"                \"snapshots\": 1,"},{"line_number":931,"context_line":"                \"snapshot_gigabytes\": snapshot_update[\u0027size\u0027],"},{"line_number":932,"context_line":"            })"},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"            snapshot_update.update({"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_27c82e22","line":931,"in_reply_to":"5a5ae5dd_d0123a62","updated":"2016-02-04 04:00:20.000000000","message":"Ok.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f64bed4bf54e214240ed4844b3a5532e131ae085","unresolved":false,"context_lines":[{"line_number":137,"context_line":"class ShareManager(manager.SchedulerDependentManager):"},{"line_number":138,"context_line":"    \"\"\"Manages NAS storages.\"\"\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, share_driver\u003dNone, service_name\u003dNone, *args, **kwargs):"},{"line_number":143,"context_line":"        \"\"\"Load the driver from args, or from flags.\"\"\""}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_93471f1d","line":140,"range":{"start_line":140,"start_character":24,"end_line":140,"end_character":25},"updated":"2016-02-09 04:25:18.000000000","message":"It seems you need RPC version 1.8, no?","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"415e7717d02dc0ec3cbe7aeb7017db9993f9dcec","unresolved":false,"context_lines":[{"line_number":137,"context_line":"class ShareManager(manager.SchedulerDependentManager):"},{"line_number":138,"context_line":"    \"\"\"Manages NAS storages.\"\"\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, share_driver\u003dNone, service_name\u003dNone, *args, **kwargs):"},{"line_number":143,"context_line":"        \"\"\"Load the driver from args, or from flags.\"\"\""}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_7c5eef13","line":140,"range":{"start_line":140,"start_character":24,"end_line":140,"end_character":25},"in_reply_to":"5a5ae5dd_93471f1d","updated":"2016-02-09 06:10:24.000000000","message":"Good catch.","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f64bed4bf54e214240ed4844b3a5532e131ae085","unresolved":false,"context_lines":[{"line_number":910,"context_line":"            snapshot_update \u003d ("},{"line_number":911,"context_line":"                self.driver.manage_existing_snapshot(snapshot_instance,"},{"line_number":912,"context_line":"                                                     driver_options,"},{"line_number":913,"context_line":"                                                     existing_snapshots)"},{"line_number":914,"context_line":"                or {}"},{"line_number":915,"context_line":"            )"},{"line_number":916,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_f3a2124b","line":913,"range":{"start_line":913,"start_character":53,"end_line":913,"end_character":71},"updated":"2016-02-09 04:25:18.000000000","message":"Why does the driver need to know about other snapshots?","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"415e7717d02dc0ec3cbe7aeb7017db9993f9dcec","unresolved":false,"context_lines":[{"line_number":910,"context_line":"            snapshot_update \u003d ("},{"line_number":911,"context_line":"                self.driver.manage_existing_snapshot(snapshot_instance,"},{"line_number":912,"context_line":"                                                     driver_options,"},{"line_number":913,"context_line":"                                                     existing_snapshots)"},{"line_number":914,"context_line":"                or {}"},{"line_number":915,"context_line":"            )"},{"line_number":916,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_fc9c1f5f","line":913,"range":{"start_line":913,"start_character":53,"end_line":913,"end_character":71},"in_reply_to":"5a5ae5dd_f3a2124b","updated":"2016-02-09 06:10:24.000000000","message":"I added this to address a review comment.  I check whether the to-be-managed snapshot is already managed (should be in existing_snapshots).  Because driver defines driver_options, only driver knows whether existing_snapshots already contains a snapshot with the same driver_options.\n\nhttps://review.openstack.org/#/c/249542/34/manila/share/drivers/generic.py\n\nI\u0027ll add a comment here to explain.","commit_id":"fec536e104344d02f2c0d81a6034ee36604cbfdd"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"a9818938146df7e1ed6790e6998922d030c167cd","unresolved":false,"context_lines":[{"line_number":910,"context_line":"            snapshot_update \u003d ("},{"line_number":911,"context_line":"                self.driver.manage_existing_snapshot(snapshot_instance,"},{"line_number":912,"context_line":"                                                     driver_options,"},{"line_number":913,"context_line":"                                                     existing_snapshots)"},{"line_number":914,"context_line":"                or {}"},{"line_number":915,"context_line":"            )"},{"line_number":916,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3a57f1b5_05ff5e02","line":913,"range":{"start_line":913,"start_character":53,"end_line":913,"end_character":71},"updated":"2016-02-10 00:36:26.000000000","message":"You\u0027re passing Snapshot objects into the driver here.  But I think drivers should only ever see SnapshotInstance objects.","commit_id":"0b005f9bfc498cbbe3ea6440573f57236195f64e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"26fcf3112a7b0d5c582a810af58be1b40a94fb3a","unresolved":false,"context_lines":[{"line_number":910,"context_line":"            snapshot_update \u003d ("},{"line_number":911,"context_line":"                self.driver.manage_existing_snapshot(snapshot_instance,"},{"line_number":912,"context_line":"                                                     driver_options,"},{"line_number":913,"context_line":"                                                     existing_snapshots)"},{"line_number":914,"context_line":"                or {}"},{"line_number":915,"context_line":"            )"},{"line_number":916,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3a57f1b5_2bd82b53","line":913,"range":{"start_line":913,"start_character":53,"end_line":913,"end_character":71},"in_reply_to":"3a57f1b5_05ff5e02","updated":"2016-02-10 02:03:47.000000000","message":"Ok, I\u0027ll change that.","commit_id":"0b005f9bfc498cbbe3ea6440573f57236195f64e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6a440ae2d20dbb80c91c517caddb4b600ba0fe01","unresolved":false,"context_lines":[{"line_number":1302,"context_line":"                                  if all_existing_snapshots else [])"},{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"            for existing_snap in existing_snapshots:"},{"line_number":1305,"context_line":"                if driver_options in existing_snap[\u0027provider_location\u0027]:"},{"line_number":1306,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":1307,"context_line":"                            \"already managed for driver options \""},{"line_number":1308,"context_line":"                            \"%(driver_options)s when trying to \""}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_e46f50c3","line":1305,"range":{"start_line":1305,"start_character":19,"end_line":1305,"end_character":33},"updated":"2016-02-16 19:14:19.000000000","message":"driver_options is a dict.  How can you check if a dict is \"in\" a string?","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c668a51c3fb97b2d6b4676806378ca3deba1289","unresolved":false,"context_lines":[{"line_number":1302,"context_line":"                                  if all_existing_snapshots else [])"},{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"            for existing_snap in existing_snapshots:"},{"line_number":1305,"context_line":"                if driver_options in existing_snap[\u0027provider_location\u0027]:"},{"line_number":1306,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":1307,"context_line":"                            \"already managed for driver options \""},{"line_number":1308,"context_line":"                            \"%(driver_options)s when trying to \""}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_3d192ad8","line":1305,"range":{"start_line":1305,"start_character":19,"end_line":1305,"end_character":33},"in_reply_to":"dae33548_e46f50c3","updated":"2016-02-17 07:44:12.000000000","message":"Use provider_location which is a string now.","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6a440ae2d20dbb80c91c517caddb4b600ba0fe01","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"            )"},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1325,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":1326,"context_line":""},{"line_number":1327,"context_line":"            self._update_quota_usages(context, project_id, {"},{"line_number":1328,"context_line":"                \"snapshots\": 1,"}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_c4ce8cb3","line":1325,"range":{"start_line":1325,"start_character":42,"end_line":1325,"end_character":71},"updated":"2016-02-16 19:14:19.000000000","message":"If a share was resized after the snapshot was taken, this might give the wrong value.  You might at least log a warning here.","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c668a51c3fb97b2d6b4676806378ca3deba1289","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"            )"},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1325,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":1326,"context_line":""},{"line_number":1327,"context_line":"            self._update_quota_usages(context, project_id, {"},{"line_number":1328,"context_line":"                \"snapshots\": 1,"}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_bdaffa28","line":1325,"range":{"start_line":1325,"start_character":42,"end_line":1325,"end_character":71},"in_reply_to":"dae33548_c4ce8cb3","updated":"2016-02-17 07:44:12.000000000","message":"Done","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"        try:"},{"line_number":1288,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1289,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_b847464a","line":1288,"range":{"start_line":1288,"start_character":12,"end_line":1288,"end_character":56},"updated":"2016-02-21 08:20:42.000000000","message":"This check can be done before the db access above.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0bc6afa71a6e8c3608be92df57b03f3211ff37d7","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"        try:"},{"line_number":1288,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1289,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_7ea3f19e","line":1288,"range":{"start_line":1288,"start_character":12,"end_line":1288,"end_character":56},"in_reply_to":"bae84128_4852c1de","updated":"2016-02-25 16:05:13.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"        try:"},{"line_number":1288,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1289,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_cc0a9e1f","line":1288,"range":{"start_line":1288,"start_character":12,"end_line":1288,"end_character":56},"in_reply_to":"bae84128_b847464a","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"        try:"},{"line_number":1288,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1289,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_c6d1d631","line":1288,"range":{"start_line":1288,"start_character":12,"end_line":1288,"end_character":56},"in_reply_to":"bae84128_b847464a","updated":"2016-02-24 18:16:58.000000000","message":"aaand, be done out out try block.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"f8cc8e04e6f392faacfdbc4f00f8095c35c4bf4d","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"        try:"},{"line_number":1288,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1289,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_4852c1de","line":1288,"range":{"start_line":1288,"start_character":12,"end_line":1288,"end_character":56},"in_reply_to":"bae84128_cc0a9e1f","updated":"2016-02-25 13:14:50.000000000","message":"Emmm, it is still in \"try\"-block.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"            if share_server:"},{"line_number":1294,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1295,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1296,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_18759297","line":1293,"range":{"start_line":1293,"start_character":12,"end_line":1293,"end_character":28},"updated":"2016-02-21 08:20:42.000000000","message":"This check needs _get_share_server above, but the other db access can be after this.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"f8cc8e04e6f392faacfdbc4f00f8095c35c4bf4d","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"            if share_server:"},{"line_number":1294,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1295,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1296,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_886209ac","line":1293,"range":{"start_line":1293,"start_character":12,"end_line":1293,"end_character":28},"in_reply_to":"bae84128_0c112652","updated":"2016-02-25 13:14:50.000000000","message":"And here.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"            if share_server:"},{"line_number":1294,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1295,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1296,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_0c112652","line":1293,"range":{"start_line":1293,"start_character":12,"end_line":1293,"end_character":28},"in_reply_to":"bae84128_18759297","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"            if share_server:"},{"line_number":1294,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1295,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1296,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_e6e05afd","line":1293,"range":{"start_line":1293,"start_character":12,"end_line":1293,"end_character":28},"in_reply_to":"bae84128_18759297","updated":"2016-02-24 18:16:58.000000000","message":"same here - does not require to be in try-block.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0bc6afa71a6e8c3608be92df57b03f3211ff37d7","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1291,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"            if share_server:"},{"line_number":1294,"context_line":"                msg \u003d _(\"Manage snapshot is not supported for \""},{"line_number":1295,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1296,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_bead798a","line":1293,"range":{"start_line":1293,"start_character":12,"end_line":1293,"end_character":28},"in_reply_to":"bae84128_886209ac","updated":"2016-02-25 16:05:13.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"bc5c12148641a7cf558a6b7bfd119e9d061b09e1","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            for snap in existing_snapshots:"},{"line_number":1305,"context_line":"                existing_snapshot_instances.extend(snap.get(\u0027instances\u0027))"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"            for existing_inst in existing_snapshot_instances:"},{"line_number":1308,"context_line":"                if (snapshot_instance[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":1309,"context_line":"                        existing_inst[\u0027provider_location\u0027]):"},{"line_number":1310,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":1311,"context_line":"                            \"already managed for provider location \""},{"line_number":1312,"context_line":"                            \"%(provider_location)s when trying to \""},{"line_number":1313,"context_line":"                            \"manage snapshot %(snapshot_id)s.\") % {"},{"line_number":1314,"context_line":"                        \u0027share_snapshot_id\u0027: existing_inst[\u0027snapshot_id\u0027],"},{"line_number":1315,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":1316,"context_line":"                            snapshot_instance[\u0027provider_location\u0027],"},{"line_number":1317,"context_line":"                        \u0027snapshot_id\u0027: snapshot_id"},{"line_number":1318,"context_line":"                    }"},{"line_number":1319,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":1320,"context_line":"                        reason\u003dmsg)"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"            snapshot_update \u003d ("},{"line_number":1323,"context_line":"                self.driver.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_1ca006f4","line":1320,"range":{"start_line":1307,"start_character":12,"end_line":1320,"end_character":35},"updated":"2016-02-19 21:50:02.000000000","message":"This check is done in the API layer.  Is it also needed here?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee3768efdaf75ade166ded056ccd5cac476ddecb","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            for snap in existing_snapshots:"},{"line_number":1305,"context_line":"                existing_snapshot_instances.extend(snap.get(\u0027instances\u0027))"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"            for existing_inst in existing_snapshot_instances:"},{"line_number":1308,"context_line":"                if (snapshot_instance[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":1309,"context_line":"                        existing_inst[\u0027provider_location\u0027]):"},{"line_number":1310,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":1311,"context_line":"                            \"already managed for provider location \""},{"line_number":1312,"context_line":"                            \"%(provider_location)s when trying to \""},{"line_number":1313,"context_line":"                            \"manage snapshot %(snapshot_id)s.\") % {"},{"line_number":1314,"context_line":"                        \u0027share_snapshot_id\u0027: existing_inst[\u0027snapshot_id\u0027],"},{"line_number":1315,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":1316,"context_line":"                            snapshot_instance[\u0027provider_location\u0027],"},{"line_number":1317,"context_line":"                        \u0027snapshot_id\u0027: snapshot_id"},{"line_number":1318,"context_line":"                    }"},{"line_number":1319,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":1320,"context_line":"                        reason\u003dmsg)"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"            snapshot_update \u003d ("},{"line_number":1323,"context_line":"                self.driver.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_fc20c2f9","line":1320,"range":{"start_line":1307,"start_character":12,"end_line":1320,"end_character":35},"in_reply_to":"bae84128_1ca006f4","updated":"2016-02-19 22:05:45.000000000","message":"Only if something happened between the API check and this check in the manager.  I\u0027m fine to remove it if you want.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            for snap in existing_snapshots:"},{"line_number":1305,"context_line":"                existing_snapshot_instances.extend(snap.get(\u0027instances\u0027))"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"            for existing_inst in existing_snapshot_instances:"},{"line_number":1308,"context_line":"                if (snapshot_instance[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":1309,"context_line":"                        existing_inst[\u0027provider_location\u0027]):"},{"line_number":1310,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":1311,"context_line":"                            \"already managed for provider location \""},{"line_number":1312,"context_line":"                            \"%(provider_location)s when trying to \""},{"line_number":1313,"context_line":"                            \"manage snapshot %(snapshot_id)s.\") % {"},{"line_number":1314,"context_line":"                        \u0027share_snapshot_id\u0027: existing_inst[\u0027snapshot_id\u0027],"},{"line_number":1315,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":1316,"context_line":"                            snapshot_instance[\u0027provider_location\u0027],"},{"line_number":1317,"context_line":"                        \u0027snapshot_id\u0027: snapshot_id"},{"line_number":1318,"context_line":"                    }"},{"line_number":1319,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":1320,"context_line":"                        reason\u003dmsg)"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"            snapshot_update \u003d ("},{"line_number":1323,"context_line":"                self.driver.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_be5e07e7","line":1320,"range":{"start_line":1307,"start_character":12,"end_line":1320,"end_character":35},"in_reply_to":"bae84128_98b08245","updated":"2016-02-21 22:56:04.000000000","message":"+1 redundant check.. because the database won\u0027t be updated until this check is made in the API layer..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            for snap in existing_snapshots:"},{"line_number":1305,"context_line":"                existing_snapshot_instances.extend(snap.get(\u0027instances\u0027))"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"            for existing_inst in existing_snapshot_instances:"},{"line_number":1308,"context_line":"                if (snapshot_instance[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":1309,"context_line":"                        existing_inst[\u0027provider_location\u0027]):"},{"line_number":1310,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":1311,"context_line":"                            \"already managed for provider location \""},{"line_number":1312,"context_line":"                            \"%(provider_location)s when trying to \""},{"line_number":1313,"context_line":"                            \"manage snapshot %(snapshot_id)s.\") % {"},{"line_number":1314,"context_line":"                        \u0027share_snapshot_id\u0027: existing_inst[\u0027snapshot_id\u0027],"},{"line_number":1315,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":1316,"context_line":"                            snapshot_instance[\u0027provider_location\u0027],"},{"line_number":1317,"context_line":"                        \u0027snapshot_id\u0027: snapshot_id"},{"line_number":1318,"context_line":"                    }"},{"line_number":1319,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":1320,"context_line":"                        reason\u003dmsg)"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"            snapshot_update \u003d ("},{"line_number":1323,"context_line":"                self.driver.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_564f3b33","line":1320,"range":{"start_line":1307,"start_character":12,"end_line":1320,"end_character":35},"in_reply_to":"bae84128_be5e07e7","updated":"2016-02-24 20:50:57.000000000","message":"Removed.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            for snap in existing_snapshots:"},{"line_number":1305,"context_line":"                existing_snapshot_instances.extend(snap.get(\u0027instances\u0027))"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"            for existing_inst in existing_snapshot_instances:"},{"line_number":1308,"context_line":"                if (snapshot_instance[\u0027provider_location\u0027] \u003d\u003d"},{"line_number":1309,"context_line":"                        existing_inst[\u0027provider_location\u0027]):"},{"line_number":1310,"context_line":"                    msg \u003d _(\"A share snapshot %(share_snapshot_id)s is \""},{"line_number":1311,"context_line":"                            \"already managed for provider location \""},{"line_number":1312,"context_line":"                            \"%(provider_location)s when trying to \""},{"line_number":1313,"context_line":"                            \"manage snapshot %(snapshot_id)s.\") % {"},{"line_number":1314,"context_line":"                        \u0027share_snapshot_id\u0027: existing_inst[\u0027snapshot_id\u0027],"},{"line_number":1315,"context_line":"                        \u0027provider_location\u0027:"},{"line_number":1316,"context_line":"                            snapshot_instance[\u0027provider_location\u0027],"},{"line_number":1317,"context_line":"                        \u0027snapshot_id\u0027: snapshot_id"},{"line_number":1318,"context_line":"                    }"},{"line_number":1319,"context_line":"                    raise exception.ManageInvalidShareSnapshot("},{"line_number":1320,"context_line":"                        reason\u003dmsg)"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"            snapshot_update \u003d ("},{"line_number":1323,"context_line":"                self.driver.manage_existing_snapshot("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_98b08245","line":1320,"range":{"start_line":1307,"start_character":12,"end_line":1320,"end_character":35},"in_reply_to":"bae84128_fc20c2f9","updated":"2016-02-21 08:20:42.000000000","message":"the earlier checks were redundant too","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1330,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":1331,"context_line":"                LOG.warning(_LW(\"Cannot get the size of the snapshot \""},{"line_number":1332,"context_line":"                                \"%(snapshot_id)s. Use the size of \""},{"line_number":1333,"context_line":"                                \"the share instead.\"),"},{"line_number":1334,"context_line":"                            {\u0027snapshot_id\u0027: snapshot_id})"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_b8b58632","line":1331,"range":{"start_line":1331,"start_character":20,"end_line":1331,"end_character":31},"updated":"2016-02-21 08:20:42.000000000","message":"seems like info","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1330,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":1331,"context_line":"                LOG.warning(_LW(\"Cannot get the size of the snapshot \""},{"line_number":1332,"context_line":"                                \"%(snapshot_id)s. Use the size of \""},{"line_number":1333,"context_line":"                                \"the share instead.\"),"},{"line_number":1334,"context_line":"                            {\u0027snapshot_id\u0027: snapshot_id})"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_ec7a0276","line":1331,"range":{"start_line":1331,"start_character":20,"end_line":1331,"end_character":31},"in_reply_to":"bae84128_b8b58632","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":1329,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1330,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":1331,"context_line":"                LOG.warning(_LW(\"Cannot get the size of the snapshot \""},{"line_number":1332,"context_line":"                                \"%(snapshot_id)s. Use the size of \""},{"line_number":1333,"context_line":"                                \"the share instead.\"),"},{"line_number":1334,"context_line":"                            {\u0027snapshot_id\u0027: snapshot_id})"},{"line_number":1335,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_3ecf9780","line":1332,"range":{"start_line":1332,"start_character":50,"end_line":1332,"end_character":53},"updated":"2016-02-21 22:56:04.000000000","message":"s/Use/Using","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1329,"context_line":"            if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1330,"context_line":"                snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"},{"line_number":1331,"context_line":"                LOG.warning(_LW(\"Cannot get the size of the snapshot \""},{"line_number":1332,"context_line":"                                \"%(snapshot_id)s. Use the size of \""},{"line_number":1333,"context_line":"                                \"the share instead.\"),"},{"line_number":1334,"context_line":"                            {\u0027snapshot_id\u0027: snapshot_id})"},{"line_number":1335,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_6c8f1275","line":1332,"range":{"start_line":1332,"start_character":50,"end_line":1332,"end_character":53},"in_reply_to":"bae84128_3ecf9780","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":1352,"context_line":"            # quotas."},{"line_number":1353,"context_line":"            self.db.share_snapshot_update("},{"line_number":1354,"context_line":"                context, snapshot_id,"},{"line_number":1355,"context_line":"                {\u0027status\u0027: constants.STATUS_MANAGE_ERROR, \u0027size\u0027: 1})"},{"line_number":1356,"context_line":"            raise"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    def _update_quota_usages(self, context, project_id, usages):"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_d8e84a13","line":1355,"range":{"start_line":1355,"start_character":65,"end_line":1355,"end_character":67},"updated":"2016-02-21 08:20:42.000000000","message":"I think it makes more sense for a failed manage to have size 0.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1352,"context_line":"            # quotas."},{"line_number":1353,"context_line":"            self.db.share_snapshot_update("},{"line_number":1354,"context_line":"                context, snapshot_id,"},{"line_number":1355,"context_line":"                {\u0027status\u0027: constants.STATUS_MANAGE_ERROR, \u0027size\u0027: 1})"},{"line_number":1356,"context_line":"            raise"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    def _update_quota_usages(self, context, project_id, usages):"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_4c4fae33","line":1355,"range":{"start_line":1355,"start_character":65,"end_line":1355,"end_character":67},"in_reply_to":"bae84128_d8e84a13","updated":"2016-02-24 20:50:57.000000000","message":"See Valerity\u0027s notes above.  I\u0027m handling it the same way as manage share.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":1441,"context_line":"            context, snapshot_ref.instance[\u0027id\u0027], with_share_data\u003dTrue"},{"line_number":1442,"context_line":"        )"},{"line_number":1443,"context_line":""},{"line_number":1444,"context_line":"        if context.project_id !\u003d snapshot_ref[\u0027project_id\u0027]:"},{"line_number":1445,"context_line":"            project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1446,"context_line":"        else:"},{"line_number":1447,"context_line":"            project_id \u003d context.project_id"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        try:"},{"line_number":1450,"context_line":"            if self.driver.driver_handles_share_servers:"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_58cb9aa5","line":1447,"range":{"start_line":1444,"start_character":8,"end_line":1447,"end_character":43},"updated":"2016-02-21 08:20:42.000000000","message":"don\u0027t need if/else. Just project_id \u003d snapshot_ref[\u0027project_id\u0027]  (else they are \u003d\u003d anyway)","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1441,"context_line":"            context, snapshot_ref.instance[\u0027id\u0027], with_share_data\u003dTrue"},{"line_number":1442,"context_line":"        )"},{"line_number":1443,"context_line":""},{"line_number":1444,"context_line":"        if context.project_id !\u003d snapshot_ref[\u0027project_id\u0027]:"},{"line_number":1445,"context_line":"            project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1446,"context_line":"        else:"},{"line_number":1447,"context_line":"            project_id \u003d context.project_id"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        try:"},{"line_number":1450,"context_line":"            if self.driver.driver_handles_share_servers:"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_acd59a1c","line":1447,"range":{"start_line":1444,"start_character":8,"end_line":1447,"end_character":43},"in_reply_to":"bae84128_58cb9aa5","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"8bd008535c8404380dfb97d1ac120403b2f8976c","unresolved":false,"context_lines":[{"line_number":1447,"context_line":"            project_id \u003d context.project_id"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        try:"},{"line_number":1450,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1451,"context_line":"                msg \u003d _(\"Unmanage snapshot is not supported for \""},{"line_number":1452,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1453,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"            if share_server:"},{"line_number":1456,"context_line":"                msg \u003d _(\"Unmanage snapshot is not supported for \""},{"line_number":1457,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1458,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"            self.driver.unmanage_snapshot(snapshot_instance)"},{"line_number":1461,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_38ce96b4","line":1458,"range":{"start_line":1450,"start_character":1,"end_line":1458,"end_character":64},"updated":"2016-02-21 08:20:42.000000000","message":"same comments about doing this type of check early to avoid db access that would be wasted.  Also same question about redundant checking.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1447,"context_line":"            project_id \u003d context.project_id"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        try:"},{"line_number":1450,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1451,"context_line":"                msg \u003d _(\"Unmanage snapshot is not supported for \""},{"line_number":1452,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1453,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"            if share_server:"},{"line_number":1456,"context_line":"                msg \u003d _(\"Unmanage snapshot is not supported for \""},{"line_number":1457,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1458,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"            self.driver.unmanage_snapshot(snapshot_instance)"},{"line_number":1461,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_6c48b2cc","line":1458,"range":{"start_line":1450,"start_character":1,"end_line":1458,"end_character":64},"in_reply_to":"bae84128_38ce96b4","updated":"2016-02-24 20:50:57.000000000","message":"Moved above.  Following the tradition in unmanage share to do these checks.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"            self.driver.unmanage_snapshot(snapshot_instance)"},{"line_number":1461,"context_line":""},{"line_number":1462,"context_line":"        except exception.InvalidShare as e:"},{"line_number":1463,"context_line":"            status \u003d {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR}"},{"line_number":1464,"context_line":"            self.db.share_snapshot_update(context, snapshot_id, status)"},{"line_number":1465,"context_line":"            LOG.error(_LE(\"Share snapshot cannot be unmanaged: %s.\"),"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_3ea4b7a4","line":1462,"range":{"start_line":1462,"start_character":25,"end_line":1462,"end_character":37},"updated":"2016-02-21 22:56:04.000000000","message":"The exception you\u0027re expecting is: UnmanageInvalidShareSnapshot according to the driver docstring here:\n\nhttps://review.openstack.org/#/c/249542/64/manila/share/driver.py","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"            self.driver.unmanage_snapshot(snapshot_instance)"},{"line_number":1461,"context_line":""},{"line_number":1462,"context_line":"        except exception.InvalidShare as e:"},{"line_number":1463,"context_line":"            status \u003d {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR}"},{"line_number":1464,"context_line":"            self.db.share_snapshot_update(context, snapshot_id, status)"},{"line_number":1465,"context_line":"            LOG.error(_LE(\"Share snapshot cannot be unmanaged: %s.\"),"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_e7b21b05","line":1462,"range":{"start_line":1462,"start_character":25,"end_line":1462,"end_character":37},"in_reply_to":"bae84128_3ea4b7a4","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":1466,"context_line":"                      six.text_type(e))"},{"line_number":1467,"context_line":"            return"},{"line_number":1468,"context_line":""},{"line_number":1469,"context_line":"        try:"},{"line_number":1470,"context_line":"            reservations \u003d QUOTAS.reserve("},{"line_number":1471,"context_line":"                context,"},{"line_number":1472,"context_line":"                project_id\u003dproject_id,"},{"line_number":1473,"context_line":"                snapshots\u003d-1,"},{"line_number":1474,"context_line":"                snapshot_gigabytes\u003d-snapshot_ref[\u0027size\u0027])"},{"line_number":1475,"context_line":"            QUOTAS.commit(context, reservations, project_id\u003dproject_id)"},{"line_number":1476,"context_line":"        except Exception as e:"},{"line_number":1477,"context_line":"            # Note(imalinovskiy):"},{"line_number":1478,"context_line":"            # Quota reservation errors here are not fatal, because"},{"line_number":1479,"context_line":"            # unmanage is administrator API and he/she could update user"},{"line_number":1480,"context_line":"            # quota usages later if it\u0027s required."},{"line_number":1481,"context_line":"            LOG.warning(_LW(\"Failed to update quota usages: %s.\"),"},{"line_number":1482,"context_line":"                        six.text_type(e))"},{"line_number":1483,"context_line":""},{"line_number":1484,"context_line":"        self.db.share_snapshot_destroy(context, snapshot_id)"},{"line_number":1485,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_7eae3f86","line":1482,"range":{"start_line":1469,"start_character":8,"end_line":1482,"end_character":41},"updated":"2016-02-21 22:56:04.000000000","message":"thinking out loud: i think we should wrap all these reservation calls with a utils.retry and make a separate helper for this.\n\nTaking a note to do that.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"            model_update \u003d self.driver.create_snapshot("},{"line_number":1551,"context_line":"                context, snapshot_instance, share_server\u003dshare_server)"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"            if model_update:"},{"line_number":1554,"context_line":"                self.db.share_snapshot_instance_update("},{"line_number":1555,"context_line":"                    context, snapshot_instance_id, model_update)"},{"line_number":1556,"context_line":"        except Exception:"},{"line_number":1557,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1558,"context_line":"                self.db.share_snapshot_instance_update("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_deb30be8","line":1555,"range":{"start_line":1553,"start_character":28,"end_line":1555,"end_character":64},"updated":"2016-02-21 22:56:04.000000000","message":"This change is unrelated to this patch. I understand this code was buggy, ran into a similar issue with snapshots and replication.. could you please move this fix to another patch?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"            model_update \u003d self.driver.create_snapshot("},{"line_number":1551,"context_line":"                context, snapshot_instance, share_server\u003dshare_server)"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"            if model_update:"},{"line_number":1554,"context_line":"                self.db.share_snapshot_instance_update("},{"line_number":1555,"context_line":"                    context, snapshot_instance_id, model_update)"},{"line_number":1556,"context_line":"        except Exception:"},{"line_number":1557,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1558,"context_line":"                self.db.share_snapshot_instance_update("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_c7b1d7e1","line":1555,"range":{"start_line":1553,"start_character":28,"end_line":1555,"end_character":64},"in_reply_to":"bae84128_deb30be8","updated":"2016-02-24 20:50:57.000000000","message":"This is related to this patch.  Otherwise I won\u0027t run into this problem while testing this patch.  When create snapshot, the snapshot instance table will be updated.  Since I added a new field, it directly affects the snapshot instance update.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85b1f85149eac0b0cd3916653080064c184532b6","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"    @add_hooks"},{"line_number":1406,"context_line":"    @utils.require_driver_initialized"},{"line_number":1407,"context_line":"    def unmanage_snapshot(self, context, snapshot_id):"},{"line_number":1408,"context_line":"        try:"},{"line_number":1409,"context_line":"            if self.driver.driver_handles_share_servers:"},{"line_number":1410,"context_line":"                msg \u003d _(\"Unmanage snapshot is not supported for \""},{"line_number":1411,"context_line":"                        \"driver_handles_share_servers\u003dTrue mode.\")"},{"line_number":1412,"context_line":"                raise exception.InvalidDriverMode(driver_mode\u003dmsg)"},{"line_number":1413,"context_line":"        except exception.InvalidDriverMode as e:"},{"line_number":1414,"context_line":"            status \u003d {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR}"},{"line_number":1415,"context_line":"            self.db.share_snapshot_update(context, snapshot_id, status)"},{"line_number":1416,"context_line":"            LOG.error(_LE(\"Share snapshot cannot be unmanaged: %s.\"),"},{"line_number":1417,"context_line":"                      six.text_type(e))"},{"line_number":1418,"context_line":"            return"},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"        context \u003d context.elevated()"},{"line_number":1421,"context_line":"        snapshot_ref \u003d self.db.share_snapshot_get(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":69,"id":"9aed3d3a_25935aa5","line":1418,"range":{"start_line":1408,"start_character":8,"end_line":1418,"end_character":18},"updated":"2016-02-25 17:21:55.000000000","message":"No need to use try block here.","commit_id":"739037eee6a22dc8a3a9eb4a0541aa9347beefd5"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85b1f85149eac0b0cd3916653080064c184532b6","unresolved":false,"context_lines":[{"line_number":1429,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1430,"context_line":""},{"line_number":1431,"context_line":"        try:"},{"line_number":1432,"context_line":"            if share_server:"},{"line_number":1433,"context_line":"                msg \u003d _(\"Unmanage snapshot is not supported for \""},{"line_number":1434,"context_line":"                        \"share snapshots with share servers.\")"},{"line_number":1435,"context_line":"                raise exception.InvalidShareSnapshot(reason\u003dmsg)"},{"line_number":1436,"context_line":""},{"line_number":1437,"context_line":"            self.driver.unmanage_snapshot(snapshot_instance)"},{"line_number":1438,"context_line":""}],"source_content_type":"text/x-python","patch_set":69,"id":"9aed3d3a_05f3b60b","line":1435,"range":{"start_line":1432,"start_character":12,"end_line":1435,"end_character":64},"updated":"2016-02-25 17:21:55.000000000","message":"This should be out of try block too.","commit_id":"739037eee6a22dc8a3a9eb4a0541aa9347beefd5"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"31d71dc270a4f295679702cb445f6ca34569af61","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        )"},{"line_number":1301,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"        snapshot_update \u003d ("},{"line_number":1304,"context_line":"            self.driver.manage_existing_snapshot("},{"line_number":1305,"context_line":"                snapshot_instance,"},{"line_number":1306,"context_line":"                driver_options)"},{"line_number":1307,"context_line":"            or {}"},{"line_number":1308,"context_line":"        )"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1311,"context_line":"            snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_e1731db3","line":1308,"range":{"start_line":1303,"start_character":7,"end_line":1308,"end_character":9},"updated":"2016-02-25 20:24:45.000000000","message":"I found a big try/catch block in previous patches, but no try/catch block around here. Where is status\u003dconstants.STATUS_MANAGE_ERROR being set if this method fails?","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"89971c4f03c6528bccb68628221b868bd60493d2","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        )"},{"line_number":1301,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"        snapshot_update \u003d ("},{"line_number":1304,"context_line":"            self.driver.manage_existing_snapshot("},{"line_number":1305,"context_line":"                snapshot_instance,"},{"line_number":1306,"context_line":"                driver_options)"},{"line_number":1307,"context_line":"            or {}"},{"line_number":1308,"context_line":"        )"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1311,"context_line":"            snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_a54638bd","line":1308,"range":{"start_line":1303,"start_character":7,"end_line":1308,"end_character":9},"in_reply_to":"9aed3d3a_175e3ae9","updated":"2016-02-25 23:05:05.000000000","message":"whenever raising an exception that explodes out of this method, status should be set to constants.STATUS_MANAGE_ERROR","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ab65925ddcf1ed4b8cd1f20ab6a4cac9a5275ad7","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        )"},{"line_number":1301,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"        snapshot_update \u003d ("},{"line_number":1304,"context_line":"            self.driver.manage_existing_snapshot("},{"line_number":1305,"context_line":"                snapshot_instance,"},{"line_number":1306,"context_line":"                driver_options)"},{"line_number":1307,"context_line":"            or {}"},{"line_number":1308,"context_line":"        )"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1311,"context_line":"            snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_b7e4ae3b","line":1308,"range":{"start_line":1303,"start_character":7,"end_line":1308,"end_character":9},"in_reply_to":"9aed3d3a_31738eb3","updated":"2016-02-25 22:10:43.000000000","message":"Wait, wait, wait. Valeriy didn\u0027t say to remove \"driver call\" out of try block. Original msg was done for condition \"if self.driver.driver_handles_share_servers\".","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"874a3a66e5455f792eb620f9f033b24ecbb36cec","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        )"},{"line_number":1301,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"        snapshot_update \u003d ("},{"line_number":1304,"context_line":"            self.driver.manage_existing_snapshot("},{"line_number":1305,"context_line":"                snapshot_instance,"},{"line_number":1306,"context_line":"                driver_options)"},{"line_number":1307,"context_line":"            or {}"},{"line_number":1308,"context_line":"        )"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1311,"context_line":"            snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_0909f695","line":1308,"range":{"start_line":1303,"start_character":7,"end_line":1308,"end_character":9},"in_reply_to":"9aed3d3a_a54638bd","updated":"2016-02-26 03:02:20.000000000","message":"Done","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"92db08f51e0134c15c522008910ab8e5413f599e","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        )"},{"line_number":1301,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"        snapshot_update \u003d ("},{"line_number":1304,"context_line":"            self.driver.manage_existing_snapshot("},{"line_number":1305,"context_line":"                snapshot_instance,"},{"line_number":1306,"context_line":"                driver_options)"},{"line_number":1307,"context_line":"            or {}"},{"line_number":1308,"context_line":"        )"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1311,"context_line":"            snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_175e3ae9","line":1308,"range":{"start_line":1303,"start_character":7,"end_line":1308,"end_character":9},"in_reply_to":"9aed3d3a_b7e4ae3b","updated":"2016-02-25 22:11:46.000000000","message":"https://review.openstack.org/#/c/249542/64..70/manila/share/manager.py","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f01fd80e5fe8cd0314141ee145f16b75f5a45a03","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        )"},{"line_number":1301,"context_line":"        project_id \u003d snapshot_ref[\u0027project_id\u0027]"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"        snapshot_update \u003d ("},{"line_number":1304,"context_line":"            self.driver.manage_existing_snapshot("},{"line_number":1305,"context_line":"                snapshot_instance,"},{"line_number":1306,"context_line":"                driver_options)"},{"line_number":1307,"context_line":"            or {}"},{"line_number":1308,"context_line":"        )"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if not snapshot_update.get(\u0027size\u0027):"},{"line_number":1311,"context_line":"            snapshot_update[\u0027size\u0027] \u003d snapshot_ref[\u0027share\u0027][\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_31738eb3","line":1308,"range":{"start_line":1303,"start_character":7,"end_line":1308,"end_character":9},"in_reply_to":"9aed3d3a_e1731db3","updated":"2016-02-25 21:26:41.000000000","message":"This is removed to address Valeriy\u0027s concerns.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":1493,"context_line":"        except exception.UnmanageInvalidShareSnapshot as e:"},{"line_number":1494,"context_line":"            self.db.share_snapshot_update(context, snapshot_id, status)"},{"line_number":1495,"context_line":"            LOG.error(_LE(\"Share snapshot cannot be unmanaged: %s.\"),"},{"line_number":1496,"context_line":"                      six.text_type(e))"},{"line_number":1497,"context_line":"            return"},{"line_number":1498,"context_line":""},{"line_number":1499,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_6295f4dc","line":1496,"range":{"start_line":1496,"start_character":22,"end_line":1496,"end_character":38},"updated":"2016-02-27 06:28:06.000000000","message":"I don\u0027t think six.text_type helps here","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":1493,"context_line":"        except exception.UnmanageInvalidShareSnapshot as e:"},{"line_number":1494,"context_line":"            self.db.share_snapshot_update(context, snapshot_id, status)"},{"line_number":1495,"context_line":"            LOG.error(_LE(\"Share snapshot cannot be unmanaged: %s.\"),"},{"line_number":1496,"context_line":"                      six.text_type(e))"},{"line_number":1497,"context_line":"            return"},{"line_number":1498,"context_line":""},{"line_number":1499,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_269017ec","line":1496,"range":{"start_line":1496,"start_character":22,"end_line":1496,"end_character":38},"in_reply_to":"9aed3d3a_6295f4dc","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":1509,"context_line":"            # unmanage is administrator API and he/she could update user"},{"line_number":1510,"context_line":"            # quota usages later if it\u0027s required."},{"line_number":1511,"context_line":"            LOG.warning(_LW(\"Failed to update quota usages: %s.\"),"},{"line_number":1512,"context_line":"                        six.text_type(e))"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"        self.db.share_snapshot_destroy(context, snapshot_id)"},{"line_number":1515,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_4290b0ec","line":1512,"range":{"start_line":1512,"start_character":24,"end_line":1512,"end_character":40},"updated":"2016-02-27 06:28:06.000000000","message":"or here","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":1509,"context_line":"            # unmanage is administrator API and he/she could update user"},{"line_number":1510,"context_line":"            # quota usages later if it\u0027s required."},{"line_number":1511,"context_line":"            LOG.warning(_LW(\"Failed to update quota usages: %s.\"),"},{"line_number":1512,"context_line":"                        six.text_type(e))"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"        self.db.share_snapshot_destroy(context, snapshot_id)"},{"line_number":1515,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_66c05fe1","line":1512,"range":{"start_line":1512,"start_character":24,"end_line":1512,"end_character":40},"in_reply_to":"9aed3d3a_4290b0ec","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"}],"manila/share/rpcapi.py":[{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            migrate_share()"},{"line_number":46,"context_line":"            get_migration_info()"},{"line_number":47,"context_line":"            get_driver_migration_info()"},{"line_number":48,"context_line":"        1.7 - Add manage_snapshot() and unmanage_snapshot methods"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_e1d73eeb","line":48,"range":{"start_line":48,"start_character":56,"end_line":48,"end_character":57},"updated":"2016-01-20 11:40:11.000000000","message":"Please add parenthesis ().","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            migrate_share()"},{"line_number":46,"context_line":"            get_migration_info()"},{"line_number":47,"context_line":"            get_driver_migration_info()"},{"line_number":48,"context_line":"        1.7 - Add manage_snapshot() and unmanage_snapshot methods"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_bdf2c9d0","line":48,"range":{"start_line":48,"start_character":56,"end_line":48,"end_character":57},"in_reply_to":"ba63e191_e1d73eeb","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"914b22574be5fbd1634e10cf441ad0e08f2f818f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                        driver_options\u003dNone):"},{"line_number":89,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":90,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.7\u0027)"},{"line_number":91,"context_line":"        cctxt.cast(ctxt,"},{"line_number":92,"context_line":"                   \u0027manage_snapshot\u0027,"},{"line_number":93,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":94,"context_line":"                   driver_options\u003ddriver_options)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a5ae5dd_7316f0f2","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":13},"updated":"2016-02-04 01:24:48.000000000","message":"if this https://review.openstack.org/#/c/271004/5 lands, please update your ctxt and cctxt.","commit_id":"5a731879b5c004c18cecdae545c88a04a663d069"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def manage_snapshot(self, ctxt, snapshot, host,"},{"line_number":91,"context_line":"                        driver_options\u003dNone):"},{"line_number":92,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":93,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.9\u0027)"},{"line_number":94,"context_line":"        cctxt.cast(ctxt,"},{"line_number":95,"context_line":"                   \u0027manage_snapshot\u0027,"},{"line_number":96,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":97,"context_line":"                   driver_options\u003ddriver_options)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def unmanage_snapshot(self, ctxt, snapshot, host):"},{"line_number":100,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":101,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.9\u0027)"},{"line_number":102,"context_line":"        cctxt.cast(ctxt, \u0027unmanage_snapshot\u0027, snapshot_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def delete_share_instance(self, context, share_instance):"},{"line_number":105,"context_line":"        host \u003d utils.extract_host(share_instance[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_5ec09b2a","line":102,"range":{"start_line":92,"start_character":8,"end_line":102,"end_character":73},"updated":"2016-02-21 22:56:04.000000000","message":"This file was recently modified to correct these ctxt, cctxt usages. could you update these methods to follow that style?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def manage_snapshot(self, ctxt, snapshot, host,"},{"line_number":91,"context_line":"                        driver_options\u003dNone):"},{"line_number":92,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":93,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.9\u0027)"},{"line_number":94,"context_line":"        cctxt.cast(ctxt,"},{"line_number":95,"context_line":"                   \u0027manage_snapshot\u0027,"},{"line_number":96,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":97,"context_line":"                   driver_options\u003ddriver_options)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def unmanage_snapshot(self, ctxt, snapshot, host):"},{"line_number":100,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":101,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.9\u0027)"},{"line_number":102,"context_line":"        cctxt.cast(ctxt, \u0027unmanage_snapshot\u0027, snapshot_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def delete_share_instance(self, context, share_instance):"},{"line_number":105,"context_line":"        host \u003d utils.extract_host(share_instance[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_86750e34","line":102,"range":{"start_line":92,"start_character":8,"end_line":102,"end_character":73},"in_reply_to":"bae84128_5ec09b2a","updated":"2016-02-24 18:16:58.000000000","message":"+1","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def manage_snapshot(self, ctxt, snapshot, host,"},{"line_number":91,"context_line":"                        driver_options\u003dNone):"},{"line_number":92,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":93,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.9\u0027)"},{"line_number":94,"context_line":"        cctxt.cast(ctxt,"},{"line_number":95,"context_line":"                   \u0027manage_snapshot\u0027,"},{"line_number":96,"context_line":"                   snapshot_id\u003dsnapshot[\u0027id\u0027],"},{"line_number":97,"context_line":"                   driver_options\u003ddriver_options)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def unmanage_snapshot(self, ctxt, snapshot, host):"},{"line_number":100,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":101,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.9\u0027)"},{"line_number":102,"context_line":"        cctxt.cast(ctxt, \u0027unmanage_snapshot\u0027, snapshot_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def delete_share_instance(self, context, share_instance):"},{"line_number":105,"context_line":"        host \u003d utils.extract_host(share_instance[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_47a4a749","line":102,"range":{"start_line":92,"start_character":8,"end_line":102,"end_character":73},"in_reply_to":"bae84128_5ec09b2a","updated":"2016-02-24 20:50:57.000000000","message":"I actually don\u0027t know why the parameter is changed to \"context\".  There is a potential conflict if we import context in this file.  We don\u0027t right now, so it is not a problem now.  I vaguely remember someone did an opposite change in Cinder a while back.\n\nAnyway, I changed it.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/tests/api/v1/test_snapshot_manage.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2fc9f13bd76db00d735f5e741e385c77d57d82dc","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"@ddt.ddt"},{"line_number":39,"context_line":"class SnapshotManageTest(test.TestCase):"},{"line_number":40,"context_line":"    \"\"\"Snapshote Manage Test.\"\"\""},{"line_number":41,"context_line":"    def setUp(self):"},{"line_number":42,"context_line":"        super(SnapshotManageTest, self).setUp()"},{"line_number":43,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_9ae107d3","line":40,"updated":"2015-12-16 11:59:15.000000000","message":"s/Snapshote/Snapshot","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"@ddt.ddt"},{"line_number":39,"context_line":"class SnapshotManageTest(test.TestCase):"},{"line_number":40,"context_line":"    \"\"\"Snapshote Manage Test.\"\"\""},{"line_number":41,"context_line":"    def setUp(self):"},{"line_number":42,"context_line":"        super(SnapshotManageTest, self).setUp()"},{"line_number":43,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_40e382a4","line":40,"in_reply_to":"5a710552_9ae107d3","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.context \u003d self.request.environ[\u0027manila.context\u0027]"},{"line_number":51,"context_line":"        self.mock_policy_check \u003d self.mock_object("},{"line_number":52,"context_line":"            policy, \u0027check_policy\u0027, mock.Mock(return_value\u003dTrue))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @ddt.data({},"},{"line_number":55,"context_line":"              {\u0027snapshots\u0027: {}},"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_11741acd","line":52,"updated":"2015-12-16 13:29:55.000000000","message":"+1 for mocking the policy check.","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        body \u003d get_fake_manage_body("},{"line_number":68,"context_line":"            share_id\u003d\u0027fake\u0027, driver_options\u003d{\u0027volume_snapshot_id\u0027: \u0027fake\u0027})"},{"line_number":69,"context_line":"        error \u003d mock.Mock(side_effect\u003dexception.PolicyNotAuthorized(action\u003d\u0027\u0027))"},{"line_number":70,"context_line":"        self.mock_object(share_api.API, \u0027manage_snapshot\u0027, error)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.assertRaises(webob.exc.HTTPForbidden,"},{"line_number":73,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_ac4cc970","line":70,"updated":"2015-12-16 13:29:55.000000000","message":"Will be an invalid test case in its present form if you remove the policy check from share_api.API\n\nYou could rewrite this test by injecting the side_effect directly to policy.py\u0027s check_policy..","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        body \u003d get_fake_manage_body("},{"line_number":68,"context_line":"            share_id\u003d\u0027fake\u0027, driver_options\u003d{\u0027volume_snapshot_id\u0027: \u0027fake\u0027})"},{"line_number":69,"context_line":"        error \u003d mock.Mock(side_effect\u003dexception.PolicyNotAuthorized(action\u003d\u0027\u0027))"},{"line_number":70,"context_line":"        self.mock_object(share_api.API, \u0027manage_snapshot\u0027, error)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.assertRaises(webob.exc.HTTPForbidden,"},{"line_number":73,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_00f01a66","line":70,"in_reply_to":"5a710552_ac4cc970","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        body \u003d get_fake_manage_body("},{"line_number":126,"context_line":"            share_id\u003d\u0027fake\u0027, driver_options\u003d{\u0027volume_snapshot_id\u0027: \u0027fake\u0027})"},{"line_number":127,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":128,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":131,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_6c5fc1e5","line":128,"updated":"2015-12-16 13:29:55.000000000","message":"Could add lower version here explicitly?","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        body \u003d get_fake_manage_body("},{"line_number":126,"context_line":"            share_id\u003d\u0027fake\u0027, driver_options\u003d{\u0027volume_snapshot_id\u0027: \u0027fake\u0027})"},{"line_number":127,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":128,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":131,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_80040a4a","line":128,"in_reply_to":"5a710552_6c5fc1e5","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"}],"manila/tests/api/v1/test_snapshot_unmanage.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2fc9f13bd76db00d735f5e741e385c77d57d82dc","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@ddt.ddt"},{"line_number":31,"context_line":"class SnapshotUnmanageTest(test.TestCase):"},{"line_number":32,"context_line":"    \"\"\"Snapshote Unmanage Test.\"\"\""},{"line_number":33,"context_line":"    def setUp(self):"},{"line_number":34,"context_line":"        super(SnapshotUnmanageTest, self).setUp()"},{"line_number":35,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_7a2c5b02","line":32,"updated":"2015-12-16 11:59:15.000000000","message":"s/Snapshote/Snapshot","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@ddt.ddt"},{"line_number":31,"context_line":"class SnapshotUnmanageTest(test.TestCase):"},{"line_number":32,"context_line":"    \"\"\"Snapshote Unmanage Test.\"\"\""},{"line_number":33,"context_line":"    def setUp(self):"},{"line_number":34,"context_line":"        super(SnapshotUnmanageTest, self).setUp()"},{"line_number":35,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_0097baec","line":32,"in_reply_to":"5a710552_7a2c5b02","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        snapshot_id \u003d \u0027fake\u0027"},{"line_number":158,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":159,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":160,"context_line":"            use_admin_context\u003dTrue)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":163,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_ac04c9bf","line":160,"updated":"2015-12-16 13:29:55.000000000","message":"same here..","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e1854df60687e2448178e7b69d71029d678ae663","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        snapshot_id \u003d \u0027fake\u0027"},{"line_number":158,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":159,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":160,"context_line":"            use_admin_context\u003dTrue)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":163,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_808baac2","line":160,"in_reply_to":"5a710552_ac04c9bf","updated":"2015-12-19 02:39:15.000000000","message":"Done","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"}],"manila/tests/api/v2/test_share_snapshots.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5ff88d26f087bd3247391552068280a524a9d289","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def test_snapshot_show(self):"},{"line_number":149,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/snapshots/200\u0027)"},{"line_number":150,"context_line":"        res_dict \u003d self.controller.show(req, 200)"},{"line_number":151,"context_line":"        expected \u003d {"},{"line_number":152,"context_line":"            \u0027snapshot\u0027: {"},{"line_number":153,"context_line":"                \u0027id\u0027: 200,"},{"line_number":154,"context_line":"                \u0027share_id\u0027: \u0027fakeshareid\u0027,"},{"line_number":155,"context_line":"                \u0027share_size\u0027: 1,"},{"line_number":156,"context_line":"                \u0027created_at\u0027: datetime.datetime(1, 1, 1, 1, 1, 1),"},{"line_number":157,"context_line":"                \u0027status\u0027: \u0027fakesnapstatus\u0027,"},{"line_number":158,"context_line":"                \u0027name\u0027: \u0027displaysnapname\u0027,"},{"line_number":159,"context_line":"                \u0027size\u0027: 1,"},{"line_number":160,"context_line":"                \u0027description\u0027: \u0027displaysnapdesc\u0027,"},{"line_number":161,"context_line":"                \u0027share_proto\u0027: \u0027fakesnapproto\u0027,"},{"line_number":162,"context_line":"                \u0027links\u0027: ["},{"line_number":163,"context_line":"                    {"},{"line_number":164,"context_line":"                        \u0027href\u0027: \u0027http://localhost/v1/fake/snapshots/200\u0027,"},{"line_number":165,"context_line":"                        \u0027rel\u0027: \u0027self\u0027,"},{"line_number":166,"context_line":"                    },"},{"line_number":167,"context_line":"                    {"},{"line_number":168,"context_line":"                        \u0027href\u0027: \u0027http://localhost/fake/snapshots/200\u0027,"},{"line_number":169,"context_line":"                        \u0027rel\u0027: \u0027bookmark\u0027,"},{"line_number":170,"context_line":"                    },"},{"line_number":171,"context_line":"                ],"},{"line_number":172,"context_line":"            }"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_snapshot_show_nofound(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_686908be","line":173,"range":{"start_line":151,"start_character":8,"end_line":173,"end_character":9},"updated":"2015-12-24 19:02:15.000000000","message":"This has repeated in a couple places.. we could aggregate this into a function in the fakes file.. manila/tests/fake_share.py","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9339b6b69ab4d64917f595230ee3118f6d346f3a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def test_snapshot_show(self):"},{"line_number":149,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/snapshots/200\u0027)"},{"line_number":150,"context_line":"        res_dict \u003d self.controller.show(req, 200)"},{"line_number":151,"context_line":"        expected \u003d {"},{"line_number":152,"context_line":"            \u0027snapshot\u0027: {"},{"line_number":153,"context_line":"                \u0027id\u0027: 200,"},{"line_number":154,"context_line":"                \u0027share_id\u0027: \u0027fakeshareid\u0027,"},{"line_number":155,"context_line":"                \u0027share_size\u0027: 1,"},{"line_number":156,"context_line":"                \u0027created_at\u0027: datetime.datetime(1, 1, 1, 1, 1, 1),"},{"line_number":157,"context_line":"                \u0027status\u0027: \u0027fakesnapstatus\u0027,"},{"line_number":158,"context_line":"                \u0027name\u0027: \u0027displaysnapname\u0027,"},{"line_number":159,"context_line":"                \u0027size\u0027: 1,"},{"line_number":160,"context_line":"                \u0027description\u0027: \u0027displaysnapdesc\u0027,"},{"line_number":161,"context_line":"                \u0027share_proto\u0027: \u0027fakesnapproto\u0027,"},{"line_number":162,"context_line":"                \u0027links\u0027: ["},{"line_number":163,"context_line":"                    {"},{"line_number":164,"context_line":"                        \u0027href\u0027: \u0027http://localhost/v1/fake/snapshots/200\u0027,"},{"line_number":165,"context_line":"                        \u0027rel\u0027: \u0027self\u0027,"},{"line_number":166,"context_line":"                    },"},{"line_number":167,"context_line":"                    {"},{"line_number":168,"context_line":"                        \u0027href\u0027: \u0027http://localhost/fake/snapshots/200\u0027,"},{"line_number":169,"context_line":"                        \u0027rel\u0027: \u0027bookmark\u0027,"},{"line_number":170,"context_line":"                    },"},{"line_number":171,"context_line":"                ],"},{"line_number":172,"context_line":"            }"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_snapshot_show_nofound(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_a7345d4a","line":173,"range":{"start_line":151,"start_character":8,"end_line":173,"end_character":9},"in_reply_to":"1a7b0d38_686908be","updated":"2015-12-30 01:00:34.000000000","message":"Done","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5ff88d26f087bd3247391552068280a524a9d289","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def _snapshot_list_summary_with_search_opts(self, use_admin_context):"},{"line_number":211,"context_line":"        search_opts \u003d {"},{"line_number":212,"context_line":"            \u0027name\u0027: \u0027fake_name\u0027,"},{"line_number":213,"context_line":"            \u0027status\u0027: \u0027fake_status\u0027,"},{"line_number":214,"context_line":"            \u0027share_id\u0027: \u0027fake_share_id\u0027,"},{"line_number":215,"context_line":"            \u0027sort_key\u0027: \u0027fake_sort_key\u0027,"},{"line_number":216,"context_line":"            \u0027sort_dir\u0027: \u0027fake_sort_dir\u0027,"},{"line_number":217,"context_line":"            \u0027offset\u0027: \u00271\u0027,"},{"line_number":218,"context_line":"            \u0027limit\u0027: \u00271\u0027,"},{"line_number":219,"context_line":"        }"},{"line_number":220,"context_line":"        # fake_key should be filtered for non-admin"},{"line_number":221,"context_line":"        url \u003d \u0027/snapshots?fake_key\u003dfake_value\u0027"},{"line_number":222,"context_line":"        for k, v in search_opts.items():"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_286300de","line":219,"range":{"start_line":211,"start_character":8,"end_line":219,"end_character":9},"updated":"2015-12-24 19:02:15.000000000","message":"Same here.. you could grab this from a top level method in the same file.","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9339b6b69ab4d64917f595230ee3118f6d346f3a","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def _snapshot_list_summary_with_search_opts(self, use_admin_context):"},{"line_number":211,"context_line":"        search_opts \u003d {"},{"line_number":212,"context_line":"            \u0027name\u0027: \u0027fake_name\u0027,"},{"line_number":213,"context_line":"            \u0027status\u0027: \u0027fake_status\u0027,"},{"line_number":214,"context_line":"            \u0027share_id\u0027: \u0027fake_share_id\u0027,"},{"line_number":215,"context_line":"            \u0027sort_key\u0027: \u0027fake_sort_key\u0027,"},{"line_number":216,"context_line":"            \u0027sort_dir\u0027: \u0027fake_sort_dir\u0027,"},{"line_number":217,"context_line":"            \u0027offset\u0027: \u00271\u0027,"},{"line_number":218,"context_line":"            \u0027limit\u0027: \u00271\u0027,"},{"line_number":219,"context_line":"        }"},{"line_number":220,"context_line":"        # fake_key should be filtered for non-admin"},{"line_number":221,"context_line":"        url \u003d \u0027/snapshots?fake_key\u003dfake_value\u0027"},{"line_number":222,"context_line":"        for k, v in search_opts.items():"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_8a3e00b7","line":219,"range":{"start_line":211,"start_character":8,"end_line":219,"end_character":9},"in_reply_to":"1a7b0d38_286300de","updated":"2015-12-30 01:00:34.000000000","message":"Done","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.maxDiff \u003d None"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @ddt.data(\u0027true\u0027, \u0027True\u0027, \u0027\u003cis\u003e True\u0027, \u00271\u0027)"},{"line_number":73,"context_line":"    def test_snapshot_create(self, snapshot_support):"},{"line_number":74,"context_line":"        self.mock_object(share_api.API, \u0027create_snapshot\u0027,"},{"line_number":75,"context_line":"                         stubs.stub_snapshot_create)"},{"line_number":76,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_640d9c36","line":73,"range":{"start_line":73,"start_character":35,"end_line":73,"end_character":51},"updated":"2016-01-20 11:40:11.000000000","message":"Is this variable being used? If not, you could remove the @ddt.data decorator, right?","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.maxDiff \u003d None"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @ddt.data(\u0027true\u0027, \u0027True\u0027, \u0027\u003cis\u003e True\u0027, \u00271\u0027)"},{"line_number":73,"context_line":"    def test_snapshot_create(self, snapshot_support):"},{"line_number":74,"context_line":"        self.mock_object(share_api.API, \u0027create_snapshot\u0027,"},{"line_number":75,"context_line":"                         stubs.stub_snapshot_create)"},{"line_number":76,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_3dac999f","line":73,"range":{"start_line":73,"start_character":35,"end_line":73,"end_character":51},"in_reply_to":"ba63e191_640d9c36","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 NetApp"},{"line_number":2,"context_line":"# Copyright 2015 EMC Corporation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_ac659d1e","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":23},"updated":"2016-01-22 16:36:14.000000000","message":"NetApp?","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 NetApp"},{"line_number":2,"context_line":"# Copyright 2015 EMC Corporation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_06803d8a","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":23},"in_reply_to":"9a68dd71_ac659d1e","updated":"2016-01-23 03:51:00.000000000","message":"Removed.","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":609,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":610,"context_line":"            use_admin_context\u003dTrue,"},{"line_number":611,"context_line":"            version\u003d\u00272.8\u0027)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":614,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_6c42456a","line":611,"range":{"start_line":611,"start_character":20,"end_line":611,"end_character":25},"updated":"2016-01-22 16:36:14.000000000","message":"Not a border microversion anymore.","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":609,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":610,"context_line":"            use_admin_context\u003dTrue,"},{"line_number":611,"context_line":"            version\u003d\u00272.8\u0027)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":614,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_a647f175","line":611,"range":{"start_line":611,"start_character":20,"end_line":611,"end_character":25},"in_reply_to":"9a68dd71_6c42456a","updated":"2016-01-23 03:51:00.000000000","message":"Done","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            \u0027display_name\u0027: \u0027updated_snapshot_name\u0027,"},{"line_number":69,"context_line":"            \u0027display_description\u0027: \u0027updated_snapshot_description\u0027,"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        self.maxDiff \u003d None"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_snapshot_create(self):"},{"line_number":74,"context_line":"        self.mock_object(share_api.API, \u0027create_snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_deeaebab","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":27},"updated":"2016-02-21 22:56:04.000000000","message":"Nit: Our dictionaries aren\u0027t that long, are they? :)\n\nThe default value in oslotest is 10000, that should be okay?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            \u0027display_name\u0027: \u0027updated_snapshot_name\u0027,"},{"line_number":69,"context_line":"            \u0027display_description\u0027: \u0027updated_snapshot_description\u0027,"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        self.maxDiff \u003d None"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_snapshot_create(self):"},{"line_number":74,"context_line":"        self.mock_object(share_api.API, \u0027create_snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_156c7e07","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":27},"in_reply_to":"bae84128_deeaebab","updated":"2016-02-24 20:50:57.000000000","message":"Removed.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            driver_options\u003d{})"},{"line_number":505,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":506,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue,"},{"line_number":507,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":510,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_3ef95781","line":507,"range":{"start_line":507,"start_character":21,"end_line":507,"end_character":24},"updated":"2016-02-21 22:56:04.000000000","message":"Nit: Please update this to 2.11, or use ddt to throw in: 1.0, 2.6, 2.11","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"f8cc8e04e6f392faacfdbc4f00f8095c35c4bf4d","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            driver_options\u003d{})"},{"line_number":505,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":506,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue,"},{"line_number":507,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":510,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_a82b8d32","line":507,"range":{"start_line":507,"start_character":21,"end_line":507,"end_character":24},"in_reply_to":"bae84128_02cc4d87","updated":"2016-02-25 13:14:50.000000000","message":"Not done here too, usage of \"ddt\" is expected with several mentioned cases.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            driver_options\u003d{})"},{"line_number":505,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":506,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue,"},{"line_number":507,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":510,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_26c6c249","line":507,"range":{"start_line":507,"start_character":21,"end_line":507,"end_character":24},"in_reply_to":"bae84128_3ef95781","updated":"2016-02-24 18:16:58.000000000","message":"+1","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            driver_options\u003d{})"},{"line_number":505,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":506,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue,"},{"line_number":507,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":510,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_02cc4d87","line":507,"range":{"start_line":507,"start_character":21,"end_line":507,"end_character":24},"in_reply_to":"bae84128_3ef95781","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0bc6afa71a6e8c3608be92df57b03f3211ff37d7","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            driver_options\u003d{})"},{"line_number":505,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":506,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue,"},{"line_number":507,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":510,"context_line":"                          self.controller.manage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_fe038174","line":507,"range":{"start_line":507,"start_character":21,"end_line":507,"end_character":24},"in_reply_to":"bae84128_a82b8d32","updated":"2016-02-25 16:05:13.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":621,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":622,"context_line":"            use_admin_context\u003dTrue,"},{"line_number":623,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":626,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_fefecf69","line":623,"range":{"start_line":623,"start_character":21,"end_line":623,"end_character":24},"updated":"2016-02-21 22:56:04.000000000","message":"Nit: Please update this to 2.11, or use ddt to throw in: 1.0, 2.6, 2.11","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0bc6afa71a6e8c3608be92df57b03f3211ff37d7","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":621,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":622,"context_line":"            use_admin_context\u003dTrue,"},{"line_number":623,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":626,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_7ecad150","line":623,"range":{"start_line":623,"start_character":21,"end_line":623,"end_character":24},"in_reply_to":"bae84128_081d590f","updated":"2016-02-25 16:05:13.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"f8cc8e04e6f392faacfdbc4f00f8095c35c4bf4d","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":621,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":622,"context_line":"            use_admin_context\u003dTrue,"},{"line_number":623,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":626,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_081d590f","line":623,"range":{"start_line":623,"start_character":21,"end_line":623,"end_character":24},"in_reply_to":"bae84128_82a69dbe","updated":"2016-02-25 13:14:50.000000000","message":"Same as above. Not done.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        fake_req \u003d fakes.HTTPRequest.blank("},{"line_number":621,"context_line":"            \u0027/snapshots/%s/unmanage\u0027 % snapshot_id,"},{"line_number":622,"context_line":"            use_admin_context\u003dTrue,"},{"line_number":623,"context_line":"            version\u003d\u00272.9\u0027)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":626,"context_line":"                          self.controller.unmanage,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_82a69dbe","line":623,"range":{"start_line":623,"start_character":21,"end_line":623,"end_character":24},"in_reply_to":"bae84128_fefecf69","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/tests/api/v2/test_snapshot_manage.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5ff88d26f087bd3247391552068280a524a9d289","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(SnapshotManageTest, self).setUp()"},{"line_number":44,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"},{"line_number":45,"context_line":"        self.api_version \u003d MIN_SUPPORTED_API_VERSION"},{"line_number":46,"context_line":"        self.resource_name \u003d self.controller.resource_name"},{"line_number":47,"context_line":"        self.request \u003d fakes.HTTPRequest.blank("},{"line_number":48,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_c8a83cde","line":45,"range":{"start_line":45,"start_character":27,"end_line":45,"end_character":52},"updated":"2015-12-24 19:02:15.000000000","message":"this could be share_snapshots.MIN_SUPPORTED_API_VERSIOn\n\nso you can keep it in one place :)","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9339b6b69ab4d64917f595230ee3118f6d346f3a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(SnapshotManageTest, self).setUp()"},{"line_number":44,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"},{"line_number":45,"context_line":"        self.api_version \u003d MIN_SUPPORTED_API_VERSION"},{"line_number":46,"context_line":"        self.resource_name \u003d self.controller.resource_name"},{"line_number":47,"context_line":"        self.request \u003d fakes.HTTPRequest.blank("},{"line_number":48,"context_line":"            \u0027/snapshots/manage\u0027, use_admin_context\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_0a79b093","line":45,"range":{"start_line":45,"start_character":27,"end_line":45,"end_character":52},"in_reply_to":"1a7b0d38_c8a83cde","updated":"2015-12-30 01:00:34.000000000","message":"This is only used in test_share_snapshots.py now.","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"}],"manila/tests/api/v2/test_snapshot_unmanage.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5ff88d26f087bd3247391552068280a524a9d289","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(SnapshotUnmanageTest, self).setUp()"},{"line_number":36,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"},{"line_number":37,"context_line":"        self.api_version \u003d MIN_SUPPORTED_API_VERSION"},{"line_number":38,"context_line":"        self.resource_name \u003d self.controller.resource_name"},{"line_number":39,"context_line":"        self.snapshot_id \u003d \u0027fake\u0027"},{"line_number":40,"context_line":"        self.request \u003d fakes.HTTPRequest.blank("}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_88ab14d6","line":37,"range":{"start_line":37,"start_character":27,"end_line":37,"end_character":52},"updated":"2015-12-24 19:02:15.000000000","message":"same","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9339b6b69ab4d64917f595230ee3118f6d346f3a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(SnapshotUnmanageTest, self).setUp()"},{"line_number":36,"context_line":"        self.controller \u003d share_snapshots.ShareSnapshotsController()"},{"line_number":37,"context_line":"        self.api_version \u003d MIN_SUPPORTED_API_VERSION"},{"line_number":38,"context_line":"        self.resource_name \u003d self.controller.resource_name"},{"line_number":39,"context_line":"        self.snapshot_id \u003d \u0027fake\u0027"},{"line_number":40,"context_line":"        self.request \u003d fakes.HTTPRequest.blank("}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_4a5fa80e","line":37,"range":{"start_line":37,"start_character":27,"end_line":37,"end_character":52},"in_reply_to":"1a7b0d38_88ab14d6","updated":"2015-12-30 01:00:34.000000000","message":"Done","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"}],"manila/tests/db/migrations/alembic/migrations_data_checks.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def check_upgrade(self, engine, data):"},{"line_number":593,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":594,"context_line":"        for ss in engine.execute(ss_table.select()):"},{"line_number":595,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027provider_location\u0027))"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def check_downgrade(self, engine):"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_a62e52f8","line":594,"range":{"start_line":594,"start_character":8,"end_line":594,"end_character":52},"updated":"2016-02-24 18:16:58.000000000","message":"Better to verify that it has items for iteration. So, now, it is possible not to reach out assertion. \n\nExample: https://github.com/openstack/manila/blob/e8e8adc2/manila/tests/db/migrations/alembic/migrations_data_checks.py#L550","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def check_upgrade(self, engine, data):"},{"line_number":593,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":594,"context_line":"        for ss in engine.execute(ss_table.select()):"},{"line_number":595,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027provider_location\u0027))"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def check_downgrade(self, engine):"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_6a67e8ea","line":594,"range":{"start_line":594,"start_character":8,"end_line":594,"end_character":52},"in_reply_to":"bae84128_a62e52f8","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def check_downgrade(self, engine):"},{"line_number":598,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":599,"context_line":"        db_result \u003d engine.execute(ss_table.select())"},{"line_number":600,"context_line":"        for ss in db_result:"},{"line_number":601,"context_line":"            self.test_case.assertFalse(hasattr(ss, \u0027provider_location\u0027))"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_e6869ada","line":600,"range":{"start_line":599,"start_character":8,"end_line":600,"end_character":28},"updated":"2016-02-24 18:16:58.000000000","message":"same here.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def check_downgrade(self, engine):"},{"line_number":598,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":599,"context_line":"        db_result \u003d engine.execute(ss_table.select())"},{"line_number":600,"context_line":"        for ss in db_result:"},{"line_number":601,"context_line":"            self.test_case.assertFalse(hasattr(ss, \u0027provider_location\u0027))"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_4a64a4e4","line":600,"range":{"start_line":599,"start_character":8,"end_line":600,"end_character":28},"in_reply_to":"bae84128_e6869ada","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4b5c614a5edc6040a7e328cb9b25605372696539","unresolved":false,"context_lines":[{"line_number":592,"context_line":"    def check_upgrade(self, engine, data):"},{"line_number":593,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":594,"context_line":"        db_result \u003d engine.execute(ss_table.select())"},{"line_number":595,"context_line":"        self.test_case.assertTrue(db_result.rowcount \u003e 0)"},{"line_number":596,"context_line":"        for ss in db_result:"},{"line_number":597,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027provider_location\u0027))"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_475f220e","line":595,"range":{"start_line":595,"start_character":8,"end_line":595,"end_character":57},"updated":"2016-02-27 03:47:14.000000000","message":"This doesn\u0027t guarantee that the data you had is still there, intact. \n\nI would verify that there is a snapshot_instance here with its ID being set to \"new_snapshot_instance_id\"","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":592,"context_line":"    def check_upgrade(self, engine, data):"},{"line_number":593,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":594,"context_line":"        db_result \u003d engine.execute(ss_table.select())"},{"line_number":595,"context_line":"        self.test_case.assertTrue(db_result.rowcount \u003e 0)"},{"line_number":596,"context_line":"        for ss in db_result:"},{"line_number":597,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027provider_location\u0027))"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_e6fe2f37","line":595,"range":{"start_line":595,"start_character":8,"end_line":595,"end_character":57},"in_reply_to":"9aed3d3a_475f220e","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4b5c614a5edc6040a7e328cb9b25605372696539","unresolved":false,"context_lines":[{"line_number":599,"context_line":"    def check_downgrade(self, engine):"},{"line_number":600,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":601,"context_line":"        db_result \u003d engine.execute(ss_table.select())"},{"line_number":602,"context_line":"        self.test_case.assertTrue(db_result.rowcount \u003e 0)"},{"line_number":603,"context_line":"        for ss in db_result:"},{"line_number":604,"context_line":"            self.test_case.assertFalse(hasattr(ss, \u0027provider_location\u0027))"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_a79c2ec1","line":602,"range":{"start_line":602,"start_character":8,"end_line":602,"end_character":57},"updated":"2016-02-27 03:47:14.000000000","message":"same","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":599,"context_line":"    def check_downgrade(self, engine):"},{"line_number":600,"context_line":"        ss_table \u003d utils.load_table(self.table_name, engine)"},{"line_number":601,"context_line":"        db_result \u003d engine.execute(ss_table.select())"},{"line_number":602,"context_line":"        self.test_case.assertTrue(db_result.rowcount \u003e 0)"},{"line_number":603,"context_line":"        for ss in db_result:"},{"line_number":604,"context_line":"            self.test_case.assertFalse(hasattr(ss, \u0027provider_location\u0027))"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_46fefb37","line":602,"range":{"start_line":602,"start_character":8,"end_line":602,"end_character":57},"in_reply_to":"9aed3d3a_a79c2ec1","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6a1378c6a55cced108bde849cfef78894a7ebc18","unresolved":false,"context_lines":[{"line_number":555,"context_line":""},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"@map_to_migration(\u0027eb6d5544cbbd\u0027)"},{"line_number":558,"context_line":"class ShareSnapshotInstancsNewProviderLocationColumnChecks("},{"line_number":559,"context_line":"        BaseMigrationChecks):"},{"line_number":560,"context_line":"    table_name \u003d \u0027share_snapshot_instances\u0027"},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"9aed3d3a_ce9fbd4e","line":558,"range":{"start_line":558,"start_character":19,"end_line":558,"end_character":27},"updated":"2016-02-28 01:34:14.000000000","message":"Typo?","commit_id":"031acbfbe7ed5acc25c81133ec1c5675b94a9030"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"47087017fb49f216203057cc9096554efc6779a5","unresolved":false,"context_lines":[{"line_number":555,"context_line":""},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"@map_to_migration(\u0027eb6d5544cbbd\u0027)"},{"line_number":558,"context_line":"class ShareSnapshotInstancsNewProviderLocationColumnChecks("},{"line_number":559,"context_line":"        BaseMigrationChecks):"},{"line_number":560,"context_line":"    table_name \u003d \u0027share_snapshot_instances\u0027"},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"9aed3d3a_eed281ff","line":558,"range":{"start_line":558,"start_character":19,"end_line":558,"end_character":27},"in_reply_to":"9aed3d3a_ce9fbd4e","updated":"2016-02-28 01:41:10.000000000","message":"Yes:).  Fixed.","commit_id":"031acbfbe7ed5acc25c81133ec1c5675b94a9030"}],"manila/tests/db_utils.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \u0027user_id\u0027: \u0027fake\u0027,"},{"line_number":127,"context_line":"        \u0027project_id\u0027: \u0027fake\u0027,"},{"line_number":128,"context_line":"        \u0027status\u0027: \u0027creating\u0027,"},{"line_number":129,"context_line":"        \u0027provider_location\u0027: \u0027fake\u0027"},{"line_number":130,"context_line":"    }"},{"line_number":131,"context_line":"    return _create_db_row(db.share_snapshot_create, snapshot, kwargs)"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_be2ba7ea","line":129,"range":{"start_line":129,"start_character":34,"end_line":129,"end_character":35},"updated":"2016-02-21 22:56:04.000000000","message":"please add trailing comma","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \u0027user_id\u0027: \u0027fake\u0027,"},{"line_number":127,"context_line":"        \u0027project_id\u0027: \u0027fake\u0027,"},{"line_number":128,"context_line":"        \u0027status\u0027: \u0027creating\u0027,"},{"line_number":129,"context_line":"        \u0027provider_location\u0027: \u0027fake\u0027"},{"line_number":130,"context_line":"    }"},{"line_number":131,"context_line":"    return _create_db_row(db.share_snapshot_create, snapshot, kwargs)"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_027a8d23","line":129,"range":{"start_line":129,"start_character":34,"end_line":129,"end_character":35},"in_reply_to":"bae84128_be2ba7ea","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/tests/policy.json":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8944823656b14812908ce7d7a33dc105ee7f21d8","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    \"share_snapshot:force_delete\": \"rule:admin_api\","},{"line_number":58,"context_line":"    \"share_snapshot:reset_status\": \"rule:admin_api\","},{"line_number":59,"context_line":"    \"share_snapshot:manage_snapshot\": \"rule:admin_api\","},{"line_number":60,"context_line":"    \"share_snapshot:unmanage_snapshot\": \"rule:admin_api\","},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"share_network:create\": \"\","}],"source_content_type":"application/json","patch_set":9,"id":"5a710552_0c1ddd0e","line":59,"updated":"2015-12-16 13:29:55.000000000","message":"Since we\u0027re mocking out the policy checks, adding these would be redundant.. No harm done though..","commit_id":"961cdcc6f4eb66f19294c477556925a84b0cd546"}],"manila/tests/share/drivers/test_generic.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"                             \u0027provider_location\u0027: \u0027vol_snap_id\u0027}"},{"line_number":2020,"context_line":"        volume_snapshot \u003d {\u0027id\u0027: \u0027vol_snap_id\u0027, \u0027size\u0027: 1}"},{"line_number":2021,"context_line":"        self.mock_object(self._driver.volume_api, \u0027get_snapshot\u0027,"},{"line_number":2022,"context_line":"                         mock.Mock(return_value\u003dvolume_snapshot))"},{"line_number":2023,"context_line":"        ret_manage \u003d self._driver.manage_existing_snapshot("},{"line_number":2024,"context_line":"            snapshot_instance, {})"},{"line_number":2025,"context_line":"        self.assertEqual({\u0027provider_location\u0027: \u0027vol_snap_id\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_de382b40","line":2022,"range":{"start_line":2022,"start_character":63,"end_line":2022,"end_character":65},"updated":"2016-02-21 22:56:04.000000000","message":"Please add an empty line at 2023","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"                             \u0027provider_location\u0027: \u0027vol_snap_id\u0027}"},{"line_number":2020,"context_line":"        volume_snapshot \u003d {\u0027id\u0027: \u0027vol_snap_id\u0027, \u0027size\u0027: 1}"},{"line_number":2021,"context_line":"        self.mock_object(self._driver.volume_api, \u0027get_snapshot\u0027,"},{"line_number":2022,"context_line":"                         mock.Mock(return_value\u003dvolume_snapshot))"},{"line_number":2023,"context_line":"        ret_manage \u003d self._driver.manage_existing_snapshot("},{"line_number":2024,"context_line":"            snapshot_instance, {})"},{"line_number":2025,"context_line":"        self.assertEqual({\u0027provider_location\u0027: \u0027vol_snap_id\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_42be55ae","line":2022,"range":{"start_line":2022,"start_character":63,"end_line":2022,"end_character":65},"in_reply_to":"bae84128_de382b40","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":2021,"context_line":"        self.mock_object(self._driver.volume_api, \u0027get_snapshot\u0027,"},{"line_number":2022,"context_line":"                         mock.Mock(return_value\u003dvolume_snapshot))"},{"line_number":2023,"context_line":"        ret_manage \u003d self._driver.manage_existing_snapshot("},{"line_number":2024,"context_line":"            snapshot_instance, {})"},{"line_number":2025,"context_line":"        self.assertEqual({\u0027provider_location\u0027: \u0027vol_snap_id\u0027,"},{"line_number":2026,"context_line":"                          \u0027size\u0027: 1}, ret_manage)"},{"line_number":2027,"context_line":"        self._driver.volume_api.get_snapshot.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_3e4037a5","line":2024,"range":{"start_line":2024,"start_character":31,"end_line":2024,"end_character":34},"updated":"2016-02-21 22:56:04.000000000","message":"Please add an empty line after this line","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":2021,"context_line":"        self.mock_object(self._driver.volume_api, \u0027get_snapshot\u0027,"},{"line_number":2022,"context_line":"                         mock.Mock(return_value\u003dvolume_snapshot))"},{"line_number":2023,"context_line":"        ret_manage \u003d self._driver.manage_existing_snapshot("},{"line_number":2024,"context_line":"            snapshot_instance, {})"},{"line_number":2025,"context_line":"        self.assertEqual({\u0027provider_location\u0027: \u0027vol_snap_id\u0027,"},{"line_number":2026,"context_line":"                          \u0027size\u0027: 1}, ret_manage)"},{"line_number":2027,"context_line":"        self._driver.volume_api.get_snapshot.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_a2df610b","line":2024,"range":{"start_line":2024,"start_character":31,"end_line":2024,"end_character":34},"in_reply_to":"bae84128_3e4037a5","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":2027,"context_line":"        self._driver.volume_api.get_snapshot.assert_called_once_with("},{"line_number":2028,"context_line":"            self._context, \u0027vol_snap_id\u0027)"},{"line_number":2029,"context_line":""},{"line_number":2030,"context_line":""},{"line_number":2031,"context_line":"@generic.ensure_server"},{"line_number":2032,"context_line":"def fake(driver_instance, context, share_server\u003dNone):"},{"line_number":2033,"context_line":"    return share_server"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_de0f8b86","line":2030,"range":{"start_line":2030,"start_character":0,"end_line":2030,"end_character":0},"updated":"2016-02-21 22:56:04.000000000","message":"Please add the unmanage unit test as well, just asserting that private_storage delete was called.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":2027,"context_line":"        self._driver.volume_api.get_snapshot.assert_called_once_with("},{"line_number":2028,"context_line":"            self._context, \u0027vol_snap_id\u0027)"},{"line_number":2029,"context_line":""},{"line_number":2030,"context_line":""},{"line_number":2031,"context_line":"@generic.ensure_server"},{"line_number":2032,"context_line":"def fake(driver_instance, context, share_server\u003dNone):"},{"line_number":2033,"context_line":"    return share_server"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_c2e8a5b5","line":2030,"range":{"start_line":2030,"start_character":0,"end_line":2030,"end_character":0},"in_reply_to":"bae84128_de0f8b86","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila/tests/share/test_driver.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"5ec41a249fb4fb6a56daf73685231c995416d654","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        share_driver \u003d self._instantiate_share_driver(None, False)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        def assert_is_callable(obj, attr):"},{"line_number":218,"context_line":"            self.assertTrue(callable(getattr(obj, attr)))"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        assert_is_callable(share_driver, method)"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_3fd7cf24","line":218,"updated":"2015-12-15 18:10:49.000000000","message":"Should promote this and re-use it instead of copying it.","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38e2e9ad87be59890a537e699d70553c7faa81f0","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        share_driver \u003d self._instantiate_share_driver(None, False)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        def assert_is_callable(obj, attr):"},{"line_number":218,"context_line":"            self.assertTrue(callable(getattr(obj, attr)))"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        assert_is_callable(share_driver, method)"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_38a280af","line":218,"in_reply_to":"5a710552_3fd7cf24","updated":"2015-12-15 22:20:38.000000000","message":"Good idea.  Done.","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"}],"manila/tests/share/test_manager.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"5ec41a249fb4fb6a56daf73685231c995416d654","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"        self.assertRaises("},{"line_number":2832,"context_line":"            exception.InvalidDriverMode,"},{"line_number":2833,"context_line":"            self.share_manager.manage_snapshot, self.context,"},{"line_number":2834,"context_line":"            snapshot[\u0027id\u0027], driver_options)"},{"line_number":2835,"context_line":""},{"line_number":2836,"context_line":"    def test_manage_snapshot_invalid_snapshot(self):"},{"line_number":2837,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_bff5ffcb","line":2834,"updated":"2015-12-15 18:10:49.000000000","message":"In many of these tests there are mock objects that are not validated with some form of assert_called*.","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38e2e9ad87be59890a537e699d70553c7faa81f0","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"        self.assertRaises("},{"line_number":2832,"context_line":"            exception.InvalidDriverMode,"},{"line_number":2833,"context_line":"            self.share_manager.manage_snapshot, self.context,"},{"line_number":2834,"context_line":"            snapshot[\u0027id\u0027], driver_options)"},{"line_number":2835,"context_line":""},{"line_number":2836,"context_line":"    def test_manage_snapshot_invalid_snapshot(self):"},{"line_number":2837,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_3672904a","line":2834,"in_reply_to":"5a710552_bff5ffcb","updated":"2015-12-15 22:20:38.000000000","message":"Done","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"5ec41a249fb4fb6a56daf73685231c995416d654","unresolved":false,"context_lines":[{"line_number":2867,"context_line":"            self.share_manager.manage_snapshot,"},{"line_number":2868,"context_line":"            self.context, snapshot[\u0027id\u0027], driver_options)"},{"line_number":2869,"context_line":""},{"line_number":2870,"context_line":"        self.share_manager.driver.manage_existing_snapshot.\\"},{"line_number":2871,"context_line":"            assert_called_once_with(mock.ANY, driver_options)"},{"line_number":2872,"context_line":""},{"line_number":2873,"context_line":"    def test_manage_snapshot_invalid_size(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_99faa3bc","line":2870,"updated":"2015-12-15 18:10:49.000000000","message":"try to avoid using the \\","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38e2e9ad87be59890a537e699d70553c7faa81f0","unresolved":false,"context_lines":[{"line_number":2867,"context_line":"            self.share_manager.manage_snapshot,"},{"line_number":2868,"context_line":"            self.context, snapshot[\u0027id\u0027], driver_options)"},{"line_number":2869,"context_line":""},{"line_number":2870,"context_line":"        self.share_manager.driver.manage_existing_snapshot.\\"},{"line_number":2871,"context_line":"            assert_called_once_with(mock.ANY, driver_options)"},{"line_number":2872,"context_line":""},{"line_number":2873,"context_line":"    def test_manage_snapshot_invalid_size(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_f692c84a","line":2870,"in_reply_to":"5a710552_99faa3bc","updated":"2015-12-15 22:20:38.000000000","message":"Done","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"5ec41a249fb4fb6a56daf73685231c995416d654","unresolved":false,"context_lines":[{"line_number":2888,"context_line":"            exception.InvalidShareSnapshot,"},{"line_number":2889,"context_line":"            self.share_manager.manage_snapshot,"},{"line_number":2890,"context_line":"            self.context, snapshot[\u0027id\u0027], driver_options)"},{"line_number":2891,"context_line":"        self.assertNotIn(\u0027size\u0027, return_snap)"},{"line_number":2892,"context_line":""},{"line_number":2893,"context_line":"    def test_manage_snapshot_quota_error(self):"},{"line_number":2894,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_d9990b70","line":2891,"updated":"2015-12-15 18:10:49.000000000","message":"This doesn\u0027t seem necessary, but I\u0027d keep it. It\u0027s like a comment.","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38e2e9ad87be59890a537e699d70553c7faa81f0","unresolved":false,"context_lines":[{"line_number":2888,"context_line":"            exception.InvalidShareSnapshot,"},{"line_number":2889,"context_line":"            self.share_manager.manage_snapshot,"},{"line_number":2890,"context_line":"            self.context, snapshot[\u0027id\u0027], driver_options)"},{"line_number":2891,"context_line":"        self.assertNotIn(\u0027size\u0027, return_snap)"},{"line_number":2892,"context_line":""},{"line_number":2893,"context_line":"    def test_manage_snapshot_quota_error(self):"},{"line_number":2894,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_d6b6acdb","line":2891,"in_reply_to":"5a710552_d9990b70","updated":"2015-12-15 22:20:38.000000000","message":"Sure.  The only reason I kept it there is because this test is about size and size not in return_snap caused the exception.","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"5ec41a249fb4fb6a56daf73685231c995416d654","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"            self.share_manager.manage_snapshot,"},{"line_number":2913,"context_line":"            self.context, snapshot_id, driver_options)"},{"line_number":2914,"context_line":""},{"line_number":2915,"context_line":"        self.share_manager.driver.manage_existing_snapshot.\\"},{"line_number":2916,"context_line":"            assert_called_once_with(mock.ANY, driver_options)"},{"line_number":2917,"context_line":"        self.share_manager._update_quota_usages.assert_called_once_with("},{"line_number":2918,"context_line":"            utils.IsAMatcher(context.RequestContext),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_f9eac7ab","line":2915,"updated":"2015-12-15 18:10:49.000000000","message":"another \\","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38e2e9ad87be59890a537e699d70553c7faa81f0","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"            self.share_manager.manage_snapshot,"},{"line_number":2913,"context_line":"            self.context, snapshot_id, driver_options)"},{"line_number":2914,"context_line":""},{"line_number":2915,"context_line":"        self.share_manager.driver.manage_existing_snapshot.\\"},{"line_number":2916,"context_line":"            assert_called_once_with(mock.ANY, driver_options)"},{"line_number":2917,"context_line":"        self.share_manager._update_quota_usages.assert_called_once_with("},{"line_number":2918,"context_line":"            utils.IsAMatcher(context.RequestContext),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_76cd785c","line":2915,"in_reply_to":"5a710552_f9eac7ab","updated":"2015-12-15 22:20:38.000000000","message":"Done","commit_id":"6f2b27ab4993e7e2f9cdd338a04146c60805f954"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":2842,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":2843,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":2844,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":2845,"context_line":"                         mock.Mock(return_value\u003d\u0027fake_share_server\u0027))"},{"line_number":2846,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":2847,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"},{"line_number":2848,"context_line":"        driver_options \u003d {\u0027fake\u0027: \u0027fake\u0027}"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_e4c42c60","line":2845,"range":{"start_line":2845,"start_character":48,"end_line":2845,"end_character":67},"updated":"2016-01-20 11:40:11.000000000","message":"Extract variable.","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":2842,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":2843,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":2844,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":2845,"context_line":"                         mock.Mock(return_value\u003d\u0027fake_share_server\u0027))"},{"line_number":2846,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":2847,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"},{"line_number":2848,"context_line":"        driver_options \u003d {\u0027fake\u0027: \u0027fake\u0027}"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_dda9bd7c","line":2845,"range":{"start_line":2845,"start_character":48,"end_line":2845,"end_character":67},"in_reply_to":"ba63e191_e4c42c60","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0f534ca331c75630cd1b97ae237f6053c7b57ba7","unresolved":false,"context_lines":[{"line_number":2854,"context_line":""},{"line_number":2855,"context_line":"        self.assertFalse("},{"line_number":2856,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":2857,"context_line":"        self.assertEqual(\u0027fake_share_server\u0027,"},{"line_number":2858,"context_line":"                         self.share_manager._get_share_server("},{"line_number":2859,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":2860,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba63e191_24924458","line":2857,"range":{"start_line":2857,"start_character":25,"end_line":2857,"end_character":44},"updated":"2016-01-20 11:40:11.000000000","message":"Same","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"acc256f417c983e52c64b0d7c1a2ddbbcdcf27a0","unresolved":false,"context_lines":[{"line_number":2854,"context_line":""},{"line_number":2855,"context_line":"        self.assertFalse("},{"line_number":2856,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":2857,"context_line":"        self.assertEqual(\u0027fake_share_server\u0027,"},{"line_number":2858,"context_line":"                         self.share_manager._get_share_server("},{"line_number":2859,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":2860,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9a68dd71_7db771d8","line":2857,"range":{"start_line":2857,"start_character":25,"end_line":2857,"end_character":44},"in_reply_to":"ba63e191_24924458","updated":"2016-01-22 05:54:11.000000000","message":"Done","commit_id":"c9f5802723757eebca3b69236d473474a5900339"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"00b6bfbcdc5e52222beb5fd74476092d4299dd3e","unresolved":false,"context_lines":[{"line_number":2896,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":2897,"context_line":""},{"line_number":2898,"context_line":"    def test_manage_snapshot_driver_exception(self):"},{"line_number":2899,"context_line":"        CustomException \u003d type(\u0027CustomException\u0027, (Exception,), dict())"},{"line_number":2900,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":2901,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":2902,"context_line":"        self.mock_object(self.share_manager.driver,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_ef8e2778","line":2899,"range":{"start_line":2899,"start_character":64,"end_line":2899,"end_character":70},"updated":"2016-01-22 16:36:14.000000000","message":"Please, use dict comprehensions [1] instead of class \"dict\". The former is faster.\n\n[1] https://www.python.org/dev/peps/pep-0274/","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ead90af7ed0bb4ef3e502675fdf46e5a7d2c6e67","unresolved":false,"context_lines":[{"line_number":2896,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":2897,"context_line":""},{"line_number":2898,"context_line":"    def test_manage_snapshot_driver_exception(self):"},{"line_number":2899,"context_line":"        CustomException \u003d type(\u0027CustomException\u0027, (Exception,), dict())"},{"line_number":2900,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":2901,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":2902,"context_line":"        self.mock_object(self.share_manager.driver,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a68dd71_e61f296a","line":2899,"range":{"start_line":2899,"start_character":64,"end_line":2899,"end_character":70},"in_reply_to":"9a68dd71_ef8e2778","updated":"2016-01-23 03:51:00.000000000","message":"Done","commit_id":"495a2fbbd67bf174a1b2c790783714f1c757a1fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3556,"context_line":""},{"line_number":3557,"context_line":"    def test_manage_snapshot_invalid_snapshot(self):"},{"line_number":3558,"context_line":"        fake_share_server \u003d \u0027fake_share_server\u0027"},{"line_number":3559,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3560,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3561,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3562,"context_line":"                         \u0027_get_share_server\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_be60c736","line":3559,"range":{"start_line":3559,"start_character":55,"end_line":3559,"end_character":66},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3556,"context_line":""},{"line_number":3557,"context_line":"    def test_manage_snapshot_invalid_snapshot(self):"},{"line_number":3558,"context_line":"        fake_share_server \u003d \u0027fake_share_server\u0027"},{"line_number":3559,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3560,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3561,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3562,"context_line":"                         \u0027_get_share_server\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_2064eae3","line":3559,"range":{"start_line":3559,"start_character":55,"end_line":3559,"end_character":66},"in_reply_to":"bae84128_be60c736","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3607,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3608,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3609,"context_line":""},{"line_number":3610,"context_line":"    def test_manage_snapshot_quota_error(self):"},{"line_number":3611,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"},{"line_number":3612,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3613,"context_line":"        self.mock_object(self.share_manager,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_9e7ce3ec","line":3610,"range":{"start_line":3610,"start_character":8,"end_line":3610,"end_character":47},"updated":"2016-02-21 22:56:04.000000000","message":"Will not occur.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3607,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3608,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3609,"context_line":""},{"line_number":3610,"context_line":"    def test_manage_snapshot_quota_error(self):"},{"line_number":3611,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"},{"line_number":3612,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3613,"context_line":"        self.mock_object(self.share_manager,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_60eef2b5","line":3610,"range":{"start_line":3610,"start_character":8,"end_line":3610,"end_character":47},"in_reply_to":"bae84128_9e7ce3ec","updated":"2016-02-24 20:50:57.000000000","message":"Removed this test.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3616,"context_line":"        self.mock_object(self.share_manager.driver,"},{"line_number":3617,"context_line":"                         \"manage_existing_snapshot\","},{"line_number":3618,"context_line":"                         mock.Mock(return_value\u003d{\u0027size\u0027: 3}))"},{"line_number":3619,"context_line":"        self.mock_object(self.share_manager, \u0027_update_quota_usages\u0027,"},{"line_number":3620,"context_line":"                         mock.Mock(side_effect\u003dexception.QuotaError))"},{"line_number":3621,"context_line":"        self.mock_object(self.share_manager.db, \u0027share_snapshot_update\u0027,"},{"line_number":3622,"context_line":"                         mock.Mock())"},{"line_number":3623,"context_line":"        share \u003d db_utils.create_share()"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_be79e7fe","line":3620,"range":{"start_line":3619,"start_character":8,"end_line":3620,"end_character":69},"updated":"2016-02-21 22:56:04.000000000","message":"This error is unexpected..... The only exception the DB methods will through is: exceptions.QuotaUsageNotFound and that is also handled in the helper.. (it will go ahead and create a quota)..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3619,"context_line":"        self.mock_object(self.share_manager, \u0027_update_quota_usages\u0027,"},{"line_number":3620,"context_line":"                         mock.Mock(side_effect\u003dexception.QuotaError))"},{"line_number":3621,"context_line":"        self.mock_object(self.share_manager.db, \u0027share_snapshot_update\u0027,"},{"line_number":3622,"context_line":"                         mock.Mock())"},{"line_number":3623,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":3624,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"},{"line_number":3625,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_1e69f325","line":3622,"range":{"start_line":3622,"start_character":25,"end_line":3622,"end_character":36},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3619,"context_line":"        self.mock_object(self.share_manager, \u0027_update_quota_usages\u0027,"},{"line_number":3620,"context_line":"                         mock.Mock(side_effect\u003dexception.QuotaError))"},{"line_number":3621,"context_line":"        self.mock_object(self.share_manager.db, \u0027share_snapshot_update\u0027,"},{"line_number":3622,"context_line":"                         mock.Mock())"},{"line_number":3623,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":3624,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"},{"line_number":3625,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_8ab50c33","line":3622,"range":{"start_line":3622,"start_character":25,"end_line":3622,"end_character":36},"in_reply_to":"bae84128_1e69f325","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3657,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":3658,"context_line":"                         mock.Mock(return_value\u003dNone))"},{"line_number":3659,"context_line":"        self.mock_object(self.share_manager.db, \u0027share_snapshot_update\u0027,"},{"line_number":3660,"context_line":"                         mock.Mock())"},{"line_number":3661,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3662,"context_line":"        self.mock_object(self.share_manager, \u0027_update_quota_usages\u0027,"},{"line_number":3663,"context_line":"                         mock.Mock())"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_de866bda","line":3660,"range":{"start_line":3660,"start_character":25,"end_line":3660,"end_character":36},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3657,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":3658,"context_line":"                         mock.Mock(return_value\u003dNone))"},{"line_number":3659,"context_line":"        self.mock_object(self.share_manager.db, \u0027share_snapshot_update\u0027,"},{"line_number":3660,"context_line":"                         mock.Mock())"},{"line_number":3661,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3662,"context_line":"        self.mock_object(self.share_manager, \u0027_update_quota_usages\u0027,"},{"line_number":3663,"context_line":"                         mock.Mock())"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_ea80184c","line":3660,"range":{"start_line":3660,"start_character":25,"end_line":3660,"end_character":36},"in_reply_to":"bae84128_de866bda","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3660,"context_line":"                         mock.Mock())"},{"line_number":3661,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3662,"context_line":"        self.mock_object(self.share_manager, \u0027_update_quota_usages\u0027,"},{"line_number":3663,"context_line":"                         mock.Mock())"},{"line_number":3664,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3665,"context_line":"        self.mock_object(self.share_manager.driver,"},{"line_number":3666,"context_line":"                         \"manage_existing_snapshot\","}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_3e6e772f","line":3663,"range":{"start_line":3663,"start_character":25,"end_line":3663,"end_character":37},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3660,"context_line":"                         mock.Mock())"},{"line_number":3661,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3662,"context_line":"        self.mock_object(self.share_manager, \u0027_update_quota_usages\u0027,"},{"line_number":3663,"context_line":"                         mock.Mock())"},{"line_number":3664,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3665,"context_line":"        self.mock_object(self.share_manager.driver,"},{"line_number":3666,"context_line":"                         \"manage_existing_snapshot\","}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_0a80dc45","line":3663,"range":{"start_line":3663,"start_character":25,"end_line":3663,"end_character":37},"in_reply_to":"bae84128_3e6e772f","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":3677,"context_line":"        self.share_manager.manage_snapshot(self.context, snapshot_id,"},{"line_number":3678,"context_line":"                                           driver_options)"},{"line_number":3679,"context_line":""},{"line_number":3680,"context_line":"        (self.share_manager.driver.manage_existing_snapshot."},{"line_number":3681,"context_line":"            assert_called_once_with(mock.ANY,"},{"line_number":3682,"context_line":"                                    driver_options))"},{"line_number":3683,"context_line":"        valid_snapshot_data \u003d {"},{"line_number":3684,"context_line":"            \u0027status\u0027: constants.STATUS_AVAILABLE}"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_86922ef5","line":3681,"range":{"start_line":3680,"start_character":9,"end_line":3681,"end_character":35},"updated":"2016-02-24 18:16:58.000000000","message":"To avoid usage of such long lines you can use var for storing mock object. To do it just save results of \"self.mock_object()\" calls.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3677,"context_line":"        self.share_manager.manage_snapshot(self.context, snapshot_id,"},{"line_number":3678,"context_line":"                                           driver_options)"},{"line_number":3679,"context_line":""},{"line_number":3680,"context_line":"        (self.share_manager.driver.manage_existing_snapshot."},{"line_number":3681,"context_line":"            assert_called_once_with(mock.ANY,"},{"line_number":3682,"context_line":"                                    driver_options))"},{"line_number":3683,"context_line":"        valid_snapshot_data \u003d {"},{"line_number":3684,"context_line":"            \u0027status\u0027: constants.STATUS_AVAILABLE}"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_ea2ad82e","line":3681,"range":{"start_line":3680,"start_character":9,"end_line":3681,"end_character":35},"in_reply_to":"bae84128_86922ef5","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3698,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3699,"context_line":""},{"line_number":3700,"context_line":"    def test_unmanage_snapshot_invalid_driver_mode(self):"},{"line_number":3701,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3702,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d True"},{"line_number":3703,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":3704,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_bec72711","line":3701,"range":{"start_line":3701,"start_character":55,"end_line":3701,"end_character":66},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3698,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3699,"context_line":""},{"line_number":3700,"context_line":"    def test_unmanage_snapshot_invalid_driver_mode(self):"},{"line_number":3701,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3702,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d True"},{"line_number":3703,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":3704,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_2adcc045","line":3701,"range":{"start_line":3701,"start_character":55,"end_line":3701,"end_character":66},"in_reply_to":"bae84128_bec72711","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3711,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3712,"context_line":""},{"line_number":3713,"context_line":"    def test_unmanage_snapshot_invalid_snapshot(self):"},{"line_number":3714,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3715,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3716,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3717,"context_line":"                         \u0027_get_share_server\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_5e4a5bad","line":3714,"range":{"start_line":3714,"start_character":55,"end_line":3714,"end_character":66},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3711,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3712,"context_line":""},{"line_number":3713,"context_line":"    def test_unmanage_snapshot_invalid_snapshot(self):"},{"line_number":3714,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027, mock.Mock())"},{"line_number":3715,"context_line":"        self.share_manager.driver.driver_handles_share_servers \u003d False"},{"line_number":3716,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3717,"context_line":"                         \u0027_get_share_server\u0027,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_4ae30406","line":3714,"range":{"start_line":3714,"start_character":55,"end_line":3714,"end_character":66},"in_reply_to":"bae84128_5e4a5bad","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3763,"context_line":"                side_effect\u003dexception.ManilaException(message\u003d\u0027error\u0027)))"},{"line_number":3764,"context_line":"        manager.CONF.set_default(\u0027driver_handles_share_servers\u0027, False)"},{"line_number":3765,"context_line":"        self.mock_object(self.share_manager.driver, \"unmanage_snapshot\","},{"line_number":3766,"context_line":"                         mock.Mock())"},{"line_number":3767,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3768,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":3769,"context_line":"                         mock.Mock(return_value\u003dNone))"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_7e4f5fbd","line":3766,"range":{"start_line":3766,"start_character":25,"end_line":3766,"end_character":36},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3763,"context_line":"                side_effect\u003dexception.ManilaException(message\u003d\u0027error\u0027)))"},{"line_number":3764,"context_line":"        manager.CONF.set_default(\u0027driver_handles_share_servers\u0027, False)"},{"line_number":3765,"context_line":"        self.mock_object(self.share_manager.driver, \"unmanage_snapshot\","},{"line_number":3766,"context_line":"                         mock.Mock())"},{"line_number":3767,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3768,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":3769,"context_line":"                         mock.Mock(return_value\u003dNone))"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_0a2a9c2c","line":3766,"range":{"start_line":3766,"start_character":25,"end_line":3766,"end_character":36},"in_reply_to":"bae84128_7e4f5fbd","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3768,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":3769,"context_line":"                         mock.Mock(return_value\u003dNone))"},{"line_number":3770,"context_line":"        self.mock_object(self.share_manager.db, \u0027share_snapshot_destroy\u0027,"},{"line_number":3771,"context_line":"                         mock.Mock())"},{"line_number":3772,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":3773,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"},{"line_number":3774,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_1e50d35d","line":3771,"range":{"start_line":3771,"start_character":25,"end_line":3771,"end_character":36},"updated":"2016-02-21 22:56:04.000000000","message":"empty mock.Mock() unnecessary","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3768,"context_line":"                         \u0027_get_share_server\u0027,"},{"line_number":3769,"context_line":"                         mock.Mock(return_value\u003dNone))"},{"line_number":3770,"context_line":"        self.mock_object(self.share_manager.db, \u0027share_snapshot_destroy\u0027,"},{"line_number":3771,"context_line":"                         mock.Mock())"},{"line_number":3772,"context_line":"        share \u003d db_utils.create_share()"},{"line_number":3773,"context_line":"        snapshot \u003d db_utils.create_snapshot(share_id\u003dshare[\u0027id\u0027])"},{"line_number":3774,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_2a25e05b","line":3771,"range":{"start_line":3771,"start_character":25,"end_line":3771,"end_character":36},"in_reply_to":"bae84128_1e50d35d","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":3782,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3783,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3784,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3785,"context_line":"        if quota_error:"},{"line_number":3786,"context_line":"            self.assertRaises(exception.ManilaException,"},{"line_number":3787,"context_line":"                              quota.QUOTAS.reserve,"},{"line_number":3788,"context_line":"                              utils.IsAMatcher(context.RequestContext),"},{"line_number":3789,"context_line":"                              project_id\u003dsnapshot[\u0027project_id\u0027],"},{"line_number":3790,"context_line":"                              snapshots\u003d-1,"},{"line_number":3791,"context_line":"                              snapshots_gigabytes\u003d-snapshot[\u0027size\u0027])"},{"line_number":3792,"context_line":""},{"line_number":3793,"context_line":""},{"line_number":3794,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_7ee63fb5","line":3791,"range":{"start_line":3785,"start_character":8,"end_line":3791,"end_character":68},"updated":"2016-02-21 22:56:04.000000000","message":"you\u0027re mock raising the exception on line 3762, and you\u0027re checking that here? :) Please remove this check.. instead, you should check if the quota error was ignored correctly, i.e, if LOG.warning was called...","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":3782,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3783,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3784,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3785,"context_line":"        if quota_error:"},{"line_number":3786,"context_line":"            self.assertRaises(exception.ManilaException,"},{"line_number":3787,"context_line":"                              quota.QUOTAS.reserve,"},{"line_number":3788,"context_line":"                              utils.IsAMatcher(context.RequestContext),"},{"line_number":3789,"context_line":"                              project_id\u003dsnapshot[\u0027project_id\u0027],"},{"line_number":3790,"context_line":"                              snapshots\u003d-1,"},{"line_number":3791,"context_line":"                              snapshots_gigabytes\u003d-snapshot[\u0027size\u0027])"},{"line_number":3792,"context_line":""},{"line_number":3793,"context_line":""},{"line_number":3794,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_63ba7c0c","line":3791,"range":{"start_line":3785,"start_character":8,"end_line":3791,"end_character":68},"in_reply_to":"bae84128_7ee63fb5","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3625,"context_line":"            self.share_manager.manage_snapshot, self.context,"},{"line_number":3626,"context_line":"            snapshot[\u0027id\u0027], driver_options)"},{"line_number":3627,"context_line":""},{"line_number":3628,"context_line":"        self.assertTrue("},{"line_number":3629,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3630,"context_line":""},{"line_number":3631,"context_line":"    def test_manage_snapshot_invalid_snapshot(self):"},{"line_number":3632,"context_line":"        fake_share_server \u003d \u0027fake_share_server\u0027"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_2d6abdb3","line":3629,"range":{"start_line":3628,"start_character":8,"end_line":3629,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"this was set above. no need to assert it is still set.","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3625,"context_line":"            self.share_manager.manage_snapshot, self.context,"},{"line_number":3626,"context_line":"            snapshot[\u0027id\u0027], driver_options)"},{"line_number":3627,"context_line":""},{"line_number":3628,"context_line":"        self.assertTrue("},{"line_number":3629,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3630,"context_line":""},{"line_number":3631,"context_line":"    def test_manage_snapshot_invalid_snapshot(self):"},{"line_number":3632,"context_line":"        fake_share_server \u003d \u0027fake_share_server\u0027"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_a63f07d5","line":3629,"range":{"start_line":3628,"start_character":8,"end_line":3629,"end_character":67},"in_reply_to":"9aed3d3a_2d6abdb3","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3644,"context_line":"            self.share_manager.manage_snapshot, self.context,"},{"line_number":3645,"context_line":"            snapshot[\u0027id\u0027], driver_options)"},{"line_number":3646,"context_line":""},{"line_number":3647,"context_line":"        self.assertFalse("},{"line_number":3648,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3649,"context_line":"        self.assertEqual(fake_share_server,"},{"line_number":3650,"context_line":"                         self.share_manager._get_share_server("},{"line_number":3651,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_ed58d534","line":3648,"range":{"start_line":3647,"start_character":7,"end_line":3648,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"setting to false above. no need to assertFalse","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3646,"context_line":""},{"line_number":3647,"context_line":"        self.assertFalse("},{"line_number":3648,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3649,"context_line":"        self.assertEqual(fake_share_server,"},{"line_number":3650,"context_line":"                         self.share_manager._get_share_server("},{"line_number":3651,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3652,"context_line":""},{"line_number":3653,"context_line":"    def test_manage_snapshot_driver_exception(self):"},{"line_number":3654,"context_line":"        CustomException \u003d type(\u0027CustomException\u0027, (Exception,), {})"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_4d48e15b","line":3651,"range":{"start_line":3649,"start_character":9,"end_line":3651,"end_character":78},"updated":"2016-02-27 06:28:06.000000000","message":"this is mocked above to return fake_share_server.  This isn\u0027t needed.  Instead test that the mocked method was called as expected.","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3646,"context_line":""},{"line_number":3647,"context_line":"        self.assertFalse("},{"line_number":3648,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3649,"context_line":"        self.assertEqual(fake_share_server,"},{"line_number":3650,"context_line":"                         self.share_manager._get_share_server("},{"line_number":3651,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3652,"context_line":""},{"line_number":3653,"context_line":"    def test_manage_snapshot_driver_exception(self):"},{"line_number":3654,"context_line":"        CustomException \u003d type(\u0027CustomException\u0027, (Exception,), {})"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_a616e752","line":3651,"range":{"start_line":3649,"start_character":9,"end_line":3651,"end_character":78},"in_reply_to":"9aed3d3a_4d48e15b","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3674,"context_line":""},{"line_number":3675,"context_line":"        (self.share_manager.driver.manage_existing_snapshot."},{"line_number":3676,"context_line":"            assert_called_once_with(mock.ANY, driver_options))"},{"line_number":3677,"context_line":"        self.assertFalse("},{"line_number":3678,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3679,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3680,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3681,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_cda991e1","line":3678,"range":{"start_line":3677,"start_character":8,"end_line":3678,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"same","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3674,"context_line":""},{"line_number":3675,"context_line":"        (self.share_manager.driver.manage_existing_snapshot."},{"line_number":3676,"context_line":"            assert_called_once_with(mock.ANY, driver_options))"},{"line_number":3677,"context_line":"        self.assertFalse("},{"line_number":3678,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3679,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3680,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3681,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_e608ef2f","line":3678,"range":{"start_line":3677,"start_character":8,"end_line":3678,"end_character":67},"in_reply_to":"9aed3d3a_cda991e1","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3676,"context_line":"            assert_called_once_with(mock.ANY, driver_options))"},{"line_number":3677,"context_line":"        self.assertFalse("},{"line_number":3678,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3679,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3680,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3681,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3682,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3683,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_6dbb2528","line":3680,"range":{"start_line":3679,"start_character":8,"end_line":3680,"end_character":61},"updated":"2016-02-27 06:28:06.000000000","message":"test called_once_with instead of testing that it returns what you set above","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3676,"context_line":"            assert_called_once_with(mock.ANY, driver_options))"},{"line_number":3677,"context_line":"        self.assertFalse("},{"line_number":3678,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3679,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3680,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3681,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3682,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3683,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_a10d3139","line":3680,"range":{"start_line":3679,"start_character":8,"end_line":3680,"end_character":61},"in_reply_to":"9aed3d3a_6dbb2528","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3678,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3679,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3680,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3681,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3682,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3683,"context_line":""},{"line_number":3684,"context_line":"    @ddt.data("},{"line_number":3685,"context_line":"        {\u0027size\u0027: 1},"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_ed7d756f","line":3682,"range":{"start_line":3681,"start_character":8,"end_line":3682,"end_character":66},"updated":"2016-02-27 06:28:06.000000000","message":"test called with.  this just calls a mocked method.","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3678,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3679,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3680,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3681,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3682,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3683,"context_line":""},{"line_number":3684,"context_line":"    @ddt.data("},{"line_number":3685,"context_line":"        {\u0027size\u0027: 1},"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_211ac16e","line":3682,"range":{"start_line":3681,"start_character":8,"end_line":3682,"end_character":66},"in_reply_to":"9aed3d3a_ed7d756f","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3720,"context_line":"            utils.IsAMatcher(context.RequestContext),"},{"line_number":3721,"context_line":"            snapshot[\u0027project_id\u0027],"},{"line_number":3722,"context_line":"            {\u0027snapshots\u0027: 1, \u0027snapshot_gigabytes\u0027: size})"},{"line_number":3723,"context_line":"        self.assertFalse("},{"line_number":3724,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3725,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3726,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3727,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_8dedc927","line":3724,"range":{"start_line":3723,"start_character":8,"end_line":3724,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"delete this","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3720,"context_line":"            utils.IsAMatcher(context.RequestContext),"},{"line_number":3721,"context_line":"            snapshot[\u0027project_id\u0027],"},{"line_number":3722,"context_line":"            {\u0027snapshots\u0027: 1, \u0027snapshot_gigabytes\u0027: size})"},{"line_number":3723,"context_line":"        self.assertFalse("},{"line_number":3724,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3725,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3726,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3727,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_6151690e","line":3724,"range":{"start_line":3723,"start_character":8,"end_line":3724,"end_character":67},"in_reply_to":"9aed3d3a_8dedc927","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3722,"context_line":"            {\u0027snapshots\u0027: 1, \u0027snapshot_gigabytes\u0027: size})"},{"line_number":3723,"context_line":"        self.assertFalse("},{"line_number":3724,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3725,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3726,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3727,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3728,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3729,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_add1ad59","line":3726,"range":{"start_line":3725,"start_character":8,"end_line":3726,"end_character":61},"updated":"2016-02-27 06:28:06.000000000","message":"test called with not return value","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3722,"context_line":"            {\u0027snapshots\u0027: 1, \u0027snapshot_gigabytes\u0027: size})"},{"line_number":3723,"context_line":"        self.assertFalse("},{"line_number":3724,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3725,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3726,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3727,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3728,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3729,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_c1583535","line":3726,"range":{"start_line":3725,"start_character":8,"end_line":3726,"end_character":61},"in_reply_to":"9aed3d3a_add1ad59","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3724,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3725,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3726,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3727,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3728,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3729,"context_line":""},{"line_number":3730,"context_line":"    def test_unmanage_snapshot_invalid_driver_mode(self):"},{"line_number":3731,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_2dc63d9a","line":3728,"range":{"start_line":3727,"start_character":8,"end_line":3728,"end_character":66},"updated":"2016-02-27 06:28:06.000000000","message":"same","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3724,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3725,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3726,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3727,"context_line":"        self.share_manager.db.share_snapshot_get_all_for_share("},{"line_number":3728,"context_line":"            utils.IsAMatcher(context.RequestContext), share[\u0027id\u0027])"},{"line_number":3729,"context_line":""},{"line_number":3730,"context_line":"    def test_unmanage_snapshot_invalid_driver_mode(self):"},{"line_number":3731,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_a15b712d","line":3728,"range":{"start_line":3727,"start_character":8,"end_line":3728,"end_character":66},"in_reply_to":"9aed3d3a_2dc63d9a","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3741,"context_line":"            utils.IsAMatcher(context.RequestContext),"},{"line_number":3742,"context_line":"            snapshot[\u0027id\u0027],"},{"line_number":3743,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3744,"context_line":"        self.assertTrue("},{"line_number":3745,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3746,"context_line":""},{"line_number":3747,"context_line":"    def test_unmanage_snapshot_invalid_snapshot(self):"},{"line_number":3748,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_6dc0457c","line":3745,"range":{"start_line":3744,"start_character":8,"end_line":3745,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"delete this line","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3741,"context_line":"            utils.IsAMatcher(context.RequestContext),"},{"line_number":3742,"context_line":"            snapshot[\u0027id\u0027],"},{"line_number":3743,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3744,"context_line":"        self.assertTrue("},{"line_number":3745,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3746,"context_line":""},{"line_number":3747,"context_line":"    def test_unmanage_snapshot_invalid_snapshot(self):"},{"line_number":3748,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_e13d79bc","line":3745,"range":{"start_line":3744,"start_character":8,"end_line":3745,"end_character":67},"in_reply_to":"9aed3d3a_6dc0457c","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3762,"context_line":"            utils.IsAMatcher(context.RequestContext),"},{"line_number":3763,"context_line":"            snapshot[\u0027id\u0027],"},{"line_number":3764,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3765,"context_line":"        self.assertFalse("},{"line_number":3766,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3767,"context_line":"        self.assertEqual(\u0027fake_share_server\u0027,"},{"line_number":3768,"context_line":"                         self.share_manager._get_share_server("},{"line_number":3769,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_8d3b099c","line":3766,"range":{"start_line":3765,"start_character":8,"end_line":3766,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"delete","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3762,"context_line":"            utils.IsAMatcher(context.RequestContext),"},{"line_number":3763,"context_line":"            snapshot[\u0027id\u0027],"},{"line_number":3764,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3765,"context_line":"        self.assertFalse("},{"line_number":3766,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3767,"context_line":"        self.assertEqual(\u0027fake_share_server\u0027,"},{"line_number":3768,"context_line":"                         self.share_manager._get_share_server("},{"line_number":3769,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_2148015b","line":3766,"range":{"start_line":3765,"start_character":8,"end_line":3766,"end_character":67},"in_reply_to":"9aed3d3a_8d3b099c","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3764,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3765,"context_line":"        self.assertFalse("},{"line_number":3766,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3767,"context_line":"        self.assertEqual(\u0027fake_share_server\u0027,"},{"line_number":3768,"context_line":"                         self.share_manager._get_share_server("},{"line_number":3769,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3770,"context_line":""},{"line_number":3771,"context_line":"    def test_unmanage_snapshot_invalid_share(self):"},{"line_number":3772,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_6d57a5ce","line":3769,"range":{"start_line":3767,"start_character":8,"end_line":3769,"end_character":78},"updated":"2016-02-27 06:28:06.000000000","message":"don\u0027t test return value, test called with.","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3764,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3765,"context_line":"        self.assertFalse("},{"line_number":3766,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3767,"context_line":"        self.assertEqual(\u0027fake_share_server\u0027,"},{"line_number":3768,"context_line":"                         self.share_manager._get_share_server("},{"line_number":3769,"context_line":"                             utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3770,"context_line":""},{"line_number":3771,"context_line":"    def test_unmanage_snapshot_invalid_share(self):"},{"line_number":3772,"context_line":"        self.mock_object(self.share_manager, \u0027driver\u0027)"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_81758d99","line":3769,"range":{"start_line":3767,"start_character":8,"end_line":3769,"end_character":78},"in_reply_to":"9aed3d3a_6d57a5ce","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3789,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3790,"context_line":"        self.share_manager.driver.unmanage_snapshot.assert_called_once_with("},{"line_number":3791,"context_line":"            mock.ANY)"},{"line_number":3792,"context_line":"        self.assertFalse("},{"line_number":3793,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3794,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3795,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3796,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_ad5fede3","line":3793,"range":{"start_line":3792,"start_character":8,"end_line":3793,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"delete","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3789,"context_line":"            {\u0027status\u0027: constants.STATUS_UNMANAGE_ERROR})"},{"line_number":3790,"context_line":"        self.share_manager.driver.unmanage_snapshot.assert_called_once_with("},{"line_number":3791,"context_line":"            mock.ANY)"},{"line_number":3792,"context_line":"        self.assertFalse("},{"line_number":3793,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3794,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3795,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3796,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_416425e3","line":3793,"range":{"start_line":3792,"start_character":8,"end_line":3793,"end_character":67},"in_reply_to":"9aed3d3a_ad5fede3","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3791,"context_line":"            mock.ANY)"},{"line_number":3792,"context_line":"        self.assertFalse("},{"line_number":3793,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3794,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3795,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3796,"context_line":""},{"line_number":3797,"context_line":"    @ddt.data(False, True)"},{"line_number":3798,"context_line":"    def test_unmanage_snapshot_valid_snapshot(self, quota_error):"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_6d6e8596","line":3795,"range":{"start_line":3794,"start_character":8,"end_line":3795,"end_character":61},"updated":"2016-02-27 06:28:06.000000000","message":"test mocks called-with not return value","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3791,"context_line":"            mock.ANY)"},{"line_number":3792,"context_line":"        self.assertFalse("},{"line_number":3793,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3794,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3795,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3796,"context_line":""},{"line_number":3797,"context_line":"    @ddt.data(False, True)"},{"line_number":3798,"context_line":"    def test_unmanage_snapshot_valid_snapshot(self, quota_error):"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_215f610f","line":3795,"range":{"start_line":3794,"start_character":8,"end_line":3795,"end_character":61},"in_reply_to":"9aed3d3a_6d6e8596","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3800,"context_line":"            self.mock_object(quota.QUOTAS, \u0027reserve\u0027, mock.Mock("},{"line_number":3801,"context_line":"                side_effect\u003dexception.ManilaException(message\u003d\u0027error\u0027)))"},{"line_number":3802,"context_line":"        mock_log_warning \u003d self.mock_object(manager.LOG, \u0027warning\u0027)"},{"line_number":3803,"context_line":"        manager.CONF.set_default(\u0027driver_handles_share_servers\u0027, False)"},{"line_number":3804,"context_line":"        self.mock_object(self.share_manager.driver, \"unmanage_snapshot\")"},{"line_number":3805,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3806,"context_line":"                         \u0027_get_share_server\u0027,"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_8d3029a0","line":3803,"range":{"start_line":3803,"start_character":8,"end_line":3803,"end_character":71},"updated":"2016-02-27 06:28:06.000000000","message":"curious that this test uses manager.CONF unlike the others","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3800,"context_line":"            self.mock_object(quota.QUOTAS, \u0027reserve\u0027, mock.Mock("},{"line_number":3801,"context_line":"                side_effect\u003dexception.ManilaException(message\u003d\u0027error\u0027)))"},{"line_number":3802,"context_line":"        mock_log_warning \u003d self.mock_object(manager.LOG, \u0027warning\u0027)"},{"line_number":3803,"context_line":"        manager.CONF.set_default(\u0027driver_handles_share_servers\u0027, False)"},{"line_number":3804,"context_line":"        self.mock_object(self.share_manager.driver, \"unmanage_snapshot\")"},{"line_number":3805,"context_line":"        self.mock_object(self.share_manager,"},{"line_number":3806,"context_line":"                         \u0027_get_share_server\u0027,"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_01b17d47","line":3803,"range":{"start_line":3803,"start_character":8,"end_line":3803,"end_character":71},"in_reply_to":"9aed3d3a_8d3029a0","updated":"2016-02-27 18:32:01.000000000","message":"I don\u0027t remember why, but I\u0027d better to consistent.","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3815,"context_line":"            mock.ANY)"},{"line_number":3816,"context_line":"        self.share_manager.db.share_snapshot_destroy.assert_called_once_with("},{"line_number":3817,"context_line":"            mock.ANY, snapshot[\u0027id\u0027])"},{"line_number":3818,"context_line":"        self.assertFalse("},{"line_number":3819,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3820,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3821,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3822,"context_line":"        if quota_error:"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_0df6d9d6","line":3819,"range":{"start_line":3818,"start_character":8,"end_line":3819,"end_character":67},"updated":"2016-02-27 06:28:06.000000000","message":"delete? depends why you used CONF above","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3815,"context_line":"            mock.ANY)"},{"line_number":3816,"context_line":"        self.share_manager.db.share_snapshot_destroy.assert_called_once_with("},{"line_number":3817,"context_line":"            mock.ANY, snapshot[\u0027id\u0027])"},{"line_number":3818,"context_line":"        self.assertFalse("},{"line_number":3819,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3820,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3821,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3822,"context_line":"        if quota_error:"}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_e1abb9d4","line":3819,"range":{"start_line":3818,"start_character":8,"end_line":3819,"end_character":67},"in_reply_to":"9aed3d3a_0df6d9d6","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"3ffaa27ae6127b12e4e7cad4dcd9efd33c4c35b6","unresolved":false,"context_lines":[{"line_number":3817,"context_line":"            mock.ANY, snapshot[\u0027id\u0027])"},{"line_number":3818,"context_line":"        self.assertFalse("},{"line_number":3819,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3820,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3821,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3822,"context_line":"        if quota_error:"},{"line_number":3823,"context_line":"            self.assertTrue(mock_log_warning.called)"},{"line_number":3824,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_cd2a312c","line":3821,"range":{"start_line":3820,"start_character":8,"end_line":3821,"end_character":61},"updated":"2016-02-27 06:28:06.000000000","message":"test called not returns","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1ec2f9ef787e94ccdc267795c9420c6d3c4e1e7a","unresolved":false,"context_lines":[{"line_number":3817,"context_line":"            mock.ANY, snapshot[\u0027id\u0027])"},{"line_number":3818,"context_line":"        self.assertFalse("},{"line_number":3819,"context_line":"            self.share_manager.driver.driver_handles_share_servers)"},{"line_number":3820,"context_line":"        self.assertIsNone(self.share_manager._get_share_server("},{"line_number":3821,"context_line":"            utils.IsAMatcher(context.RequestContext), share))"},{"line_number":3822,"context_line":"        if quota_error:"},{"line_number":3823,"context_line":"            self.assertTrue(mock_log_warning.called)"},{"line_number":3824,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"9aed3d3a_21b6413d","line":3821,"range":{"start_line":3820,"start_character":8,"end_line":3821,"end_character":61},"in_reply_to":"9aed3d3a_cd2a312c","updated":"2016-02-27 18:32:01.000000000","message":"Done","commit_id":"34249728c9e25ab40a2af113addfeb0d1c150cbf"}],"manila/tests/share/test_rpcapi.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        self._test_share_api(\u0027manage_snapshot\u0027,"},{"line_number":276,"context_line":"                             rpc_method\u003d\u0027cast\u0027,"},{"line_number":277,"context_line":"                             version\u003d\u00271.9\u0027,"},{"line_number":278,"context_line":"                             snapshot\u003dself.fake_snapshot,"},{"line_number":279,"context_line":"                             host\u003d\u0027fake_host\u0027,"},{"line_number":280,"context_line":"                             driver_options\u003d{\u0027volume_snapshot_id\u0027: \u0027fake\u0027})"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_9ef1836d","line":278,"range":{"start_line":278,"start_character":29,"end_line":278,"end_character":57},"updated":"2016-02-21 22:56:04.000000000","message":"?\n\nRPC and manager calls expect snapshot_id..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        self._test_share_api(\u0027manage_snapshot\u0027,"},{"line_number":276,"context_line":"                             rpc_method\u003d\u0027cast\u0027,"},{"line_number":277,"context_line":"                             version\u003d\u00271.9\u0027,"},{"line_number":278,"context_line":"                             snapshot\u003dself.fake_snapshot,"},{"line_number":279,"context_line":"                             host\u003d\u0027fake_host\u0027,"},{"line_number":280,"context_line":"                             driver_options\u003d{\u0027volume_snapshot_id\u0027: \u0027fake\u0027})"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_c9dba920","line":278,"range":{"start_line":278,"start_character":29,"end_line":278,"end_character":57},"in_reply_to":"bae84128_9ef1836d","updated":"2016-02-24 20:50:57.000000000","message":"We are testing the method in rpcapi.py.  It is snapshot not snapshot_id.\n\nhttps://review.openstack.org/#/c/249542/64/manila/share/rpcapi.py","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        self._test_share_api(\u0027unmanage_snapshot\u0027,"},{"line_number":284,"context_line":"                             rpc_method\u003d\u0027cast\u0027,"},{"line_number":285,"context_line":"                             version\u003d\u00271.9\u0027,"},{"line_number":286,"context_line":"                             snapshot\u003dself.fake_snapshot,"},{"line_number":287,"context_line":"                             host\u003d\u0027fake_host\u0027)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    class Desthost(object):"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_deeb0b77","line":286,"range":{"start_line":286,"start_character":29,"end_line":286,"end_character":56},"updated":"2016-02-21 22:56:04.000000000","message":"same here","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        self._test_share_api(\u0027unmanage_snapshot\u0027,"},{"line_number":284,"context_line":"                             rpc_method\u003d\u0027cast\u0027,"},{"line_number":285,"context_line":"                             version\u003d\u00271.9\u0027,"},{"line_number":286,"context_line":"                             snapshot\u003dself.fake_snapshot,"},{"line_number":287,"context_line":"                             host\u003d\u0027fake_host\u0027)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    class Desthost(object):"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_e9eaedab","line":286,"range":{"start_line":286,"start_character":29,"end_line":286,"end_character":56},"in_reply_to":"bae84128_deeb0b77","updated":"2016-02-24 20:50:57.000000000","message":"See above.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila_tempest_tests/config.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8ff6174cd33672717126bc6a771877810a16e8cf","unresolved":false,"context_lines":[{"line_number":36,"context_line":"               help\u003d\"The minimum api microversion is configured to be the \""},{"line_number":37,"context_line":"                    \"value of the minimum microversion supported by Manila.\"),"},{"line_number":38,"context_line":"    cfg.StrOpt(\"max_api_microversion\","},{"line_number":39,"context_line":"               default\u003d\"2.10\","},{"line_number":40,"context_line":"               help\u003d\"The maximum api microversion is configured to be the \""},{"line_number":41,"context_line":"                    \"value of the latest microversion supported by Manila.\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\"region\","}],"source_content_type":"text/x-python","patch_set":32,"id":"5a5ae5dd_8cb667f7","line":39,"range":{"start_line":39,"start_character":24,"end_line":39,"end_character":28},"updated":"2016-02-07 07:47:49.000000000","message":"Tempest fails because it should be 2.11","commit_id":"7fb08e6bf4e53d6ac068f96ba87796c6fc664e67"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f6f60c42bbe6703f60029cee649261a210e318e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"               help\u003d\"The minimum api microversion is configured to be the \""},{"line_number":37,"context_line":"                    \"value of the minimum microversion supported by Manila.\"),"},{"line_number":38,"context_line":"    cfg.StrOpt(\"max_api_microversion\","},{"line_number":39,"context_line":"               default\u003d\"2.10\","},{"line_number":40,"context_line":"               help\u003d\"The maximum api microversion is configured to be the \""},{"line_number":41,"context_line":"                    \"value of the latest microversion supported by Manila.\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\"region\","}],"source_content_type":"text/x-python","patch_set":32,"id":"5a5ae5dd_7595eb84","line":39,"range":{"start_line":39,"start_character":24,"end_line":39,"end_character":28},"in_reply_to":"5a5ae5dd_8cb667f7","updated":"2016-02-08 03:33:39.000000000","message":"Done","commit_id":"7fb08e6bf4e53d6ac068f96ba87796c6fc664e67"}],"manila_tempest_tests/services/share/v2/json/shares_client.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            body \u003d self.get_snapshot(snapshot_id, version\u003dversion)"},{"line_number":498,"context_line":"            snapshot_status \u003d body[\u0027status\u0027]"},{"line_number":499,"context_line":"            if \u0027error\u0027 in snapshot_status:"},{"line_number":500,"context_line":"                raise share_exceptions.\\"},{"line_number":501,"context_line":"                    SnapshotBuildErrorException(snapshot_id\u003dsnapshot_id)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"            if int(time.time()) - start \u003e\u003d self.build_timeout:"},{"line_number":504,"context_line":"                message \u003d (\u0027Share Snapshot %s failed to reach %s status \u0027"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_9ebb830e","line":501,"range":{"start_line":500,"start_character":22,"end_line":501,"end_character":72},"updated":"2016-02-15 07:08:45.000000000","message":"please use parenthesis instead of \\","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            body \u003d self.get_snapshot(snapshot_id, version\u003dversion)"},{"line_number":498,"context_line":"            snapshot_status \u003d body[\u0027status\u0027]"},{"line_number":499,"context_line":"            if \u0027error\u0027 in snapshot_status:"},{"line_number":500,"context_line":"                raise share_exceptions.\\"},{"line_number":501,"context_line":"                    SnapshotBuildErrorException(snapshot_id\u003dsnapshot_id)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"            if int(time.time()) - start \u003e\u003d self.build_timeout:"},{"line_number":504,"context_line":"                message \u003d (\u0027Share Snapshot %s failed to reach %s status \u0027"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_b3edb0f1","line":501,"range":{"start_line":500,"start_character":22,"end_line":501,"end_character":72},"in_reply_to":"dae33548_9ebb830e","updated":"2016-02-16 06:23:43.000000000","message":"Done","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            url \u003d \u0027snapshots/manage\u0027"},{"line_number":522,"context_line":"        body \u003d json.dumps(post_body)"},{"line_number":523,"context_line":"        resp, body \u003d self.post(url, body, version\u003dversion)"},{"line_number":524,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":525,"context_line":"        return self._parse_resp(body)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def unmanage_snapshot(self, snapshot_id, version\u003dLATEST_MICROVERSION,"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_1e465323","line":524,"range":{"start_line":524,"start_character":30,"end_line":524,"end_character":33},"updated":"2016-02-15 07:08:45.000000000","message":"This should really be 202","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fe06a8cfacd1cf786f361637940b6d797cb36b1c","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            url \u003d \u0027snapshots/manage\u0027"},{"line_number":522,"context_line":"        body \u003d json.dumps(post_body)"},{"line_number":523,"context_line":"        resp, body \u003d self.post(url, body, version\u003dversion)"},{"line_number":524,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":525,"context_line":"        return self._parse_resp(body)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def unmanage_snapshot(self, snapshot_id, version\u003dLATEST_MICROVERSION,"}],"source_content_type":"text/x-python","patch_set":56,"id":"dae33548_c43facd4","line":524,"updated":"2016-02-16 15:56:56.000000000","message":"status should be 202 instead of 200.  I\u0027ll fix it.","commit_id":"6d23a60b108bc3c9c8c6f0104e5cac79121e85d4"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def manage_snapshot(self, share_id, provider_location,"},{"line_number":510,"context_line":"                        name\u003dNone, description\u003dNone,"},{"line_number":511,"context_line":"                        version\u003dLATEST_MICROVERSION, url\u003dNone,"},{"line_number":512,"context_line":"                        driver_options\u003dNone):"},{"line_number":513,"context_line":"        post_body \u003d {"},{"line_number":514,"context_line":"            \"snapshot\": {"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_5ea6db53","line":511,"range":{"start_line":511,"start_character":53,"end_line":511,"end_character":62},"updated":"2016-02-21 22:56:04.000000000","message":"why allow overriding the URL?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def manage_snapshot(self, share_id, provider_location,"},{"line_number":510,"context_line":"                        name\u003dNone, description\u003dNone,"},{"line_number":511,"context_line":"                        version\u003dLATEST_MICROVERSION, url\u003dNone,"},{"line_number":512,"context_line":"                        driver_options\u003dNone):"},{"line_number":513,"context_line":"        post_body \u003d {"},{"line_number":514,"context_line":"            \"snapshot\": {"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_fd5bc0f4","line":511,"range":{"start_line":511,"start_character":53,"end_line":511,"end_character":62},"in_reply_to":"bae84128_5ea6db53","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":509,"context_line":"    def manage_snapshot(self, share_id, provider_location,"},{"line_number":510,"context_line":"                        name\u003dNone, description\u003dNone,"},{"line_number":511,"context_line":"                        version\u003dLATEST_MICROVERSION, url\u003dNone,"},{"line_number":512,"context_line":"                        driver_options\u003dNone):"},{"line_number":513,"context_line":"        post_body \u003d {"},{"line_number":514,"context_line":"            \"snapshot\": {"},{"line_number":515,"context_line":"                \"share_id\": share_id,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_1eac5334","line":512,"range":{"start_line":512,"start_character":43,"end_line":512,"end_character":45},"updated":"2016-02-21 22:56:04.000000000","message":"Please assign a name and description like other methods if not provided.. \n\n \n    name \u003d name or data_utils.rand_name(\"tempest-created-share-snap\")\n    description \u003d description or \"tempest-created-share-snap-desc\")\n \n\nYou may chose to replace \u0027created\u0027 with \u0027managed\u0027, but that\u0027s minor detail. If resources are left behind, this will help in the cleanup..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":509,"context_line":"    def manage_snapshot(self, share_id, provider_location,"},{"line_number":510,"context_line":"                        name\u003dNone, description\u003dNone,"},{"line_number":511,"context_line":"                        version\u003dLATEST_MICROVERSION, url\u003dNone,"},{"line_number":512,"context_line":"                        driver_options\u003dNone):"},{"line_number":513,"context_line":"        post_body \u003d {"},{"line_number":514,"context_line":"            \"snapshot\": {"},{"line_number":515,"context_line":"                \"share_id\": share_id,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_9d6b9485","line":512,"range":{"start_line":512,"start_character":43,"end_line":512,"end_character":45},"in_reply_to":"bae84128_1eac5334","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        return self._parse_resp(body)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def unmanage_snapshot(self, snapshot_id, version\u003dLATEST_MICROVERSION,"},{"line_number":530,"context_line":"                          url\u003dNone, action_name\u003dNone, body\u003dNone):"},{"line_number":531,"context_line":"        if url is None:"},{"line_number":532,"context_line":"            url \u003d \u0027snapshots\u0027"},{"line_number":533,"context_line":"        if action_name is None:"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_be63a719","line":530,"range":{"start_line":530,"start_character":26,"end_line":530,"end_character":34},"updated":"2016-02-21 22:56:04.000000000","message":"why allow overriding the URL?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        return self._parse_resp(body)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def unmanage_snapshot(self, snapshot_id, version\u003dLATEST_MICROVERSION,"},{"line_number":530,"context_line":"                          url\u003dNone, action_name\u003dNone, body\u003dNone):"},{"line_number":531,"context_line":"        if url is None:"},{"line_number":532,"context_line":"            url \u003d \u0027snapshots\u0027"},{"line_number":533,"context_line":"        if action_name is None:"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_9e4d039c","line":530,"range":{"start_line":530,"start_character":36,"end_line":530,"end_character":52},"updated":"2016-02-21 22:56:04.000000000","message":"why allow overriding the term \u0027action\u0027? This will always be a /snapshots/action resource, isn\u0027t it?\n\nDo you want to add another route at a later stage?\n  \n    /snapshots/{id}/unmanage\n\n?","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        return self._parse_resp(body)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def unmanage_snapshot(self, snapshot_id, version\u003dLATEST_MICROVERSION,"},{"line_number":530,"context_line":"                          url\u003dNone, action_name\u003dNone, body\u003dNone):"},{"line_number":531,"context_line":"        if url is None:"},{"line_number":532,"context_line":"            url \u003d \u0027snapshots\u0027"},{"line_number":533,"context_line":"        if action_name is None:"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_3dd9a884","line":530,"range":{"start_line":530,"start_character":36,"end_line":530,"end_character":52},"in_reply_to":"bae84128_9e4d039c","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"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":"b82fe436720bd93f21a4c8e4fe7edc641228b733","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # because cinder volume snapshots won\u0027t be deleted."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    @base.skip_if_microversion_not_supported(\"2.10\")"},{"line_number":36,"context_line":"    @testtools.skipIf("},{"line_number":37,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":38,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_ddfbb345","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":52},"updated":"2016-02-06 19:21:31.000000000","message":"Better to use \"lt\" or \u0027gt\u0027 for case when 2.10 will be removed and we will be OK running it with higher versions 2.11+","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"10fcfb4e72acaa62710e72d7467e6bc84ba3723d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # because cinder volume snapshots won\u0027t be deleted."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    @base.skip_if_microversion_not_supported(\"2.10\")"},{"line_number":36,"context_line":"    @testtools.skipIf("},{"line_number":37,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":38,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_509a3dba","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":52},"in_reply_to":"5a5ae5dd_0cecb7f1","updated":"2016-02-08 03:33:20.000000000","message":"Got it.  Thanks!","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a49d809b5afc779ae2a6c3118c69ceee58044084","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # because cinder volume snapshots won\u0027t be deleted."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    @base.skip_if_microversion_not_supported(\"2.10\")"},{"line_number":36,"context_line":"    @testtools.skipIf("},{"line_number":37,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":38,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_0cecb7f1","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":52},"in_reply_to":"5a5ae5dd_114934b7","updated":"2016-02-07 07:46:18.000000000","message":"This decorator will return False if minimal supported version becomes 2.11 or higher. It is not the expected behavior. Expected is to support any version higher than 2.10 or equal to it. So, I proposed to use \"range\"-checking decorator as [1]\n\n[1] https://github.com/openstack/manila/blob/afeb366fd30fea70c7de905e54b39347bc411edc/manila_tempest_tests/utils.py#L39","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"835ae5faa83e10278861452fadb7cacfbdfa42b9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # because cinder volume snapshots won\u0027t be deleted."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    @base.skip_if_microversion_not_supported(\"2.10\")"},{"line_number":36,"context_line":"    @testtools.skipIf("},{"line_number":37,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":38,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_114934b7","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":52},"in_reply_to":"5a5ae5dd_ddfbb345","updated":"2016-02-07 05:52:07.000000000","message":"I\u0027m not sure what you meant.\n\nis_microversion_supported(micro version) in utils.py returns the following:\n\nreturn bottom \u003c\u003d microversion \u003c\u003d top\n\nSo if the new max API version \"top\" becomes 2.11 or 2.12, is_microversion_supported still returns True.\n\nWill need to clarify with you.","commit_id":"006654a08f6bb685dc256864eb0a3a7978f79b4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # Load all share data (host, etc.)"},{"line_number":75,"context_line":"        for share in shares_created:"},{"line_number":76,"context_line":"            cls.shares.append(cls.shares_v2_client.get_share(share[\u0027id\u0027]))"},{"line_number":77,"context_line":"            if index \u003e 0:"},{"line_number":78,"context_line":"                continue"},{"line_number":79,"context_line":"            # Create snapshot"},{"line_number":80,"context_line":"            snap_name \u003d data_utils.rand_name(\"tempest-snapshot-name\")"},{"line_number":81,"context_line":"            snap_desc \u003d data_utils.rand_name("}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_fea0cfa7","line":78,"range":{"start_line":77,"start_character":12,"end_line":78,"end_character":24},"updated":"2016-02-15 07:08:45.000000000","message":"why? Looks like you\u0027re running the following commands in the loop only once...","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # Load all share data (host, etc.)"},{"line_number":75,"context_line":"        for share in shares_created:"},{"line_number":76,"context_line":"            cls.shares.append(cls.shares_v2_client.get_share(share[\u0027id\u0027]))"},{"line_number":77,"context_line":"            if index \u003e 0:"},{"line_number":78,"context_line":"                continue"},{"line_number":79,"context_line":"            # Create snapshot"},{"line_number":80,"context_line":"            snap_name \u003d data_utils.rand_name(\"tempest-snapshot-name\")"},{"line_number":81,"context_line":"            snap_desc \u003d data_utils.rand_name("}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_33afe095","line":78,"range":{"start_line":77,"start_character":12,"end_line":78,"end_character":24},"in_reply_to":"dae33548_fea0cfa7","updated":"2016-02-16 06:23:43.000000000","message":"Done","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            raise cls.skipException(message)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # Create share type"},{"line_number":49,"context_line":"        cls.st_name \u003d data_utils.rand_name(\"manage-st-name\")"},{"line_number":50,"context_line":"        cls.extra_specs \u003d {"},{"line_number":51,"context_line":"            \u0027storage_protocol\u0027: CONF.share.capability_storage_protocol,"},{"line_number":52,"context_line":"            \u0027driver_handles_share_servers\u0027: False,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_be18c785","line":49,"range":{"start_line":49,"start_character":44,"end_line":49,"end_character":58},"updated":"2016-02-21 22:56:04.000000000","message":"please add a tempest- prefix","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            raise cls.skipException(message)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # Create share type"},{"line_number":49,"context_line":"        cls.st_name \u003d data_utils.rand_name(\"manage-st-name\")"},{"line_number":50,"context_line":"        cls.extra_specs \u003d {"},{"line_number":51,"context_line":"            \u0027storage_protocol\u0027: CONF.share.capability_storage_protocol,"},{"line_number":52,"context_line":"            \u0027driver_handles_share_servers\u0027: False,"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_7dedf0ee","line":49,"range":{"start_line":49,"start_character":44,"end_line":49,"end_character":58},"in_reply_to":"bae84128_be18c785","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"fc445d99bb9a933c0f76009d759b9bc0e9e06764","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        get \u003d self.shares_v2_client.get_snapshot(snapshot[\u0027id\u0027])"},{"line_number":114,"context_line":"        self.assertEqual(name, get[\u0027name\u0027])"},{"line_number":115,"context_line":"        self.assertEqual(description, get[\u0027description\u0027])"},{"line_number":116,"context_line":"        self.assertEqual(snapshot[\u0027share_id\u0027], get[\u0027share_id\u0027])"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        snapshot \u003d self.shares_v2_client.get_snapshot(snapshot[\u0027id\u0027])"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_3914d142","line":116,"range":{"start_line":116,"start_character":7,"end_line":116,"end_character":63},"updated":"2016-02-21 22:56:04.000000000","message":"assert the provider location in the API response..","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b124c4c594157bf202ab4117544c49ee789767fc","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        get \u003d self.shares_v2_client.get_snapshot(snapshot[\u0027id\u0027])"},{"line_number":114,"context_line":"        self.assertEqual(name, get[\u0027name\u0027])"},{"line_number":115,"context_line":"        self.assertEqual(description, get[\u0027description\u0027])"},{"line_number":116,"context_line":"        self.assertEqual(snapshot[\u0027share_id\u0027], get[\u0027share_id\u0027])"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        snapshot \u003d self.shares_v2_client.get_snapshot(snapshot[\u0027id\u0027])"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_1d98246a","line":116,"range":{"start_line":116,"start_character":7,"end_line":116,"end_character":63},"in_reply_to":"bae84128_3914d142","updated":"2016-02-24 20:50:57.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"}],"manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"b5fbd074d7c5ab6f1b29900d601f5443541b2d6d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                          \u0027fake-share-id\u0027,"},{"line_number":46,"context_line":"                          \u0027fake-vol-snap-id\u0027,"},{"line_number":47,"context_line":"                          driver_options\u003d{})"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class ManageCIFSSnapshotNegativeTest(ManageNFSSnapshotNegativeTest):"},{"line_number":51,"context_line":"    protocol \u003d \u0027cifs\u0027"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_0908f127","line":48,"updated":"2016-02-24 18:16:58.000000000","message":"Would be great to have case with attempt to manage already existing snapshot.","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"156ed34ae7a930520e7dd5fdf39718d9a8a29dbd","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                          \u0027fake-share-id\u0027,"},{"line_number":46,"context_line":"                          \u0027fake-vol-snap-id\u0027,"},{"line_number":47,"context_line":"                          driver_options\u003d{})"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class ManageCIFSSnapshotNegativeTest(ManageNFSSnapshotNegativeTest):"},{"line_number":51,"context_line":"    protocol \u003d \u0027cifs\u0027"}],"source_content_type":"text/x-python","patch_set":64,"id":"bae84128_033553f6","line":48,"in_reply_to":"bae84128_0908f127","updated":"2016-02-25 05:01:10.000000000","message":"Done","commit_id":"099f2112ce0346dd7af298aa47a3efe9f7f0ecdc"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"31d71dc270a4f295679702cb445f6ca34569af61","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    protocol \u003d \u0027nfs\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    @base.skip_if_microversion_lt(\"2.12\")"},{"line_number":33,"context_line":"    @testtools.skipIf("},{"line_number":34,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":35,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_41c76945","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":41},"updated":"2016-02-25 20:24:45.000000000","message":"it seems to me that if microversion is less than \"2.12\", then it would also be true for \"skip_if_microversion_not_supported\". On a microversion \"2.11\", it is less than \"2.12\", so \"2.12\" is not supported. In what situation is this necessary instead of \"skip_if_microversion_not_supported\"?","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f01fd80e5fe8cd0314141ee145f16b75f5a45a03","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    protocol \u003d \u0027nfs\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    @base.skip_if_microversion_lt(\"2.12\")"},{"line_number":33,"context_line":"    @testtools.skipIf("},{"line_number":34,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":35,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_91affae2","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":41},"in_reply_to":"9aed3d3a_41c76945","updated":"2016-02-25 21:26:41.000000000","message":"This is changed from skip_if_microversion_not_supported to this to address Valeriy\u0027s concerns.","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"09e5878a77fc24cf30a54b8444bb585b5e5556d3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    protocol \u003d \u0027nfs\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    @base.skip_if_microversion_lt(\"2.12\")"},{"line_number":33,"context_line":"    @testtools.skipIf("},{"line_number":34,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":35,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_97688abc","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":41},"in_reply_to":"9aed3d3a_91affae2","updated":"2016-02-25 22:07:53.000000000","message":"Rodrigo, this change will rule when minimum microversion becomes 2.12+","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"89971c4f03c6528bccb68628221b868bd60493d2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    protocol \u003d \u0027nfs\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    @base.skip_if_microversion_lt(\"2.12\")"},{"line_number":33,"context_line":"    @testtools.skipIf("},{"line_number":34,"context_line":"        CONF.share.multitenancy_enabled,"},{"line_number":35,"context_line":"        \"Only for driver_handles_share_servers \u003d False driver mode.\")"}],"source_content_type":"text/x-python","patch_set":70,"id":"9aed3d3a_c576dc3d","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":41},"in_reply_to":"9aed3d3a_97688abc","updated":"2016-02-25 23:05:05.000000000","message":"Thanks! I understand now. If this merges first, I will update my patches to use it. \u003d)","commit_id":"e67ae72857b999638cc40bef36b789e7f0e1d867"}],"manila_tempest_tests/utils.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    return lambda f: f"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def skip_if_microversion_lt(microversion):"},{"line_number":85,"context_line":"    \"\"\"Decorator for tests that are microversion-specific.\"\"\""},{"line_number":86,"context_line":"    if is_microversion_lt(CONF.share.max_api_microversion, microversion):"},{"line_number":87,"context_line":"        reason \u003d (\"Skipped. Test requires microversion greater than or \""},{"line_number":88,"context_line":"                  \"equal to \u0027%s\u0027.\" % microversion)"},{"line_number":89,"context_line":"        return testtools.skip(reason)"},{"line_number":90,"context_line":"    return lambda f: f"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def rand_ip():"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_9e73834d","line":90,"range":{"start_line":84,"start_character":0,"end_line":90,"end_character":22},"updated":"2016-02-15 07:08:45.000000000","message":"the method on line 76 is the same as this method..","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    return lambda f: f"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def skip_if_microversion_lt(microversion):"},{"line_number":85,"context_line":"    \"\"\"Decorator for tests that are microversion-specific.\"\"\""},{"line_number":86,"context_line":"    if is_microversion_lt(CONF.share.max_api_microversion, microversion):"},{"line_number":87,"context_line":"        reason \u003d (\"Skipped. Test requires microversion greater than or \""},{"line_number":88,"context_line":"                  \"equal to \u0027%s\u0027.\" % microversion)"},{"line_number":89,"context_line":"        return testtools.skip(reason)"},{"line_number":90,"context_line":"    return lambda f: f"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def rand_ip():"}],"source_content_type":"text/x-python","patch_set":54,"id":"dae33548_13de1c11","line":90,"range":{"start_line":84,"start_character":0,"end_line":90,"end_character":22},"in_reply_to":"dae33548_9e73834d","updated":"2016-02-16 06:23:43.000000000","message":"I added this method to address Valeriy\u0027s comments.","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"}],"releasenotes/notes/manage-unmanage-snapshot-bd92164472638f44.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5ff88d26f087bd3247391552068280a524a9d289","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Manage and unmanage snapshot."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a7b0d38_488c4c7f","line":3,"range":{"start_line":3,"start_character":32,"end_line":3,"end_character":33},"updated":"2015-12-24 19:02:15.000000000","message":"Thanks, #TIL. :) Added reno to my patch as well.","commit_id":"b33a3211135bc52452ee76c7211059eba3c14387"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d54fee9b26c20e23dece3943964b4be2e566f3f0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Manage and unmanage snapshot."},{"line_number":4,"context_line":"  - Get driver private data."}],"source_content_type":"text/x-yaml","patch_set":54,"id":"dae33548_1eb5b3cc","line":4,"range":{"start_line":4,"start_character":5,"end_line":4,"end_character":28},"updated":"2016-02-15 07:08:45.000000000","message":"Just the provider location..","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a57832ecbe36fe47ab249cd49b2e3626134ea94f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Manage and unmanage snapshot."},{"line_number":4,"context_line":"  - Get driver private data."}],"source_content_type":"text/x-yaml","patch_set":54,"id":"dae33548_132c5c01","line":4,"range":{"start_line":4,"start_character":5,"end_line":4,"end_character":28},"in_reply_to":"dae33548_1eb5b3cc","updated":"2016-02-16 06:23:43.000000000","message":"Done","commit_id":"4639df1efbdc266264bbb33f9104225058271a7e"}]}
