)]}'
{"specs/rocky/approved/glance/multi-store.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":29,"context_line":"   is migrated."},{"line_number":30,"context_line":" * Operator wants to differentiate the images from images added by user."},{"line_number":31,"context_line":" * Different hypervisors provided from different backends (For"},{"line_number":32,"context_line":"   example, Ceph, Cinder, VmWare etc.)."},{"line_number":33,"context_line":" * Each site with their local backends which nova hosts are accessing"},{"line_number":34,"context_line":"   directly (Ceph) and users can select the site where image will be stored."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_d143e4ae","line":32,"range":{"start_line":32,"start_character":26,"end_line":32,"end_character":32},"updated":"2018-05-17 21:09:02.000000000","message":"VMware","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"As a result, operators today needs to perform a number of manual steps"},{"line_number":47,"context_line":"in order to replicate or target image bits on backend glance stores. For"},{"line_number":48,"context_line":"example, in order to replicate a existing image\u0027s bits to secondary storage"},{"line_number":49,"context_line":"of the same type / scheme as the primary:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":" * It\u0027s a manual out-of-band task to copy image bits to secondary storage."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_5186f4dd","line":48,"range":{"start_line":48,"start_character":31,"end_line":48,"end_character":32},"updated":"2018-05-17 21:09:02.000000000","message":"an","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"606cadc49800974ed00e56a4f1f230dc76e596c8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"3 stores for use::"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    [glance-store]"},{"line_number":98,"context_line":"    # list of enabled stores identified by their property group name"},{"line_number":99,"context_line":"    # if not set multi-store is not used (backwards compat)"},{"line_number":100,"context_line":"    enable_backends \u003d localfs:file, ceph1:rbd, ceph2:rbd"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # the default store, if not set the 1st store is the default"},{"line_number":103,"context_line":"    default_store \u003d ceph1"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_57610c11","line":100,"range":{"start_line":98,"start_character":0,"end_line":100,"end_character":56},"updated":"2018-04-26 10:58:13.000000000","message":"I think we should look into extending the \u0027stores\u0027 option for this instead of introducing yet another config option thta could get pretty confusing to the operators.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"512476b3176cee9938458e113acfea0f3941ed7b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"3 stores for use::"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    [glance-store]"},{"line_number":98,"context_line":"    # list of enabled stores identified by their property group name"},{"line_number":99,"context_line":"    # if not set multi-store is not used (backwards compat)"},{"line_number":100,"context_line":"    enable_backends \u003d localfs:file, ceph1:rbd, ceph2:rbd"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # the default store, if not set the 1st store is the default"},{"line_number":103,"context_line":"    default_store \u003d ceph1"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_eb6382b0","line":100,"range":{"start_line":98,"start_character":0,"end_line":100,"end_character":56},"in_reply_to":"9f6a8fd7_20121064","updated":"2018-04-27 11:28:22.000000000","message":"Maybe we just need to do some parsing and could do something like \"file:fast\", \"file:cheap\", \"rbd:reliable\"?","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ffda3766c9ffd71702c4404da1841badbb30514f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"3 stores for use::"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    [glance-store]"},{"line_number":98,"context_line":"    # list of enabled stores identified by their property group name"},{"line_number":99,"context_line":"    # if not set multi-store is not used (backwards compat)"},{"line_number":100,"context_line":"    enable_backends \u003d localfs:file, ceph1:rbd, ceph2:rbd"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # the default store, if not set the 1st store is the default"},{"line_number":103,"context_line":"    default_store \u003d ceph1"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_20121064","line":100,"range":{"start_line":98,"start_character":0,"end_line":100,"end_character":56},"in_reply_to":"9f6a8fd7_57610c11","updated":"2018-04-26 13:21:59.000000000","message":"if we extend stores option it will be difficult to maintain the backward compatibility, also instead of list type we need to change it to dict type so that we can define it as store_id: store_type, otherwise it will be difficult to define and register its config options.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7f54dcd78b20f49742fa89c30640c9a0416eaa38","unresolved":false,"context_lines":[{"line_number":95,"context_line":"3 stores for use::"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    [glance-store]"},{"line_number":98,"context_line":"    # list of enabled stores identified by their property group name"},{"line_number":99,"context_line":"    # if not set multi-store is not used (backwards compat)"},{"line_number":100,"context_line":"    enable_backends \u003d localfs:file, ceph1:rbd, ceph2:rbd"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # the default store, if not set the 1st store is the default"},{"line_number":103,"context_line":"    default_store \u003d ceph1"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_4106ca88","line":100,"range":{"start_line":98,"start_character":0,"end_line":100,"end_character":56},"in_reply_to":"9f6a8fd7_eb6382b0","updated":"2018-05-02 05:05:19.000000000","message":"as this is a dictionary option we can not keep store type as a key as it will be overridden but we can keep store type a value.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"606cadc49800974ed00e56a4f1f230dc76e596c8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    # if not set multi-store is not used (backwards compat)"},{"line_number":100,"context_line":"    enable_backends \u003d localfs:file, ceph1:rbd, ceph2:rbd"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # the default store, if not set the 1st store is the default"},{"line_number":103,"context_line":"    default_store \u003d ceph1"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    # conf props for file system store instance"},{"line_number":106,"context_line":"    [localfs]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_3749f88a","line":103,"range":{"start_line":102,"start_character":0,"end_line":103,"end_character":25},"updated":"2018-04-26 10:58:13.000000000","message":"This is not currently optional and we should not make it such.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ffda3766c9ffd71702c4404da1841badbb30514f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    # if not set multi-store is not used (backwards compat)"},{"line_number":100,"context_line":"    enable_backends \u003d localfs:file, ceph1:rbd, ceph2:rbd"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # the default store, if not set the 1st store is the default"},{"line_number":103,"context_line":"    default_store \u003d ceph1"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    # conf props for file system store instance"},{"line_number":106,"context_line":"    [localfs]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_4b0c053b","line":103,"range":{"start_line":102,"start_character":0,"end_line":103,"end_character":25},"in_reply_to":"9f6a8fd7_3749f88a","updated":"2018-04-26 13:21:59.000000000","message":"Ok, we can handle this in code.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"606cadc49800974ed00e56a4f1f230dc76e596c8","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # conf props for ceph store instance"},{"line_number":116,"context_line":"    [ceph1]"},{"line_number":117,"context_line":"    rbd_store_ceph_conf \u003d /opt/ceph2/ceph.conf"},{"line_number":118,"context_line":"    # etc.."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The example above is for Ceph, but it could apply to any storage backend. As"},{"line_number":121,"context_line":"shown in the example above the \u0027enable_backends\u0027 property is a comma delimited"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_d70bdc28","line":118,"range":{"start_line":118,"start_character":0,"end_line":118,"end_character":11},"updated":"2018-04-26 10:58:13.000000000","message":"If we just define the store driver here, we would have all the information contained in a single place and avoid complexity of configuring and managing the backend configurations by the operators.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7f54dcd78b20f49742fa89c30640c9a0416eaa38","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # conf props for ceph store instance"},{"line_number":116,"context_line":"    [ceph1]"},{"line_number":117,"context_line":"    rbd_store_ceph_conf \u003d /opt/ceph2/ceph.conf"},{"line_number":118,"context_line":"    # etc.."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The example above is for Ceph, but it could apply to any storage backend. As"},{"line_number":121,"context_line":"shown in the example above the \u0027enable_backends\u0027 property is a comma delimited"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_e1f4be89","line":118,"range":{"start_line":118,"start_character":0,"end_line":118,"end_character":11},"in_reply_to":"9f6a8fd7_6b1d320e","updated":"2018-05-02 05:05:19.000000000","message":"This kind of approach will be difficult as we can not have a store type as a key but if you want to have driver path in thus group then we can have something like this;\n\n[ceph1]\ndriver \u003d glance_store._drivers.rbd.driver\nrbd_store_conf \u003d /etc/ceph/ceph.conf\n.....","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ad8751204759d8bf797d557c6d2c8ee24f5e6150","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # conf props for ceph store instance"},{"line_number":116,"context_line":"    [ceph1]"},{"line_number":117,"context_line":"    rbd_store_ceph_conf \u003d /opt/ceph2/ceph.conf"},{"line_number":118,"context_line":"    # etc.."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The example above is for Ceph, but it could apply to any storage backend. As"},{"line_number":121,"context_line":"shown in the example above the \u0027enable_backends\u0027 property is a comma delimited"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_982fbfa6","line":118,"range":{"start_line":118,"start_character":0,"end_line":118,"end_character":11},"in_reply_to":"9f6a8fd7_8b79bd94","updated":"2018-04-27 06:27:46.000000000","message":"We have kind of private package for drivers (_drivers), so if we want to define new option for driver in it\u0027s own config group then we need to expose entire path which is not good. For example:\n[ceph1]\nstore_driver \u003d glance_store._drivers.rbd.store\n\nOR else we can add new package drivers with all these modules and later remover _drivers package once deprecation period is over.\n\nKindly suggest.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"512476b3176cee9938458e113acfea0f3941ed7b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # conf props for ceph store instance"},{"line_number":116,"context_line":"    [ceph1]"},{"line_number":117,"context_line":"    rbd_store_ceph_conf \u003d /opt/ceph2/ceph.conf"},{"line_number":118,"context_line":"    # etc.."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The example above is for Ceph, but it could apply to any storage backend. As"},{"line_number":121,"context_line":"shown in the example above the \u0027enable_backends\u0027 property is a comma delimited"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_6b1d320e","line":118,"range":{"start_line":118,"start_character":0,"end_line":118,"end_character":11},"in_reply_to":"9f6a8fd7_982fbfa6","updated":"2018-04-27 11:28:22.000000000","message":"Well what I was looking for is that instead of defining in the \"stores\" the names of the back-ends, we could just define in these blocks what store type the block defines. Obviously we need to do some more intense config parsing and need to change these block to something like [glance_store_\u003cinsert_name_here\u003e] That way we would know while parsing the config block, what type of store object we need to request and for the operator it would be quite a bit easier when all the configs for a specific back-end being in the same place.\n\nSorry that I was bit unclear that this and my comment on line 100 are kind of optional approaches from eachother.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ffda3766c9ffd71702c4404da1841badbb30514f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # conf props for ceph store instance"},{"line_number":116,"context_line":"    [ceph1]"},{"line_number":117,"context_line":"    rbd_store_ceph_conf \u003d /opt/ceph2/ceph.conf"},{"line_number":118,"context_line":"    # etc.."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The example above is for Ceph, but it could apply to any storage backend. As"},{"line_number":121,"context_line":"shown in the example above the \u0027enable_backends\u0027 property is a comma delimited"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_8b79bd94","line":118,"range":{"start_line":118,"start_character":0,"end_line":118,"end_character":11},"in_reply_to":"9f6a8fd7_d70bdc28","updated":"2018-04-26 13:21:59.000000000","message":"Currently we are using stevedore extension to load the driver where backward compatibility [1] is also maintained. If we want to define driver class here then it will be administrators headache to define appropriate class path. Is it ok?\n\n[1] https://github.com/openstack/glance_store/blob/master/setup.cfg#L39","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"606cadc49800974ed00e56a4f1f230dc76e596c8","unresolved":false,"context_lines":[{"line_number":382,"context_line":"All URLS will be under the v2 Glance API.  If it is not explicitly specified"},{"line_number":383,"context_line":"assume /v2/\u003curl\u003e"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"**[New API] List stores**"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"List all stores known to the glance service::"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    GET /v2/stores"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"This API takes no query parameters and when authorized returns a listing of all"},{"line_number":392,"context_line":"stores known to the glance service. The stores known to glance are those which"},{"line_number":393,"context_line":"have been configured in the glance-api.conf and have been loaded during glance"},{"line_number":394,"context_line":"startup. The response body payload is JSON and contains a JSON object per"},{"line_number":395,"context_line":"store. Each store JSON object contains the store\u0027s identifier (id), supported"},{"line_number":396,"context_line":"schemes, type and base locations. For example::"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    {"},{"line_number":399,"context_line":"       \"stores\":["},{"line_number":400,"context_line":"          {"},{"line_number":401,"context_line":"             \"id\":\"localfs\","},{"line_number":402,"context_line":"             \"type\": \"file\","},{"line_number":403,"context_line":"             \"schemes\":["},{"line_number":404,"context_line":"                \"file\","},{"line_number":405,"context_line":"                \"filesystem\""},{"line_number":406,"context_line":"             ],"},{"line_number":407,"context_line":"             \"locations\":["},{"line_number":408,"context_line":"                \"file:///var/glance/images/\","},{"line_number":409,"context_line":"                \"filesystem:///var/glance/images/\""},{"line_number":410,"context_line":"             ]"},{"line_number":411,"context_line":"          },"},{"line_number":412,"context_line":"          {"},{"line_number":413,"context_line":"             \"id\":\"ceph1\","},{"line_number":414,"context_line":"             \"type\": \"vmware\","},{"line_number":415,"context_line":"             \"schemes\":["},{"line_number":416,"context_line":"                \"rbd\""},{"line_number":417,"context_line":"             ],"},{"line_number":418,"context_line":"             \"locations\":["},{"line_number":419,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":420,"context_line":"             ]"},{"line_number":421,"context_line":"          },"},{"line_number":422,"context_line":"          {"},{"line_number":423,"context_line":"             \"id\":\"ceph2\","},{"line_number":424,"context_line":"             \"type\": \"vmware\","},{"line_number":425,"context_line":"             \"schemes\":["},{"line_number":426,"context_line":"                \"rbd\""},{"line_number":427,"context_line":"             ],"},{"line_number":428,"context_line":"             \"locations\":["},{"line_number":429,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":430,"context_line":"             ]"},{"line_number":431,"context_line":"          }"},{"line_number":432,"context_line":"       ]"},{"line_number":433,"context_line":"    }"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"As noted previously, if glance is not using multi-store each store is"},{"line_number":436,"context_line":"implicitly given an identifier of the store type (in which case \u0027id\u0027"},{"line_number":437,"context_line":"and \u0027type\u0027 are the same). An example response to exemplify this behavior is"},{"line_number":438,"context_line":"shown below::"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    {"},{"line_number":441,"context_line":"       \"stores\":["},{"line_number":442,"context_line":"          {"},{"line_number":443,"context_line":"             \"id\":\"file\","},{"line_number":444,"context_line":"             \"type\": \"file\","},{"line_number":445,"context_line":"             \"schemes\":["},{"line_number":446,"context_line":"                \"file\","},{"line_number":447,"context_line":"                \"filesystem\""},{"line_number":448,"context_line":"             ],"},{"line_number":449,"context_line":"             \"locations\":["},{"line_number":450,"context_line":"                \"file:///var/glance/images/\","},{"line_number":451,"context_line":"                \"filesystem:///var/glance/images/\""},{"line_number":452,"context_line":"             ]"},{"line_number":453,"context_line":"          },"},{"line_number":454,"context_line":"          {"},{"line_number":455,"context_line":"             \"id\":\"ceph\","},{"line_number":456,"context_line":"             \"type\": \"ceph\","},{"line_number":457,"context_line":"             \"schemes\":["},{"line_number":458,"context_line":"                \"rbd\""},{"line_number":459,"context_line":"             ],"},{"line_number":460,"context_line":"             \"locations\":["},{"line_number":461,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":462,"context_line":"             ]"},{"line_number":463,"context_line":"          }"},{"line_number":464,"context_line":"       ]"},{"line_number":465,"context_line":"    }"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"Response codes:"},{"line_number":468,"context_line":" * 200 -- Upon authorization and successful request. The response body"},{"line_number":469,"context_line":"   contains the JSON payload with the known stores."},{"line_number":470,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"**[New API] Get store details**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_b7ee68b2","line":470,"range":{"start_line":385,"start_character":0,"end_line":470,"end_character":73},"updated":"2018-04-26 10:58:13.000000000","message":"I don\u0027t think we can use this level of detail here. It has been huge push back from some people to expose any back-end implementation details to the end user. I think this specific proposal will not be taken well amongst those people.\n\nWe can expose the store name (or storeid, like you call them) and have some kind of operator settable description for it, but we should not expose the driver and specially not any paths to the back-end.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ffda3766c9ffd71702c4404da1841badbb30514f","unresolved":false,"context_lines":[{"line_number":382,"context_line":"All URLS will be under the v2 Glance API.  If it is not explicitly specified"},{"line_number":383,"context_line":"assume /v2/\u003curl\u003e"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"**[New API] List stores**"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"List all stores known to the glance service::"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    GET /v2/stores"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"This API takes no query parameters and when authorized returns a listing of all"},{"line_number":392,"context_line":"stores known to the glance service. The stores known to glance are those which"},{"line_number":393,"context_line":"have been configured in the glance-api.conf and have been loaded during glance"},{"line_number":394,"context_line":"startup. The response body payload is JSON and contains a JSON object per"},{"line_number":395,"context_line":"store. Each store JSON object contains the store\u0027s identifier (id), supported"},{"line_number":396,"context_line":"schemes, type and base locations. For example::"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    {"},{"line_number":399,"context_line":"       \"stores\":["},{"line_number":400,"context_line":"          {"},{"line_number":401,"context_line":"             \"id\":\"localfs\","},{"line_number":402,"context_line":"             \"type\": \"file\","},{"line_number":403,"context_line":"             \"schemes\":["},{"line_number":404,"context_line":"                \"file\","},{"line_number":405,"context_line":"                \"filesystem\""},{"line_number":406,"context_line":"             ],"},{"line_number":407,"context_line":"             \"locations\":["},{"line_number":408,"context_line":"                \"file:///var/glance/images/\","},{"line_number":409,"context_line":"                \"filesystem:///var/glance/images/\""},{"line_number":410,"context_line":"             ]"},{"line_number":411,"context_line":"          },"},{"line_number":412,"context_line":"          {"},{"line_number":413,"context_line":"             \"id\":\"ceph1\","},{"line_number":414,"context_line":"             \"type\": \"vmware\","},{"line_number":415,"context_line":"             \"schemes\":["},{"line_number":416,"context_line":"                \"rbd\""},{"line_number":417,"context_line":"             ],"},{"line_number":418,"context_line":"             \"locations\":["},{"line_number":419,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":420,"context_line":"             ]"},{"line_number":421,"context_line":"          },"},{"line_number":422,"context_line":"          {"},{"line_number":423,"context_line":"             \"id\":\"ceph2\","},{"line_number":424,"context_line":"             \"type\": \"vmware\","},{"line_number":425,"context_line":"             \"schemes\":["},{"line_number":426,"context_line":"                \"rbd\""},{"line_number":427,"context_line":"             ],"},{"line_number":428,"context_line":"             \"locations\":["},{"line_number":429,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":430,"context_line":"             ]"},{"line_number":431,"context_line":"          }"},{"line_number":432,"context_line":"       ]"},{"line_number":433,"context_line":"    }"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"As noted previously, if glance is not using multi-store each store is"},{"line_number":436,"context_line":"implicitly given an identifier of the store type (in which case \u0027id\u0027"},{"line_number":437,"context_line":"and \u0027type\u0027 are the same). An example response to exemplify this behavior is"},{"line_number":438,"context_line":"shown below::"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    {"},{"line_number":441,"context_line":"       \"stores\":["},{"line_number":442,"context_line":"          {"},{"line_number":443,"context_line":"             \"id\":\"file\","},{"line_number":444,"context_line":"             \"type\": \"file\","},{"line_number":445,"context_line":"             \"schemes\":["},{"line_number":446,"context_line":"                \"file\","},{"line_number":447,"context_line":"                \"filesystem\""},{"line_number":448,"context_line":"             ],"},{"line_number":449,"context_line":"             \"locations\":["},{"line_number":450,"context_line":"                \"file:///var/glance/images/\","},{"line_number":451,"context_line":"                \"filesystem:///var/glance/images/\""},{"line_number":452,"context_line":"             ]"},{"line_number":453,"context_line":"          },"},{"line_number":454,"context_line":"          {"},{"line_number":455,"context_line":"             \"id\":\"ceph\","},{"line_number":456,"context_line":"             \"type\": \"ceph\","},{"line_number":457,"context_line":"             \"schemes\":["},{"line_number":458,"context_line":"                \"rbd\""},{"line_number":459,"context_line":"             ],"},{"line_number":460,"context_line":"             \"locations\":["},{"line_number":461,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":462,"context_line":"             ]"},{"line_number":463,"context_line":"          }"},{"line_number":464,"context_line":"       ]"},{"line_number":465,"context_line":"    }"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"Response codes:"},{"line_number":468,"context_line":" * 200 -- Upon authorization and successful request. The response body"},{"line_number":469,"context_line":"   contains the JSON payload with the known stores."},{"line_number":470,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"**[New API] Get store details**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_ebacf9ef","line":470,"range":{"start_line":385,"start_character":0,"end_line":470,"end_character":73},"in_reply_to":"9f6a8fd7_b7ee68b2","updated":"2018-04-26 13:21:59.000000000","message":"Sounds good, we can return store name, id and associated schemes.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"512476b3176cee9938458e113acfea0f3941ed7b","unresolved":false,"context_lines":[{"line_number":382,"context_line":"All URLS will be under the v2 Glance API.  If it is not explicitly specified"},{"line_number":383,"context_line":"assume /v2/\u003curl\u003e"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"**[New API] List stores**"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"List all stores known to the glance service::"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    GET /v2/stores"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"This API takes no query parameters and when authorized returns a listing of all"},{"line_number":392,"context_line":"stores known to the glance service. The stores known to glance are those which"},{"line_number":393,"context_line":"have been configured in the glance-api.conf and have been loaded during glance"},{"line_number":394,"context_line":"startup. The response body payload is JSON and contains a JSON object per"},{"line_number":395,"context_line":"store. Each store JSON object contains the store\u0027s identifier (id), supported"},{"line_number":396,"context_line":"schemes, type and base locations. For example::"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    {"},{"line_number":399,"context_line":"       \"stores\":["},{"line_number":400,"context_line":"          {"},{"line_number":401,"context_line":"             \"id\":\"localfs\","},{"line_number":402,"context_line":"             \"type\": \"file\","},{"line_number":403,"context_line":"             \"schemes\":["},{"line_number":404,"context_line":"                \"file\","},{"line_number":405,"context_line":"                \"filesystem\""},{"line_number":406,"context_line":"             ],"},{"line_number":407,"context_line":"             \"locations\":["},{"line_number":408,"context_line":"                \"file:///var/glance/images/\","},{"line_number":409,"context_line":"                \"filesystem:///var/glance/images/\""},{"line_number":410,"context_line":"             ]"},{"line_number":411,"context_line":"          },"},{"line_number":412,"context_line":"          {"},{"line_number":413,"context_line":"             \"id\":\"ceph1\","},{"line_number":414,"context_line":"             \"type\": \"vmware\","},{"line_number":415,"context_line":"             \"schemes\":["},{"line_number":416,"context_line":"                \"rbd\""},{"line_number":417,"context_line":"             ],"},{"line_number":418,"context_line":"             \"locations\":["},{"line_number":419,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":420,"context_line":"             ]"},{"line_number":421,"context_line":"          },"},{"line_number":422,"context_line":"          {"},{"line_number":423,"context_line":"             \"id\":\"ceph2\","},{"line_number":424,"context_line":"             \"type\": \"vmware\","},{"line_number":425,"context_line":"             \"schemes\":["},{"line_number":426,"context_line":"                \"rbd\""},{"line_number":427,"context_line":"             ],"},{"line_number":428,"context_line":"             \"locations\":["},{"line_number":429,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":430,"context_line":"             ]"},{"line_number":431,"context_line":"          }"},{"line_number":432,"context_line":"       ]"},{"line_number":433,"context_line":"    }"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"As noted previously, if glance is not using multi-store each store is"},{"line_number":436,"context_line":"implicitly given an identifier of the store type (in which case \u0027id\u0027"},{"line_number":437,"context_line":"and \u0027type\u0027 are the same). An example response to exemplify this behavior is"},{"line_number":438,"context_line":"shown below::"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    {"},{"line_number":441,"context_line":"       \"stores\":["},{"line_number":442,"context_line":"          {"},{"line_number":443,"context_line":"             \"id\":\"file\","},{"line_number":444,"context_line":"             \"type\": \"file\","},{"line_number":445,"context_line":"             \"schemes\":["},{"line_number":446,"context_line":"                \"file\","},{"line_number":447,"context_line":"                \"filesystem\""},{"line_number":448,"context_line":"             ],"},{"line_number":449,"context_line":"             \"locations\":["},{"line_number":450,"context_line":"                \"file:///var/glance/images/\","},{"line_number":451,"context_line":"                \"filesystem:///var/glance/images/\""},{"line_number":452,"context_line":"             ]"},{"line_number":453,"context_line":"          },"},{"line_number":454,"context_line":"          {"},{"line_number":455,"context_line":"             \"id\":\"ceph\","},{"line_number":456,"context_line":"             \"type\": \"ceph\","},{"line_number":457,"context_line":"             \"schemes\":["},{"line_number":458,"context_line":"                \"rbd\""},{"line_number":459,"context_line":"             ],"},{"line_number":460,"context_line":"             \"locations\":["},{"line_number":461,"context_line":"                \"rbd://\u003cceph-id\u003e/images/\""},{"line_number":462,"context_line":"             ]"},{"line_number":463,"context_line":"          }"},{"line_number":464,"context_line":"       ]"},{"line_number":465,"context_line":"    }"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"Response codes:"},{"line_number":468,"context_line":" * 200 -- Upon authorization and successful request. The response body"},{"line_number":469,"context_line":"   contains the JSON payload with the known stores."},{"line_number":470,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"**[New API] Get store details**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_4be5ce09","line":470,"range":{"start_line":385,"start_character":0,"end_line":470,"end_character":73},"in_reply_to":"9f6a8fd7_ebacf9ef","updated":"2018-04-27 11:28:22.000000000","message":"The user does not need to know the scheme","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"606cadc49800974ed00e56a4f1f230dc76e596c8","unresolved":false,"context_lines":[{"line_number":472,"context_line":""},{"line_number":473,"context_line":"**[New API] Get store details**"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"Get the details for a store given it\u0027s store ID::"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    GET /v2/stores/{store_id}"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"This API takes no query parameters and when authorized returns the details"},{"line_number":480,"context_line":"of the specified \u0027store_id\u0027. The store identifier was introduced in the"},{"line_number":481,"context_line":"\u0027Proposed changes\u0027 section of this spec."},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"The response body payload is JSON and contains the JSON object"},{"line_number":484,"context_line":"which represents the store (see store JSON in the list stores API above)."},{"line_number":485,"context_line":"The store JSON object contains the store\u0027s identifier (id), supported"},{"line_number":486,"context_line":"schemes, type and base locations. For example::"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"      {"},{"line_number":489,"context_line":"         \"id\":\"localfs\","},{"line_number":490,"context_line":"         \"type\": \"file\","},{"line_number":491,"context_line":"         \"schemes\":["},{"line_number":492,"context_line":"            \"file\","},{"line_number":493,"context_line":"            \"filesystem\""},{"line_number":494,"context_line":"         ],"},{"line_number":495,"context_line":"         \"locations\":["},{"line_number":496,"context_line":"            \"file:///var/glance/images/\","},{"line_number":497,"context_line":"            \"filesystem:///var/glance/images/\""},{"line_number":498,"context_line":"         ]"},{"line_number":499,"context_line":"      }"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"As noted previously, if glance is not using multi-store each store is"},{"line_number":502,"context_line":"implicitly given an identifier of the store type (in which case \u0027identifier\u0027"},{"line_number":503,"context_line":"and \u0027type\u0027 are the same). An example response to exemplify this behavior is"},{"line_number":504,"context_line":"shown below::"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"      {"},{"line_number":507,"context_line":"         \"id\":\"file\","},{"line_number":508,"context_line":"         \"type\": \"file\","},{"line_number":509,"context_line":"         \"schemes\":["},{"line_number":510,"context_line":"            \"file\","},{"line_number":511,"context_line":"            \"filesystem\""},{"line_number":512,"context_line":"         ],"},{"line_number":513,"context_line":"         \"locations\":["},{"line_number":514,"context_line":"            \"file:///var/glance/images/\","},{"line_number":515,"context_line":"            \"filesystem:///var/glance/images/\""},{"line_number":516,"context_line":"         ]"},{"line_number":517,"context_line":"      }"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"Response codes:"},{"line_number":520,"context_line":" * 200 -- Upon authorization and successful request. The response body"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_3711f8ad","line":517,"range":{"start_line":475,"start_character":0,"end_line":517,"end_character":7},"updated":"2018-04-26 10:58:13.000000000","message":"Same what I said about the level of details in the list there above.\n\nI\u0027m also not convinced that the store definitions have enough details it making sense us having these in two separate API calls that returns effectively same data about the back-end.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ffda3766c9ffd71702c4404da1841badbb30514f","unresolved":false,"context_lines":[{"line_number":472,"context_line":""},{"line_number":473,"context_line":"**[New API] Get store details**"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"Get the details for a store given it\u0027s store ID::"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    GET /v2/stores/{store_id}"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"This API takes no query parameters and when authorized returns the details"},{"line_number":480,"context_line":"of the specified \u0027store_id\u0027. The store identifier was introduced in the"},{"line_number":481,"context_line":"\u0027Proposed changes\u0027 section of this spec."},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"The response body payload is JSON and contains the JSON object"},{"line_number":484,"context_line":"which represents the store (see store JSON in the list stores API above)."},{"line_number":485,"context_line":"The store JSON object contains the store\u0027s identifier (id), supported"},{"line_number":486,"context_line":"schemes, type and base locations. For example::"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"      {"},{"line_number":489,"context_line":"         \"id\":\"localfs\","},{"line_number":490,"context_line":"         \"type\": \"file\","},{"line_number":491,"context_line":"         \"schemes\":["},{"line_number":492,"context_line":"            \"file\","},{"line_number":493,"context_line":"            \"filesystem\""},{"line_number":494,"context_line":"         ],"},{"line_number":495,"context_line":"         \"locations\":["},{"line_number":496,"context_line":"            \"file:///var/glance/images/\","},{"line_number":497,"context_line":"            \"filesystem:///var/glance/images/\""},{"line_number":498,"context_line":"         ]"},{"line_number":499,"context_line":"      }"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"As noted previously, if glance is not using multi-store each store is"},{"line_number":502,"context_line":"implicitly given an identifier of the store type (in which case \u0027identifier\u0027"},{"line_number":503,"context_line":"and \u0027type\u0027 are the same). An example response to exemplify this behavior is"},{"line_number":504,"context_line":"shown below::"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"      {"},{"line_number":507,"context_line":"         \"id\":\"file\","},{"line_number":508,"context_line":"         \"type\": \"file\","},{"line_number":509,"context_line":"         \"schemes\":["},{"line_number":510,"context_line":"            \"file\","},{"line_number":511,"context_line":"            \"filesystem\""},{"line_number":512,"context_line":"         ],"},{"line_number":513,"context_line":"         \"locations\":["},{"line_number":514,"context_line":"            \"file:///var/glance/images/\","},{"line_number":515,"context_line":"            \"filesystem:///var/glance/images/\""},{"line_number":516,"context_line":"         ]"},{"line_number":517,"context_line":"      }"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"Response codes:"},{"line_number":520,"context_line":" * 200 -- Upon authorization and successful request. The response body"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_6be78948","line":517,"range":{"start_line":475,"start_character":0,"end_line":517,"end_character":7},"in_reply_to":"9f6a8fd7_3711f8ad","updated":"2018-04-26 13:21:59.000000000","message":"agree","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"606cadc49800974ed00e56a4f1f230dc76e596c8","unresolved":false,"context_lines":[{"line_number":519,"context_line":"Response codes:"},{"line_number":520,"context_line":" * 200 -- Upon authorization and successful request. The response body"},{"line_number":521,"context_line":"   contains the JSON payload with the known stores."},{"line_number":522,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"**[Modified API] Download image binary data**"},{"line_number":525,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_b71c28c2","line":522,"updated":"2018-04-26 10:58:13.000000000","message":"I think this API would need at least 404 as well.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ffda3766c9ffd71702c4404da1841badbb30514f","unresolved":false,"context_lines":[{"line_number":519,"context_line":"Response codes:"},{"line_number":520,"context_line":" * 200 -- Upon authorization and successful request. The response body"},{"line_number":521,"context_line":"   contains the JSON payload with the known stores."},{"line_number":522,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"**[Modified API] Download image binary data**"},{"line_number":525,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_2bf19102","line":522,"in_reply_to":"9f6a8fd7_b71c28c2","updated":"2018-04-26 13:21:59.000000000","message":"Perfect, needs to add","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"606cadc49800974ed00e56a4f1f230dc76e596c8","unresolved":false,"context_lines":[{"line_number":521,"context_line":"   contains the JSON payload with the known stores."},{"line_number":522,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"**[Modified API] Download image binary data**"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"Get image binary data::"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    GET /v2/images/​{image_id}​/file"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"This modifies the existing REST API to support a new header field which is"},{"line_number":531,"context_line":"optional and if present specifies the store id to get the image data from."},{"line_number":532,"context_line":"For backwards compatibility, if the header is not specified the store"},{"line_number":533,"context_line":"specified as the default (e.g. default_store) is used to get the image"},{"line_number":534,"context_line":"data from."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"New header fields:"},{"line_number":537,"context_line":" * X-Image-Meta-Store -- If present contains the store id to get the image"},{"line_number":538,"context_line":"   binary data from."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"New / changed response codes:"},{"line_number":541,"context_line":" * 400 -- If the X-Image-Meta-Store header is present, but specifies a"},{"line_number":542,"context_line":"   store id for a store that doesn\u0027t exist by that id."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"Example curl usage::"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    curl -i -X GET -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":547,"context_line":"            ceph1\" $image_url/v2/images/{image_id}/file"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"**[Modified API] Upload image binary data**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_f7fe2037","line":547,"range":{"start_line":524,"start_character":0,"end_line":547,"end_character":55},"updated":"2018-04-26 10:58:13.000000000","message":"Based on the current download logic, I\u0027m not sure this is needed nor desired. Glance knows from which backend(s) it should find the image and instead of defaulting to the default store we should keep the existing logic.\n\nAlso it should be Glace\u0027s/Operator\u0027s call to define which backend is preferred if there is multiple location records for the image. We should not mix user preference for this as the data is going to be same anyways.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"8f362eeefa525606d3826fbcc87710bc3f0a4bf2","unresolved":false,"context_lines":[{"line_number":521,"context_line":"   contains the JSON payload with the known stores."},{"line_number":522,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"**[Modified API] Download image binary data**"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"Get image binary data::"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    GET /v2/images/​{image_id}​/file"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"This modifies the existing REST API to support a new header field which is"},{"line_number":531,"context_line":"optional and if present specifies the store id to get the image data from."},{"line_number":532,"context_line":"For backwards compatibility, if the header is not specified the store"},{"line_number":533,"context_line":"specified as the default (e.g. default_store) is used to get the image"},{"line_number":534,"context_line":"data from."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"New header fields:"},{"line_number":537,"context_line":" * X-Image-Meta-Store -- If present contains the store id to get the image"},{"line_number":538,"context_line":"   binary data from."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"New / changed response codes:"},{"line_number":541,"context_line":" * 400 -- If the X-Image-Meta-Store header is present, but specifies a"},{"line_number":542,"context_line":"   store id for a store that doesn\u0027t exist by that id."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"Example curl usage::"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    curl -i -X GET -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":547,"context_line":"            ceph1\" $image_url/v2/images/{image_id}/file"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"**[Modified API] Upload image binary data**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_26db0850","line":547,"range":{"start_line":524,"start_character":0,"end_line":547,"end_character":55},"in_reply_to":"9f6a8fd7_eb715979","updated":"2018-04-26 13:55:11.000000000","message":"On second thought makes sense, this can be eliminated.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"512476b3176cee9938458e113acfea0f3941ed7b","unresolved":false,"context_lines":[{"line_number":521,"context_line":"   contains the JSON payload with the known stores."},{"line_number":522,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"**[Modified API] Download image binary data**"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"Get image binary data::"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    GET /v2/images/​{image_id}​/file"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"This modifies the existing REST API to support a new header field which is"},{"line_number":531,"context_line":"optional and if present specifies the store id to get the image data from."},{"line_number":532,"context_line":"For backwards compatibility, if the header is not specified the store"},{"line_number":533,"context_line":"specified as the default (e.g. default_store) is used to get the image"},{"line_number":534,"context_line":"data from."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"New header fields:"},{"line_number":537,"context_line":" * X-Image-Meta-Store -- If present contains the store id to get the image"},{"line_number":538,"context_line":"   binary data from."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"New / changed response codes:"},{"line_number":541,"context_line":" * 400 -- If the X-Image-Meta-Store header is present, but specifies a"},{"line_number":542,"context_line":"   store id for a store that doesn\u0027t exist by that id."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"Example curl usage::"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    curl -i -X GET -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":547,"context_line":"            ceph1\" $image_url/v2/images/{image_id}/file"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"**[Modified API] Upload image binary data**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_4bce2e84","line":547,"range":{"start_line":524,"start_character":0,"end_line":547,"end_character":55},"in_reply_to":"9f6a8fd7_eb715979","updated":"2018-04-27 11:28:22.000000000","message":"The harm is that while user might know where they want to put the image data based on cost or specific geo location, they most likely will guess wrong what is the best place for the glance-api node to get the image from in case there is multiple location records for that same image.\n\nAlso if the download location would be specifiable we would need to fail the call specifying store when the image is actually not in that store reducing the user experience even more.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ffda3766c9ffd71702c4404da1841badbb30514f","unresolved":false,"context_lines":[{"line_number":521,"context_line":"   contains the JSON payload with the known stores."},{"line_number":522,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"**[Modified API] Download image binary data**"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"Get image binary data::"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    GET /v2/images/​{image_id}​/file"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"This modifies the existing REST API to support a new header field which is"},{"line_number":531,"context_line":"optional and if present specifies the store id to get the image data from."},{"line_number":532,"context_line":"For backwards compatibility, if the header is not specified the store"},{"line_number":533,"context_line":"specified as the default (e.g. default_store) is used to get the image"},{"line_number":534,"context_line":"data from."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"New header fields:"},{"line_number":537,"context_line":" * X-Image-Meta-Store -- If present contains the store id to get the image"},{"line_number":538,"context_line":"   binary data from."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"New / changed response codes:"},{"line_number":541,"context_line":" * 400 -- If the X-Image-Meta-Store header is present, but specifies a"},{"line_number":542,"context_line":"   store id for a store that doesn\u0027t exist by that id."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"Example curl usage::"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    curl -i -X GET -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":547,"context_line":"            ceph1\" $image_url/v2/images/{image_id}/file"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"**[Modified API] Upload image binary data**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f6a8fd7_eb715979","line":547,"range":{"start_line":524,"start_character":0,"end_line":547,"end_character":55},"in_reply_to":"9f6a8fd7_f7fe2037","updated":"2018-04-26 13:21:59.000000000","message":"What is the harm in this? I guess if we are allowing to upload to a particular store (which is other than default) then we should allow to download as well. \n\nThis is my point of view though.","commit_id":"13065aa2460b40b56183d764a5bdb95c301bcc8c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5a510b58bc7259e4c2dde04632bd57974a210353","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    enable_backends \u003d fast:rbd, cheap:rbd, reliable:file"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    # the default store, if not set glance-api service will not start"},{"line_number":110,"context_line":"    default_multi_store \u003d ceph1"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    # conf props for file system store instance"},{"line_number":113,"context_line":"    [reliable]"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_3bd0e4f7","line":110,"range":{"start_line":110,"start_character":26,"end_line":110,"end_character":31},"updated":"2018-05-04 10:34:44.000000000","message":"Sorry, this should be either fast or cheap.\nI will change it in next PS.","commit_id":"dab47d7c3b8fc80fab44eabbb29da9290053f966"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"b12b37120033bca6e43d04e04a6f9f4ce1cb4e96","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    enable_backends \u003d fast:rbd, cheap:rbd, reliable:file"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    # the default store, if not set glance-api service will not start"},{"line_number":112,"context_line":"    default_multi_store \u003d ceph1"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # conf props for file system store instance"},{"line_number":115,"context_line":"    [reliable]"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_7a87cdb6","line":112,"range":{"start_line":112,"start_character":26,"end_line":112,"end_character":31},"updated":"2018-05-10 11:55:05.000000000","message":"Still ceph1","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    enable_backends \u003d fast:rbd, cheap:rbd, reliable:file"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    # the default store, if not set glance-api service will not start"},{"line_number":112,"context_line":"    default_multi_store \u003d ceph1"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # conf props for file system store instance"},{"line_number":115,"context_line":"    [reliable]"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_5fa2f0fe","line":112,"range":{"start_line":112,"start_character":26,"end_line":112,"end_character":31},"in_reply_to":"5f7c97a3_7a87cdb6","updated":"2018-05-11 05:44:17.000000000","message":"Will correct in next PS","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"471617333bcc9586c74d50589600d35663d62609","unresolved":false,"context_lines":[{"line_number":171,"context_line":"should also provide a REST API which permits authorized users to list all"},{"line_number":172,"context_line":"stores configured for glance. This is a read-only list of glance stores"},{"line_number":173,"context_line":"which includes the schemes supported by each store as well as the store\u0027s"},{"line_number":174,"context_line":"identifier, base locations and type."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"NOTE: The list of glance stores is based on the glance-api.conf with respect to"},{"line_number":177,"context_line":"store configuration. Operators will not be able to configure new stores using"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_64996fc2","line":174,"range":{"start_line":174,"start_character":31,"end_line":174,"end_character":35},"updated":"2018-05-10 13:57:34.000000000","message":"I wonder whether we should have a \u0027description\u0027 instead.  What I\u0027m thinking is suppose you have \u0027reliable\u0027 as the id for filesystem, and at some point you decide to change it to swift.  (a) would that be possible? and (b) do you think operators might not want to expose the actual type of the back end?","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":171,"context_line":"should also provide a REST API which permits authorized users to list all"},{"line_number":172,"context_line":"stores configured for glance. This is a read-only list of glance stores"},{"line_number":173,"context_line":"which includes the schemes supported by each store as well as the store\u0027s"},{"line_number":174,"context_line":"identifier, base locations and type."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"NOTE: The list of glance stores is based on the glance-api.conf with respect to"},{"line_number":177,"context_line":"store configuration. Operators will not be able to configure new stores using"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_0865211e","line":174,"range":{"start_line":174,"start_character":31,"end_line":174,"end_character":35},"in_reply_to":"5f7c97a3_04f75b61","updated":"2018-05-11 03:12:51.000000000","message":"Thanks for your answer to (a).  As far as (b) goes, I am personally against exposing details about the backend to end users, but I don\u0027t know if I have a really good reason.  (I\u0027ll say more about this below in the section where you illustrate the store API.)","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c5e5d77a2f5c58dcf75eb751c31b37d7af11ab78","unresolved":false,"context_lines":[{"line_number":171,"context_line":"should also provide a REST API which permits authorized users to list all"},{"line_number":172,"context_line":"stores configured for glance. This is a read-only list of glance stores"},{"line_number":173,"context_line":"which includes the schemes supported by each store as well as the store\u0027s"},{"line_number":174,"context_line":"identifier, base locations and type."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"NOTE: The list of glance stores is based on the glance-api.conf with respect to"},{"line_number":177,"context_line":"store configuration. Operators will not be able to configure new stores using"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_04f75b61","line":174,"range":{"start_line":174,"start_character":31,"end_line":174,"end_character":35},"in_reply_to":"5f7c97a3_64996fc2","updated":"2018-05-10 14:19:56.000000000","message":"What I\u0027m thinking is suppose you have \u0027reliable\u0027 as the id for filesystem, and at some point you decide to change it to swift.\n\n(a) would that be possible? \nIt can be but in that case we need to change download API to look for the image in all the backends instead of desired one.\nFor example a \u0027file\u0027 as reliable store has some images in it and later that id has assigned to \u0027swift\u0027 then we will not be able to get images which were in file store unless we do above change. \n\n(b) do you think operators might not want to expose the actual type of the back end?\nNeed to think on this, need some inputs/thoughts on this.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"**Image download API**"},{"line_number":241,"context_line":"If cloud get upgraded to use multi-store support from the single store"},{"line_number":242,"context_line":"then we need to deal with the migration of the locations from old stores"},{"line_number":243,"context_line":"to new stores. For example, if existing user is using rbd (say ceph) backend"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_4800f9ab","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":22},"updated":"2018-05-11 03:12:51.000000000","message":"A few comments about this section:\n\n(1) You\u0027re actually not enhancing the Image download API -- the interface is the same, namely, user requests image data -\u003e user receives image data.  The enhancements are going on behind the scenes.  I think a better way to say this is that with multiple backends available, Glance needs some enhancements so it can fulfill the current image download API contract.\n\n(2) You say \"we need to deal with the migration of the locations from old stores to new stores\", but there is actually no migration going on at all.  What\u0027s happening is that a user may request that data be stored in any one of a number of backends, and when the user requests image data, Glance needs to be able to find and return it.  I\u0027d avoid mentioning the work \u0027migration\u0027 at all because iiuc there is no plan to actually move image data from backend A to backend B, where A is the old default store and B is the new default store.\n\n(3) I\u0027d change \u0027existing user\u0027 to \u0027an operator\u0027 in line 243, and then change \u0027somehow he should be able\u0027 to \u0027somehow Glance must be able\u0027 in line 246.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"**Image download API**"},{"line_number":241,"context_line":"If cloud get upgraded to use multi-store support from the single store"},{"line_number":242,"context_line":"then we need to deal with the migration of the locations from old stores"},{"line_number":243,"context_line":"to new stores. For example, if existing user is using rbd (say ceph) backend"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_ffa2dcfb","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":22},"in_reply_to":"5f7c97a3_4800f9ab","updated":"2018-05-11 05:44:17.000000000","message":"Agree, will make changes as per your suggestion","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"b12b37120033bca6e43d04e04a6f9f4ce1cb4e96","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"**Image download API**"},{"line_number":241,"context_line":"If cloud get upgraded to use multi-store support from the single store"},{"line_number":242,"context_line":"then we need to deal with the migration of the locations from old stores"},{"line_number":243,"context_line":"to new stores. For example, if existing user is using rbd (say ceph) backend"},{"line_number":244,"context_line":"and now he has upgraded the environment and introduced two additional"},{"line_number":245,"context_line":"rbd stores as ceph1 and ceph2 with default store as \u0027ceph1\u0027 then"},{"line_number":246,"context_line":"somehow he should be able to download the images from his old"},{"line_number":247,"context_line":"stores (ceph)."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"For this purpose we propose to enhance the download API which will"},{"line_number":250,"context_line":"traverse through all the configured backends to look for the"},{"line_number":251,"context_line":"image. At first it will look the image in the default store set by the"},{"line_number":252,"context_line":"operator if it\u0027s not present then it will look in all other backends"},{"line_number":253,"context_line":"enabled by the operator. This way user will be able to download his"},{"line_number":254,"context_line":"image from the old store even after cloud is upgraded to use"},{"line_number":255,"context_line":"multiple stores."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"**Image import API**"},{"line_number":258,"context_line":"The existing image import API allows operator to import image from the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_9a118960","line":255,"range":{"start_line":240,"start_character":0,"end_line":255,"end_character":16},"updated":"2018-05-10 11:55:05.000000000","message":"The location record contains a lots of details where that image might be. So we know what driver for example was used. In matter of fact lots of the cases we know exactly where the data for the image is based on the location record. We really need to only consider stores like ceph where the access to the specific store is defined in it\u0027s own separate configuration file.\n\nI\u0027ll dig into the store code before summit and have a look if we do have some easy ways to discover this already. It definitely is something we do need to take into an account when implementing these changes. Thanks for including this approach into the spec.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":255,"context_line":"multiple stores."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"**Image import API**"},{"line_number":258,"context_line":"The existing image import API allows operator to import image from the"},{"line_number":259,"context_line":"staging area into glance backend. However today this API does not provide"},{"line_number":260,"context_line":"a means for the operator to target a specific store to import the image."},{"line_number":261,"context_line":"This spec proposes the API be enhanced to permit an operator to specify"},{"line_number":262,"context_line":"which store will back the image being imported."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"We propose a header field be used as a means to transport the identifier"},{"line_number":265,"context_line":"of the store to import the image. Again the identifier under the covers"},{"line_number":266,"context_line":"is the property group name of the respective glance store driver. When"},{"line_number":267,"context_line":"the image import API is used to import the image, the glance logic will"},{"line_number":268,"context_line":"determine if the target store header is specified, and if so the image"},{"line_number":269,"context_line":"will be imported to the target store."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"If no store is targeted in the import request, the \u0027default_store\u0027 is used"},{"line_number":272,"context_line":"to import the image."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_489c7969","line":269,"range":{"start_line":258,"start_character":0,"end_line":269,"end_character":37},"updated":"2018-05-11 03:12:51.000000000","message":"Notice that in lines 258-262 you\u0027re talking about an *operator* picking the target store for imported images, but your solution in lines 264-269 does *not* allow an operator to do this, because the header is coming in on the import request, which is being made by an end user, not the operator.  Your later discussion of the import API bears this out.  So I think you need to s/operator/end user/ in this section, unless you really want an operator to be able to say \"all imported images must go into backend B\" (but I think that would have to happen on the config side, not in the API call).","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":255,"context_line":"multiple stores."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"**Image import API**"},{"line_number":258,"context_line":"The existing image import API allows operator to import image from the"},{"line_number":259,"context_line":"staging area into glance backend. However today this API does not provide"},{"line_number":260,"context_line":"a means for the operator to target a specific store to import the image."},{"line_number":261,"context_line":"This spec proposes the API be enhanced to permit an operator to specify"},{"line_number":262,"context_line":"which store will back the image being imported."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"We propose a header field be used as a means to transport the identifier"},{"line_number":265,"context_line":"of the store to import the image. Again the identifier under the covers"},{"line_number":266,"context_line":"is the property group name of the respective glance store driver. When"},{"line_number":267,"context_line":"the image import API is used to import the image, the glance logic will"},{"line_number":268,"context_line":"determine if the target store header is specified, and if so the image"},{"line_number":269,"context_line":"will be imported to the target store."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"If no store is targeted in the import request, the \u0027default_store\u0027 is used"},{"line_number":272,"context_line":"to import the image."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_dfada0e9","line":269,"range":{"start_line":258,"start_character":0,"end_line":269,"end_character":37},"in_reply_to":"5f7c97a3_489c7969","updated":"2018-05-11 05:44:17.000000000","message":"You are right, it should be end user and not operator","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":268,"context_line":"determine if the target store header is specified, and if so the image"},{"line_number":269,"context_line":"will be imported to the target store."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"If no store is targeted in the import request, the \u0027default_store\u0027 is used"},{"line_number":272,"context_line":"to import the image."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Using this scheme operators will be able to specify which store they want"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_68993577","line":271,"range":{"start_line":271,"start_character":51,"end_line":271,"end_character":66},"updated":"2018-05-11 03:12:51.000000000","message":"I think you mean \u0027default_multi_store\u0027 here.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":268,"context_line":"determine if the target store header is specified, and if so the image"},{"line_number":269,"context_line":"will be imported to the target store."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"If no store is targeted in the import request, the \u0027default_store\u0027 is used"},{"line_number":272,"context_line":"to import the image."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Using this scheme operators will be able to specify which store they want"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_7fb6cc40","line":271,"range":{"start_line":271,"start_character":51,"end_line":271,"end_character":66},"in_reply_to":"5f7c97a3_68993577","updated":"2018-05-11 05:44:17.000000000","message":"correct","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":271,"context_line":"If no store is targeted in the import request, the \u0027default_store\u0027 is used"},{"line_number":272,"context_line":"to import the image."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Using this scheme operators will be able to specify which store they want"},{"line_number":275,"context_line":"an image to be imported during an import operation. In accordance with"},{"line_number":276,"context_line":"the glance v1 APIs, we propose the \u0027X-Image-Meta-Store\u0027 header be used"},{"line_number":277,"context_line":"as the means to transport a target store identifier."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_088c4134","line":274,"range":{"start_line":274,"start_character":18,"end_line":274,"end_character":27},"updated":"2018-05-11 03:12:51.000000000","message":"\"end users\"?","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":271,"context_line":"If no store is targeted in the import request, the \u0027default_store\u0027 is used"},{"line_number":272,"context_line":"to import the image."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Using this scheme operators will be able to specify which store they want"},{"line_number":275,"context_line":"an image to be imported during an import operation. In accordance with"},{"line_number":276,"context_line":"the glance v1 APIs, we propose the \u0027X-Image-Meta-Store\u0027 header be used"},{"line_number":277,"context_line":"as the means to transport a target store identifier."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_3f861468","line":274,"range":{"start_line":274,"start_character":18,"end_line":274,"end_character":27},"in_reply_to":"5f7c97a3_088c4134","updated":"2018-05-11 05:44:17.000000000","message":"correct","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":294,"context_line":"URL\u0027s metadata a property with the store\u0027s identifier is added to the location"},{"line_number":295,"context_line":"metadata object."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"With the store identifier in the image location URL metadata, API users can"},{"line_number":298,"context_line":"simply inspect the image location\u0027s URLs and get the store identifier per"},{"line_number":299,"context_line":"image location. The store identifier can then be used for subsequent operations"},{"line_number":300,"context_line":"or within the API consumers logic."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"Alternatives"},{"line_number":303,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_08df610d","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":34},"updated":"2018-05-11 03:12:51.000000000","message":"This assumes that show_multiple_locations is True (I don\u0027t think show_image_direct_url exposes the location metadata).  That\u0027s a problem because we don\u0027t recommend that locations be exposed to end users.  I think it\u0027s OK to store the store identifier in the location metadata, but we should probably expose it differently.\n\nWe could expose it as a new field in the image response, something like:\n\n    \"size\": 45678,\n    \"store\": \"reliable\",\n    \"checksum\": 123456789,\n    \"name\": \"Important Image\",\n\nIn the case where there are multiple locations, the displayed \u0027store\u0027 would be the one associated with the location specified by the current location_strategy.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":294,"context_line":"URL\u0027s metadata a property with the store\u0027s identifier is added to the location"},{"line_number":295,"context_line":"metadata object."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"With the store identifier in the image location URL metadata, API users can"},{"line_number":298,"context_line":"simply inspect the image location\u0027s URLs and get the store identifier per"},{"line_number":299,"context_line":"image location. The store identifier can then be used for subsequent operations"},{"line_number":300,"context_line":"or within the API consumers logic."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"Alternatives"},{"line_number":303,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_9fbac807","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":34},"in_reply_to":"5f7c97a3_08df610d","updated":"2018-05-11 05:44:17.000000000","message":"AFAIK, show_multiple_locations is deprecated and should have been removed in Pike. I do agree with what you are saying though.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":294,"context_line":"URL\u0027s metadata a property with the store\u0027s identifier is added to the location"},{"line_number":295,"context_line":"metadata object."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"With the store identifier in the image location URL metadata, API users can"},{"line_number":298,"context_line":"simply inspect the image location\u0027s URLs and get the store identifier per"},{"line_number":299,"context_line":"image location. The store identifier can then be used for subsequent operations"},{"line_number":300,"context_line":"or within the API consumers logic."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"Alternatives"},{"line_number":303,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_0c68cbb6","line":300,"range":{"start_line":297,"start_character":0,"end_line":300,"end_character":34},"in_reply_to":"5f7c97a3_9fbac807","updated":"2018-05-11 14:38:37.000000000","message":"Yes, show_multiple_locations should have been removed way back, but it has turned out to be remarkably difficult (actually, I think impossible) to use only the location policies to preserve current behavior in the absence of the show_multiple_locations option (when it\u0027s False, it allows the locations to be manipulated without exposing them to end users, but when it\u0027s removed, if the read_location policy is disabled, the location doesn\u0027t show up in the response, but also the user cannot download any images because the user doesn\u0027t have access to the location).","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"Therefore this spec proposes the multi-store approach outlined within this"},{"line_number":322,"context_line":"spec - let\u0027s get an initial approximation multi-store working and gage"},{"line_number":323,"context_line":"our next steps based on consumer feedback in the community."},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"**Per driver support**"},{"line_number":326,"context_line":"Another potential approach would be to push the multi-store logic down within"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_48d8f91c","line":323,"updated":"2018-05-11 03:12:51.000000000","message":"I agree, this makes a lot of sense.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":334,"context_line":"to each store driver; they can be used as-is in a multi-store implementation."},{"line_number":335,"context_line":"By pushing the logic to support multiple stores of the same scheme up into"},{"line_number":336,"context_line":"the core of glance, we get maximal reuse and store driver implementations"},{"line_number":337,"context_line":"needn\u0027t be concerned with such logic."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"Data model impact"},{"line_number":340,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_e810e5aa","line":337,"updated":"2018-05-11 03:12:51.000000000","message":"This is another good point.  It also allows for driver maintainers not to be Glance experts, they just need to be an expert in their particular backend.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":353,"context_line":" * Get details for a given store."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"**Modified APIs**"},{"line_number":356,"context_line":" * Download an image file."},{"line_number":357,"context_line":" * Upload an image file."},{"line_number":358,"context_line":" * Get image details."},{"line_number":359,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_a8266d14","line":356,"updated":"2018-05-11 03:12:51.000000000","message":"Per my comments above, I don\u0027t think we are modifying the download API.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":353,"context_line":" * Get details for a given store."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"**Modified APIs**"},{"line_number":356,"context_line":" * Download an image file."},{"line_number":357,"context_line":" * Upload an image file."},{"line_number":358,"context_line":" * Get image details."},{"line_number":359,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_1f5d58e8","line":356,"in_reply_to":"5f7c97a3_a8266d14","updated":"2018-05-11 05:44:17.000000000","message":"Right, I should mention import API though","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":388,"context_line":"       \"stores\":["},{"line_number":389,"context_line":"          {"},{"line_number":390,"context_line":"             \"id\":\"reliable\","},{"line_number":391,"context_line":"             \"type\": \"file\","},{"line_number":392,"context_line":"             \"description\": \"Reliable filesystem store\""},{"line_number":393,"context_line":"          },"},{"line_number":394,"context_line":"          {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_e848e587","line":391,"updated":"2018-05-11 03:12:51.000000000","message":"While the configuration needs to know the type, I don\u0027t think it needs to be exposed to end users.  What they\u0027re interested in is the description (where I\u0027d advise against an operator mentioning the technology, but we can\u0027t prevent it).  I mean, if I need to pick a store, i\u0027d do it on price and speed, not whether it\u0027s rbd or something else.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":388,"context_line":"       \"stores\":["},{"line_number":389,"context_line":"          {"},{"line_number":390,"context_line":"             \"id\":\"reliable\","},{"line_number":391,"context_line":"             \"type\": \"file\","},{"line_number":392,"context_line":"             \"description\": \"Reliable filesystem store\""},{"line_number":393,"context_line":"          },"},{"line_number":394,"context_line":"          {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_cc6733b7","line":391,"in_reply_to":"5f7c97a3_9f688887","updated":"2018-05-11 14:38:37.000000000","message":"Yes, I think it needs to be in the config.  (I was thinking it was already in there under the \u0027#etc.\u0027 part!)","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":388,"context_line":"       \"stores\":["},{"line_number":389,"context_line":"          {"},{"line_number":390,"context_line":"             \"id\":\"reliable\","},{"line_number":391,"context_line":"             \"type\": \"file\","},{"line_number":392,"context_line":"             \"description\": \"Reliable filesystem store\""},{"line_number":393,"context_line":"          },"},{"line_number":394,"context_line":"          {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_9f688887","line":391,"in_reply_to":"5f7c97a3_e848e587","updated":"2018-05-11 05:44:17.000000000","message":"Makes sense, id and description would make more sense. But from where should we get description as this will be totally based on the config?\n\nOne idea would be add one more config option with default value to each of the store group.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":427,"context_line":""},{"line_number":428,"context_line":"      {"},{"line_number":429,"context_line":"         \"id\":\"reliable\","},{"line_number":430,"context_line":"         \"type\": \"file\","},{"line_number":431,"context_line":"         \"description\": \"Reliable filesystem store\""},{"line_number":432,"context_line":"      }"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_a85e6d41","line":430,"updated":"2018-05-11 03:12:51.000000000","message":"Same thing here, I wouldn\u0027t expose the type.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":493,"context_line":"             }"},{"line_number":494,"context_line":"          }"},{"line_number":495,"context_line":"       ]"},{"line_number":496,"context_line":"    }"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"NOTE: The \u0027backend\u0027 which represents store_id  is added when the URL"},{"line_number":499,"context_line":"is saved upon an image file upload. This section just outlines how that"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_880ff135","line":496,"updated":"2018-05-11 03:12:51.000000000","message":"(a) Does it make sense to have an image be stored in both the fast and cheap stores?  (b) I really don\u0027t like exposing the location url.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":493,"context_line":"             }"},{"line_number":494,"context_line":"          }"},{"line_number":495,"context_line":"       ]"},{"line_number":496,"context_line":"    }"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"NOTE: The \u0027backend\u0027 which represents store_id  is added when the URL"},{"line_number":499,"context_line":"is saved upon an image file upload. This section just outlines how that"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_bfe8e4e1","line":496,"in_reply_to":"5f7c97a3_880ff135","updated":"2018-05-11 05:44:17.000000000","message":"Make sense, we can add one more attribute to response instead of exposing the url.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":529,"context_line":""},{"line_number":530,"context_line":"Security impact"},{"line_number":531,"context_line":"---------------"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"As this spec proposes a new REST API to list glance stores, we also propose"},{"line_number":534,"context_line":"to protect this API with a new policy check. Similar to other glance APIs, the"},{"line_number":535,"context_line":"API logic for the glance list stores REST API should check a new \u0027get_stores\u0027"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_bc147245","line":532,"updated":"2018-05-11 03:12:51.000000000","message":"One other impact is that the proposal in this patch set requires image locations be exposed, which we have previously claimed is a security risk.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":529,"context_line":""},{"line_number":530,"context_line":"Security impact"},{"line_number":531,"context_line":"---------------"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"As this spec proposes a new REST API to list glance stores, we also propose"},{"line_number":534,"context_line":"to protect this API with a new policy check. Similar to other glance APIs, the"},{"line_number":535,"context_line":"API logic for the glance list stores REST API should check a new \u0027get_stores\u0027"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_0c0c4b3f","line":532,"in_reply_to":"5f7c97a3_5fc3d05d","updated":"2018-05-11 14:38:37.000000000","message":"Yes, if you are OK with not exposing the location, then this is not a problem.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":529,"context_line":""},{"line_number":530,"context_line":"Security impact"},{"line_number":531,"context_line":"---------------"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"As this spec proposes a new REST API to list glance stores, we also propose"},{"line_number":534,"context_line":"to protect this API with a new policy check. Similar to other glance APIs, the"},{"line_number":535,"context_line":"API logic for the glance list stores REST API should check a new \u0027get_stores\u0027"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_5fc3d05d","line":532,"in_reply_to":"5f7c97a3_bc147245","updated":"2018-05-11 05:44:17.000000000","message":"Not if we made it as per your suggestion.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"33dd300da127b0fd930f003d719088850b179d8c","unresolved":false,"context_lines":[{"line_number":551,"context_line":"    get_store"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"This way deployers can determine which user roles can get glance store"},{"line_number":554,"context_line":"details in a coarse or fine grained approach."},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"This spec also introduces the notion of downloading/uploading image data"},{"line_number":557,"context_line":"to specific stores. While its foreseeable operators would want to control"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_1cf6c6fa","line":554,"updated":"2018-05-11 03:12:51.000000000","message":"I don\u0027t see the point of this policy.  If I am allowed to get_stores, then I can see the information for each store, so not allowing me to get_store doesn\u0027t protect anything.  Similarly, if I am *not* allowed to get_stores, but am allowed to get_store, then I can find out info about all the stores just by making a bunch of requests.  So there doesn\u0027t seem to be a point in having 2 policies here.\n\nYou could just have a get_store_info policy that would cover both the list-stores and show-store calls.  But I\u0027m not convinced that\u0027s really necessary either.  What\u0027s the use-case for restricting this information? We don\u0027t have a policy governing the \u0027info\u0027 call associated with image import.  I\u0027m not clear on what restricting these calls buys us.\n\nOne more thing ... if we *don\u0027t* introduce these policies, then we could add an \u0027OpenStack-image-store-ids\u0027 header to the image-create response (along the lines of the \u0027OpenStack-image-import-methods\u0027 header) that would list the available stores so the user wouldn\u0027t have to make a separate get-stores call.  Not sure how useful that would be since the store ids aren\u0027t restricted in the way the import-method names are.  Or it might be good to have a \u0027OpenStack-image-default-store\u0027 header whose value is the id of the default store.  (Or maybe there are all bad suggestions.)","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"43652901f25d2514b310967f20ee20527be52cf6","unresolved":false,"context_lines":[{"line_number":551,"context_line":"    get_store"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"This way deployers can determine which user roles can get glance store"},{"line_number":554,"context_line":"details in a coarse or fine grained approach."},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"This spec also introduces the notion of downloading/uploading image data"},{"line_number":557,"context_line":"to specific stores. While its foreseeable operators would want to control"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_1faeb897","line":554,"in_reply_to":"5f7c97a3_1cf6c6fa","updated":"2018-05-11 05:44:17.000000000","message":"Makes sense to me, Actually earlier I was planning to show base locations in the response but now we don\u0027t have base locations and type as well so policy is not required. I like the idea of new header where we can show all available backends and user can choose from it.","commit_id":"c42c2e5c378690bd03730478304fc3c64ea6ccfa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    [DEFAULT]"},{"line_number":108,"context_line":"    # list of enabled stores identified by their property group name"},{"line_number":109,"context_line":"    enable_backends \u003d fast:rbd, cheap:rbd, reliable:file"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    # the default store, if not set glance-api service will not start"},{"line_number":112,"context_line":"    default_multi_store \u003d fast"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_2f3ed98a","line":109,"updated":"2018-05-11 14:38:37.000000000","message":"You can smack me for not reading carefully, now I see where the \u0027type\u0027 of each store is coming from.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # conf props for file system store instance"},{"line_number":115,"context_line":"    [reliable]"},{"line_number":116,"context_line":"    filesystem_store_datadir \u003d /var/lib/images/data/"},{"line_number":117,"context_line":"    # etc.."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    # conf props for ceph store instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_af9bc970","line":116,"updated":"2018-05-11 14:38:37.000000000","message":"if we\u0027re going with a description instead of type, we\u0027ll need a description here, something like:\n\n    description \u003d Not super fast or super cheap, but you image is available when you need it.\n\nand then the \u0027# etc..\u0027 part is any config option that is valid for that particular store type.  I wonder if it makes sense to have \u0027type \u003d rbd\u0027 here (instead of it being specified in the list above) so that it\u0027s obvious that rdb options need to be specified in this section of the config file?","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d44f80560500c93726ccdb46ab1249224bee2ea9","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # conf props for file system store instance"},{"line_number":115,"context_line":"    [reliable]"},{"line_number":116,"context_line":"    filesystem_store_datadir \u003d /var/lib/images/data/"},{"line_number":117,"context_line":"    # etc.."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    # conf props for ceph store instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_e8d16424","line":116,"in_reply_to":"5f7c97a3_6357f7cb","updated":"2018-05-16 13:37:12.000000000","message":"Makes sense to me, thanks for the explanation.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # conf props for file system store instance"},{"line_number":115,"context_line":"    [reliable]"},{"line_number":116,"context_line":"    filesystem_store_datadir \u003d /var/lib/images/data/"},{"line_number":117,"context_line":"    # etc.."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    # conf props for ceph store instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_6357f7cb","line":116,"in_reply_to":"5f7c97a3_af9bc970","updated":"2018-05-14 06:12:13.000000000","message":"Brian, we need to have define type in enable_backends as key:value pair because it will help us in registering only those config options under that particular group. As of now we are reading all the config options using stevedore by loading all driver classes under glance_store group and there is no way to separate those options per driver basis. With the help of type defined in enable_backends it is easier for us to register only driver related option in each group.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"We propose the new REST resource be located at the following URI::"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    /{api_version}/stores"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Where \u0027api_version\u0027 is the glance API version being invoked. For example::"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_49ec758e","line":187,"updated":"2018-05-11 14:38:37.000000000","message":"With no policy governing list-stores or get-store, I think we should locate this as a sub-resource of \u0027info\u0027.  The we can just use the info controller to handle it, won\u0027t need a new controller.  So we\u0027d have:\n\n    /v2/info/stores\n    /v2/info/stores/{store_id}\n\nWhat do you think?","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":26734,"name":"Scott McClymont","email":"scott.mcclymont@verizonwireless.com","username":"smcclymont"},"change_message_id":"9231a78a97435d36745381a24cc92185b4ac16b6","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"We propose the new REST resource be located at the following URI::"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    /{api_version}/stores"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Where \u0027api_version\u0027 is the glance API version being invoked. For example::"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_dafb2044","line":187,"in_reply_to":"5f7c97a3_49ec758e","updated":"2018-05-15 19:14:09.000000000","message":"I second this here. Agreed.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"We propose the new REST resource be located at the following URI::"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    /{api_version}/stores"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Where \u0027api_version\u0027 is the glance API version being invoked. For example::"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_4372fb7c","line":187,"in_reply_to":"5f7c97a3_49ec758e","updated":"2018-05-14 06:12:13.000000000","message":"Sounds good","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":254,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":255,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":256,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":257,"context_line":"upgraded to use multiple stores."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"**Image import API**"},{"line_number":260,"context_line":"The existing image import API allows end users to import image from the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_090c3d3f","line":257,"updated":"2018-05-11 14:38:37.000000000","message":"(1) I\u0027m just curious about how many stores we think operators are likely to have.  We\u0027re looking at doing an exhaustive search (admittedly with a smart starting point), but if there\u0027s a large number of stores this could be a problem.\n\n(2) I wonder whether we need to allow the operator to specify the search order.  For example, the default is likely to be \"normal\" storage, but the operator might also offer \"fast\" (more expensive) and \"cheap\" (less expensive and slower).  So for the \u0027fast\u0027 storage, without an operator-imposed ordering, we will go to the default store first, not find the data, and then eventually find it is \u0027fast\u0027.  This is likely to slow down how quickly Glance can get stuff out of the \u0027fast\u0027 store.  Relative to the total time to transfer a file, though, this might not be worth worrying about.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":254,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":255,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":256,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":257,"context_line":"upgraded to use multiple stores."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"**Image import API**"},{"line_number":260,"context_line":"The existing image import API allows end users to import image from the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_8311f306","line":257,"in_reply_to":"5f7c97a3_090c3d3f","updated":"2018-05-14 06:12:13.000000000","message":"TO serve this purpose we might need another config option under glance_store section such as search_strategy where admin can define the stores which we can search if it is not in the default store.\n\nKindly let me know your opinion on this.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9c6cf8243fb77be4ae82b29e08340d2303386b09","unresolved":false,"context_lines":[{"line_number":254,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":255,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":256,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":257,"context_line":"upgraded to use multiple stores."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"**Image import API**"},{"line_number":260,"context_line":"The existing image import API allows end users to import image from the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_f467f1e9","line":257,"in_reply_to":"5f7c97a3_28a99c8e","updated":"2018-05-17 06:02:59.000000000","message":"No it\u0027s not difficult, it will be easier to implement anytime :).","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d44f80560500c93726ccdb46ab1249224bee2ea9","unresolved":false,"context_lines":[{"line_number":254,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":255,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":256,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":257,"context_line":"upgraded to use multiple stores."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"**Image import API**"},{"line_number":260,"context_line":"The existing image import API allows end users to import image from the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_28a99c8e","line":257,"in_reply_to":"5f7c97a3_8311f306","updated":"2018-05-16 13:37:12.000000000","message":"Let\u0027s see what Erno thinks.  My opinion is that we can hold off on this as a later enhancement.  Just keep it in mind during your implementation (i.e., don\u0027t do anything that would make this difficult to add later).","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"List all stores known to the glance service::"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    GET /v2/stores"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"This API takes no query parameters and when authorized returns a listing of all"},{"line_number":391,"context_line":"stores known to the glance service. The stores known to glance are those which"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_ecd0ef21","line":388,"updated":"2018-05-11 14:38:37.000000000","message":"See above for my suggestion to move this to /v2/info/stores","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"List all stores known to the glance service::"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    GET /v2/stores"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"This API takes no query parameters and when authorized returns a listing of all"},{"line_number":391,"context_line":"stores known to the glance service. The stores known to glance are those which"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_23fa5fbc","line":388,"in_reply_to":"5f7c97a3_ecd0ef21","updated":"2018-05-14 06:12:13.000000000","message":"Sounds good","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2493e3b1be79b80a9441a75ea8e355ee31a02e3b","unresolved":false,"context_lines":[{"line_number":409,"context_line":"             \"description\": \"Less expensive rbd store\""},{"line_number":410,"context_line":"          }"},{"line_number":411,"context_line":"       ]"},{"line_number":412,"context_line":"    }"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"Response codes:"},{"line_number":415,"context_line":" * 200 -- Upon authorization and successful request. The response body"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_ef0ea139","line":412,"updated":"2018-05-11 14:59:32.000000000","message":"Something just occurred to me ... how does someone reading this response know which one is the default store?  I think we may need to add\n\n    \"default\": true\n\nto the appropriate store\u0027s representation.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":409,"context_line":"             \"description\": \"Less expensive rbd store\""},{"line_number":410,"context_line":"          }"},{"line_number":411,"context_line":"       ]"},{"line_number":412,"context_line":"    }"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"Response codes:"},{"line_number":415,"context_line":" * 200 -- Upon authorization and successful request. The response body"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_a32f4f3d","line":412,"in_reply_to":"5f7c97a3_ef0ea139","updated":"2018-05-14 06:12:13.000000000","message":"Sounds good","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":417,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"**[New API] Get store details**"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Get the details for a store given it\u0027s store ID::"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_8c313b5d","line":420,"updated":"2018-05-11 14:38:37.000000000","message":"I wonder if this is really necessary?  Is the list of stores enough?  Guess it depends on how large that list is likely to be.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d44f80560500c93726ccdb46ab1249224bee2ea9","unresolved":false,"context_lines":[{"line_number":417,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"**[New API] Get store details**"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Get the details for a store given it\u0027s store ID::"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_e8a404a8","line":420,"in_reply_to":"5f7c97a3_23233f58","updated":"2018-05-16 13:37:12.000000000","message":"I could go either way (that is, I don\u0027t insist on leaving this out).  Let\u0027s see what other people think.  Or if you personally think it\u0027s a good idea to have this call, I don\u0027t object.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":417,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"**[New API] Get store details**"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Get the details for a store given it\u0027s store ID::"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_23233f58","line":420,"in_reply_to":"5f7c97a3_8c313b5d","updated":"2018-05-14 06:12:13.000000000","message":"I guess we can get rid of this, it is not much helpful.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":455,"context_line":"``OpenStack-image-store-ids``"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"   The value of this header will be a comma-separated key:value of stores"},{"line_number":458,"context_line":"   available and it\u0027s description.  For example,"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"   OpenStack-image-store-ids: \"fast\": \"Fast access to rbd store\","},{"line_number":461,"context_line":"                              \"cheap\" \"Less expensive rbd store\","}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_4c8563ce","line":458,"updated":"2018-05-11 14:38:37.000000000","message":"I don\u0027t think we\u0027d want to include the description in the header.  What I see this as is more of a hint that in this particular cloud, you have a choice of backends.  If you\u0027ve already dealt with this cloud, you may already know what the identifiers map to, and you can just use one; if you don\u0027t, you can make the get-stores request to find out what they mean.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":455,"context_line":"``OpenStack-image-store-ids``"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"   The value of this header will be a comma-separated key:value of stores"},{"line_number":458,"context_line":"   available and it\u0027s description.  For example,"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"   OpenStack-image-store-ids: \"fast\": \"Fast access to rbd store\","},{"line_number":461,"context_line":"                              \"cheap\" \"Less expensive rbd store\","}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_a3d42f21","line":458,"in_reply_to":"5f7c97a3_4c8563ce","updated":"2018-05-14 06:12:13.000000000","message":"Sounds good","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d44f80560500c93726ccdb46ab1249224bee2ea9","unresolved":false,"context_lines":[{"line_number":455,"context_line":"``OpenStack-image-store-ids``"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"   The value of this header will be a comma-separated key:value of stores"},{"line_number":458,"context_line":"   available and it\u0027s description.  For example,"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"   OpenStack-image-store-ids: \"fast\": \"Fast access to rbd store\","},{"line_number":461,"context_line":"                              \"cheap\" \"Less expensive rbd store\","}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_2b7c3670","line":458,"in_reply_to":"5f7c97a3_a3d42f21","updated":"2018-05-16 13:37:12.000000000","message":"One other question about this:  do we always include it, even if there\u0027s only one store?  I guess we have to, otherwise a client can\u0027t tell if it\u0027s connecting to a glance that has multiple stores.  (Just thinking out loud here.)\n\nI just checked in a queens devstack, and using curl with -H  \"x-image-meta-store: default\", the PUT v2/.../file, PUT v2/.../stage, and POST v2/.../import calls all work fine, they simply ignore the header.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Although this spec does not impose any changes on the glance API layer, this"},{"line_number":499,"context_line":"call will now shows the location\u0027s store id. In case if there are multiple"},{"line_number":500,"context_line":"locations, the displayed \u0027store\u0027 would be one associated with the location"},{"line_number":501,"context_line":"specified by the current location_strategy. The new image response with"},{"line_number":502,"context_line":"store attribute will be something like::"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    \"size\": 1234,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_2c3827ec","line":501,"range":{"start_line":500,"start_character":11,"end_line":501,"end_character":42},"updated":"2018-05-11 14:38:37.000000000","message":"Yeah, I know I requested this change, but if it *does* make sense for a user to put an image in \u003e1 store, presumably the user is going to be charged \u003e1 times for that same image, and somehow the user needs to find that out (although I guess they\u0027ll find out when they get the bill!).  On the other hand, it\u0027s going to be impossible for the user to get the data out of a particular store unless the locations are exposed (and in that case, the data has to be downloaded directly from the store independently of Glance).  So maybe it does *not* make sense to put image data in \u003e1 store.  What\u0027s at issue here is the name of the \"store\" element and its data type (string, comma-separated-string-value, or a list).","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Although this spec does not impose any changes on the glance API layer, this"},{"line_number":499,"context_line":"call will now shows the location\u0027s store id. In case if there are multiple"},{"line_number":500,"context_line":"locations, the displayed \u0027store\u0027 would be one associated with the location"},{"line_number":501,"context_line":"specified by the current location_strategy. The new image response with"},{"line_number":502,"context_line":"store attribute will be something like::"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    \"size\": 1234,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_83dfb338","line":501,"range":{"start_line":500,"start_character":11,"end_line":501,"end_character":42},"in_reply_to":"5f7c97a3_2c3827ec","updated":"2018-05-14 06:12:13.000000000","message":"Agree","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":26734,"name":"Scott McClymont","email":"scott.mcclymont@verizonwireless.com","username":"smcclymont"},"change_message_id":"1651a6eefe243212803746bd7d85adc7b79ecfef","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Although this spec does not impose any changes on the glance API layer, this"},{"line_number":499,"context_line":"call will now shows the location\u0027s store id. In case if there are multiple"},{"line_number":500,"context_line":"locations, the displayed \u0027store\u0027 would be one associated with the location"},{"line_number":501,"context_line":"specified by the current location_strategy. The new image response with"},{"line_number":502,"context_line":"store attribute will be something like::"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    \"size\": 1234,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_be4de63b","line":501,"range":{"start_line":500,"start_character":11,"end_line":501,"end_character":42},"in_reply_to":"5f7c97a3_2c3827ec","updated":"2018-05-16 14:14:34.000000000","message":"My vote is for a simple list but I also am not sure I think storing image data in multiple stores is a good idea. I think I could be convinced for both but I am leaning towards image data being in 1 store but enabling various stores for any one implementation.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d44f80560500c93726ccdb46ab1249224bee2ea9","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Although this spec does not impose any changes on the glance API layer, this"},{"line_number":499,"context_line":"call will now shows the location\u0027s store id. In case if there are multiple"},{"line_number":500,"context_line":"locations, the displayed \u0027store\u0027 would be one associated with the location"},{"line_number":501,"context_line":"specified by the current location_strategy. The new image response with"},{"line_number":502,"context_line":"store attribute will be something like::"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    \"size\": 1234,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_abe4c63c","line":501,"range":{"start_line":500,"start_character":11,"end_line":501,"end_character":42},"in_reply_to":"5f7c97a3_83dfb338","updated":"2018-05-16 13:37:12.000000000","message":"^^^ Erno, Sean, and Scott: thoughts? ^^^","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8903df704c6f6eac45cbee26fca875511da0c02b","unresolved":false,"context_lines":[{"line_number":542,"context_line":"Notifications impact"},{"line_number":543,"context_line":"--------------------"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"None"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"Other end user impact"},{"line_number":548,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_6f85b159","line":545,"updated":"2018-05-11 14:38:37.000000000","message":"It just occurred to me that if one use case for this is offering different price tiers for storage, then we need to include the \"store\" field in the notification response for those systems that consume notifications to do billing.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bb99314ad82ca8f6e715884d88fe7847778273e8","unresolved":false,"context_lines":[{"line_number":542,"context_line":"Notifications impact"},{"line_number":543,"context_line":"--------------------"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"None"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"Other end user impact"},{"line_number":548,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_43e51b08","line":545,"in_reply_to":"5f7c97a3_6f85b159","updated":"2018-05-14 06:12:13.000000000","message":"sounds good","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d44f80560500c93726ccdb46ab1249224bee2ea9","unresolved":false,"context_lines":[{"line_number":614,"context_line":" * Image upload with store targeting."},{"line_number":615,"context_line":" * Image import with store targeting."},{"line_number":616,"context_line":" * Multi-store delete and other store access codepaths."},{"line_number":617,"context_line":""},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"Dependencies"},{"line_number":620,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_6b39cea1","line":617,"updated":"2018-05-16 13:37:12.000000000","message":"I guess we\u0027ll also need glanceclient support eventually.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9c6cf8243fb77be4ae82b29e08340d2303386b09","unresolved":false,"context_lines":[{"line_number":614,"context_line":" * Image upload with store targeting."},{"line_number":615,"context_line":" * Image import with store targeting."},{"line_number":616,"context_line":" * Multi-store delete and other store access codepaths."},{"line_number":617,"context_line":""},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"Dependencies"},{"line_number":620,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_7403e1bf","line":617,"in_reply_to":"5f7c97a3_6b39cea1","updated":"2018-05-17 06:02:59.000000000","message":"I have mentioned the same under \u0027Other deployer impact\u0027 section, but its worth to mention here as well.","commit_id":"83f63b5cd08cb3bac47e63798bfb4033f98c06c2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0159653778831951761052ca536f8861af3216e7","unresolved":false,"context_lines":[{"line_number":381,"context_line":"          {"},{"line_number":382,"context_line":"             \"id\":\"reliable\","},{"line_number":383,"context_line":"             \"description\": \"Reliable filesystem store\","},{"line_number":384,"context_line":"             \"default\": False"},{"line_number":385,"context_line":"          },"},{"line_number":386,"context_line":"          {"},{"line_number":387,"context_line":"             \"id\":\"fast\","}],"source_content_type":"text/x-rst","patch_set":9,"id":"5f7c97a3_8ca8e9db","line":384,"range":{"start_line":384,"start_character":13,"end_line":384,"end_character":29},"updated":"2018-05-17 13:46:12.000000000","message":"Kind of a nit, but I think the usual thing is that the default one would have \"default\": true and the others would have no \"default\" field?  Not sure about that, though.\n\nAlso, in JSON, the boolean values are case sensitive and must be all lowercase.","commit_id":"79a4b21cf2c6ac1ca737515518165705c2eeeecf"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d99481378364dfd26fdb22866fade20ec127e9c8","unresolved":false,"context_lines":[{"line_number":381,"context_line":"          {"},{"line_number":382,"context_line":"             \"id\":\"reliable\","},{"line_number":383,"context_line":"             \"description\": \"Reliable filesystem store\","},{"line_number":384,"context_line":"             \"default\": False"},{"line_number":385,"context_line":"          },"},{"line_number":386,"context_line":"          {"},{"line_number":387,"context_line":"             \"id\":\"fast\","}],"source_content_type":"text/x-rst","patch_set":9,"id":"5f7c97a3_ecaabd6f","line":384,"range":{"start_line":384,"start_character":13,"end_line":384,"end_character":29},"in_reply_to":"5f7c97a3_8ca8e9db","updated":"2018-05-17 13:55:42.000000000","message":"Sounds good, make sense to me. Will make a change shortly.","commit_id":"79a4b21cf2c6ac1ca737515518165705c2eeeecf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The Image service supports several back ends for storing virtual machine"},{"line_number":14,"context_line":"image namely Block Storage service (cinder), Filesystem (a directory on"},{"line_number":15,"context_line":"a local file system), HTTP, Ceph RBD, Sheepdog, Object Storage service"},{"line_number":16,"context_line":"(swift) and VMware ESX. As of now operator can configure single bakend"},{"line_number":17,"context_line":"on a per scheme basis but its not possible to configure multiple backends"},{"line_number":18,"context_line":"for same or different stores. For example if a cloud deployment has"},{"line_number":19,"context_line":"multiple ceph deployed glance will not be able to use all those backends"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_db2e90f9","line":16,"range":{"start_line":16,"start_character":64,"end_line":16,"end_character":70},"updated":"2018-05-17 21:09:02.000000000","message":"backend","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":14,"context_line":"image namely Block Storage service (cinder), Filesystem (a directory on"},{"line_number":15,"context_line":"a local file system), HTTP, Ceph RBD, Sheepdog, Object Storage service"},{"line_number":16,"context_line":"(swift) and VMware ESX. As of now operator can configure single bakend"},{"line_number":17,"context_line":"on a per scheme basis but its not possible to configure multiple backends"},{"line_number":18,"context_line":"for same or different stores. For example if a cloud deployment has"},{"line_number":19,"context_line":"multiple ceph deployed glance will not be able to use all those backends"},{"line_number":20,"context_line":"at once."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_9b38183e","line":17,"range":{"start_line":17,"start_character":26,"end_line":17,"end_character":29},"updated":"2018-05-17 21:09:02.000000000","message":"it\u0027s","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":29,"context_line":"   is migrated."},{"line_number":30,"context_line":" * Operator wants to differentiate the images from images added by user."},{"line_number":31,"context_line":" * Different hypervisors provided from different backends (For"},{"line_number":32,"context_line":"   example, Ceph, Cinder, VmWare etc.)."},{"line_number":33,"context_line":" * Each site with their local backends which nova hosts are accessing"},{"line_number":34,"context_line":"   directly (Ceph) and users can select the site where image will be stored."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_1b4408b7","line":32,"range":{"start_line":32,"start_character":26,"end_line":32,"end_character":32},"updated":"2018-05-17 21:09:02.000000000","message":"VMware","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":81,"context_line":" * Additional metadata attribute(s) added to an image locations\u0027 metadata"},{"line_number":82,"context_line":"   properties related to backing stores."},{"line_number":83,"context_line":" * A new REST API to list all configured stores known to the glance service."},{"line_number":84,"context_line":" * A new REST API to get the details about a particular store by it\u0027s store_id."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** Config/glance-store changes**"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_fb74ac00","line":84,"range":{"start_line":84,"start_character":65,"end_line":84,"end_character":69},"updated":"2018-05-17 21:09:02.000000000","message":"its","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"In order to have multi-store support of same or different type/scheme"},{"line_number":89,"context_line":"we propose to deprecate \u0027stores\u0027, \u0027default_store\u0027 config option and"},{"line_number":90,"context_line":"add a new config option `enable_backends` under DEFAULT section,"},{"line_number":91,"context_line":"\u0027default_multi_store\u0027 option under \u0027glance_store\u0027 section and"},{"line_number":92,"context_line":"\u0027description\u0027 option under each section of desired store of"},{"line_number":93,"context_line":"glance-api.conf. Operator can use `enable_backends` to specify comma"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_9b5fb871","line":90,"range":{"start_line":90,"start_character":25,"end_line":90,"end_character":31},"updated":"2018-05-17 21:09:02.000000000","message":"If we want to match how Cinder handles multiple backends, the option name used there is \"enabled_backends\"","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":88,"context_line":"In order to have multi-store support of same or different type/scheme"},{"line_number":89,"context_line":"we propose to deprecate \u0027stores\u0027, \u0027default_store\u0027 config option and"},{"line_number":90,"context_line":"add a new config option `enable_backends` under DEFAULT section,"},{"line_number":91,"context_line":"\u0027default_multi_store\u0027 option under \u0027glance_store\u0027 section and"},{"line_number":92,"context_line":"\u0027description\u0027 option under each section of desired store of"},{"line_number":93,"context_line":"glance-api.conf. Operator can use `enable_backends` to specify comma"},{"line_number":94,"context_line":"separated key:value of storage backends and it\u0027s store type and then"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_7bcf3c29","line":91,"range":{"start_line":91,"start_character":1,"end_line":91,"end_character":20},"updated":"2018-05-17 21:09:02.000000000","message":"I think for consistency we should either have the options bet enabled_multi_store and default_multi_store, or enabled_backends and default_backend.","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":91,"context_line":"\u0027default_multi_store\u0027 option under \u0027glance_store\u0027 section and"},{"line_number":92,"context_line":"\u0027description\u0027 option under each section of desired store of"},{"line_number":93,"context_line":"glance-api.conf. Operator can use `enable_backends` to specify comma"},{"line_number":94,"context_line":"separated key:value of storage backends and it\u0027s store type and then"},{"line_number":95,"context_line":"each backends will have a different section to specify related configuration"},{"line_number":96,"context_line":"options. If \u0027default_multi_store\u0027 is not explicitly set then appropriate"},{"line_number":97,"context_line":"exception will be raised which will prevent the service from starting."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_bbee3489","line":94,"range":{"start_line":94,"start_character":44,"end_line":94,"end_character":48},"updated":"2018-05-17 21:09:02.000000000","message":"its","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":175,"context_line":"should also provide a REST API which permits users to list all stores"},{"line_number":176,"context_line":"configured for glance. This is a read-only list of glance stores"},{"line_number":177,"context_line":"which includes the store identifier, description for each store and a flag"},{"line_number":178,"context_line":"which will tell weather a store is default or not."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"NOTE: The list of glance stores is based on the glance-api.conf with respect to"},{"line_number":181,"context_line":"store configuration. Operators will not be able to configure new stores using"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_3bb0e48b","line":178,"range":{"start_line":178,"start_character":16,"end_line":178,"end_character":23},"updated":"2018-05-17 21:09:02.000000000","message":"whether","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":238,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":239,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":240,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":241,"context_line":"upgraded to use multiple stores."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"**Image import API**"},{"line_number":244,"context_line":"The existing image import API allows end users to import image from the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_3b2304c1","line":241,"updated":"2018-05-17 21:09:02.000000000","message":"I wonder if as an optional optimization we would want to have something like a `legacy_store_name` config option that would allow a deployer to explicitly tag the new store with the id of the old store so we don\u0027t need to discover it.\n\nUnlikely that a deployer would have enough stores configured to make the auto discovery have too much overhead, but this could be an easy stop gap during the migration to make it a little more efficient.\n\nAnd if we did add this, I think we would want to introduce the config option as deprecated immediately so we can drop it as soon as we drop the rest of the old bits.","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ba77741e3692b7c92f4ac4f4c18b90ca42d87509","unresolved":false,"context_lines":[{"line_number":238,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":239,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":240,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":241,"context_line":"upgraded to use multiple stores."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"**Image import API**"},{"line_number":244,"context_line":"The existing image import API allows end users to import image from the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_0d836558","line":241,"in_reply_to":"5f7c97a3_3b2304c1","updated":"2018-05-18 06:44:44.000000000","message":"Hi Sean,\nI liked the idea of defining legacy_store. Only problem is we can not deprecate it as we are not sure when the old image bits will be dropped as we are not sure whether operator will migrate this data to new stores or not.","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":269,"context_line":"an image location with its respective store other than by inspecting the"},{"line_number":270,"context_line":"image\u0027s location URL. While this may work fine for many use cases, a more"},{"line_number":271,"context_line":"user friendly relation is needed in a multi-store environment; user\u0027s need"},{"line_number":272,"context_line":"an explicit relation between an image location and it\u0027s respective store"},{"line_number":273,"context_line":"(e.g. what store is this location backed on)."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"This spec proposes that when image bits are added with the image upload API,"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_fb2cacad","line":272,"range":{"start_line":272,"start_character":51,"end_line":272,"end_character":55},"updated":"2018-05-17 21:09:02.000000000","message":"its","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66fb64ede7f1ad51bcf8d6c64996a0c141e2f786","unresolved":false,"context_lines":[{"line_number":393,"context_line":"             \"description\": \"Less expensive rbd store\""},{"line_number":394,"context_line":"          }"},{"line_number":395,"context_line":"       ]"},{"line_number":396,"context_line":"    }"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"Response codes:"},{"line_number":399,"context_line":" * 200 -- Upon authorization and successful request. The response body"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_96254fae","line":396,"updated":"2018-05-17 21:09:02.000000000","message":"Would we need to include any kind of backend state information?","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ba77741e3692b7c92f4ac4f4c18b90ca42d87509","unresolved":false,"context_lines":[{"line_number":393,"context_line":"             \"description\": \"Less expensive rbd store\""},{"line_number":394,"context_line":"          }"},{"line_number":395,"context_line":"       ]"},{"line_number":396,"context_line":"    }"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"Response codes:"},{"line_number":399,"context_line":" * 200 -- Upon authorization and successful request. The response body"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f7c97a3_4d907d96","line":396,"in_reply_to":"5f7c97a3_96254fae","updated":"2018-05-18 06:44:44.000000000","message":"As per previous discussion, it is not advisable to disclose any backend related information to the user so I have kept it limited to store_identifier, description and whether it is default or not.","commit_id":"a9850d00dd8d069f489334ccb8cff5486f646502"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"11b7ec584f5c4fe6081866c7699b86d487d72b49","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"As a result, operators today needs to perform a number of manual steps"},{"line_number":47,"context_line":"in order to replicate or target image bits on backend glance stores. For"},{"line_number":48,"context_line":"example, in order to replicate a ekeysxisting image\u0027s bits to secondary storage"},{"line_number":49,"context_line":"of the same type / scheme as the primary:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":" * It\u0027s a manual out-of-band task to copy image bits to secondary storage."}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f7c97a3_7bcc0e61","line":48,"range":{"start_line":48,"start_character":33,"end_line":48,"end_character":45},"updated":"2018-05-18 12:57:49.000000000","message":"Copy/paste error?","commit_id":"c918570eaa4706e95628d27834c7902632601b96"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"cfb3bc9848305b16ef759bc2cbd6436591e507ca","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"As a result, operators today needs to perform a number of manual steps"},{"line_number":47,"context_line":"in order to replicate or target image bits on backend glance stores. For"},{"line_number":48,"context_line":"example, in order to replicate a ekeysxisting image\u0027s bits to secondary storage"},{"line_number":49,"context_line":"of the same type / scheme as the primary:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":" * It\u0027s a manual out-of-band task to copy image bits to secondary storage."}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f7c97a3_07133868","line":48,"range":{"start_line":48,"start_character":33,"end_line":48,"end_character":45},"in_reply_to":"5f7c97a3_7bcc0e61","updated":"2018-05-18 16:52:31.000000000","message":"Done","commit_id":"c918570eaa4706e95628d27834c7902632601b96"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"11cc728e62c592ec176d4ea8278cb281ea3bb982","unresolved":false,"context_lines":[{"line_number":99,"context_line":"The reason for deprecating \u0027default_store\u0027 config option is that glance"},{"line_number":100,"context_line":"verifies the default store at the time of service start and if it is not"},{"line_number":101,"context_line":"one of the listed store (file, http, rbd, swift, cinder, vmware or sheepdog)"},{"line_number":102,"context_line":"then it raises the error and prevents the service from start. After enabling"},{"line_number":103,"context_line":"support of multi-store it\u0027s difficult to have this kind of validation check."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Consider the following example snippet of glance-api.conf which configures"},{"line_number":106,"context_line":"3 stores for use::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_16a2884c","line":103,"range":{"start_line":102,"start_character":62,"end_line":103,"end_character":75},"updated":"2018-06-05 22:56:22.000000000","message":"Why exactly is this the case?  default_backend seems to be just a different name for default_store, so naively you\u0027d think that if glance could check default_store before starting, it could do the same for default_backend.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"The reason for deprecating \u0027default_store\u0027 config option is that glance"},{"line_number":100,"context_line":"verifies the default store at the time of service start and if it is not"},{"line_number":101,"context_line":"one of the listed store (file, http, rbd, swift, cinder, vmware or sheepdog)"},{"line_number":102,"context_line":"then it raises the error and prevents the service from start. After enabling"},{"line_number":103,"context_line":"support of multi-store it\u0027s difficult to have this kind of validation check."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Consider the following example snippet of glance-api.conf which configures"},{"line_number":106,"context_line":"3 stores for use::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_bca05393","line":103,"range":{"start_line":102,"start_character":62,"end_line":103,"end_character":75},"in_reply_to":"5f7c97a3_16a2884c","updated":"2018-06-06 00:51:22.000000000","message":"I do agree with Brian here, I really don\u0027t see the problem described.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"1df70ef1913c86357b513ece9d388343f153c720","unresolved":false,"context_lines":[{"line_number":99,"context_line":"The reason for deprecating \u0027default_store\u0027 config option is that glance"},{"line_number":100,"context_line":"verifies the default store at the time of service start and if it is not"},{"line_number":101,"context_line":"one of the listed store (file, http, rbd, swift, cinder, vmware or sheepdog)"},{"line_number":102,"context_line":"then it raises the error and prevents the service from start. After enabling"},{"line_number":103,"context_line":"support of multi-store it\u0027s difficult to have this kind of validation check."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Consider the following example snippet of glance-api.conf which configures"},{"line_number":106,"context_line":"3 stores for use::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_d115ec9c","line":103,"range":{"start_line":102,"start_character":62,"end_line":103,"end_character":75},"in_reply_to":"5f7c97a3_a9cd6e87","updated":"2018-06-06 12:43:47.000000000","message":"Gotcha! So effectively we will need lots of more logic to maintain the same behaviour. Which is quite fankly what I would expect anyways, but I see your point. Although to be able to deprecate it and use another option name to achieve the same we would need to do that anyways and give option to leave this field empty to allow moving to the new options.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"The reason for deprecating \u0027default_store\u0027 config option is that glance"},{"line_number":100,"context_line":"verifies the default store at the time of service start and if it is not"},{"line_number":101,"context_line":"one of the listed store (file, http, rbd, swift, cinder, vmware or sheepdog)"},{"line_number":102,"context_line":"then it raises the error and prevents the service from start. After enabling"},{"line_number":103,"context_line":"support of multi-store it\u0027s difficult to have this kind of validation check."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Consider the following example snippet of glance-api.conf which configures"},{"line_number":106,"context_line":"3 stores for use::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_a9cd6e87","line":103,"range":{"start_line":102,"start_character":62,"end_line":103,"end_character":75},"in_reply_to":"5f7c97a3_bca05393","updated":"2018-06-06 04:20:22.000000000","message":"Brian, Erno,\n\nProblem here is earlier validation was done using choices attribute of ConfigOption object and now in default store we are going to mention store identifier and not the name of actual store, so if we keep need to use default_store config option then we need to remove \u0027choices\u0027 attribute while defining this config option.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"290dabce1cbccddd0176dc5747e352737bc453aa","unresolved":false,"context_lines":[{"line_number":99,"context_line":"The reason for deprecating \u0027default_store\u0027 config option is that glance"},{"line_number":100,"context_line":"verifies the default store at the time of service start and if it is not"},{"line_number":101,"context_line":"one of the listed store (file, http, rbd, swift, cinder, vmware or sheepdog)"},{"line_number":102,"context_line":"then it raises the error and prevents the service from start. After enabling"},{"line_number":103,"context_line":"support of multi-store it\u0027s difficult to have this kind of validation check."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Consider the following example snippet of glance-api.conf which configures"},{"line_number":106,"context_line":"3 stores for use::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_adca2c4c","line":103,"range":{"start_line":102,"start_character":62,"end_line":103,"end_character":75},"in_reply_to":"5f7c97a3_d115ec9c","updated":"2018-06-07 16:43:07.000000000","message":"Thanks for the explanation, I understand now.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"11cc728e62c592ec176d4ea8278cb281ea3bb982","unresolved":false,"context_lines":[{"line_number":140,"context_line":"the covers the store identifier (aka id) maps to the store class used for"},{"line_number":141,"context_line":"the instance."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Until \u0027stores\u0027 and \u0027default_store\u0027 are available an operator can leave the"},{"line_number":144,"context_line":"\u0027enabled_backends\u0027 property unset in which case multi-store support is not"},{"line_number":145,"context_line":"\"enabled\" and glance will work as-is. Once these config options are removed"},{"line_number":146,"context_line":"operator atleast need to set one store in the \u0027enabled_backends\u0027 or else"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_36bc646b","line":143,"range":{"start_line":143,"start_character":0,"end_line":143,"end_character":48},"updated":"2018-06-05 22:56:22.000000000","message":"I think this needs to be either \"While ... are available\" or \"Until ... are removed\", your choice.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":140,"context_line":"the covers the store identifier (aka id) maps to the store class used for"},{"line_number":141,"context_line":"the instance."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Until \u0027stores\u0027 and \u0027default_store\u0027 are available an operator can leave the"},{"line_number":144,"context_line":"\u0027enabled_backends\u0027 property unset in which case multi-store support is not"},{"line_number":145,"context_line":"\"enabled\" and glance will work as-is. Once these config options are removed"},{"line_number":146,"context_line":"operator atleast need to set one store in the \u0027enabled_backends\u0027 or else"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_c9ca2a6d","line":143,"range":{"start_line":143,"start_character":0,"end_line":143,"end_character":48},"in_reply_to":"5f7c97a3_36bc646b","updated":"2018-06-06 04:20:22.000000000","message":"will fix in new PS.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"11cc728e62c592ec176d4ea8278cb281ea3bb982","unresolved":false,"context_lines":[{"line_number":143,"context_line":"Until \u0027stores\u0027 and \u0027default_store\u0027 are available an operator can leave the"},{"line_number":144,"context_line":"\u0027enabled_backends\u0027 property unset in which case multi-store support is not"},{"line_number":145,"context_line":"\"enabled\" and glance will work as-is. Once these config options are removed"},{"line_number":146,"context_line":"operator atleast need to set one store in the \u0027enabled_backends\u0027 or else"},{"line_number":147,"context_line":"glance-api service will fail to start."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"In order to accommodate multiple stores of the same scheme, the scheme_map"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_968d38d5","line":146,"range":{"start_line":146,"start_character":9,"end_line":146,"end_character":16},"updated":"2018-06-05 22:56:22.000000000","message":"s/atleast/at least/","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"Until \u0027stores\u0027 and \u0027default_store\u0027 are available an operator can leave the"},{"line_number":144,"context_line":"\u0027enabled_backends\u0027 property unset in which case multi-store support is not"},{"line_number":145,"context_line":"\"enabled\" and glance will work as-is. Once these config options are removed"},{"line_number":146,"context_line":"operator atleast need to set one store in the \u0027enabled_backends\u0027 or else"},{"line_number":147,"context_line":"glance-api service will fail to start."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"In order to accommodate multiple stores of the same scheme, the scheme_map"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_89c43261","line":146,"range":{"start_line":146,"start_character":9,"end_line":146,"end_character":16},"in_reply_to":"5f7c97a3_968d38d5","updated":"2018-06-06 04:20:22.000000000","message":"Will fix in new PS.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"Where \u0027scheme\u0027 is the scheme(s) supported by the store implementation and"},{"line_number":160,"context_line":"\u0027store_id\u0027 is the identifier for the store."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"To keep the minimum impact on the store drivers we also propose to add new"},{"line_number":163,"context_line":"store api\u0027s like add, get, delete etc. to glance_store. The old store api\u0027s"},{"line_number":164,"context_line":"will be removed when the deprecation period for \u0027stores\u0027 and \u0027default_store\u0027"},{"line_number":165,"context_line":"config option is over."},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_bcc9335b","line":163,"range":{"start_line":162,"start_character":0,"end_line":163,"end_character":55},"updated":"2018-06-06 00:51:22.000000000","message":"hmm-m what does this actually mean?","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":159,"context_line":"Where \u0027scheme\u0027 is the scheme(s) supported by the store implementation and"},{"line_number":160,"context_line":"\u0027store_id\u0027 is the identifier for the store."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"To keep the minimum impact on the store drivers we also propose to add new"},{"line_number":163,"context_line":"store api\u0027s like add, get, delete etc. to glance_store. The old store api\u0027s"},{"line_number":164,"context_line":"will be removed when the deprecation period for \u0027stores\u0027 and \u0027default_store\u0027"},{"line_number":165,"context_line":"config option is over."},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_c98f8a2c","line":163,"range":{"start_line":162,"start_character":0,"end_line":163,"end_character":55},"in_reply_to":"5f7c97a3_bcc9335b","updated":"2018-06-06 04:20:22.000000000","message":"This means we need to add new store api\u0027s like add, delete etc so that we can keep intact existing store api\u0027s to maintain backward compatibility.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"1df70ef1913c86357b513ece9d388343f153c720","unresolved":false,"context_lines":[{"line_number":159,"context_line":"Where \u0027scheme\u0027 is the scheme(s) supported by the store implementation and"},{"line_number":160,"context_line":"\u0027store_id\u0027 is the identifier for the store."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"To keep the minimum impact on the store drivers we also propose to add new"},{"line_number":163,"context_line":"store api\u0027s like add, get, delete etc. to glance_store. The old store api\u0027s"},{"line_number":164,"context_line":"will be removed when the deprecation period for \u0027stores\u0027 and \u0027default_store\u0027"},{"line_number":165,"context_line":"config option is over."},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_d1f16c6c","line":163,"range":{"start_line":162,"start_character":0,"end_line":163,"end_character":55},"in_reply_to":"5f7c97a3_c98f8a2c","updated":"2018-06-06 12:43:47.000000000","message":"I don\u0027t think we do and I hope I\u0027m not wrong here, but we should be able to just give the configured store object to the consumer, the main part we need to change is how we configure those objects and acquire them. Sorry if I\u0027m wrong about this, but I think we can achieve it without implementing the wheel again based on how we have been forcing those store objects for the tasks.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"54e190dcee0a83d5b23f9fddb77b1c580e86fe49","unresolved":false,"context_lines":[{"line_number":159,"context_line":"Where \u0027scheme\u0027 is the scheme(s) supported by the store implementation and"},{"line_number":160,"context_line":"\u0027store_id\u0027 is the identifier for the store."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"To keep the minimum impact on the store drivers we also propose to add new"},{"line_number":163,"context_line":"store api\u0027s like add, get, delete etc. to glance_store. The old store api\u0027s"},{"line_number":164,"context_line":"will be removed when the deprecation period for \u0027stores\u0027 and \u0027default_store\u0027"},{"line_number":165,"context_line":"config option is over."},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_1ff7e65b","line":163,"range":{"start_line":162,"start_character":0,"end_line":163,"end_character":55},"in_reply_to":"5f7c97a3_d1f16c6c","updated":"2018-06-06 16:41:39.000000000","message":"As of now we are maintaining mapping of scheme and store object in memory. Are you saying instead of maintaining this map we should build the particular store object as and when required?","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"To keep the minimum impact on the store drivers we also propose to add new"},{"line_number":163,"context_line":"store api\u0027s like add, get, delete etc. to glance_store. The old store api\u0027s"},{"line_number":164,"context_line":"will be removed when the deprecation period for \u0027stores\u0027 and \u0027default_store\u0027"},{"line_number":165,"context_line":"config option is over."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Additional \"core\" changes are likely required to handle"},{"line_number":168,"context_line":"a multi-store based scheme. For example, the image delete code path will"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_fce48be2","line":165,"range":{"start_line":164,"start_character":0,"end_line":165,"end_character":22},"updated":"2018-06-06 00:51:22.000000000","message":"We might need to wait with this depending how fast Glare is moving. That should affect only the deprecation period of glance_store, not how long we carry the old config options in Glance.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":165,"context_line":"config option is over."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Additional \"core\" changes are likely required to handle"},{"line_number":168,"context_line":"a multi-store based scheme. For example, the image delete code path will"},{"line_number":169,"context_line":"need to ensure the proper store is looked up when deleting all image"},{"line_number":170,"context_line":"locations."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"**API to list stores**"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_dcf42f8a","line":170,"range":{"start_line":168,"start_character":28,"end_line":170,"end_character":10},"updated":"2018-06-06 00:51:22.000000000","message":"This is already in place with our locations metadata.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"config option is over."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Additional \"core\" changes are likely required to handle"},{"line_number":168,"context_line":"a multi-store based scheme. For example, the image delete code path will"},{"line_number":169,"context_line":"need to ensure the proper store is looked up when deleting all image"},{"line_number":170,"context_line":"locations."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"**API to list stores**"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_498dba2f","line":170,"range":{"start_line":168,"start_character":28,"end_line":170,"end_character":10},"in_reply_to":"5f7c97a3_dcf42f8a","updated":"2018-06-06 04:20:22.000000000","message":"yes","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"We propose the new REST resource be located at the following URI::"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    /{api_version}/info/stores"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Where \u0027api_version\u0027 is the glance API version being invoked. For example::"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    /v2/info/stores"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_5c17bfa4","line":194,"range":{"start_line":192,"start_character":4,"end_line":194,"end_character":74},"updated":"2018-06-06 00:51:22.000000000","message":"I think this is totally redundant. There is and likely ever will be nothing but v2","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"We propose the new REST resource be located at the following URI::"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    /{api_version}/info/stores"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Where \u0027api_version\u0027 is the glance API version being invoked. For example::"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    /v2/info/stores"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_e98126fd","line":194,"range":{"start_line":192,"start_character":4,"end_line":194,"end_character":74},"in_reply_to":"5f7c97a3_5c17bfa4","updated":"2018-06-06 04:20:22.000000000","message":"Will fix this in new PS","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"11cc728e62c592ec176d4ea8278cb281ea3bb982","unresolved":false,"context_lines":[{"line_number":234,"context_line":"With multiple backends available, Glance needs some enhancements"},{"line_number":235,"context_line":"so it can fulfill the current image download API contract. The"},{"line_number":236,"context_line":"download request will traverse through all the configured backends"},{"line_number":237,"context_line":"to look for the image. At first it will look the image in the default"},{"line_number":238,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":239,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":240,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":241,"context_line":"upgraded to use multiple stores."},{"line_number":242,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_d61f306e","line":239,"range":{"start_line":237,"start_character":23,"end_line":239,"end_character":43},"updated":"2018-06-05 22:56:22.000000000","message":"This isn\u0027t quite right ... I mean, using your example from the config section above, if the location is file://whatever, then won\u0027t you go to the \u0027reliable\u0027 store regardless of what the default_backend is?  Likewise, if the location is rbd:// , you\u0027ll just look in \u0027fast\u0027 and \u0027cheap\u0027 ... doesn\u0027t make sense to look in \u0027reliable\u0027.  I guess you\u0027re thinking of the case where all backends are the same scheme, then it makes sense to start with the default_backend, I guess.\n\nOne other thing ... how do the location_strategy modules fit in here?  Or are they independent of this?  What I mean is, suppose you have two stores with the same scheme, and you have a copy of the image in each store ... currently, the location_strategy picks what location will be used for the download.  So you want to make sure that if the location_strategy picks store B, that\u0027s where you need to pull the image from.\n\nI guess what I\u0027m getting at is that there\u0027s an asymmetry here: when an end-user uploads an image, the end-user can specify which store the image goes into.  That isn\u0027t available on download.  Is that a problem?","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"1df70ef1913c86357b513ece9d388343f153c720","unresolved":false,"context_lines":[{"line_number":234,"context_line":"With multiple backends available, Glance needs some enhancements"},{"line_number":235,"context_line":"so it can fulfill the current image download API contract. The"},{"line_number":236,"context_line":"download request will traverse through all the configured backends"},{"line_number":237,"context_line":"to look for the image. At first it will look the image in the default"},{"line_number":238,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":239,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":240,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":241,"context_line":"upgraded to use multiple stores."},{"line_number":242,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_716bb8f0","line":239,"range":{"start_line":237,"start_character":23,"end_line":239,"end_character":43},"in_reply_to":"5f7c97a3_2904fe7d","updated":"2018-06-06 12:43:47.000000000","message":"I guess I\u0027m missing something here. We have exact location of the image in the locations table in the database. If it\u0027s file store we have full path, if it\u0027s swift we have the uri for the object, with ceph we might need to make glance-manage option to add the identifier which store the location is actually part of when those stores are added/renamed but pretty much everything else should be in the DB in exact format to recognize where that image is located.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"54e190dcee0a83d5b23f9fddb77b1c580e86fe49","unresolved":false,"context_lines":[{"line_number":234,"context_line":"With multiple backends available, Glance needs some enhancements"},{"line_number":235,"context_line":"so it can fulfill the current image download API contract. The"},{"line_number":236,"context_line":"download request will traverse through all the configured backends"},{"line_number":237,"context_line":"to look for the image. At first it will look the image in the default"},{"line_number":238,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":239,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":240,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":241,"context_line":"upgraded to use multiple stores."},{"line_number":242,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_5f70feda","line":239,"range":{"start_line":237,"start_character":23,"end_line":239,"end_character":43},"in_reply_to":"5f7c97a3_716bb8f0","updated":"2018-06-06 16:41:39.000000000","message":"yes, you are right but to avoid provide glance-manage utility to update store identifier for existing images this is better way IMO.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":234,"context_line":"With multiple backends available, Glance needs some enhancements"},{"line_number":235,"context_line":"so it can fulfill the current image download API contract. The"},{"line_number":236,"context_line":"download request will traverse through all the configured backends"},{"line_number":237,"context_line":"to look for the image. At first it will look the image in the default"},{"line_number":238,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":239,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":240,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":241,"context_line":"upgraded to use multiple stores."},{"line_number":242,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_fc800bc2","line":239,"range":{"start_line":237,"start_character":23,"end_line":239,"end_character":43},"in_reply_to":"5f7c97a3_d61f306e","updated":"2018-06-06 00:51:22.000000000","message":"We just need to make sure we have sufficient information in the locations table to know where our images are stored. This is even more important for deletes so we don\u0027t accidentally delete wrong data by just guessing.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"With multiple backends available, Glance needs some enhancements"},{"line_number":235,"context_line":"so it can fulfill the current image download API contract. The"},{"line_number":236,"context_line":"download request will traverse through all the configured backends"},{"line_number":237,"context_line":"to look for the image. At first it will look the image in the default"},{"line_number":238,"context_line":"store set by the operator if it\u0027s not present then it will look in"},{"line_number":239,"context_line":"all other backends enabled by the operator. This way user will be"},{"line_number":240,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":241,"context_line":"upgraded to use multiple stores."},{"line_number":242,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_2904fe7d","line":239,"range":{"start_line":237,"start_character":23,"end_line":239,"end_character":43},"in_reply_to":"5f7c97a3_fc800bc2","updated":"2018-06-06 04:20:22.000000000","message":"Brian, Erno,\n\nEarlier I proposed to add similar header to like upload to download as well, but then it is decided that it\u0027s not a good idea and we need to search all the backend\u0027s while downloading/deleting the image.\n\nWhat exactly I can do is, I am storing store location in the metadata of the location, so while downloading I am first checking is if metadata contains backend information then download image from that store and if not then we can search it based on location like what Brian suggested if starts with file:// then search only in filesystem and so on.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":247,"context_line":"This spec proposes the API be enhanced to permit an end user to specify"},{"line_number":248,"context_line":"which store will back the image being imported."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"We propose a header field be used as a means to transport the identifier"},{"line_number":251,"context_line":"of the store to import the image. Again the identifier under the covers"},{"line_number":252,"context_line":"is the property group name of the respective glance store driver. When"},{"line_number":253,"context_line":"the image import API is used to import the image, the glance logic will"},{"line_number":254,"context_line":"determine if the target store header is specified, and if so the image"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_9c4a37aa","line":251,"range":{"start_line":250,"start_character":0,"end_line":251,"end_character":33},"updated":"2018-06-06 00:51:22.000000000","message":"I really really hate adding headers when we have worked so hard to get rid of sending such metadata over headers. I think this just needs to be another field in the json sent as import call body.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"1df70ef1913c86357b513ece9d388343f153c720","unresolved":false,"context_lines":[{"line_number":247,"context_line":"This spec proposes the API be enhanced to permit an end user to specify"},{"line_number":248,"context_line":"which store will back the image being imported."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"We propose a header field be used as a means to transport the identifier"},{"line_number":251,"context_line":"of the store to import the image. Again the identifier under the covers"},{"line_number":252,"context_line":"is the property group name of the respective glance store driver. When"},{"line_number":253,"context_line":"the image import API is used to import the image, the glance logic will"},{"line_number":254,"context_line":"determine if the target store header is specified, and if so the image"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_a64a7480","line":251,"range":{"start_line":250,"start_character":0,"end_line":251,"end_character":33},"in_reply_to":"5f7c97a3_9c4a37aa","updated":"2018-06-06 12:43:47.000000000","message":"This is not going to be the greatest user experience either as we would need to be inconsistent between the import and upload. Unless we do this as property upon creation that can be also provided on the import call ... not gonna hold the spec over this, but something I think we should look into.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":258,"context_line":"used to import the image."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Using this scheme end users will be able to specify which store they want"},{"line_number":261,"context_line":"an image to be imported during an import operation. In accordance with"},{"line_number":262,"context_line":"the glance v1 APIs, we propose the \u0027X-Image-Meta-Store\u0027 header be used"},{"line_number":263,"context_line":"as the means to transport a target store identifier."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":266,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_bc01333c","line":263,"range":{"start_line":261,"start_character":52,"end_line":263,"end_character":52},"updated":"2018-06-06 00:51:22.000000000","message":"No, there will not be v1 api to be considered about in this matter.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"290dabce1cbccddd0176dc5747e352737bc453aa","unresolved":false,"context_lines":[{"line_number":258,"context_line":"used to import the image."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Using this scheme end users will be able to specify which store they want"},{"line_number":261,"context_line":"an image to be imported during an import operation. In accordance with"},{"line_number":262,"context_line":"the glance v1 APIs, we propose the \u0027X-Image-Meta-Store\u0027 header be used"},{"line_number":263,"context_line":"as the means to transport a target store identifier."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":266,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_402a3f7e","line":263,"range":{"start_line":261,"start_character":52,"end_line":263,"end_character":52},"in_reply_to":"5f7c97a3_06dec8d9","updated":"2018-06-07 16:43:07.000000000","message":"Right, but I understood Abhishek\u0027s point to be that operators who were using v1 to put image data into a particular store are already familiar with using this header, so bringing the header into v2 will establish some continuity.\n\nI think we really have to use headers here, because there\u0027s no other way to do it with the image-upload call.  I really don\u0027t like the idea of pre-loading the image record with the name of the store, I\u0027d rather make that choice when I upload the image.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"1df70ef1913c86357b513ece9d388343f153c720","unresolved":false,"context_lines":[{"line_number":258,"context_line":"used to import the image."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Using this scheme end users will be able to specify which store they want"},{"line_number":261,"context_line":"an image to be imported during an import operation. In accordance with"},{"line_number":262,"context_line":"the glance v1 APIs, we propose the \u0027X-Image-Meta-Store\u0027 header be used"},{"line_number":263,"context_line":"as the means to transport a target store identifier."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":266,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_06dec8d9","line":263,"range":{"start_line":261,"start_character":52,"end_line":263,"end_character":52},"in_reply_to":"5f7c97a3_0938223b","updated":"2018-06-06 12:43:47.000000000","message":"v1 we do not pass anything as it will be removed.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"eb01a39df4e726879b439ac742b4c179ee460869","unresolved":false,"context_lines":[{"line_number":258,"context_line":"used to import the image."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Using this scheme end users will be able to specify which store they want"},{"line_number":261,"context_line":"an image to be imported during an import operation. In accordance with"},{"line_number":262,"context_line":"the glance v1 APIs, we propose the \u0027X-Image-Meta-Store\u0027 header be used"},{"line_number":263,"context_line":"as the means to transport a target store identifier."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":266,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_801b77c8","line":263,"range":{"start_line":261,"start_character":52,"end_line":263,"end_character":52},"in_reply_to":"5f7c97a3_402a3f7e","updated":"2018-06-07 16:59:23.000000000","message":"Agree","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":258,"context_line":"used to import the image."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Using this scheme end users will be able to specify which store they want"},{"line_number":261,"context_line":"an image to be imported during an import operation. In accordance with"},{"line_number":262,"context_line":"the glance v1 APIs, we propose the \u0027X-Image-Meta-Store\u0027 header be used"},{"line_number":263,"context_line":"as the means to transport a target store identifier."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":266,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_0938223b","line":263,"range":{"start_line":261,"start_character":52,"end_line":263,"end_character":52},"in_reply_to":"5f7c97a3_bc01333c","updated":"2018-06-06 04:20:22.000000000","message":"Erno, Brian,\nPlease confirm do we pass this as a new parameter in the body or should pass as a header. IMO i do not see any harm in passing this as a header","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":345,"context_line":" * List all stores known to the glance service."},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"**Modified APIs**"},{"line_number":348,"context_line":" * Create an image"},{"line_number":349,"context_line":" * Import an image."},{"line_number":350,"context_line":" * Upload an image file."},{"line_number":351,"context_line":" * Get image details."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"**Common Response Codes**"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_5c349ffb","line":350,"range":{"start_line":348,"start_character":0,"end_line":350,"end_character":24},"updated":"2018-06-06 00:51:22.000000000","message":"IMHO we either make the decision of where the image will land on image creation as image property or do we it during Import/upload depending which method is used. We do not need to worry about it during all the steps.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":345,"context_line":" * List all stores known to the glance service."},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"**Modified APIs**"},{"line_number":348,"context_line":" * Create an image"},{"line_number":349,"context_line":" * Import an image."},{"line_number":350,"context_line":" * Upload an image file."},{"line_number":351,"context_line":" * Get image details."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"**Common Response Codes**"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_c9678a51","line":350,"range":{"start_line":348,"start_character":0,"end_line":350,"end_character":24},"in_reply_to":"5f7c97a3_5c349ffb","updated":"2018-06-06 04:20:22.000000000","message":"I have added create API here as I was intended to return stores information as headers part in the response. I will remove it as we don\u0027t want it as a part of headers.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":401,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"**[Modified API] Create image**"},{"line_number":405,"context_line":"We propose to add an \u0027OpenStack-image-store-ids\u0027 header to the image-create"},{"line_number":406,"context_line":"response which would have the available stores. Using this user can decide"},{"line_number":407,"context_line":"which store he needs to upload/import his image and wouldn\u0027t have to make"},{"line_number":408,"context_line":"a separate get-stores call."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"New response headers"},{"line_number":411,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"``OpenStack-image-store-ids``"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"   The value of this header will be a comma-separated list of stores"},{"line_number":416,"context_line":"   available.  For example,"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   OpenStack-image-store-ids: [\"fast\", \"cheap\", \"reliable\"]"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"**[Modified API] Upload image binary data**"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_f054af00","line":418,"range":{"start_line":404,"start_character":0,"end_line":418,"end_character":59},"updated":"2018-06-06 00:51:22.000000000","message":"I\u0027d rather not have this. Thinking it now, we made the mistake to add the import methods to the create call for absolutely no benefit.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"eb01a39df4e726879b439ac742b4c179ee460869","unresolved":false,"context_lines":[{"line_number":401,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"**[Modified API] Create image**"},{"line_number":405,"context_line":"We propose to add an \u0027OpenStack-image-store-ids\u0027 header to the image-create"},{"line_number":406,"context_line":"response which would have the available stores. Using this user can decide"},{"line_number":407,"context_line":"which store he needs to upload/import his image and wouldn\u0027t have to make"},{"line_number":408,"context_line":"a separate get-stores call."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"New response headers"},{"line_number":411,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"``OpenStack-image-store-ids``"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"   The value of this header will be a comma-separated list of stores"},{"line_number":416,"context_line":"   available.  For example,"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   OpenStack-image-store-ids: [\"fast\", \"cheap\", \"reliable\"]"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"**[Modified API] Upload image binary data**"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_c0664f56","line":418,"range":{"start_line":404,"start_character":0,"end_line":418,"end_character":59},"in_reply_to":"5f7c97a3_40eb1f11","updated":"2018-06-07 16:59:23.000000000","message":"I can go both ways but more inclined towards having the header","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"290dabce1cbccddd0176dc5747e352737bc453aa","unresolved":false,"context_lines":[{"line_number":401,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"**[Modified API] Create image**"},{"line_number":405,"context_line":"We propose to add an \u0027OpenStack-image-store-ids\u0027 header to the image-create"},{"line_number":406,"context_line":"response which would have the available stores. Using this user can decide"},{"line_number":407,"context_line":"which store he needs to upload/import his image and wouldn\u0027t have to make"},{"line_number":408,"context_line":"a separate get-stores call."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"New response headers"},{"line_number":411,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"``OpenStack-image-store-ids``"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"   The value of this header will be a comma-separated list of stores"},{"line_number":416,"context_line":"   available.  For example,"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   OpenStack-image-store-ids: [\"fast\", \"cheap\", \"reliable\"]"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"**[Modified API] Upload image binary data**"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_40eb1f11","line":418,"range":{"start_line":404,"start_character":0,"end_line":418,"end_character":59},"in_reply_to":"5f7c97a3_697436ff","updated":"2018-06-07 16:43:07.000000000","message":"I actually like this idea.  It gives people more flexibility in writing clients or scripts.\n\nNit: the header would look like this:\n\n    OpenStack-image-store-ids: fast,cheap,reliable","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":401,"context_line":" * 403 -- When not authorized with the proper role to list glance stores."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"**[Modified API] Create image**"},{"line_number":405,"context_line":"We propose to add an \u0027OpenStack-image-store-ids\u0027 header to the image-create"},{"line_number":406,"context_line":"response which would have the available stores. Using this user can decide"},{"line_number":407,"context_line":"which store he needs to upload/import his image and wouldn\u0027t have to make"},{"line_number":408,"context_line":"a separate get-stores call."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"New response headers"},{"line_number":411,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"``OpenStack-image-store-ids``"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"   The value of this header will be a comma-separated list of stores"},{"line_number":416,"context_line":"   available.  For example,"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   OpenStack-image-store-ids: [\"fast\", \"cheap\", \"reliable\"]"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"**[Modified API] Upload image binary data**"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_697436ff","line":418,"range":{"start_line":404,"start_character":0,"end_line":418,"end_character":59},"in_reply_to":"5f7c97a3_f054af00","updated":"2018-06-06 04:20:22.000000000","message":"Ok, I will remove it.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"df73f19397f1abfa45b56f3ff11d88ccccad8265","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"Example curl usage::"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":443,"context_line":"            ceph1\" -H \"Content-Type: application/octet-stream\""},{"line_number":444,"context_line":"            -d @/home/glance/ubuntu-12.10.qcow2"},{"line_number":445,"context_line":"            $image_url/v2/images/{image_id}/file"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_bfc0407e","line":443,"range":{"start_line":442,"start_character":49,"end_line":443,"end_character":18},"updated":"2018-06-06 06:43:16.000000000","message":"Erno, Brian, If we decided to pass store identifier as a part of request body rather than through headers then it will be measure change in upload api IMO.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"290dabce1cbccddd0176dc5747e352737bc453aa","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"Example curl usage::"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":443,"context_line":"            ceph1\" -H \"Content-Type: application/octet-stream\""},{"line_number":444,"context_line":"            -d @/home/glance/ubuntu-12.10.qcow2"},{"line_number":445,"context_line":"            $image_url/v2/images/{image_id}/file"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_c0bf2ffa","line":443,"range":{"start_line":442,"start_character":49,"end_line":443,"end_character":18},"in_reply_to":"5f7c97a3_713978f0","updated":"2018-06-07 16:43:07.000000000","message":"As I said above, I am pro-header.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"1df70ef1913c86357b513ece9d388343f153c720","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"Example curl usage::"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":443,"context_line":"            ceph1\" -H \"Content-Type: application/octet-stream\""},{"line_number":444,"context_line":"            -d @/home/glance/ubuntu-12.10.qcow2"},{"line_number":445,"context_line":"            $image_url/v2/images/{image_id}/file"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_713978f0","line":443,"range":{"start_line":442,"start_character":49,"end_line":443,"end_character":18},"in_reply_to":"5f7c97a3_bfc0407e","updated":"2018-06-06 12:43:47.000000000","message":"I think this might need bit more discussion. How about we do not hold the spec back for this and if we decide to not use the headers we amend the spec? I don\u0027t think this is critical design decision that should be nailed down before we agree that the feature itself is needed and approved.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Example curl usage::"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":489,"context_line":"            ceph1\" -H \"Content-Type: application/json\""},{"line_number":490,"context_line":"            -d \u0027{\"method\":{\"name\":\"glance-direct\"}}\u0027"},{"line_number":491,"context_line":"            $image_url/v2/images/{image_id}/import"},{"line_number":492,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_10736bb3","line":489,"range":{"start_line":488,"start_character":49,"end_line":489,"end_character":18},"updated":"2018-06-06 00:51:22.000000000","message":"rather not this","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":489,"context_line":"            ceph1\" -H \"Content-Type: application/json\""},{"line_number":490,"context_line":"            -d \u0027{\"method\":{\"name\":\"glance-direct\"}}\u0027"},{"line_number":491,"context_line":"            $image_url/v2/images/{image_id}/import"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_90b3fb4d","line":490,"range":{"start_line":490,"start_character":50,"end_line":490,"end_character":51},"updated":"2018-06-06 00:51:22.000000000","message":"but:\n, \"store\":\"ceph1\"}\nhere","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"290dabce1cbccddd0176dc5747e352737bc453aa","unresolved":false,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":489,"context_line":"            ceph1\" -H \"Content-Type: application/json\""},{"line_number":490,"context_line":"            -d \u0027{\"method\":{\"name\":\"glance-direct\"}}\u0027"},{"line_number":491,"context_line":"            $image_url/v2/images/{image_id}/import"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_e0582bfb","line":490,"range":{"start_line":490,"start_character":50,"end_line":490,"end_character":51},"in_reply_to":"5f7c97a3_4965ba44","updated":"2018-06-07 16:43:07.000000000","message":"Well, whatever we do needs to be consistent across both the upload and import APIs.  Since I like headers for upload, I would use them here as well.\n\nThe advantage of headers is that for the typical user, nothing changes from the way things have been working up to now.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5b8e63203870eb4185b12e5b4a0876eb8158cc1b","unresolved":false,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":489,"context_line":"            ceph1\" -H \"Content-Type: application/json\""},{"line_number":490,"context_line":"            -d \u0027{\"method\":{\"name\":\"glance-direct\"}}\u0027"},{"line_number":491,"context_line":"            $image_url/v2/images/{image_id}/import"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_4965ba44","line":490,"range":{"start_line":490,"start_character":50,"end_line":490,"end_character":51},"in_reply_to":"5f7c97a3_90b3fb4d","updated":"2018-06-06 04:20:22.000000000","message":"Ok, will make this change.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"eb01a39df4e726879b439ac742b4c179ee460869","unresolved":false,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        curl -i -X PUT -H \"X-Auth-Token: $token\" -H \"X-Image-Meta-Store:"},{"line_number":489,"context_line":"            ceph1\" -H \"Content-Type: application/json\""},{"line_number":490,"context_line":"            -d \u0027{\"method\":{\"name\":\"glance-direct\"}}\u0027"},{"line_number":491,"context_line":"            $image_url/v2/images/{image_id}/import"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_20c62318","line":490,"range":{"start_line":490,"start_character":50,"end_line":490,"end_character":51},"in_reply_to":"5f7c97a3_e0582bfb","updated":"2018-06-07 16:59:23.000000000","message":"I also inclined towards using headers","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"6fd9350782b5c9a03ef79908bf20c6837c8a786f","unresolved":false,"context_lines":[{"line_number":498,"context_line":"Notifications impact"},{"line_number":499,"context_line":"--------------------"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"Need to add \u0027stores\u0027 field in the notification response as one of the use"},{"line_number":502,"context_line":"case of this proposal is offering different price tiers for storage which"},{"line_number":503,"context_line":"will help systems which consumes notifications to perform the billing."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"Other end user impact"},{"line_number":506,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f7c97a3_d045f316","line":503,"range":{"start_line":501,"start_character":0,"end_line":503,"end_character":70},"updated":"2018-06-06 00:51:22.000000000","message":"Good catch, I did not even think about the importance of the notifications on this.","commit_id":"ce438b7a50265c6cc72aa9b110b05e1902b54031"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"365457014fa1cd4728c2f9ff8441690981889717","unresolved":false,"context_lines":[{"line_number":81,"context_line":" * Additional metadata attribute(s) added to an image locations\u0027 metadata"},{"line_number":82,"context_line":"   properties related to backing stores."},{"line_number":83,"context_line":" * A new REST API to list all configured stores known to the glance service."},{"line_number":84,"context_line":" * A new REST API to get the details about a particular store by its store_id."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"** Config/glance-store changes**"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"5f7c97a3_631bc572","line":84,"range":{"start_line":84,"start_character":3,"end_line":84,"end_character":78},"updated":"2018-06-07 17:15:55.000000000","message":"This needs to be removed as now we have decided against having this api.","commit_id":"1d85b823bd9a192ca91a0671f611c51ba649adf1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"739f85c9a3f4f634b7510712bbf2e6481c2a611b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"NOTE: The list of glance stores is based on the glance-api.conf with respect to"},{"line_number":177,"context_line":"store configuration. Operators will not be able to configure new stores using"},{"line_number":178,"context_line":"the API. So in order to show the description in the response as mentioned"},{"line_number":179,"context_line":"earlier we propose to add new config option \u0027description\u0027 to to each store"},{"line_number":180,"context_line":"with some default description and operator can set it as per their need."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"As discussed herein, the store identifier can be used to address a particular"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f7c97a3_b6415d66","line":179,"range":{"start_line":179,"start_character":58,"end_line":179,"end_character":63},"updated":"2018-06-29 00:57:58.000000000","message":"Repeated \"to\"\u0027s.","commit_id":"a3c5a0525a9f6241162e7f3cfc356ef60f8dd4fd"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"80857a26ebbd90c2b5d5625329fc7cfdaacfb3c3","unresolved":false,"context_lines":[{"line_number":228,"context_line":"download request will traverse through all the configured backends"},{"line_number":229,"context_line":"to look for the image. As we are adding store information in location"},{"line_number":230,"context_line":"metadata, at first it will look the image in the store which is set"},{"line_number":231,"context_line":"in the location metadata. If location metadata is not set then"},{"line_number":232,"context_line":"as per example from the config section above, if the location"},{"line_number":233,"context_line":"is rbd://\u003csomething\u003e, then it will search the image in all available"},{"line_number":234,"context_line":"ceph stores i.e. \u0027fast\u0027 and \u0027cheap\u0027 in this case. This way user will be"},{"line_number":235,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":236,"context_line":"upgraded to use multiple stores."},{"line_number":237,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f7c97a3_555eec51","line":234,"range":{"start_line":231,"start_character":26,"end_line":234,"end_character":49},"updated":"2018-06-27 14:43:37.000000000","message":"I still think we should make the `glance-manage` command for updating the location metadata as part of upgrade to the multiple stores so we get the database to a consistent state.","commit_id":"a3c5a0525a9f6241162e7f3cfc356ef60f8dd4fd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"739f85c9a3f4f634b7510712bbf2e6481c2a611b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"download request will traverse through all the configured backends"},{"line_number":229,"context_line":"to look for the image. As we are adding store information in location"},{"line_number":230,"context_line":"metadata, at first it will look the image in the store which is set"},{"line_number":231,"context_line":"in the location metadata. If location metadata is not set then"},{"line_number":232,"context_line":"as per example from the config section above, if the location"},{"line_number":233,"context_line":"is rbd://\u003csomething\u003e, then it will search the image in all available"},{"line_number":234,"context_line":"ceph stores i.e. \u0027fast\u0027 and \u0027cheap\u0027 in this case. This way user will be"},{"line_number":235,"context_line":"able to download his image from the old store even after cloud is"},{"line_number":236,"context_line":"upgraded to use multiple stores."},{"line_number":237,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f7c97a3_56524937","line":234,"range":{"start_line":231,"start_character":26,"end_line":234,"end_character":49},"in_reply_to":"5f7c97a3_555eec51","updated":"2018-06-29 00:57:58.000000000","message":"That does seem like a good approach to ensure the metadata is available. Maybe not blocking for the current work, but something good to keep as a follow on if time is running short to complete the work this cycle?","commit_id":"a3c5a0525a9f6241162e7f3cfc356ef60f8dd4fd"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"80857a26ebbd90c2b5d5625329fc7cfdaacfb3c3","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"This spec does not propose any changes to the data model. Rather the approach"},{"line_number":331,"context_line":"herein can maintain all new stateful data either in memory or within the"},{"line_number":332,"context_line":"existing schema used by glance."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"REST API impact"},{"line_number":335,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f7c97a3_15415464","line":332,"range":{"start_line":330,"start_character":0,"end_line":332,"end_character":31},"updated":"2018-06-27 14:43:37.000000000","message":"the location data model will change having the store info in there.","commit_id":"a3c5a0525a9f6241162e7f3cfc356ef60f8dd4fd"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"80857a26ebbd90c2b5d5625329fc7cfdaacfb3c3","unresolved":false,"context_lines":[{"line_number":522,"context_line":"Performance Impact"},{"line_number":523,"context_line":"------------------"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"A very little hit on the performance of downloading the image from the old"},{"line_number":526,"context_line":"stores. For example, if existing user is using single rbd (say ceph)"},{"line_number":527,"context_line":"backend and now he has upgraded the environment and introduced two"},{"line_number":528,"context_line":"additional rbd stores as ceph1 and ceph2 with default store as \u0027ceph1\u0027"},{"line_number":529,"context_line":"then if image which needs to be download from old store (ceph) will"},{"line_number":530,"context_line":"take some time as it needs to be looked in all the enabled backends."},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"Other deployer impact"},{"line_number":533,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f7c97a3_353b30eb","line":530,"range":{"start_line":525,"start_character":0,"end_line":530,"end_character":68},"updated":"2018-06-27 14:43:37.000000000","message":"This can be neglegted with the migration updating the locations records.","commit_id":"a3c5a0525a9f6241162e7f3cfc356ef60f8dd4fd"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e575537122f4d0222f908797cfc1f2e36a59289c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"  and use multiple stores of the same or different type/scheme."},{"line_number":74,"context_line":"* Enhance the image upload API to (optionally) support targeting a backend"},{"line_number":75,"context_line":"  store for the image bits."},{"line_number":76,"context_line":"* Enhance image download API to download image from any of the enabled"},{"line_number":77,"context_line":"  backends."},{"line_number":78,"context_line":"* Enhance the image import API to (optionally) support targeting a backend"},{"line_number":79,"context_line":"  store to download the image bits from."}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_c0bbc2bb","line":76,"range":{"start_line":76,"start_character":25,"end_line":76,"end_character":28},"updated":"2018-07-13 22:39:50.000000000","message":"Nit: I think you just mean the download *code* here ... I don\u0027t think we expose anything that allows an API user to pick which store the image is served from?","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"838276aefee9e0e5f28fc81fd5ff42a74bfcd994","unresolved":false,"context_lines":[{"line_number":73,"context_line":"  and use multiple stores of the same or different type/scheme."},{"line_number":74,"context_line":"* Enhance the image upload API to (optionally) support targeting a backend"},{"line_number":75,"context_line":"  store for the image bits."},{"line_number":76,"context_line":"* Enhance image download API to download image from any of the enabled"},{"line_number":77,"context_line":"  backends."},{"line_number":78,"context_line":"* Enhance the image import API to (optionally) support targeting a backend"},{"line_number":79,"context_line":"  store to download the image bits from."}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_15b802e6","line":76,"range":{"start_line":76,"start_character":25,"end_line":76,"end_character":28},"in_reply_to":"5f7c97a3_c0bbc2bb","updated":"2018-07-16 13:39:30.000000000","message":"Done","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e575537122f4d0222f908797cfc1f2e36a59289c","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"**Image download API**"},{"line_number":218,"context_line":"If cloud get upgraded to use multi-store support from the single store"},{"line_number":219,"context_line":"then glance need to deal with the locations from old stores to new"},{"line_number":220,"context_line":"stores. For example, if operator is using rbd (say ceph) backend"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_c03e6225","line":217,"range":{"start_line":217,"start_character":16,"end_line":217,"end_character":20},"updated":"2018-07-13 22:39:50.000000000","message":"Nit: drop the \u0027API\u0027 and just title this \u0027Image download\u0027, since there really is not an API change described here.","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"838276aefee9e0e5f28fc81fd5ff42a74bfcd994","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"More details on this API can be found in the REST API section of this spec."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"**Image download API**"},{"line_number":218,"context_line":"If cloud get upgraded to use multi-store support from the single store"},{"line_number":219,"context_line":"then glance need to deal with the locations from old stores to new"},{"line_number":220,"context_line":"stores. For example, if operator is using rbd (say ceph) backend"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_b5c6ee68","line":217,"range":{"start_line":217,"start_character":16,"end_line":217,"end_character":20},"in_reply_to":"5f7c97a3_c03e6225","updated":"2018-07-16 13:39:30.000000000","message":"Done","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e575537122f4d0222f908797cfc1f2e36a59289c","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"**Per store service**"},{"line_number":298,"context_line":"In the service per store approach, each of the configured store instances would"},{"line_number":299,"context_line":"run as a separate process/service. As a result each service would have it\u0027s"},{"line_number":300,"context_line":"own AMQP/RPC interface, own PID, etc.. To route requests to store services,"},{"line_number":301,"context_line":"we\u0027d use a scheduler which itself is another process / service. This is the"},{"line_number":302,"context_line":"same approach used in cinder multi-backend support."}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_e0227e02","line":299,"range":{"start_line":299,"start_character":71,"end_line":299,"end_character":75},"updated":"2018-07-13 22:39:50.000000000","message":"nit: its","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"838276aefee9e0e5f28fc81fd5ff42a74bfcd994","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"**Per store service**"},{"line_number":298,"context_line":"In the service per store approach, each of the configured store instances would"},{"line_number":299,"context_line":"run as a separate process/service. As a result each service would have it\u0027s"},{"line_number":300,"context_line":"own AMQP/RPC interface, own PID, etc.. To route requests to store services,"},{"line_number":301,"context_line":"we\u0027d use a scheduler which itself is another process / service. This is the"},{"line_number":302,"context_line":"same approach used in cinder multi-backend support."}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_35a09ea4","line":299,"range":{"start_line":299,"start_character":71,"end_line":299,"end_character":75},"in_reply_to":"5f7c97a3_e0227e02","updated":"2018-07-16 13:39:30.000000000","message":"Done","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e575537122f4d0222f908797cfc1f2e36a59289c","unresolved":false,"context_lines":[{"line_number":411,"context_line":"   The value of this header will be a comma-separated list of stores"},{"line_number":412,"context_line":"   available.  For example,"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"   OpenStack-image-store-ids: \"fast\", \"cheap\", \"reliable\""},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"**[Modified API] Upload image binary data**"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_602c2eb2","line":414,"updated":"2018-07-13 22:39:50.000000000","message":"Nit: we should probably be consistent with how this is done for the import-methods, which would be a comma-separated list of unquoted identifiers, so:\n\n  OpenStack-image-store-ids: fast,cheap,reliable","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"838276aefee9e0e5f28fc81fd5ff42a74bfcd994","unresolved":false,"context_lines":[{"line_number":411,"context_line":"   The value of this header will be a comma-separated list of stores"},{"line_number":412,"context_line":"   available.  For example,"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"   OpenStack-image-store-ids: \"fast\", \"cheap\", \"reliable\""},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"**[Modified API] Upload image binary data**"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f7c97a3_f50c6694","line":414,"in_reply_to":"5f7c97a3_602c2eb2","updated":"2018-07-16 13:39:30.000000000","message":"Done","commit_id":"f3f1a35021404c0c2f5aa6d90a3bdffb25259ccb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"717b1b709f55e86917c7680430267b76ebc65572","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Consider the following use cases for providing multi-store backend support:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* Deployer might want to provide different level of costing for different"},{"line_number":25,"context_line":"  tiers of storage, i.e. One backend for    SSDs and another for"},{"line_number":26,"context_line":"  spindles. Customer may choose one of those based on his need."},{"line_number":27,"context_line":"* Old storage is retired and deployer wants to have all new images being"},{"line_number":28,"context_line":"  added to new storage and old storage will be operational until data"}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_f8269622","line":25,"range":{"start_line":25,"start_character":41,"end_line":25,"end_character":44},"updated":"2018-07-16 17:04:27.000000000","message":"Extra spaces if you need to update for any reason, but formatted output takes care of it so it\u0027s really not an issue.","commit_id":"57da144125813dda87acb5966be1e6ed7f007e81"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"717b1b709f55e86917c7680430267b76ebc65572","unresolved":false,"context_lines":[{"line_number":97,"context_line":"The reason for deprecating \u0027default_store\u0027 config option is that glance"},{"line_number":98,"context_line":"verifies the default store at the time of service start and if it is not"},{"line_number":99,"context_line":"one of the listed store (file, http, rbd, swift, cinder, vmware or sheepdog)"},{"line_number":100,"context_line":"then it raises the error and prevents the service from start. This validation"},{"line_number":101,"context_line":"has been done using \u0027choices\u0027 attribute of ConfigOption object itself. After"},{"line_number":102,"context_line":"enabling support of multi-store it\u0027s difficult to have this kind of"},{"line_number":103,"context_line":"validation check using \u0027choices\u0027 attribute will be difficult as"}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_78ffe634","line":100,"range":{"start_line":100,"start_character":55,"end_line":100,"end_character":60},"updated":"2018-07-16 17:04:27.000000000","message":"starting","commit_id":"57da144125813dda87acb5966be1e6ed7f007e81"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d136dcd0928fbea7832824d5d5c2f84c35ef1bbf","unresolved":false,"context_lines":[{"line_number":411,"context_line":"   The value of this header will be a comma-separated list of stores"},{"line_number":412,"context_line":"   available.  For example,"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"   OpenStack-image-store-ids: fast, cheap, reliable"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"**[Modified API] Upload image binary data**"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_b54caec9","line":414,"range":{"start_line":414,"start_character":30,"end_line":414,"end_character":51},"updated":"2018-07-16 13:41:36.000000000","message":"nit: no space after the commas","commit_id":"57da144125813dda87acb5966be1e6ed7f007e81"}]}
