)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":14,"context_line":"patch adds APIs for listing volumes and snapshots available for"},{"line_number":15,"context_line":"management to make this flow more user-friendly."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"},{"line_number":18,"context_line":"Change-Id: Iff19b5002e5bc037e28c91d104853f40eb4cb6ab"},{"line_number":19,"context_line":"Implements: blueprint list-manage-existing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"bab6814e_cf478475","line":17,"updated":"2016-05-20 12:31:55.000000000","message":"-1: Missing APIImpact flag","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":14,"context_line":"patch adds APIs for listing volumes and snapshots available for"},{"line_number":15,"context_line":"management to make this flow more user-friendly."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"},{"line_number":18,"context_line":"Change-Id: Iff19b5002e5bc037e28c91d104853f40eb4cb6ab"},{"line_number":19,"context_line":"Implements: blueprint list-manage-existing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"bab6814e_edf6a58d","line":17,"in_reply_to":"bab6814e_cf478475","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"}],"cinder/api/contrib/snapshot_manage.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea2ff4c46085e1f602efe8dd51904aad9f472ab7","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        host \u003d filters.get(\u0027host\u0027)"},{"line_number":140,"context_line":"        if host is None:"},{"line_number":141,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":142,"context_line":"                explanation\u003d\"Host must be specified in query parameters\")"},{"line_number":143,"context_line":"        snapshots \u003d self.volume_api.get_manageable_snapshots(context, host)"},{"line_number":144,"context_line":"        snapshot_count \u003d len(snapshots)"},{"line_number":145,"context_line":"        limited_list \u003d common.limited(snapshots, req)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a1b2928_2ebf9bfc","line":142,"updated":"2016-04-11 14:58:27.000000000","message":"Needs _() translation marker.","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6173c456db891f5f0109147eede14cbe3402c707","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        host \u003d filters.get(\u0027host\u0027)"},{"line_number":140,"context_line":"        if host is None:"},{"line_number":141,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":142,"context_line":"                explanation\u003d\"Host must be specified in query parameters\")"},{"line_number":143,"context_line":"        snapshots \u003d self.volume_api.get_manageable_snapshots(context, host)"},{"line_number":144,"context_line":"        snapshot_count \u003d len(snapshots)"},{"line_number":145,"context_line":"        limited_list \u003d common.limited(snapshots, req)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_05e8b90f","line":142,"in_reply_to":"7a1b2928_2ebf9bfc","updated":"2016-04-12 16:09:11.000000000","message":"Done","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        params \u003d req.params.copy()"},{"line_number":140,"context_line":"        host \u003d params.get(\u0027host\u0027)"},{"line_number":141,"context_line":"        if host is None:"},{"line_number":142,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":143,"context_line":"                explanation\u003d_(\"Host must be specified in query parameters\"))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        marker, limit, offset \u003d common.get_pagination_params(params)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_f2f18b02","line":142,"updated":"2016-05-20 12:31:55.000000000","message":"-1: We should stop raising webob exceptions when we have valid Cinder ones that will be properly translated to Fault just like the webob ones:\n\n raise exception.InvalidHost(reason\u003d...)","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        params \u003d req.params.copy()"},{"line_number":140,"context_line":"        host \u003d params.get(\u0027host\u0027)"},{"line_number":141,"context_line":"        if host is None:"},{"line_number":142,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":143,"context_line":"                explanation\u003d_(\"Host must be specified in query parameters\"))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        marker, limit, offset \u003d common.get_pagination_params(params)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_4d06d120","line":142,"in_reply_to":"bab6814e_f2f18b02","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        # These parameters are generally validated at the DB layer, but in this"},{"line_number":150,"context_line":"        # case sorting is not done by the DB"},{"line_number":151,"context_line":"        valid_sort_keys \u003d [\u0027identifier\u0027, \u0027size\u0027]"},{"line_number":152,"context_line":"        invalid_keys \u003d [key for key in sort_keys if key not in valid_sort_keys]"},{"line_number":153,"context_line":"        if invalid_keys:"},{"line_number":154,"context_line":"            msg \u003d _(\"Invalid sort keys passed: %s\") % \u0027, \u0027.join(invalid_keys)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_72547bc9","line":151,"range":{"start_line":151,"start_character":26,"end_line":151,"end_character":48},"updated":"2016-05-20 12:31:55.000000000","message":"nit: Better a tupple than a list if we are not modifying it","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        # These parameters are generally validated at the DB layer, but in this"},{"line_number":150,"context_line":"        # case sorting is not done by the DB"},{"line_number":151,"context_line":"        valid_sort_keys \u003d [\u0027identifier\u0027, \u0027size\u0027]"},{"line_number":152,"context_line":"        invalid_keys \u003d [key for key in sort_keys if key not in valid_sort_keys]"},{"line_number":153,"context_line":"        if invalid_keys:"},{"line_number":154,"context_line":"            msg \u003d _(\"Invalid sort keys passed: %s\") % \u0027, \u0027.join(invalid_keys)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_2d01cd06","line":151,"range":{"start_line":151,"start_character":26,"end_line":151,"end_character":48},"in_reply_to":"bab6814e_72547bc9","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        invalid_keys \u003d [key for key in sort_keys if key not in valid_sort_keys]"},{"line_number":153,"context_line":"        if invalid_keys:"},{"line_number":154,"context_line":"            msg \u003d _(\"Invalid sort keys passed: %s\") % \u0027, \u0027.join(invalid_keys)"},{"line_number":155,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":156,"context_line":"        valid_sort_dirs \u003d [\u0027asc\u0027, \u0027desc\u0027]"},{"line_number":157,"context_line":"        invalid_dirs \u003d [d for d in sort_dirs if d not in valid_sort_dirs]"},{"line_number":158,"context_line":"        if invalid_dirs:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_928f5f29","line":155,"updated":"2016-05-20 12:31:55.000000000","message":"-1: Raise InvalidParameterValue instead","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        invalid_keys \u003d [key for key in sort_keys if key not in valid_sort_keys]"},{"line_number":153,"context_line":"        if invalid_keys:"},{"line_number":154,"context_line":"            msg \u003d _(\"Invalid sort keys passed: %s\") % \u0027, \u0027.join(invalid_keys)"},{"line_number":155,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":156,"context_line":"        valid_sort_dirs \u003d [\u0027asc\u0027, \u0027desc\u0027]"},{"line_number":157,"context_line":"        invalid_dirs \u003d [d for d in sort_dirs if d not in valid_sort_dirs]"},{"line_number":158,"context_line":"        if invalid_dirs:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_ff112853","line":155,"in_reply_to":"bab6814e_928f5f29","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        if invalid_keys:"},{"line_number":154,"context_line":"            msg \u003d _(\"Invalid sort keys passed: %s\") % \u0027, \u0027.join(invalid_keys)"},{"line_number":155,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":156,"context_line":"        valid_sort_dirs \u003d [\u0027asc\u0027, \u0027desc\u0027]"},{"line_number":157,"context_line":"        invalid_dirs \u003d [d for d in sort_dirs if d not in valid_sort_dirs]"},{"line_number":158,"context_line":"        if invalid_dirs:"},{"line_number":159,"context_line":"            msg \u003d _(\"Invalid sort dirs passed: %s\") % \u0027, \u0027.join(invalid_dirs)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_72759b30","line":156,"range":{"start_line":156,"start_character":26,"end_line":156,"end_character":41},"updated":"2016-05-20 12:31:55.000000000","message":"nit: tuple better than list","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        if invalid_keys:"},{"line_number":154,"context_line":"            msg \u003d _(\"Invalid sort keys passed: %s\") % \u0027, \u0027.join(invalid_keys)"},{"line_number":155,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":156,"context_line":"        valid_sort_dirs \u003d [\u0027asc\u0027, \u0027desc\u0027]"},{"line_number":157,"context_line":"        invalid_dirs \u003d [d for d in sort_dirs if d not in valid_sort_dirs]"},{"line_number":158,"context_line":"        if invalid_dirs:"},{"line_number":159,"context_line":"            msg \u003d _(\"Invalid sort dirs passed: %s\") % \u0027, \u0027.join(invalid_dirs)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_1f17cc48","line":156,"range":{"start_line":156,"start_character":26,"end_line":156,"end_character":41},"in_reply_to":"bab6814e_72759b30","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        invalid_dirs \u003d [d for d in sort_dirs if d not in valid_sort_dirs]"},{"line_number":158,"context_line":"        if invalid_dirs:"},{"line_number":159,"context_line":"            msg \u003d _(\"Invalid sort dirs passed: %s\") % \u0027, \u0027.join(invalid_dirs)"},{"line_number":160,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        snapshots \u003d self.volume_api.get_manageable_snapshots("},{"line_number":163,"context_line":"            context, host, marker\u003dmarker, limit\u003dlimit, offset\u003doffset,"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_f297cb37","line":160,"updated":"2016-05-20 12:31:55.000000000","message":"-1: Raise InvalidParameterValue","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        invalid_dirs \u003d [d for d in sort_dirs if d not in valid_sort_dirs]"},{"line_number":158,"context_line":"        if invalid_dirs:"},{"line_number":159,"context_line":"            msg \u003d _(\"Invalid sort dirs passed: %s\") % \u0027, \u0027.join(invalid_dirs)"},{"line_number":160,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        snapshots \u003d self.volume_api.get_manageable_snapshots("},{"line_number":163,"context_line":"            context, host, marker\u003dmarker, limit\u003dlimit, offset\u003doffset,"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_3f18d074","line":160,"in_reply_to":"bab6814e_f297cb37","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d0aee37b51d1f28b593e572aef5b19a8cffe8926","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        return self._view_builder.detail(req, new_snapshot)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @wsgi.extends"},{"line_number":137,"context_line":"    def index(self, req):"},{"line_number":138,"context_line":"        \"\"\"Returns a summary list of snapshots available to manage.\"\"\""},{"line_number":139,"context_line":"        return resource_common_manage.get_manageable_resources("},{"line_number":140,"context_line":"            req, False, self.volume_api.get_manageable_snapshots,"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_4e286b33","line":137,"range":{"start_line":137,"start_character":4,"end_line":137,"end_character":25},"updated":"2016-05-23 12:07:54.000000000","message":"-1: Forgot to mention, that these new API entrypoints require a new microversion...","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8ff5ce84796d08b33113267a5d53a26bfdc4971c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        return self._view_builder.detail(req, new_snapshot)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @wsgi.extends"},{"line_number":137,"context_line":"    def index(self, req):"},{"line_number":138,"context_line":"        \"\"\"Returns a summary list of snapshots available to manage.\"\"\""},{"line_number":139,"context_line":"        return resource_common_manage.get_manageable_resources("},{"line_number":140,"context_line":"            req, False, self.volume_api.get_manageable_snapshots,"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_a0147be8","line":137,"range":{"start_line":137,"start_character":4,"end_line":137,"end_character":25},"in_reply_to":"bab6814e_4e286b33","updated":"2016-05-23 14:30:08.000000000","message":"https://review.openstack.org/#/c/307324/15","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3bebdb53aecb156b450ff02870ec91cbf456c259","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        return self._view_builder.detail(req, new_snapshot)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @wsgi.extends"},{"line_number":137,"context_line":"    def index(self, req):"},{"line_number":138,"context_line":"        \"\"\"Returns a summary list of snapshots available to manage.\"\"\""},{"line_number":139,"context_line":"        return resource_common_manage.get_manageable_resources("},{"line_number":140,"context_line":"            req, False, self.volume_api.get_manageable_snapshots,"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_5a613704","line":137,"range":{"start_line":137,"start_character":4,"end_line":137,"end_character":25},"in_reply_to":"bab6814e_5a2937e5","updated":"2016-05-23 15:50:20.000000000","message":"But this is an extension that is not in v3 routes so microversions don\u0027t apply. A separate patch adds the resources to v3.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"81d99a77e2ce019febbded880bea3889732a286d","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        return self._view_builder.detail(req, new_snapshot)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @wsgi.extends"},{"line_number":137,"context_line":"    def index(self, req):"},{"line_number":138,"context_line":"        \"\"\"Returns a summary list of snapshots available to manage.\"\"\""},{"line_number":139,"context_line":"        return resource_common_manage.get_manageable_resources("},{"line_number":140,"context_line":"            req, False, self.volume_api.get_manageable_snapshots,"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_5a2937e5","line":137,"range":{"start_line":137,"start_character":4,"end_line":137,"end_character":25},"in_reply_to":"bab6814e_a0147be8","updated":"2016-05-23 15:47:17.000000000","message":"You are adding an action here (L162) and it would not be microversioned, which is wrong.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"}],"cinder/api/contrib/volume_manage.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea2ff4c46085e1f602efe8dd51904aad9f472ab7","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        host \u003d filters.get(\u0027host\u0027)"},{"line_number":156,"context_line":"        if host is None:"},{"line_number":157,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":158,"context_line":"                explanation\u003d\"Host must be specified in query parameters\")"},{"line_number":159,"context_line":"        volumes \u003d self.volume_api.get_manageable_volumes(context, host)"},{"line_number":160,"context_line":"        volume_count \u003d len(volumes)"},{"line_number":161,"context_line":"        limited_list \u003d common.limited(volumes, req)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a1b2928_ae58cbfb","line":158,"updated":"2016-04-11 14:58:27.000000000","message":"_()","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6173c456db891f5f0109147eede14cbe3402c707","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        host \u003d filters.get(\u0027host\u0027)"},{"line_number":156,"context_line":"        if host is None:"},{"line_number":157,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":158,"context_line":"                explanation\u003d\"Host must be specified in query parameters\")"},{"line_number":159,"context_line":"        volumes \u003d self.volume_api.get_manageable_volumes(context, host)"},{"line_number":160,"context_line":"        volume_count \u003d len(volumes)"},{"line_number":161,"context_line":"        limited_list \u003d common.limited(volumes, req)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_05bf19fc","line":158,"in_reply_to":"7a1b2928_ae58cbfb","updated":"2016-04-12 16:09:11.000000000","message":"Done","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"50bfcbf9a34626f6145ac622baee93864cddf5b0","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                                                         volume[\u0027host\u0027],"},{"line_number":142,"context_line":"                                                         volume[\u0027ref\u0027],"},{"line_number":143,"context_line":"                                                         **kwargs)"},{"line_number":144,"context_line":"        except exception.ServiceNotFound as error:"},{"line_number":145,"context_line":"            raise exc.HTTPNotFound(explanation\u003derror.msg)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        utils.add_visible_admin_metadata(new_volume)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bab6814e_2b6e4096","line":144,"updated":"2016-05-19 12:40:11.000000000","message":"Please be aware of this patch, which lets the wsgi layer catch the NotFound Exceptions:\nhttps://review.openstack.org/#/c/314193\nSince that will likely land, you may want to remove the try: block on L#139 and just let wsgi catch it, and put a comment about that as seen in patch#314193","commit_id":"be0b25de84ff534f0d2f67b2395234cad4a3452d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        return self._view_builder.detail(req, new_volume)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _get_manageable_volumes(self, req, is_detail):"},{"line_number":152,"context_line":"        LOG.debug(\u0027Listing manageable volumes\u0027)"},{"line_number":153,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":154,"context_line":"        params \u003d req.params.copy()"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_0df8747a","line":151,"updated":"2016-05-20 12:31:55.000000000","message":"-1: This is 99% the same as the snapshot_manage code, no need for duplicated code.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        return self._view_builder.detail(req, new_volume)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _get_manageable_volumes(self, req, is_detail):"},{"line_number":152,"context_line":"        LOG.debug(\u0027Listing manageable volumes\u0027)"},{"line_number":153,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":154,"context_line":"        params \u003d req.params.copy()"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_ff52c865","line":151,"in_reply_to":"bab6814e_0df8747a","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"}],"cinder/api/views/manageable_snapshots.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    _collection_name \u003d \"os-snapshot-manage\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self):"},{"line_number":30,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":31,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def summary_list(self, request, snapshots, count):"},{"line_number":34,"context_line":"        \"\"\"Show a list of manageable snapshots without many details.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_0d3fd424","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":43},"updated":"2016-05-20 12:31:55.000000000","message":"-1: Unnecessary code","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    _collection_name \u003d \"os-snapshot-manage\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self):"},{"line_number":30,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":31,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def summary_list(self, request, snapshots, count):"},{"line_number":34,"context_line":"        \"\"\"Show a list of manageable snapshots without many details.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_6d31155a","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":43},"in_reply_to":"bab6814e_0d3fd424","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def summary(self, request, snapshot):"},{"line_number":42,"context_line":"        \"\"\"Generic, non-detailed view of a manageable snapshot description.\"\"\""},{"line_number":43,"context_line":"        return {"},{"line_number":44,"context_line":"            \u0027manageable\u0027: {"},{"line_number":45,"context_line":"                \u0027id_type\u0027: snapshot[\u0027id_type\u0027],"},{"line_number":46,"context_line":"                \u0027identifier\u0027: snapshot[\u0027identifier\u0027],"},{"line_number":47,"context_line":"                \u0027size\u0027: snapshot[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_cdeb0c77","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":24},"updated":"2016-05-20 12:31:55.000000000","message":"-1: Add manageable in summary_list and detail_list","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def summary(self, request, snapshot):"},{"line_number":42,"context_line":"        \"\"\"Generic, non-detailed view of a manageable snapshot description.\"\"\""},{"line_number":43,"context_line":"        return {"},{"line_number":44,"context_line":"            \u0027manageable\u0027: {"},{"line_number":45,"context_line":"                \u0027id_type\u0027: snapshot[\u0027id_type\u0027],"},{"line_number":46,"context_line":"                \u0027identifier\u0027: snapshot[\u0027identifier\u0027],"},{"line_number":47,"context_line":"                \u0027size\u0027: snapshot[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_ad465d78","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":24},"in_reply_to":"bab6814e_cdeb0c77","updated":"2016-05-22 15:07:07.000000000","message":"Simply removed, was unnecessary","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            },"},{"line_number":54,"context_line":"        }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def detail(self, request, snapshot):"},{"line_number":57,"context_line":"        \"\"\"Detailed view of a manageable snapshot description.\"\"\""},{"line_number":58,"context_line":"        return {"},{"line_number":59,"context_line":"            \u0027manageable\u0027: {"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_ad1a087b","line":56,"updated":"2016-05-20 12:31:55.000000000","message":"?: I don\u0027t see the reason to have a summary and detail when it\u0027s only 2 fields added on the detail.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            },"},{"line_number":54,"context_line":"        }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def detail(self, request, snapshot):"},{"line_number":57,"context_line":"        \"\"\"Detailed view of a manageable snapshot description.\"\"\""},{"line_number":58,"context_line":"        return {"},{"line_number":59,"context_line":"            \u0027manageable\u0027: {"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_2d538d3a","line":56,"in_reply_to":"bab6814e_ad1a087b","updated":"2016-05-22 15:07:07.000000000","message":"I left out the longer fields that will make the information harder to display succinctly.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def detail(self, request, snapshot):"},{"line_number":57,"context_line":"        \"\"\"Detailed view of a manageable snapshot description.\"\"\""},{"line_number":58,"context_line":"        return {"},{"line_number":59,"context_line":"            \u0027manageable\u0027: {"},{"line_number":60,"context_line":"                \u0027id_type\u0027: snapshot[\u0027id_type\u0027],"},{"line_number":61,"context_line":"                \u0027identifier\u0027: snapshot[\u0027identifier\u0027],"},{"line_number":62,"context_line":"                \u0027size\u0027: snapshot[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_ed58908c","line":59,"range":{"start_line":59,"start_character":12,"end_line":59,"end_character":25},"updated":"2016-05-20 12:31:55.000000000","message":"-1: ditto","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def detail(self, request, snapshot):"},{"line_number":57,"context_line":"        \"\"\"Detailed view of a manageable snapshot description.\"\"\""},{"line_number":58,"context_line":"        return {"},{"line_number":59,"context_line":"            \u0027manageable\u0027: {"},{"line_number":60,"context_line":"                \u0027id_type\u0027: snapshot[\u0027id_type\u0027],"},{"line_number":61,"context_line":"                \u0027identifier\u0027: snapshot[\u0027identifier\u0027],"},{"line_number":62,"context_line":"                \u0027size\u0027: snapshot[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_8d3439fc","line":59,"range":{"start_line":59,"start_character":12,"end_line":59,"end_character":25},"in_reply_to":"bab6814e_ed58908c","updated":"2016-05-22 15:07:07.000000000","message":"ditto","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _list_view(self, func, request, snapshots, count):"},{"line_number":74,"context_line":"        \"\"\"Provide a view for a list of manageable snapshots.\"\"\""},{"line_number":75,"context_line":"        snap_list \u003d [func(request, snapshot)[\u0027manageable\u0027]"},{"line_number":76,"context_line":"                     for snapshot in snapshots]"},{"line_number":77,"context_line":"        return {\"manageable-snapshots\": snap_list}"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_4d7d5cb0","line":75,"range":{"start_line":75,"start_character":44,"end_line":75,"end_character":58},"updated":"2016-05-20 12:31:55.000000000","message":"-1: No need to address \u0027manageable\u0027 if removed from detail and summary.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _list_view(self, func, request, snapshots, count):"},{"line_number":74,"context_line":"        \"\"\"Provide a view for a list of manageable snapshots.\"\"\""},{"line_number":75,"context_line":"        snap_list \u003d [func(request, snapshot)[\u0027manageable\u0027]"},{"line_number":76,"context_line":"                     for snapshot in snapshots]"},{"line_number":77,"context_line":"        return {\"manageable-snapshots\": snap_list}"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_cd3ac1e6","line":75,"range":{"start_line":75,"start_character":44,"end_line":75,"end_character":58},"in_reply_to":"bab6814e_4d7d5cb0","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b65a217334ddcf3e99653e22a9f6161a97a3f732","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_1ea4f548","line":1,"updated":"2016-05-26 21:56:13.000000000","message":"Should the year and company be changed?","commit_id":"96f5c90655dded484e5a51a93bea8b8892daba44"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8d5dbbcd12a76540b2c505141f65a41bfa2304bf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_3caeaa85","line":1,"in_reply_to":"bab6814e_1ea4f548","updated":"2016-05-29 09:05:21.000000000","message":"Done","commit_id":"96f5c90655dded484e5a51a93bea8b8892daba44"}],"cinder/api/views/manageable_volumes.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    _collection_name \u003d \"os-volume-manage\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self):"},{"line_number":30,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":31,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def summary_list(self, request, volumes, count):"},{"line_number":34,"context_line":"        \"\"\"Show a list of manageable volumes without many details.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_cd15cc49","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":43},"updated":"2016-05-20 12:31:55.000000000","message":"-1: Unnecessary","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    _collection_name \u003d \"os-volume-manage\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self):"},{"line_number":30,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":31,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def summary_list(self, request, volumes, count):"},{"line_number":34,"context_line":"        \"\"\"Show a list of manageable volumes without many details.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_0d29699e","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":43},"in_reply_to":"bab6814e_cd15cc49","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def summary(self, request, volume):"},{"line_number":42,"context_line":"        \"\"\"Generic, non-detailed view of a manageable volume description.\"\"\""},{"line_number":43,"context_line":"        return {"},{"line_number":44,"context_line":"            \u0027manageable\u0027: {"},{"line_number":45,"context_line":"                \u0027id_type\u0027: volume[\u0027id_type\u0027],"},{"line_number":46,"context_line":"                \u0027identifier\u0027: volume[\u0027identifier\u0027],"},{"line_number":47,"context_line":"                \u0027size\u0027: volume[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_0d0cf43f","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":25},"updated":"2016-05-20 12:31:55.000000000","message":"-1: Same as with the snapshot view","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def summary(self, request, volume):"},{"line_number":42,"context_line":"        \"\"\"Generic, non-detailed view of a manageable volume description.\"\"\""},{"line_number":43,"context_line":"        return {"},{"line_number":44,"context_line":"            \u0027manageable\u0027: {"},{"line_number":45,"context_line":"                \u0027id_type\u0027: volume[\u0027id_type\u0027],"},{"line_number":46,"context_line":"                \u0027identifier\u0027: volume[\u0027identifier\u0027],"},{"line_number":47,"context_line":"                \u0027size\u0027: volume[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_4d2ff1a0","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":25},"in_reply_to":"bab6814e_0d0cf43f","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def detail(self, request, volume):"},{"line_number":54,"context_line":"        \"\"\"Detailed view of a manageable volume description.\"\"\""},{"line_number":55,"context_line":"        return {"},{"line_number":56,"context_line":"            \u0027manageable\u0027: {"},{"line_number":57,"context_line":"                \u0027id_type\u0027: volume[\u0027id_type\u0027],"},{"line_number":58,"context_line":"                \u0027identifier\u0027: volume[\u0027identifier\u0027],"},{"line_number":59,"context_line":"                \u0027size\u0027: volume[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_6d05c012","line":56,"range":{"start_line":56,"start_character":11,"end_line":56,"end_character":26},"updated":"2016-05-20 12:31:55.000000000","message":"-1: Same as with the snapshot view","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def detail(self, request, volume):"},{"line_number":54,"context_line":"        \"\"\"Detailed view of a manageable volume description.\"\"\""},{"line_number":55,"context_line":"        return {"},{"line_number":56,"context_line":"            \u0027manageable\u0027: {"},{"line_number":57,"context_line":"                \u0027id_type\u0027: volume[\u0027id_type\u0027],"},{"line_number":58,"context_line":"                \u0027identifier\u0027: volume[\u0027identifier\u0027],"},{"line_number":59,"context_line":"                \u0027size\u0027: volume[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_2d2a6d90","line":56,"range":{"start_line":56,"start_character":11,"end_line":56,"end_character":26},"in_reply_to":"bab6814e_6d05c012","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _list_view(self, func, request, volumes, count):"},{"line_number":68,"context_line":"        \"\"\"Provide a view for a list of manageable volumes.\"\"\""},{"line_number":69,"context_line":"        vol_list \u003d [func(request, volume)[\u0027manageable\u0027] for volume in volumes]"},{"line_number":70,"context_line":"        return {\"manageable-volumes\": vol_list}"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_4d027c0c","line":69,"range":{"start_line":69,"start_character":41,"end_line":69,"end_character":55},"updated":"2016-05-20 12:31:55.000000000","message":"-1: Same as with the snapshot view","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _list_view(self, func, request, volumes, count):"},{"line_number":68,"context_line":"        \"\"\"Provide a view for a list of manageable volumes.\"\"\""},{"line_number":69,"context_line":"        vol_list \u003d [func(request, volume)[\u0027manageable\u0027] for volume in volumes]"},{"line_number":70,"context_line":"        return {\"manageable-volumes\": vol_list}"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_8d1b9980","line":69,"range":{"start_line":69,"start_character":41,"end_line":69,"end_character":55},"in_reply_to":"bab6814e_4d027c0c","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b65a217334ddcf3e99653e22a9f6161a97a3f732","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_9ea0e543","line":1,"updated":"2016-05-26 21:56:13.000000000","message":"Same.","commit_id":"96f5c90655dded484e5a51a93bea8b8892daba44"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8d5dbbcd12a76540b2c505141f65a41bfa2304bf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_9cecf6c8","line":1,"in_reply_to":"bab6814e_9ea0e543","updated":"2016-05-29 09:05:21.000000000","message":"Done","commit_id":"96f5c90655dded484e5a51a93bea8b8892daba44"}],"cinder/brick/local_dev/lvm.py":[{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"a5ae3b82ad11c21278fc934a7e9062df87d4bf80","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        return False"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"    def lv_is_snapshot(self, name):"},{"line_number":707,"context_line":"        cmd \u003d LVM.LVM_CMD_PREFIX + [\u0027lvdisplay\u0027, \u0027--noheading\u0027, \u0027-C\u0027, \u0027-o\u0027,"},{"line_number":708,"context_line":"                                    \u0027Attr\u0027, \u0027%s/%s\u0027 % (self.vg_name, name)]"},{"line_number":709,"context_line":"        out, _err \u003d self._execute(*cmd,"},{"line_number":710,"context_line":"                                  root_helper\u003dself._root_helper,"},{"line_number":711,"context_line":"                                  run_as_root\u003dTrue)"},{"line_number":712,"context_line":"        out \u003d out.strip()"},{"line_number":713,"context_line":"        if out:"},{"line_number":714,"context_line":"            if (out[0] \u003d\u003d \u0027s\u0027):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_cc673523","line":711,"range":{"start_line":707,"start_character":8,"end_line":711,"end_character":51},"updated":"2016-05-17 19:29:05.000000000","message":"There are 3 functions using this same code. Why don\u0027t you create a function  for this and treat just the different outputs to avoid the code repetition?","commit_id":"16f46fbd9317cc205023f2d9c24ddc22a1f3a3ff"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"cf1155ef04cc69439e8553f05e6cb9b00d4d5679","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        return False"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"    def lv_is_snapshot(self, name):"},{"line_number":707,"context_line":"        cmd \u003d LVM.LVM_CMD_PREFIX + [\u0027lvdisplay\u0027, \u0027--noheading\u0027, \u0027-C\u0027, \u0027-o\u0027,"},{"line_number":708,"context_line":"                                    \u0027Attr\u0027, \u0027%s/%s\u0027 % (self.vg_name, name)]"},{"line_number":709,"context_line":"        out, _err \u003d self._execute(*cmd,"},{"line_number":710,"context_line":"                                  root_helper\u003dself._root_helper,"},{"line_number":711,"context_line":"                                  run_as_root\u003dTrue)"},{"line_number":712,"context_line":"        out \u003d out.strip()"},{"line_number":713,"context_line":"        if out:"},{"line_number":714,"context_line":"            if (out[0] \u003d\u003d \u0027s\u0027):"}],"source_content_type":"text/x-python","patch_set":15,"id":"bab6814e_426db403","line":711,"range":{"start_line":707,"start_character":8,"end_line":711,"end_character":51},"in_reply_to":"dab17558_cc673523","updated":"2016-05-18 11:21:42.000000000","message":"I thought so as well, but it ends up being difficult to read because the only real thing in common is LVM_CMD_PREFIX and the call to self._execute, which isn\u0027t worth separating IMO. Also, there are 10 other examples of this pattern in this file.","commit_id":"16f46fbd9317cc205023f2d9c24ddc22a1f3a3ff"}],"cinder/volume/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"    def get_manageable_volumes(self, context, host, marker\u003dNone, limit\u003dNone,"},{"line_number":1627,"context_line":"                               offset\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone):"},{"line_number":1628,"context_line":"        self._get_service_by_host(context, host)"},{"line_number":1629,"context_line":"        return self.volume_rpcapi.get_manageable_volumes(context, host,"},{"line_number":1630,"context_line":"                                                         marker, limit,"},{"line_number":1631,"context_line":"                                                         offset, sort_keys,"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_0872227b","line":1628,"range":{"start_line":1628,"start_character":8,"end_line":1628,"end_character":48},"updated":"2016-05-20 12:31:55.000000000","message":"I don\u0027t like the idea of getting the Service DB data, parse it into the ORM object and then into the OVO object just to check if the service with the host exists, but that\u0027s something that could be improved in the future.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"    def get_manageable_volumes(self, context, host, marker\u003dNone, limit\u003dNone,"},{"line_number":1627,"context_line":"                               offset\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone):"},{"line_number":1628,"context_line":"        self._get_service_by_host(context, host)"},{"line_number":1629,"context_line":"        return self.volume_rpcapi.get_manageable_volumes(context, host,"},{"line_number":1630,"context_line":"                                                         marker, limit,"},{"line_number":1631,"context_line":"                                                         offset, sort_keys,"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_bfea0072","line":1628,"range":{"start_line":1628,"start_character":8,"end_line":1628,"end_character":48},"in_reply_to":"bab6814e_0872227b","updated":"2016-05-22 15:07:07.000000000","message":"OK, let\u0027s leave it for now.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":14532,"name":"Gerald McBrearty","email":"gfm@us.ibm.com","username":"gfm"},"change_message_id":"98dc34c83d50076bd50b1dd1e4b1c0a996eb3a93","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"    def manage_existing(self, context, host, ref, name\u003dNone, description\u003dNone,"},{"line_number":1585,"context_line":"                        volume_type\u003dNone, metadata\u003dNone,"},{"line_number":1586,"context_line":"                        availability_zone\u003dNone, bootable\u003dFalse):"},{"line_number":1587,"context_line":"        if volume_type and \u0027extra_specs\u0027 not in volume_type:"},{"line_number":1588,"context_line":"            extra_specs \u003d volume_types.get_volume_type_extra_specs("},{"line_number":1589,"context_line":"                volume_type[\u0027id\u0027])"},{"line_number":1590,"context_line":"            volume_type[\u0027extra_specs\u0027] \u003d extra_specs"}],"source_content_type":"text/x-python","patch_set":20,"id":"9abb7d3a_8fc4d692","line":1587,"updated":"2016-05-27 17:33:01.000000000","message":"I think we need some role based access control here so the operator can determine what roles are allowed to do this operation","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":14532,"name":"Gerald McBrearty","email":"gfm@us.ibm.com","username":"gfm"},"change_message_id":"98dc34c83d50076bd50b1dd1e4b1c0a996eb3a93","unresolved":false,"context_lines":[{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def get_manageable_volumes(self, context, host, marker\u003dNone, limit\u003dNone,"},{"line_number":1629,"context_line":"                               offset\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone):"},{"line_number":1630,"context_line":"        self._get_service_by_host(context, host)"},{"line_number":1631,"context_line":"        return self.volume_rpcapi.get_manageable_volumes(context, host,"},{"line_number":1632,"context_line":"                                                         marker, limit,"},{"line_number":1633,"context_line":"                                                         offset, sort_keys,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9abb7d3a_4f414e0b","line":1630,"updated":"2016-05-27 17:33:01.000000000","message":"Role based access control comment.","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":14532,"name":"Gerald McBrearty","email":"gfm@us.ibm.com","username":"gfm"},"change_message_id":"98dc34c83d50076bd50b1dd1e4b1c0a996eb3a93","unresolved":false,"context_lines":[{"line_number":1662,"context_line":""},{"line_number":1663,"context_line":"    def get_manageable_snapshots(self, context, host, marker\u003dNone, limit\u003dNone,"},{"line_number":1664,"context_line":"                                 offset\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone):"},{"line_number":1665,"context_line":"        self._get_service_by_host(context, host)"},{"line_number":1666,"context_line":"        return self.volume_rpcapi.get_manageable_snapshots(context, host,"},{"line_number":1667,"context_line":"                                                           marker, limit,"},{"line_number":1668,"context_line":"                                                           offset, sort_keys,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9abb7d3a_0f0586c1","line":1665,"updated":"2016-05-27 17:33:01.000000000","message":"Role based access control comment.","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"}],"cinder/volume/driver.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"b398bb528699f4c29f5ef1846f35c0398ca21ae3","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        \"\"\""},{"line_number":1810,"context_line":"        return"},{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"    def get_manageable_volumes(self):"},{"line_number":1813,"context_line":"        \"\"\"List volumes on the backend available for management by Cinder."},{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_478da630","line":1812,"range":{"start_line":1812,"start_character":8,"end_line":1812,"end_character":30},"updated":"2016-03-07 17:36:55.000000000","message":"do we need this much data?  Perhaps we could/should just return an identifier string and leave it at that.  I don\u0027t think we should aim to provide a \"show\" in Cinder for non-cinder volumes.","commit_id":"4ec80f0b44789b7ca8630179598ab327eccec2b7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea2ff4c46085e1f602efe8dd51904aad9f472ab7","unresolved":false,"context_lines":[{"line_number":1813,"context_line":""},{"line_number":1814,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1815,"context_line":"        with the following keys:"},{"line_number":1816,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1817,"context_line":"          \"manage_existing\"."},{"line_number":1818,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1819,"context_line":"          to \"manage_existing\"."}],"source_content_type":"text/x-python","patch_set":6,"id":"7a1b2928_ce7427d1","line":1816,"updated":"2016-04-11 14:58:27.000000000","message":"What would the id_type be used for? Since the identifier is coming from the backend, the backend should know what it is when used later.","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6173c456db891f5f0109147eede14cbe3402c707","unresolved":false,"context_lines":[{"line_number":1813,"context_line":""},{"line_number":1814,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1815,"context_line":"        with the following keys:"},{"line_number":1816,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1817,"context_line":"          \"manage_existing\"."},{"line_number":1818,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1819,"context_line":"          to \"manage_existing\"."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_45b631dd","line":1816,"in_reply_to":"7a1b2928_ce7427d1","updated":"2016-04-12 16:09:11.000000000","message":"The API for manage_existing takes id_type as an argument.  It is returned here so that the admin will know what to pass in this argument to manage the volume.","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea2ff4c46085e1f602efe8dd51904aad9f472ab7","unresolved":false,"context_lines":[{"line_number":1822,"context_line":"        - potential_id (string): If the volume looks like it may already be"},{"line_number":1823,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1824,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1825,"context_line":"        - safe_to_manage (boolean): Whether or not this volume is safe to"},{"line_number":1826,"context_line":"          manage according to the storage backend. For example, is the volume"},{"line_number":1827,"context_line":"          in use or invalid for any reason."},{"line_number":1828,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."}],"source_content_type":"text/x-python","patch_set":6,"id":"7a1b2928_0e045f15","line":1825,"updated":"2016-04-11 14:58:27.000000000","message":"Should backends even return volume info that isn\u0027t safe to manage? It seems like it would be better to just filter out ones that will not be useful to the OpenStack admin.","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6173c456db891f5f0109147eede14cbe3402c707","unresolved":false,"context_lines":[{"line_number":1822,"context_line":"        - potential_id (string): If the volume looks like it may already be"},{"line_number":1823,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1824,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1825,"context_line":"        - safe_to_manage (boolean): Whether or not this volume is safe to"},{"line_number":1826,"context_line":"          manage according to the storage backend. For example, is the volume"},{"line_number":1827,"context_line":"          in use or invalid for any reason."},{"line_number":1828,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_e5901def","line":1825,"in_reply_to":"7a1b2928_0e045f15","updated":"2016-04-12 16:09:11.000000000","message":"My thinking was that the admin will want all the information. The admin may expect a volume to appear and for some reason it will not be not manageable. The admin will want to know and fix the issue rather than be confused as to why the volume is missing.","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea2ff4c46085e1f602efe8dd51904aad9f472ab7","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"        \"\"\"List snapshots on the backend available for management by Cinder."},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":"        Returns a list of dictionaries, each specifying a snapshot in the host,"},{"line_number":1889,"context_line":"        with the following keys:"},{"line_number":1890,"context_line":"        - id_type (string): The ID type for a snapshot, which can be passed to"},{"line_number":1891,"context_line":"          \"manage_existing_snapshot\"."},{"line_number":1892,"context_line":"        - identifier (string): The identifier for a snapshot, which can be"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a1b2928_492bf182","line":1889,"updated":"2016-04-11 14:58:27.000000000","message":"Same comments as above.","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6173c456db891f5f0109147eede14cbe3402c707","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"        \"\"\"List snapshots on the backend available for management by Cinder."},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":"        Returns a list of dictionaries, each specifying a snapshot in the host,"},{"line_number":1889,"context_line":"        with the following keys:"},{"line_number":1890,"context_line":"        - id_type (string): The ID type for a snapshot, which can be passed to"},{"line_number":1891,"context_line":"          \"manage_existing_snapshot\"."},{"line_number":1892,"context_line":"        - identifier (string): The identifier for a snapshot, which can be"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_256855f5","line":1889,"in_reply_to":"7a1b2928_492bf182","updated":"2016-04-12 16:09:11.000000000","message":"Same answers as above :P","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"27855051d3c18c05a397e4654a0a23f5b671d3e7","unresolved":false,"context_lines":[{"line_number":1818,"context_line":"        \"\"\""},{"line_number":1819,"context_line":"        return"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_manageable_volumes(self, marker, limit, offset, sort_keys,"},{"line_number":1822,"context_line":"                               sort_dirs):"},{"line_number":1823,"context_line":"        \"\"\"List volumes on the backend available for management by Cinder."},{"line_number":1824,"context_line":""},{"line_number":1825,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1826,"context_line":"        with the following keys:"},{"line_number":1827,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1828,"context_line":"          \"manage_existing\"."},{"line_number":1829,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1830,"context_line":"          to \"manage_existing\"."},{"line_number":1831,"context_line":"        - size (float): The size of the volume according to the storage"},{"line_number":1832,"context_line":"          backend."},{"line_number":1833,"context_line":"        - potential_id (string): If the volume looks like it may already be"},{"line_number":1834,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1835,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1836,"context_line":"        - safe_to_manage (boolean): Whether or not this volume is safe to"},{"line_number":1837,"context_line":"          manage according to the storage backend. For example, is the volume"},{"line_number":1838,"context_line":"          in use or invalid for any reason."},{"line_number":1839,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."},{"line_number":1840,"context_line":"        - extra_info (string): Any extra information to return to the user"},{"line_number":1841,"context_line":""},{"line_number":1842,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1843,"context_line":"                          next results after this value (after sorting)"},{"line_number":1844,"context_line":"        :param limit:     Maximum number of items to return"},{"line_number":1845,"context_line":"        :param offset:    Number of items to skip after marker"},{"line_number":1846,"context_line":"        :param sort_keys: List of keys to sort results by (valid keys are"},{"line_number":1847,"context_line":"                          \u0027identifier\u0027 and \u0027size\u0027)"},{"line_number":1848,"context_line":"        :param sort_dirs: List of directions to sort by, corresponding to"},{"line_number":1849,"context_line":"                          sort_keys (valid directions are \u0027asc\u0027 and \u0027desc\u0027)"},{"line_number":1850,"context_line":"        \"\"\""},{"line_number":1851,"context_line":"        return []"},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"    @abc.abstractmethod"},{"line_number":1854,"context_line":"    def unmanage(self, volume):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_5a309e9e","line":1851,"range":{"start_line":1821,"start_character":0,"end_line":1851,"end_character":17},"updated":"2016-05-19 16:24:10.000000000","message":"This is grabbing a lot of data and will take a long time to complete. I could have multiple cinder backends pointing at the same physical backend. Is that going to be an issue?","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"a75c6e0728a29041cf42f9d80d456580d7c907cc","unresolved":false,"context_lines":[{"line_number":1818,"context_line":"        \"\"\""},{"line_number":1819,"context_line":"        return"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_manageable_volumes(self, marker, limit, offset, sort_keys,"},{"line_number":1822,"context_line":"                               sort_dirs):"},{"line_number":1823,"context_line":"        \"\"\"List volumes on the backend available for management by Cinder."},{"line_number":1824,"context_line":""},{"line_number":1825,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1826,"context_line":"        with the following keys:"},{"line_number":1827,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1828,"context_line":"          \"manage_existing\"."},{"line_number":1829,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1830,"context_line":"          to \"manage_existing\"."},{"line_number":1831,"context_line":"        - size (float): The size of the volume according to the storage"},{"line_number":1832,"context_line":"          backend."},{"line_number":1833,"context_line":"        - potential_id (string): If the volume looks like it may already be"},{"line_number":1834,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1835,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1836,"context_line":"        - safe_to_manage (boolean): Whether or not this volume is safe to"},{"line_number":1837,"context_line":"          manage according to the storage backend. For example, is the volume"},{"line_number":1838,"context_line":"          in use or invalid for any reason."},{"line_number":1839,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."},{"line_number":1840,"context_line":"        - extra_info (string): Any extra information to return to the user"},{"line_number":1841,"context_line":""},{"line_number":1842,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1843,"context_line":"                          next results after this value (after sorting)"},{"line_number":1844,"context_line":"        :param limit:     Maximum number of items to return"},{"line_number":1845,"context_line":"        :param offset:    Number of items to skip after marker"},{"line_number":1846,"context_line":"        :param sort_keys: List of keys to sort results by (valid keys are"},{"line_number":1847,"context_line":"                          \u0027identifier\u0027 and \u0027size\u0027)"},{"line_number":1848,"context_line":"        :param sort_dirs: List of directions to sort by, corresponding to"},{"line_number":1849,"context_line":"                          sort_keys (valid directions are \u0027asc\u0027 and \u0027desc\u0027)"},{"line_number":1850,"context_line":"        \"\"\""},{"line_number":1851,"context_line":"        return []"},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"    @abc.abstractmethod"},{"line_number":1854,"context_line":"    def unmanage(self, volume):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_75001302","line":1851,"range":{"start_line":1821,"start_character":0,"end_line":1851,"end_character":17},"in_reply_to":"bab6814e_5a309e9e","updated":"2016-05-19 16:34:48.000000000","message":"Only if you call the API multiple times... and then it depends on the driver implementation - the driver should do as much as possible to reduce the amount it needs to do with the paging info it is given","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"c79bb914870115aecd6aed886b3a54785a0b62cb","unresolved":false,"context_lines":[{"line_number":1818,"context_line":"        \"\"\""},{"line_number":1819,"context_line":"        return"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_manageable_volumes(self, marker, limit, offset, sort_keys,"},{"line_number":1822,"context_line":"                               sort_dirs):"},{"line_number":1823,"context_line":"        \"\"\"List volumes on the backend available for management by Cinder."},{"line_number":1824,"context_line":""},{"line_number":1825,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1826,"context_line":"        with the following keys:"},{"line_number":1827,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1828,"context_line":"          \"manage_existing\"."},{"line_number":1829,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1830,"context_line":"          to \"manage_existing\"."},{"line_number":1831,"context_line":"        - size (float): The size of the volume according to the storage"},{"line_number":1832,"context_line":"          backend."},{"line_number":1833,"context_line":"        - potential_id (string): If the volume looks like it may already be"},{"line_number":1834,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1835,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1836,"context_line":"        - safe_to_manage (boolean): Whether or not this volume is safe to"},{"line_number":1837,"context_line":"          manage according to the storage backend. For example, is the volume"},{"line_number":1838,"context_line":"          in use or invalid for any reason."},{"line_number":1839,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."},{"line_number":1840,"context_line":"        - extra_info (string): Any extra information to return to the user"},{"line_number":1841,"context_line":""},{"line_number":1842,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1843,"context_line":"                          next results after this value (after sorting)"},{"line_number":1844,"context_line":"        :param limit:     Maximum number of items to return"},{"line_number":1845,"context_line":"        :param offset:    Number of items to skip after marker"},{"line_number":1846,"context_line":"        :param sort_keys: List of keys to sort results by (valid keys are"},{"line_number":1847,"context_line":"                          \u0027identifier\u0027 and \u0027size\u0027)"},{"line_number":1848,"context_line":"        :param sort_dirs: List of directions to sort by, corresponding to"},{"line_number":1849,"context_line":"                          sort_keys (valid directions are \u0027asc\u0027 and \u0027desc\u0027)"},{"line_number":1850,"context_line":"        \"\"\""},{"line_number":1851,"context_line":"        return []"},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"    @abc.abstractmethod"},{"line_number":1854,"context_line":"    def unmanage(self, volume):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_b53c3be3","line":1851,"range":{"start_line":1821,"start_character":0,"end_line":1851,"end_character":17},"in_reply_to":"bab6814e_75001302","updated":"2016-05-19 16:52:44.000000000","message":"I still need to get all the data. Even if I parse it out bit by bit. Oh, and if it is on the driver then I get to cache the info or re-get it every time.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":1818,"context_line":"        \"\"\""},{"line_number":1819,"context_line":"        return"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_manageable_volumes(self, marker, limit, offset, sort_keys,"},{"line_number":1822,"context_line":"                               sort_dirs):"},{"line_number":1823,"context_line":"        \"\"\"List volumes on the backend available for management by Cinder."},{"line_number":1824,"context_line":""},{"line_number":1825,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1826,"context_line":"        with the following keys:"},{"line_number":1827,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1828,"context_line":"          \"manage_existing\"."},{"line_number":1829,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1830,"context_line":"          to \"manage_existing\"."},{"line_number":1831,"context_line":"        - size (float): The size of the volume according to the storage"},{"line_number":1832,"context_line":"          backend."},{"line_number":1833,"context_line":"        - potential_id (string): If the volume looks like it may already be"},{"line_number":1834,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1835,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1836,"context_line":"        - safe_to_manage (boolean): Whether or not this volume is safe to"},{"line_number":1837,"context_line":"          manage according to the storage backend. For example, is the volume"},{"line_number":1838,"context_line":"          in use or invalid for any reason."},{"line_number":1839,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."},{"line_number":1840,"context_line":"        - extra_info (string): Any extra information to return to the user"},{"line_number":1841,"context_line":""},{"line_number":1842,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1843,"context_line":"                          next results after this value (after sorting)"},{"line_number":1844,"context_line":"        :param limit:     Maximum number of items to return"},{"line_number":1845,"context_line":"        :param offset:    Number of items to skip after marker"},{"line_number":1846,"context_line":"        :param sort_keys: List of keys to sort results by (valid keys are"},{"line_number":1847,"context_line":"                          \u0027identifier\u0027 and \u0027size\u0027)"},{"line_number":1848,"context_line":"        :param sort_dirs: List of directions to sort by, corresponding to"},{"line_number":1849,"context_line":"                          sort_keys (valid directions are \u0027asc\u0027 and \u0027desc\u0027)"},{"line_number":1850,"context_line":"        \"\"\""},{"line_number":1851,"context_line":"        return []"},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"    @abc.abstractmethod"},{"line_number":1854,"context_line":"    def unmanage(self, volume):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_5ffcb43d","line":1851,"range":{"start_line":1821,"start_character":0,"end_line":1851,"end_character":17},"in_reply_to":"bab6814e_b53c3be3","updated":"2016-05-22 15:07:07.000000000","message":"The idea is to give the driver/backend as much flexibility as possible to function properly. This API isn\u0027t expected to be called frequently and so it\u0027s not the end of the world for it to be a little slower or compute intensive. Still, it should work with the expected number of volumes on the backend. If the backend returns information in such a way that is not consumable by the caller, I would consider that a bug in the backend.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"c79bb914870115aecd6aed886b3a54785a0b62cb","unresolved":false,"context_lines":[{"line_number":1902,"context_line":"        \"\"\""},{"line_number":1903,"context_line":"        return"},{"line_number":1904,"context_line":""},{"line_number":1905,"context_line":"    def get_manageable_snapshots(self, marker, limit, offset, sort_keys,"},{"line_number":1906,"context_line":"                                 sort_dirs):"},{"line_number":1907,"context_line":"        \"\"\"List snapshots on the backend available for management by Cinder."},{"line_number":1908,"context_line":""},{"line_number":1909,"context_line":"        Returns a list of dictionaries, each specifying a snapshot in the host,"},{"line_number":1910,"context_line":"        with the following keys:"},{"line_number":1911,"context_line":"        - id_type (string): The ID type for a snapshot, which can be passed to"},{"line_number":1912,"context_line":"          \"manage_existing_snapshot\"."},{"line_number":1913,"context_line":"        - identifier (string): The identifier for a snapshot, which can be"},{"line_number":1914,"context_line":"          passed to \"manage_existing_snapshot\"."},{"line_number":1915,"context_line":"        - size (float): The size of the snapshot according to the storage"},{"line_number":1916,"context_line":"          backend."},{"line_number":1917,"context_line":"        - potential_id (string): If the snapshot looks like it may already be"},{"line_number":1918,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1919,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1920,"context_line":"        - safe_to_manage (boolean): Whether or not this snapshot is safe to"},{"line_number":1921,"context_line":"          manage according to the storage backend. For example, is the snapshot"},{"line_number":1922,"context_line":"          in use or invalid for any reason."},{"line_number":1923,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."},{"line_number":1924,"context_line":"        - extra_info (string): Any extra information to return to the user"},{"line_number":1925,"context_line":"        - source_id_type (string): Similar to \"id_type\", but for the snapshot\u0027s"},{"line_number":1926,"context_line":"          source volume."},{"line_number":1927,"context_line":"        - source_identifier (string): Similar to \"identifier\", but for the"},{"line_number":1928,"context_line":"          snapshot\u0027s source volume."},{"line_number":1929,"context_line":"        - source_potential_id (string): Similar to \"potential_id\", but for the"},{"line_number":1930,"context_line":"          snapshot\u0027s source volume."},{"line_number":1931,"context_line":""},{"line_number":1932,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1933,"context_line":"                          next results after this value (after sorting)"},{"line_number":1934,"context_line":"        :param limit:     Maximum number of items to return"},{"line_number":1935,"context_line":"        :param offset:    Number of items to skip after marker"},{"line_number":1936,"context_line":"        :param sort_keys: List of keys to sort results by (valid keys are"},{"line_number":1937,"context_line":"                          \u0027identifier\u0027 and \u0027size\u0027)"},{"line_number":1938,"context_line":"        :param sort_dirs: List of directions to sort by, corresponding to"},{"line_number":1939,"context_line":"                          sort_keys (valid directions are \u0027asc\u0027 and \u0027desc\u0027)"},{"line_number":1940,"context_line":""},{"line_number":1941,"context_line":"        \"\"\""},{"line_number":1942,"context_line":"        return []"},{"line_number":1943,"context_line":""},{"line_number":1944,"context_line":"    # NOTE: Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":1945,"context_line":"    def unmanage_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_303699e6","line":1942,"range":{"start_line":1905,"start_character":0,"end_line":1942,"end_character":17},"updated":"2016-05-19 16:52:44.000000000","message":"With snapshots I can\u0027t map the ID back. Does it matter to this if I simply exclude anything that looks like it might possibly be managed?","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":1902,"context_line":"        \"\"\""},{"line_number":1903,"context_line":"        return"},{"line_number":1904,"context_line":""},{"line_number":1905,"context_line":"    def get_manageable_snapshots(self, marker, limit, offset, sort_keys,"},{"line_number":1906,"context_line":"                                 sort_dirs):"},{"line_number":1907,"context_line":"        \"\"\"List snapshots on the backend available for management by Cinder."},{"line_number":1908,"context_line":""},{"line_number":1909,"context_line":"        Returns a list of dictionaries, each specifying a snapshot in the host,"},{"line_number":1910,"context_line":"        with the following keys:"},{"line_number":1911,"context_line":"        - id_type (string): The ID type for a snapshot, which can be passed to"},{"line_number":1912,"context_line":"          \"manage_existing_snapshot\"."},{"line_number":1913,"context_line":"        - identifier (string): The identifier for a snapshot, which can be"},{"line_number":1914,"context_line":"          passed to \"manage_existing_snapshot\"."},{"line_number":1915,"context_line":"        - size (float): The size of the snapshot according to the storage"},{"line_number":1916,"context_line":"          backend."},{"line_number":1917,"context_line":"        - potential_id (string): If the snapshot looks like it may already be"},{"line_number":1918,"context_line":"          managed by Cinder, provide the ID that it may have here. This ID"},{"line_number":1919,"context_line":"          will be looked up in the DB by the volume manager."},{"line_number":1920,"context_line":"        - safe_to_manage (boolean): Whether or not this snapshot is safe to"},{"line_number":1921,"context_line":"          manage according to the storage backend. For example, is the snapshot"},{"line_number":1922,"context_line":"          in use or invalid for any reason."},{"line_number":1923,"context_line":"        - reason_not_safe (string): If safe_to_manage is False, the reason why."},{"line_number":1924,"context_line":"        - extra_info (string): Any extra information to return to the user"},{"line_number":1925,"context_line":"        - source_id_type (string): Similar to \"id_type\", but for the snapshot\u0027s"},{"line_number":1926,"context_line":"          source volume."},{"line_number":1927,"context_line":"        - source_identifier (string): Similar to \"identifier\", but for the"},{"line_number":1928,"context_line":"          snapshot\u0027s source volume."},{"line_number":1929,"context_line":"        - source_potential_id (string): Similar to \"potential_id\", but for the"},{"line_number":1930,"context_line":"          snapshot\u0027s source volume."},{"line_number":1931,"context_line":""},{"line_number":1932,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1933,"context_line":"                          next results after this value (after sorting)"},{"line_number":1934,"context_line":"        :param limit:     Maximum number of items to return"},{"line_number":1935,"context_line":"        :param offset:    Number of items to skip after marker"},{"line_number":1936,"context_line":"        :param sort_keys: List of keys to sort results by (valid keys are"},{"line_number":1937,"context_line":"                          \u0027identifier\u0027 and \u0027size\u0027)"},{"line_number":1938,"context_line":"        :param sort_dirs: List of directions to sort by, corresponding to"},{"line_number":1939,"context_line":"                          sort_keys (valid directions are \u0027asc\u0027 and \u0027desc\u0027)"},{"line_number":1940,"context_line":""},{"line_number":1941,"context_line":"        \"\"\""},{"line_number":1942,"context_line":"        return []"},{"line_number":1943,"context_line":""},{"line_number":1944,"context_line":"    # NOTE: Can\u0027t use abstractmethod before all drivers implement it"},{"line_number":1945,"context_line":"    def unmanage_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_9f98dc1d","line":1942,"range":{"start_line":1905,"start_character":0,"end_line":1942,"end_character":17},"in_reply_to":"bab6814e_303699e6","updated":"2016-05-22 15:07:07.000000000","message":"Do you mean for potential_id? That\u0027s fine, it just means that the admin won\u0027t get the information and we won\u0027t verify that the volume is already managed. The driver can still say that a volume/snapshot is not safe to manage for any reason according to how the driver/backend behaves.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6f9273a11adabbc4f24e8dfb7cdd46f63e940144","unresolved":false,"context_lines":[{"line_number":1823,"context_line":"                               sort_dirs):"},{"line_number":1824,"context_line":"        \"\"\"List volumes on the backend available for management by Cinder."},{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1827,"context_line":"        with the following keys:"},{"line_number":1828,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1829,"context_line":"          \"manage_existing\"."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_b66b331d","line":1826,"range":{"start_line":1826,"start_character":72,"end_line":1826,"end_character":76},"updated":"2016-05-23 10:51:20.000000000","message":"?: Shouldn\u0027t this be backend?","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3bebdb53aecb156b450ff02870ec91cbf456c259","unresolved":false,"context_lines":[{"line_number":1823,"context_line":"                               sort_dirs):"},{"line_number":1824,"context_line":"        \"\"\"List volumes on the backend available for management by Cinder."},{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1827,"context_line":"        with the following keys:"},{"line_number":1828,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1829,"context_line":"          \"manage_existing\"."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_ef2e6f41","line":1826,"range":{"start_line":1826,"start_character":72,"end_line":1826,"end_character":76},"in_reply_to":"bab6814e_b66b331d","updated":"2016-05-23 15:50:20.000000000","message":"No, for this, \"id_type\", and  \"identifier\" below I went according to the client: https://github.com/openstack/python-cinderclient/blob/master/cinderclient/v3/shell.py#L2187\n\nThe API uses \"host\" as well:\nhttps://github.com/openstack/cinder/blob/master/cinder/api/contrib/volume_manage.py#L62\n\nThe API does in fact use reference, which is a dictionary like so: {\u003cid_type\u003e: \u003cidentifier\u003e}. The question is if it makes more sense to return this dictionary or separate the key and value. I thought it was more user-friendly to separate, just as it was more user-friendly to separate it in the client.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6f9273a11adabbc4f24e8dfb7cdd46f63e940144","unresolved":false,"context_lines":[{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1827,"context_line":"        with the following keys:"},{"line_number":1828,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1829,"context_line":"          \"manage_existing\"."},{"line_number":1830,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1831,"context_line":"          to \"manage_existing\"."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_1450380a","line":1828,"range":{"start_line":1828,"start_character":10,"end_line":1828,"end_character":17},"updated":"2016-05-23 10:51:20.000000000","message":"?: Is this referring to volume type?  Because then the naming is wrong and it isn\u0027t in the approved specs.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3bebdb53aecb156b450ff02870ec91cbf456c259","unresolved":false,"context_lines":[{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"        Returns a list of dictionaries, each specifying a volume in the host,"},{"line_number":1827,"context_line":"        with the following keys:"},{"line_number":1828,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1829,"context_line":"          \"manage_existing\"."},{"line_number":1830,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1831,"context_line":"          to \"manage_existing\"."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_5a05b743","line":1828,"range":{"start_line":1828,"start_character":10,"end_line":1828,"end_character":17},"in_reply_to":"bab6814e_1450380a","updated":"2016-05-23 15:50:20.000000000","message":"See above","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6f9273a11adabbc4f24e8dfb7cdd46f63e940144","unresolved":false,"context_lines":[{"line_number":1827,"context_line":"        with the following keys:"},{"line_number":1828,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1829,"context_line":"          \"manage_existing\"."},{"line_number":1830,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1831,"context_line":"          to \"manage_existing\"."},{"line_number":1832,"context_line":"        - size (float): The size of the volume according to the storage"},{"line_number":1833,"context_line":"          backend."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_b45ccc19","line":1830,"range":{"start_line":1830,"start_character":10,"end_line":1830,"end_character":20},"updated":"2016-05-23 10:51:20.000000000","message":"?: Would this be the reference?  If so, it should use that name instead so it matches the manage_existing naming convention.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3bebdb53aecb156b450ff02870ec91cbf456c259","unresolved":false,"context_lines":[{"line_number":1827,"context_line":"        with the following keys:"},{"line_number":1828,"context_line":"        - id_type (string): The ID type for a volume, which can be passed to"},{"line_number":1829,"context_line":"          \"manage_existing\"."},{"line_number":1830,"context_line":"        - identifier (string): The identifier for a volume, which can be passed"},{"line_number":1831,"context_line":"          to \"manage_existing\"."},{"line_number":1832,"context_line":"        - size (float): The size of the volume according to the storage"},{"line_number":1833,"context_line":"          backend."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_3a00b333","line":1830,"range":{"start_line":1830,"start_character":10,"end_line":1830,"end_character":20},"in_reply_to":"bab6814e_b45ccc19","updated":"2016-05-23 15:50:20.000000000","message":"See above","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6f9273a11adabbc4f24e8dfb7cdd46f63e940144","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"                                 sort_dirs):"},{"line_number":1908,"context_line":"        \"\"\"List snapshots on the backend available for management by Cinder."},{"line_number":1909,"context_line":""},{"line_number":1910,"context_line":"        Returns a list of dictionaries, each specifying a snapshot in the host,"},{"line_number":1911,"context_line":"        with the following keys:"},{"line_number":1912,"context_line":"        - id_type (string): The ID type for a snapshot, which can be passed to"},{"line_number":1913,"context_line":"          \"manage_existing_snapshot\"."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_96b54f7f","line":1910,"range":{"start_line":1910,"start_character":73,"end_line":1910,"end_character":78},"updated":"2016-05-23 10:51:20.000000000","message":"ditto","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3bebdb53aecb156b450ff02870ec91cbf456c259","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"                                 sort_dirs):"},{"line_number":1908,"context_line":"        \"\"\"List snapshots on the backend available for management by Cinder."},{"line_number":1909,"context_line":""},{"line_number":1910,"context_line":"        Returns a list of dictionaries, each specifying a snapshot in the host,"},{"line_number":1911,"context_line":"        with the following keys:"},{"line_number":1912,"context_line":"        - id_type (string): The ID type for a snapshot, which can be passed to"},{"line_number":1913,"context_line":"          \"manage_existing_snapshot\"."}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_3aaef32d","line":1910,"range":{"start_line":1910,"start_character":73,"end_line":1910,"end_character":78},"in_reply_to":"bab6814e_96b54f7f","updated":"2016-05-23 15:50:20.000000000","message":"See above","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"567266ff791a88052a228d03a8fdd0dcba791575","unresolved":false,"context_lines":[{"line_number":1838,"context_line":""},{"line_number":1839,"context_line":"        :param cinder_volumes: A list of volumes in this host that Cinder"},{"line_number":1840,"context_line":"                               currently manages, used to determine if"},{"line_number":1841,"context_line":"                               a volume is manageable or not."},{"line_number":1842,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1843,"context_line":"                          next results after this value (after sorting)"},{"line_number":1844,"context_line":"        :param limit:     Maximum number of items to return"}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_bd14dde8","line":1841,"updated":"2016-05-26 17:01:15.000000000","message":"this isn\u0027t in the param list.","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"43aa65597156cb1da8eb8abadf7a52c73c38bfac","unresolved":false,"context_lines":[{"line_number":1838,"context_line":""},{"line_number":1839,"context_line":"        :param cinder_volumes: A list of volumes in this host that Cinder"},{"line_number":1840,"context_line":"                               currently manages, used to determine if"},{"line_number":1841,"context_line":"                               a volume is manageable or not."},{"line_number":1842,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1843,"context_line":"                          next results after this value (after sorting)"},{"line_number":1844,"context_line":"        :param limit:     Maximum number of items to return"}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_cb4638bf","line":1841,"in_reply_to":"bab6814e_bd14dde8","updated":"2016-05-26 19:25:06.000000000","message":"Done","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"567266ff791a88052a228d03a8fdd0dcba791575","unresolved":false,"context_lines":[{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"        :param cinder_snapshots: A list of snapshots in this host that Cinder"},{"line_number":1925,"context_line":"                                 currently manages, used to determine if"},{"line_number":1926,"context_line":"                                 a snapshot is manageable or not."},{"line_number":1927,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1928,"context_line":"                          next results after this value (after sorting)"},{"line_number":1929,"context_line":"        :param limit:     Maximum number of items to return"}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_3dad8d9b","line":1926,"updated":"2016-05-26 17:01:15.000000000","message":"also not in the signature of the method.","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"43aa65597156cb1da8eb8abadf7a52c73c38bfac","unresolved":false,"context_lines":[{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"        :param cinder_snapshots: A list of snapshots in this host that Cinder"},{"line_number":1925,"context_line":"                                 currently manages, used to determine if"},{"line_number":1926,"context_line":"                                 a snapshot is manageable or not."},{"line_number":1927,"context_line":"        :param marker:    The last item of the previous page; we return the"},{"line_number":1928,"context_line":"                          next results after this value (after sorting)"},{"line_number":1929,"context_line":"        :param limit:     Maximum number of items to return"}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_eb17bca0","line":1926,"in_reply_to":"bab6814e_3dad8d9b","updated":"2016-05-26 19:25:06.000000000","message":"Done","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"567266ff791a88052a228d03a8fdd0dcba791575","unresolved":false,"context_lines":[{"line_number":2090,"context_line":"        msg \u003d _(\"Manage existing volume not implemented.\")"},{"line_number":2091,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2092,"context_line":""},{"line_number":2093,"context_line":"    def get_manageable_volumes(self):"},{"line_number":2094,"context_line":"        msg \u003d _(\"Get manageable volumes not implemented.\")"},{"line_number":2095,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2096,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_9dcbd952","line":2093,"updated":"2016-05-26 17:01:15.000000000","message":"the signature of this is different than it\u0027s defined in the ManageableVD","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"43aa65597156cb1da8eb8abadf7a52c73c38bfac","unresolved":false,"context_lines":[{"line_number":2090,"context_line":"        msg \u003d _(\"Manage existing volume not implemented.\")"},{"line_number":2091,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2092,"context_line":""},{"line_number":2093,"context_line":"    def get_manageable_volumes(self):"},{"line_number":2094,"context_line":"        msg \u003d _(\"Get manageable volumes not implemented.\")"},{"line_number":2095,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2096,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_8b271011","line":2093,"in_reply_to":"bab6814e_9dcbd952","updated":"2016-05-26 19:25:06.000000000","message":"Done","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"567266ff791a88052a228d03a8fdd0dcba791575","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        msg \u003d _(\"Manage existing snapshot not implemented.\")"},{"line_number":2106,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"    def get_manageable_snapshots(self):"},{"line_number":2109,"context_line":"        msg \u003d _(\"Get manageable snapshots not implemented.\")"},{"line_number":2110,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2111,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_3d374d4e","line":2108,"updated":"2016-05-26 17:01:15.000000000","message":"same here.  the signature isn\u0027t the same.","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"43aa65597156cb1da8eb8abadf7a52c73c38bfac","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        msg \u003d _(\"Manage existing snapshot not implemented.\")"},{"line_number":2106,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"    def get_manageable_snapshots(self):"},{"line_number":2109,"context_line":"        msg \u003d _(\"Get manageable snapshots not implemented.\")"},{"line_number":2110,"context_line":"        raise NotImplementedError(msg)"},{"line_number":2111,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_2b5c247c","line":2108,"in_reply_to":"bab6814e_3d374d4e","updated":"2016-05-26 19:25:06.000000000","message":"Done","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea2ff4c46085e1f602efe8dd51904aad9f472ab7","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                origin \u003d self.vg.lv_get_origin(lv[\u0027name\u0027])"},{"line_number":690,"context_line":"                lv_info[\u0027source_id_type\u0027] \u003d \u0027source-name\u0027"},{"line_number":691,"context_line":"                lv_info[\u0027source_identifier\u0027] \u003d origin"},{"line_number":692,"context_line":"                lv_info[\u0027source_potential_id\u0027] \u003d \\"},{"line_number":693,"context_line":"                    volutils.extract_id_from_volume_name(origin)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            entries.append(lv_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a1b2928_e968fdbc","line":692,"updated":"2016-04-11 14:58:27.000000000","message":"Please try to avoid \\ for line continuation.","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6173c456db891f5f0109147eede14cbe3402c707","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                origin \u003d self.vg.lv_get_origin(lv[\u0027name\u0027])"},{"line_number":690,"context_line":"                lv_info[\u0027source_id_type\u0027] \u003d \u0027source-name\u0027"},{"line_number":691,"context_line":"                lv_info[\u0027source_identifier\u0027] \u003d origin"},{"line_number":692,"context_line":"                lv_info[\u0027source_potential_id\u0027] \u003d \\"},{"line_number":693,"context_line":"                    volutils.extract_id_from_volume_name(origin)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            entries.append(lv_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a18252c_7841540b","line":692,"in_reply_to":"7a1b2928_e968fdbc","updated":"2016-04-12 16:09:11.000000000","message":"I don\u0027t think it is avoidable here. Any ideas?","commit_id":"441774482bc9d9d60271353c6978a5a478bac708"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"aefe31ddb9c1a20b0ac402960ff0fd555a45cc6a","unresolved":false,"context_lines":[{"line_number":685,"context_line":"            else:"},{"line_number":686,"context_line":"                lv_info[\u0027safe_to_manage\u0027] \u003d True"},{"line_number":687,"context_line":"                lv_info[\u0027reason_not_safe\u0027] \u003d None"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"            if resource_type \u003d\u003d \u0027snapshot\u0027:"},{"line_number":690,"context_line":"                origin \u003d self.vg.lv_get_origin(lv[\u0027name\u0027])"},{"line_number":691,"context_line":"                lv_info[\u0027source_id_type\u0027] \u003d \u0027source-name\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_818824e9","line":688,"updated":"2016-05-18 14:55:03.000000000","message":"Shouldn\u0027t this filter out LVs that don\u0027t have a size on a GB boundary and mark them as not safe to manage?\n\nOr if not, result in an extend call as part of the manage process?","commit_id":"bf9d773f855822241f8937852b338450ed525a05"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f860ffeed0a451f1e781d4fd1b877f148e7abb27","unresolved":false,"context_lines":[{"line_number":685,"context_line":"            else:"},{"line_number":686,"context_line":"                lv_info[\u0027safe_to_manage\u0027] \u003d True"},{"line_number":687,"context_line":"                lv_info[\u0027reason_not_safe\u0027] \u003d None"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"            if resource_type \u003d\u003d \u0027snapshot\u0027:"},{"line_number":690,"context_line":"                origin \u003d self.vg.lv_get_origin(lv[\u0027name\u0027])"},{"line_number":691,"context_line":"                lv_info[\u0027source_id_type\u0027] \u003d \u0027source-name\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_1d13d70e","line":688,"in_reply_to":"bab6814e_818824e9","updated":"2016-05-19 05:15:14.000000000","message":"I don\u0027t believe so. The caller would disappointed to find that if the volumes weren\u0027t originally created using Cinder, that many volumes are unmanageable, or that their sizes have changed. I think we should be more flexible in this case and allow the admin to manage volumes that don\u0027t exactly fit our model. Even today there are backends that don\u0027t allocate the exact size to the bit, so I don\u0027t see a reason to be overly strict.","commit_id":"bf9d773f855822241f8937852b338450ed525a05"}],"cinder/volume/manager.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":2360,"context_line":"                entry[\u0027size\u0027] \u003d int(math.ceil(driver_entry[\u0027size\u0027]))"},{"line_number":2361,"context_line":"            except TypeError:"},{"line_number":2362,"context_line":"                LOG.error(_LE(\u0027Got non-float size from driver for ref \u0027"},{"line_number":2363,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2364,"context_line":"            managed \u003d False"},{"line_number":2365,"context_line":"            if driver_entry.get(\u0027potential_id\u0027) is not None:"},{"line_number":2366,"context_line":"                managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_d2472775","line":2363,"updated":"2016-05-20 12:31:55.000000000","message":"-1: You are not actually skipping it!","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":2360,"context_line":"                entry[\u0027size\u0027] \u003d int(math.ceil(driver_entry[\u0027size\u0027]))"},{"line_number":2361,"context_line":"            except TypeError:"},{"line_number":2362,"context_line":"                LOG.error(_LE(\u0027Got non-float size from driver for ref \u0027"},{"line_number":2363,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2364,"context_line":"            managed \u003d False"},{"line_number":2365,"context_line":"            if driver_entry.get(\u0027potential_id\u0027) is not None:"},{"line_number":2366,"context_line":"                managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_ff8768b2","line":2363,"in_reply_to":"bab6814e_d2472775","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":2361,"context_line":"            except TypeError:"},{"line_number":2362,"context_line":"                LOG.error(_LE(\u0027Got non-float size from driver for ref \u0027"},{"line_number":2363,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2364,"context_line":"            managed \u003d False"},{"line_number":2365,"context_line":"            if driver_entry.get(\u0027potential_id\u0027) is not None:"},{"line_number":2366,"context_line":"                managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2367,"context_line":"            if managed:"},{"line_number":2368,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2369,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_cd7f8c64","line":2366,"range":{"start_line":2364,"start_character":12,"end_line":2366,"end_character":71},"updated":"2016-05-20 12:31:55.000000000","message":"?: Why not just do:\n\n managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids\n\nSince found_ids will not contain None it will be False when potential_id doesn\u0027t exist.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":2361,"context_line":"            except TypeError:"},{"line_number":2362,"context_line":"                LOG.error(_LE(\u0027Got non-float size from driver for ref \u0027"},{"line_number":2363,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2364,"context_line":"            managed \u003d False"},{"line_number":2365,"context_line":"            if driver_entry.get(\u0027potential_id\u0027) is not None:"},{"line_number":2366,"context_line":"                managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2367,"context_line":"            if managed:"},{"line_number":2368,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2369,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_5faaf419","line":2366,"range":{"start_line":2364,"start_character":12,"end_line":2366,"end_character":71},"in_reply_to":"bab6814e_cd7f8c64","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":3460,"context_line":""},{"line_number":3461,"context_line":"    def get_manageable_snapshots(self, ctxt, marker, limit, offset,"},{"line_number":3462,"context_line":"                                 sort_keys, sort_dirs):"},{"line_number":3463,"context_line":"        try:"},{"line_number":3464,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":3465,"context_line":"        except exception.DriverNotInitialized:"},{"line_number":3466,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_f2106b5b","line":3463,"updated":"2016-05-20 12:31:55.000000000","message":"-1: This is 90% exactly the same as get_manageable_volumes, please extract common code to another method.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":3460,"context_line":""},{"line_number":3461,"context_line":"    def get_manageable_snapshots(self, ctxt, marker, limit, offset,"},{"line_number":3462,"context_line":"                                 sort_keys, sort_dirs):"},{"line_number":3463,"context_line":"        try:"},{"line_number":3464,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":3465,"context_line":"        except exception.DriverNotInitialized:"},{"line_number":3466,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_a250270c","line":3463,"in_reply_to":"bab6814e_f2106b5b","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6f9273a11adabbc4f24e8dfb7cdd46f63e940144","unresolved":false,"context_lines":[{"line_number":2351,"context_line":"        potential_ids \u003d [entry.get(\u0027potential_id\u0027) for entry in driver_entries"},{"line_number":2352,"context_line":"                         if entry.get(\u0027potential_id\u0027)]"},{"line_number":2353,"context_line":"        found_vols \u003d self.db.volume_get_all(ctxt, None, None,"},{"line_number":2354,"context_line":"                                            filters\u003d{\u0027id\u0027: potential_ids})"},{"line_number":2355,"context_line":"        found_ids \u003d [vol.id for vol in found_vols]"},{"line_number":2356,"context_line":""},{"line_number":2357,"context_line":"        entries \u003d []"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_3770dea3","line":2354,"range":{"start_line":2354,"start_character":59,"end_line":2354,"end_character":72},"updated":"2016-05-23 10:51:20.000000000","message":"!: This could generate a huge SQL query if we have a lot of managed volumes.  This will not be a problem for PostgreSQL, and I believe we won\u0027t easily reach MySQL\u0027s default size (uses a 16MB max_allowed_packet by default).","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3bebdb53aecb156b450ff02870ec91cbf456c259","unresolved":false,"context_lines":[{"line_number":2351,"context_line":"        potential_ids \u003d [entry.get(\u0027potential_id\u0027) for entry in driver_entries"},{"line_number":2352,"context_line":"                         if entry.get(\u0027potential_id\u0027)]"},{"line_number":2353,"context_line":"        found_vols \u003d self.db.volume_get_all(ctxt, None, None,"},{"line_number":2354,"context_line":"                                            filters\u003d{\u0027id\u0027: potential_ids})"},{"line_number":2355,"context_line":"        found_ids \u003d [vol.id for vol in found_vols]"},{"line_number":2356,"context_line":""},{"line_number":2357,"context_line":"        entries \u003d []"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_5a28179a","line":2354,"range":{"start_line":2354,"start_character":59,"end_line":2354,"end_character":72},"in_reply_to":"bab6814e_3770dea3","updated":"2016-05-23 15:50:20.000000000","message":"Will take into account, thank you.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"673f3e81f63ccc7bc65bd9626e10e411c27c00d1","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2368,"context_line":"                continue"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"            managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2371,"context_line":"            if managed:"},{"line_number":2372,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2373,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_6a11f103","line":2370,"updated":"2016-05-23 03:04:14.000000000","message":"Not all backends can provide this \"potential_id\". If a backend cannot provide \"potential_id\", this approach will mark an already managed volume as \"safe_to_manage\" and it will be managed again and again (multiple volume entries in Cinder db for the same volume on the backend).\n\nIf the manager can provide the driver a list of already managed volumes before calling the driver method, driver can compare the already managed volumes (which has backend lun id info in provider_location or provider_id) with the list of volumes from the backend and filter out the already managed ones before returning to the manager.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2a92208af615c3bbe78d150edcd097e6fa58bc95","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2368,"context_line":"                continue"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"            managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2371,"context_line":"            if managed:"},{"line_number":2372,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2373,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_94b12404","line":2370,"in_reply_to":"bab6814e_1ad04fc8","updated":"2016-05-25 21:17:57.000000000","message":"Gorka,\n\nYes, ScaleIO saves array lun info using provider_id, but it cannot write anything back to the lun on the array. So volume uuid cannot be saved on a lun on the array.  Therefore by checking the backend alone, we cannot tell what is managed by Cinder and what is not.  Need to get some info from the manager first.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3bebdb53aecb156b450ff02870ec91cbf456c259","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2368,"context_line":"                continue"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"            managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2371,"context_line":"            if managed:"},{"line_number":2372,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2373,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_ba1dc374","line":2370,"in_reply_to":"bab6814e_1ad04fc8","updated":"2016-05-23 15:50:20.000000000","message":"Will take into account, thank you.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3ac2497aeb34f02efae9165a58378caa90474461","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2368,"context_line":"                continue"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"            managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2371,"context_line":"            if managed:"},{"line_number":2372,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2373,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_71f1dd6a","line":2370,"in_reply_to":"bab6814e_6a11f103","updated":"2016-05-23 08:36:44.000000000","message":"It seems very wasteful to pass all volumes in this backend to the driver for this - maybe there is another way?\n\nLooking at the code, the VNX driver creates the volume as volume[\u0027name\u0027] which is CONF.volume_name_template % self.name_id. So if the volume name has this format it can return a potential ID.\n\nThe xtremeio and VMAX drivers just use volume[\u0027id\u0027], so they can return that as potential ID if it has the UUID format.\n\nIs this analysis correct?  Is there another driver that you have in mind that can\u0027t handle this API?","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6f9273a11adabbc4f24e8dfb7cdd46f63e940144","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2368,"context_line":"                continue"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"            managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2371,"context_line":"            if managed:"},{"line_number":2372,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2373,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_f7301658","line":2370,"in_reply_to":"bab6814e_71f1dd6a","updated":"2016-05-23 10:51:20.000000000","message":"-1: We may also have a problem if the volume has been migrated (and driver doesn\u0027t have the renaming capability) so the volume is using name_id field field.  So the driver may give a potential_id that should be matched against name_id and not the id.\n\nAn alternative would be to allow the driver to give additional information, so we don\u0027t rely only on 1 field (provider_location, provider_id, potential_id, ...) and for the manager to filter based on those and filtering the potential_id not only against the id field but also against name_id.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"81d99a77e2ce019febbded880bea3889732a286d","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2368,"context_line":"                continue"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"            managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2371,"context_line":"            if managed:"},{"line_number":2372,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2373,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_1ad04fc8","line":2370,"in_reply_to":"bab6814e_ec015d06","updated":"2016-05-23 15:47:17.000000000","message":"Xing, are your drivers using provider_location or provider_id?","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0ec92e42026c9cce5d60a71dd4a297dc397b7696","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"                              \u0027%s, skipping.\u0027), driver_entry[\u0027ref\u0027])"},{"line_number":2368,"context_line":"                continue"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"            managed \u003d driver_entry.get(\u0027potential_id\u0027) in found_ids"},{"line_number":2371,"context_line":"            if managed:"},{"line_number":2372,"context_line":"                entry[\u0027safe_to_manage\u0027] \u003d False"},{"line_number":2373,"context_line":"                entry[\u0027reason_not_safe\u0027] \u003d \u0027already managed\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_ec015d06","line":2370,"in_reply_to":"bab6814e_f7301658","updated":"2016-05-23 15:08:21.000000000","message":"Avishay,\n\nThanks for looking into our drivers!  ScaleIO cannot save the Cinder volume uuid on the array.  There could be other drivers that I don\u0027t know.  So the only way I can think of is for the manager to pass the list of already managed volumes to the driver, and the driver will compare that to the list of all the volumes on the backend, and then return a filtered out list.\n\nSo I suggest if the driver provides \u0027potential_id\u0027, use your current logic.  Otherwise use the list returned by the driver.","commit_id":"cfd02a9aeb2393c6632f60c03bd04719979cabab"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"567266ff791a88052a228d03a8fdd0dcba791575","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"    def _get_manageable_resources(self, ctxt, cinder_resources, marker, limit,"},{"line_number":2328,"context_line":"                                  offset, sort_keys, sort_dirs, driver_method):"},{"line_number":2329,"context_line":"        try:"},{"line_number":2330,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":2331,"context_line":"        except exception.DriverNotInitialized:"},{"line_number":2332,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2333,"context_line":"                LOG.exception(_LE(\"Listing manageable resources failed, due \""}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_7d8715b5","line":2330,"updated":"2016-05-26 17:01:15.000000000","message":"shouldn\u0027t we make this check before fetching every volume/snapshot from the cinder DB?","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"43aa65597156cb1da8eb8abadf7a52c73c38bfac","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"    def _get_manageable_resources(self, ctxt, cinder_resources, marker, limit,"},{"line_number":2328,"context_line":"                                  offset, sort_keys, sort_dirs, driver_method):"},{"line_number":2329,"context_line":"        try:"},{"line_number":2330,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":2331,"context_line":"        except exception.DriverNotInitialized:"},{"line_number":2332,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2333,"context_line":"                LOG.exception(_LE(\"Listing manageable resources failed, due \""}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_2bd384d6","line":2330,"in_reply_to":"bab6814e_7d8715b5","updated":"2016-05-26 19:25:06.000000000","message":"Done","commit_id":"07c6448a1a6e2f63bb666a03cdd3264a588dc156"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b65a217334ddcf3e99653e22a9f6161a97a3f732","unresolved":false,"context_lines":[{"line_number":3448,"context_line":"                cinder_snapshots, marker, limit, offset, sort_keys, sort_dirs)"},{"line_number":3449,"context_line":"        except Exception:"},{"line_number":3450,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3451,"context_line":"                LOG.exception(_LE(\"Listing manageable volumes failed, due \""},{"line_number":3452,"context_line":"                                  \"to driver error.\"))"},{"line_number":3453,"context_line":"        return driver_entries"},{"line_number":3454,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_3eac598b","line":3451,"updated":"2016-05-26 21:56:13.000000000","message":"s/volumes/snapshots","commit_id":"96f5c90655dded484e5a51a93bea8b8892daba44"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8d5dbbcd12a76540b2c505141f65a41bfa2304bf","unresolved":false,"context_lines":[{"line_number":3448,"context_line":"                cinder_snapshots, marker, limit, offset, sort_keys, sort_dirs)"},{"line_number":3449,"context_line":"        except Exception:"},{"line_number":3450,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3451,"context_line":"                LOG.exception(_LE(\"Listing manageable volumes failed, due \""},{"line_number":3452,"context_line":"                                  \"to driver error.\"))"},{"line_number":3453,"context_line":"        return driver_entries"},{"line_number":3454,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_7c4dd271","line":3451,"in_reply_to":"bab6814e_3eac598b","updated":"2016-05-29 09:05:21.000000000","message":"Done","commit_id":"96f5c90655dded484e5a51a93bea8b8892daba44"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f7d817cc421c2b1e8574d84d165fb4030b792e0d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        2.1  - Add get_manageable_volumes() and get_manageable_snapshots()."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    RPC_API_VERSION \u003d \u00271.41\u0027"},{"line_number":106,"context_line":"    TOPIC \u003d CONF.volume_topic"},{"line_number":107,"context_line":"    BINARY \u003d \u0027cinder-volume\u0027"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da0c15f0_f7aa9718","line":105,"range":{"start_line":105,"start_character":4,"end_line":105,"end_character":28},"updated":"2016-03-25 14:23:07.000000000","message":"It\u0027s 2.1 now I guess?","commit_id":"641c6f373778088fa21e049858bea72bf5627190"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"88be64fae3b5c5be00627bb94f15fcacaac594a6","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        2.1  - Add get_manageable_volumes() and get_manageable_snapshots()."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    RPC_API_VERSION \u003d \u00271.41\u0027"},{"line_number":106,"context_line":"    TOPIC \u003d CONF.volume_topic"},{"line_number":107,"context_line":"    BINARY \u003d \u0027cinder-volume\u0027"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da0c15f0_a8743acf","line":105,"range":{"start_line":105,"start_character":4,"end_line":105,"end_character":28},"in_reply_to":"da0c15f0_f7aa9718","updated":"2016-03-28 12:34:48.000000000","message":"Yes sir","commit_id":"641c6f373778088fa21e049858bea72bf5627190"}],"releasenotes/notes/list-manageable-86c77fc39c5b2cc9.yaml":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2273ff045e5bb686b06a79488c8a0d2c12260d35","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added ability to list manageable volumes and snapshots."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"bab6814e_28b2864c","line":3,"updated":"2016-05-20 12:31:55.000000000","message":"-1: This should include more information about the new API endpoints.","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"e21e3edad6aa3518463e7bd00daa1168c42e6f67","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added ability to list manageable volumes and snapshots."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"bab6814e_4df2519b","line":3,"in_reply_to":"bab6814e_28b2864c","updated":"2016-05-22 15:07:07.000000000","message":"Done","commit_id":"d2e029812170bb9736206faa691dfe069a9ef3eb"}]}
