)]}'
{"glance/store/__init__.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"ce6180a52e0446d308cfb0a4d0b00f6b873a96af","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    \"\"\""},{"line_number":199,"context_line":"    Given a scheme, return the appropriate store object"},{"line_number":200,"context_line":"    for handling that scheme."},{"line_number":201,"context_line":"    \"\"\""},{"line_number":202,"context_line":"    if scheme not in location.SCHEME_TO_CLS_MAP:"},{"line_number":203,"context_line":"        raise exception.UnknownScheme(scheme\u003dscheme)"},{"line_number":204,"context_line":"    scheme_info \u003d location.SCHEME_TO_CLS_MAP[scheme]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BLU0%3D","line":201,"updated":"2013-11-29 17:17:21.000000000","message":"The dict location.SCHEME_TO_CLS_MAP is filled when starting the Glance API service. So that means admin/deployer may have to restart glance api service to support a new backend. Please correct me if I missed anything.","commit_id":"3523fcbf4bc6d8ed5dc5f5bd931bd1633c09a1fe"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"59ec758f5392a2b0b2eaefa2bebba598d1f60730","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"def get_from_backend(context, uri, **kwargs):"},{"line_number":222,"context_line":"    \"\"\"Yields chunks of data from backend specified by uri\"\"\""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    loc \u003d location.get_location_from_uri(uri)"},{"line_number":225,"context_line":"    store \u003d get_store_from_uri(context, uri, loc)"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BMj8%3D","line":223,"updated":"2013-11-29 10:42:27.000000000","message":"This change can affect existing image download.","commit_id":"3523fcbf4bc6d8ed5dc5f5bd931bd1633c09a1fe"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"59ec758f5392a2b0b2eaefa2bebba598d1f60730","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def delete_from_backend(context, uri, **kwargs):"},{"line_number":243,"context_line":"    \"\"\"Removes chunks of data from backend specified by uri\"\"\""},{"line_number":244,"context_line":"    loc \u003d location.get_location_from_uri(uri)"},{"line_number":245,"context_line":"    store \u003d get_store_from_uri(context, uri, loc)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BMkk%3D","line":244,"updated":"2013-11-29 10:42:27.000000000","message":"and it can affect existing image deletion, including delay deletion (scrubber). I\u0027m not sure this change is safe, or says current implementation is complete TBH.","commit_id":"3523fcbf4bc6d8ed5dc5f5bd931bd1633c09a1fe"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"09b8841610a29e41dc8bfa949ee1f9bbf943a591","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def delete_from_backend(context, uri, **kwargs):"},{"line_number":243,"context_line":"    \"\"\"Removes chunks of data from backend specified by uri\"\"\""},{"line_number":244,"context_line":"    loc \u003d location.get_location_from_uri(uri)"},{"line_number":245,"context_line":"    store \u003d get_store_from_uri(context, uri, loc)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BLhE%3D","line":244,"in_reply_to":"AAAATn%2F%2BMKM%3D","updated":"2013-11-29 16:53:07.000000000","message":"I mean this function can break current deletion and download handling on the existing images which using disabled store schema.\n\nI\u0027m not sure you see this as a limitation or an issue, if you think it\u0027s a limitation then I think it\u0027s a little unreasonable from end user\u0027s POV, IMHO we\u0027d better return a reasonable/suitable error to end user, that concerns adding some exception catching + transformation handling in this change. For example: when user try to download an image which has only one location with a disable store/schema, under current logic, [1] will raise an “exception.UnknownScheme” exception to API layer [2] and finally an empty image content be returned to end user (and a UnknownScheme related failure message be wrote to glance log), but IMHO we\u0027d better tell user a worth message, at least only return an empty content without a message to end user, when he download an active status image is not reasonable I consider.\n\n[1] https://github.com/openstack/glance/blob/master/glance/store/__init__.py#L668\n[2] https://github.com/openstack/glance/blob/master/glance/api/v2/image_data.py#L163\n\nTBH maybe you think my thinking is overkill to your this change, but from end user\u0027s POV, I really think it\u0027s an necessary part to make this change be complete. A dedicated patch(s) to cover above my concerns is work to me, for now I just explaining what\u0027s means here for my above comments. In sort, I think personally what we did in this change for glance support store driver enabling/disabling is not complete/enough.","commit_id":"3523fcbf4bc6d8ed5dc5f5bd931bd1633c09a1fe"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"4c5fb026cd8d0bab32ec5a2d5c4a18894c0f1f71","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def delete_from_backend(context, uri, **kwargs):"},{"line_number":243,"context_line":"    \"\"\"Removes chunks of data from backend specified by uri\"\"\""},{"line_number":244,"context_line":"    loc \u003d location.get_location_from_uri(uri)"},{"line_number":245,"context_line":"    store \u003d get_store_from_uri(context, uri, loc)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BMKM%3D","line":244,"in_reply_to":"AAAATn%2F%2BMkk%3D","updated":"2013-11-29 12:59:49.000000000","message":"TBH, I\u0027m not sure what you mean, it\u0027s all about enabling / disabling the default stores. If there are users that have swift enabled, they just have to leave it in the list of known_host.\n\nWhat\u0027s unsafe about this change?","commit_id":"3523fcbf4bc6d8ed5dc5f5bd931bd1633c09a1fe"},{"author":{"_account_id":9209,"name":"Lin Cai","email":"reachlin@gmail.com","username":"reachlin"},"change_message_id":"0dfc645b8b5ad049619373f466671814ca095a5c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.ListOpt(\u0027known_stores\u0027,"},{"line_number":36,"context_line":"                default\u003d["},{"line_number":37,"context_line":"                    \u0027glance.store.filesystem.Store\u0027,"},{"line_number":38,"context_line":"                    \u0027glance.store.http.Store\u0027,"},{"line_number":39,"context_line":"                ],"},{"line_number":40,"context_line":"                help\u003d_(\u0027List of which store classes and store class locations \u0027"},{"line_number":41,"context_line":"                       \u0027are currently known to glance at startup.\u0027)),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fzw4%3D","line":38,"updated":"2014-01-08 07:43:48.000000000","message":"It\u0027s better to remove the extra comma at the last element.","commit_id":"7e8064e3f487e10e0fb3e44299685af035845cb0"}],"glance/tests/unit/test_store_location.py":[{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"78bb85c5f93f9bf526d26ecc988660909ac66465","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.config(default_store\u003d\u0027file\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        # NOTE(flaper87): Each store should test"},{"line_number":35,"context_line":"        # this in their test suit."},{"line_number":36,"context_line":"        self.config(known_stores\u003d["},{"line_number":37,"context_line":"            \"glance.store.filesystem.Store\","},{"line_number":38,"context_line":"            \"glance.store.http.Store\","}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FJ4k%3D","line":35,"updated":"2014-03-08 01:58:54.000000000","message":"typo: test suite :)","commit_id":"077d1cfda962802ee0e52998cd2fdcbbc45240f7"}],"glance/tests/unit/test_vmware_store.py":[{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"78bb85c5f93f9bf526d26ecc988660909ac66465","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.config(default_store\u003d\u0027file\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # NOTE(flaper87): Each store should test"},{"line_number":88,"context_line":"        # this in their test suit."},{"line_number":89,"context_line":"        self.config(known_stores\u003d["},{"line_number":90,"context_line":"            \"glance.store.filesystem.Store\","}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FJ3g%3D","line":87,"updated":"2014-03-08 01:58:54.000000000","message":"ditto suite","commit_id":"077d1cfda962802ee0e52998cd2fdcbbc45240f7"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"78bb85c5f93f9bf526d26ecc988660909ac66465","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.config(default_store\u003d\u0027file\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # NOTE(flaper87): Each store should test"},{"line_number":88,"context_line":"        # this in their test suit."},{"line_number":89,"context_line":"        self.config(known_stores\u003d["},{"line_number":90,"context_line":"            \"glance.store.filesystem.Store\","},{"line_number":91,"context_line":"            \"glance.store.http.Store\","}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2FJ4M%3D","line":88,"updated":"2014-03-08 01:58:54.000000000","message":"why do you need to add this? \nbased on line #39, it should be OK no?","commit_id":"077d1cfda962802ee0e52998cd2fdcbbc45240f7"}]}
