)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5bcd35fc1981e7c41a8fc5faf313bd5728b5e758","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"4. Add command filter for command \u0027qzip\u0027 and \u0027gzip\u0027 in rootwrap"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Depends-On: https://review.opendev.org/#/c/652275/"},{"line_number":32,"context_line":"Change-Id: I8460f58d2ad95a6654cf4d6a6bb367f3c537536b"},{"line_number":33,"context_line":"Implements: blueprint leverage-compression-accelerator"},{"line_number":34,"context_line":"Signed-off-by: Liang Fang \u003cliang.a.fang@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7faddb67_9971a87a","line":31,"updated":"2019-08-28 17:04:21.000000000","message":"Don\u0027t need this here.  If you want to reference the Spec you could just make note of it in the commit message.","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"92b84ac6829b6a4de65c9723ef480ebdf13f6dce","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"4. Add command filter for command \u0027qzip\u0027 and \u0027gzip\u0027 in rootwrap"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Depends-On: https://review.opendev.org/#/c/652275/"},{"line_number":32,"context_line":"Change-Id: I8460f58d2ad95a6654cf4d6a6bb367f3c537536b"},{"line_number":33,"context_line":"Implements: blueprint leverage-compression-accelerator"},{"line_number":34,"context_line":"Signed-off-by: Liang Fang \u003cliang.a.fang@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7faddb67_f5dadb76","line":31,"in_reply_to":"7faddb67_9971a87a","updated":"2019-09-03 08:59:48.000000000","message":"Done","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patch includes:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"1. Introduced a new type of container format - \u0027compressed\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"2. Implemented a simple framework: if there\u0027s an accelerator detected in"},{"line_number":25,"context_line":"system, then try to use it"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3fa7e38b_44bc0369","line":22,"range":{"start_line":22,"start_character":3,"end_line":22,"end_character":59},"updated":"2019-09-17 03:36:51.000000000","message":"It would be more accurate to say:\n\n1. Uses the new image container_format \u0027compressed\u0027 introduced by Glance in the Train release.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patch includes:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"1. Introduced a new type of container format - \u0027compressed\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"2. Implemented a simple framework: if there\u0027s an accelerator detected in"},{"line_number":25,"context_line":"system, then try to use it"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3fa7e38b_3f7d506e","line":22,"range":{"start_line":22,"start_character":3,"end_line":22,"end_character":59},"in_reply_to":"3fa7e38b_44bc0369","updated":"2019-09-17 05:56:07.000000000","message":"Revised.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"}],"cinder/common/config.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"compression_opts \u003d ["},{"line_number":199,"context_line":"    cfg.StrOpt(\u0027default_compression_format\u0027,"},{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               help\u003d\u0027Default compression format\u0027)"},{"line_number":202,"context_line":"]"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_11d622c7","line":200,"updated":"2019-09-09 22:11:04.000000000","message":"would probably be good to define the choices for this (see line 150 for an example)","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"compression_opts \u003d ["},{"line_number":199,"context_line":"    cfg.StrOpt(\u0027default_compression_format\u0027,"},{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               help\u003d\u0027Default compression format\u0027)"},{"line_number":202,"context_line":"]"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_ef4fc8ba","line":200,"in_reply_to":"5faad753_11d622c7","updated":"2019-09-10 15:03:48.000000000","message":"Ok! But currently only gzip is added to choices.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    cfg.StrOpt(\u0027default_compression_format\u0027,"},{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               help\u003d\u0027Default compression format\u0027)"},{"line_number":202,"context_line":"]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"CONF.register_opts(api_opts)"},{"line_number":205,"context_line":"CONF.register_opts(core_opts)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_f439ef40","line":202,"updated":"2019-09-09 22:11:04.000000000","message":"Wasn\u0027t there supposed to be an option for an operator to enable/disable compression [0]?  Leaving this None or empty won\u0027t work because the ImageAccel will raise an uncaught CinderException(\"No valid accelerator\") in that case.\n\n[0] See second bullet point at https://opendev.org/openstack/cinder-specs/src/branch/master/specs/train/leverage-compression-accelerator.rst#proposed-change","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    cfg.StrOpt(\u0027default_compression_format\u0027,"},{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               help\u003d\u0027Default compression format\u0027)"},{"line_number":202,"context_line":"]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"CONF.register_opts(api_opts)"},{"line_number":205,"context_line":"CONF.register_opts(core_opts)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_aff0f068","line":202,"in_reply_to":"5faad753_f439ef40","updated":"2019-09-10 15:03:48.000000000","message":"Thanks! \"compression_strategy\" option is added to enable/disable compression","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"259ab486d0d6dddb533fbf2a12d92fd49a5e7a0c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               choices\u003d[(\u0027gzip\u0027, \u0027GNUzip format\u0027)],"},{"line_number":202,"context_line":"               help\u003d\u0027Image compression format on image upload\u0027),"},{"line_number":203,"context_line":"    cfg.StrOpt(\u0027compression_strategy\u0027,"},{"line_number":204,"context_line":"               default\u003d\u0027disallow_compression_on_image_upload\u0027,"},{"line_number":205,"context_line":"               choices\u003d[(\u0027disallow_compression_on_image_upload\u0027,"},{"line_number":206,"context_line":"                         \u0027Do not allow image compression on image upload. \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_cec0bc2d","line":203,"range":{"start_line":203,"start_character":16,"end_line":203,"end_character":36},"updated":"2019-09-11 05:34:58.000000000","message":"allow_compression_on_image_upload \u003d Yes / No would be better","commit_id":"5803f696cccd5d6c4a057962296d85b3df91d549"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"515a1fecd3fc636ae7ae640ab7cfc490e4245b85","unresolved":false,"context_lines":[{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               choices\u003d[(\u0027gzip\u0027, \u0027GNUzip format\u0027)],"},{"line_number":202,"context_line":"               help\u003d\u0027Image compression format on image upload\u0027),"},{"line_number":203,"context_line":"    cfg.StrOpt(\u0027compression_strategy\u0027,"},{"line_number":204,"context_line":"               default\u003d\u0027disallow_compression_on_image_upload\u0027,"},{"line_number":205,"context_line":"               choices\u003d[(\u0027disallow_compression_on_image_upload\u0027,"},{"line_number":206,"context_line":"                         \u0027Do not allow image compression on image upload. \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_4e704cdd","line":203,"range":{"start_line":203,"start_character":16,"end_line":203,"end_character":36},"in_reply_to":"5faad753_cec0bc2d","updated":"2019-09-11 06:24:05.000000000","message":"Changed to BoolOpt","commit_id":"5803f696cccd5d6c4a057962296d85b3df91d549"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0970d28033d6c7c924c8c3f7962cbc0786dda780","unresolved":false,"context_lines":[{"line_number":198,"context_line":"compression_opts \u003d ["},{"line_number":199,"context_line":"    cfg.StrOpt(\u0027compression_format\u0027,"},{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               choices\u003d[(\u0027gzip\u0027, \u0027GNUzip format\u0027)],"},{"line_number":202,"context_line":"               help\u003d\u0027Image compression format on image upload\u0027),"},{"line_number":203,"context_line":"    cfg.BoolOpt(\u0027allow_compression_on_image_upload\u0027,"},{"line_number":204,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_c812d809","line":201,"updated":"2019-09-12 02:44:29.000000000","message":"I know it seems silly with just one choice, but the advantage is that any other value will raise an exception when the config file is loaded.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":198,"context_line":"compression_opts \u003d ["},{"line_number":199,"context_line":"    cfg.StrOpt(\u0027compression_format\u0027,"},{"line_number":200,"context_line":"               default\u003d\u0027gzip\u0027,"},{"line_number":201,"context_line":"               choices\u003d[(\u0027gzip\u0027, \u0027GNUzip format\u0027)],"},{"line_number":202,"context_line":"               help\u003d\u0027Image compression format on image upload\u0027),"},{"line_number":203,"context_line":"    cfg.BoolOpt(\u0027allow_compression_on_image_upload\u0027,"},{"line_number":204,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_be38f63c","line":201,"in_reply_to":"5faad753_c812d809","updated":"2019-09-13 08:29:58.000000000","message":"Oh yes, I didn\u0027t notice that! A fixed \u0027gzip\u0027 format","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"}],"cinder/image/accelerator.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"6418d87e7918343ebd86baad5af21f403365c6b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":2,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_b5af91e1","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":22},"updated":"2019-07-31 16:24:19.000000000","message":"This shouldn\u0027t be here.","commit_id":"005039b4ac6b976169ee732b46b4e75196938804"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class AccelBase(object):"},{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_86a9767c","line":31,"updated":"2019-09-09 22:11:04.000000000","message":"It looks like this class is defining the interface for AccelGZIP and AccelQAT -- if so, you should make this an abstract base class and mark the methods as abstractmethods","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class AccelBase(object):"},{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_8fbbb470","line":31,"in_reply_to":"5faad753_86a9767c","updated":"2019-09-10 15:03:48.000000000","message":"Done","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def _get_engine(self, *args, **kwargs):"},{"line_number":58,"context_line":"        if not self._accel_engine_path:"},{"line_number":59,"context_line":"            raise exception.CinderException(\"No valid accelerator\")"},{"line_number":60,"context_line":"            return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        for accel in self._accel_engine_path:"},{"line_number":63,"context_line":"            engine_cls \u003d importutils.import_class(accel)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_d4d073cc","line":60,"updated":"2019-09-09 22:11:04.000000000","message":"(1) this is an unreachable statement (same thing at line 69)\n\n(2) note that lines 59 and 68 are raising the same exception with the same message.  So maybe change the condition at line 58 to \"if self._accel_engine_path\", delete lines 59-60, and move the entire \"for\" block at 62-66 into this \"if\" block.  Leave line 68 the way it is, and I think you\u0027ll have the exact same logic but easier to read.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def _get_engine(self, *args, **kwargs):"},{"line_number":58,"context_line":"        if not self._accel_engine_path:"},{"line_number":59,"context_line":"            raise exception.CinderException(\"No valid accelerator\")"},{"line_number":60,"context_line":"            return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        for accel in self._accel_engine_path:"},{"line_number":63,"context_line":"            engine_cls \u003d importutils.import_class(accel)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_6f3bd8ea","line":60,"in_reply_to":"5faad753_d4d073cc","updated":"2019-09-10 15:03:48.000000000","message":"(1) Removed\n(2) Fixed","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import abc"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":"from oslo_utils import importutils"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_242c0301","line":16,"updated":"2019-09-11 16:49:05.000000000","message":"Six should be with this oslo imports in a third party import grouping, then the cinder import should be below that in a local import group.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import abc"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":"from oslo_utils import importutils"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_dfd13acf","line":16,"in_reply_to":"5faad753_242c0301","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0970d28033d6c7c924c8c3f7962cbc0786dda780","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    # The first two bytes of a gzip file are: 1f 8b"},{"line_number":99,"context_line":"    GZIP_MAGIC_NUMBER \u003d \"1f8b\""},{"line_number":100,"context_line":"    with open(image_file) as f:"},{"line_number":101,"context_line":"        return f.read(2).encode(\"hex\") \u003d\u003d GZIP_MAGIC_NUMBER"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_c89c185f","line":101,"updated":"2019-09-12 02:44:29.000000000","message":"This is giving me a problem in py3.7 (UnicodeDecodeError, I think because the default is to read in text mode, and in py3, that\u0027s unicode).\n\nSince you really just want to see the bytes anyway, I suggest doing this:\n\n    GZIP_MAGIC_BYTES \u003d b\u0027\\x1f\\x8b\u0027\n    with open(image_file, \u0027rb\u0027) as f:\n        return f.read(2) \u003d\u003d GZIP_MAGIC_BYTES\n\nThat should work for all python versions.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    # The first two bytes of a gzip file are: 1f 8b"},{"line_number":99,"context_line":"    GZIP_MAGIC_NUMBER \u003d \"1f8b\""},{"line_number":100,"context_line":"    with open(image_file) as f:"},{"line_number":101,"context_line":"        return f.read(2).encode(\"hex\") \u003d\u003d GZIP_MAGIC_NUMBER"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_fec18ee5","line":101,"in_reply_to":"5faad753_c89c185f","updated":"2019-09-13 08:29:58.000000000","message":"Very kind of you.\nFixed it!","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a68d8d6c84d573d7b8b10fcfa7db9b98ff557471","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"_accel_path_list \u003d ["},{"line_number":29,"context_line":"    \u0027cinder.image.accelerators.qat.AccelQAT\u0027,"},{"line_number":30,"context_line":"    \u0027cinder.image.accelerators.gzip.AccelGZIP\u0027,"},{"line_number":31,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_675e3c45","line":28,"updated":"2019-09-14 12:14:17.000000000","message":"The ordering of this list is very important.  Maybe rename to _ACCEL_PATH_PREFERENCE_ORDER_LIST ?","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"631721f99af268d18fb3d9f3146ae6cc4f565d83","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"_accel_path_list \u003d ["},{"line_number":29,"context_line":"    \u0027cinder.image.accelerators.qat.AccelQAT\u0027,"},{"line_number":30,"context_line":"    \u0027cinder.image.accelerators.gzip.AccelGZIP\u0027,"},{"line_number":31,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_1c99d777","line":28,"in_reply_to":"5faad753_675e3c45","updated":"2019-09-15 12:49:04.000000000","message":"Renamed and comment added to explain it.","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"}],"cinder/image/accelerators/gzip.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"6418d87e7918343ebd86baad5af21f403365c6b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":2,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_15a7850d","line":4,"range":{"start_line":1,"start_character":0,"end_line":4,"end_character":1},"updated":"2019-07-31 16:24:19.000000000","message":"This shouldn\u0027t be here.","commit_id":"005039b4ac6b976169ee732b46b4e75196938804"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5bcd35fc1981e7c41a8fc5faf313bd5728b5e758","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def compress_img(self, src, dest, run_as_root):"},{"line_number":37,"context_line":"        srcgz \u003d dest + \u0027.gz\u0027"},{"line_number":38,"context_line":"        gzip_compress_cmd \u003d [\u0027gzip\u0027, \u0027-k\u0027, dest]"},{"line_number":39,"context_line":"        mv_cmd \u003d [\u0027mv\u0027, srcgz, dest]"},{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            utils.execute(*gzip_compress_cmd, run_as_root\u003drun_as_root)"},{"line_number":42,"context_line":"        except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_398bd41e","line":39,"updated":"2019-08-28 17:04:21.000000000","message":"This is very confusing.  You are using the srcgz name to be dest +.gz, but then you move that to dest.  So don\u0027t you end up with an image that doesn\u0027t have .gz on it?","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"92b84ac6829b6a4de65c9723ef480ebdf13f6dce","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def compress_img(self, src, dest, run_as_root):"},{"line_number":37,"context_line":"        srcgz \u003d dest + \u0027.gz\u0027"},{"line_number":38,"context_line":"        gzip_compress_cmd \u003d [\u0027gzip\u0027, \u0027-k\u0027, dest]"},{"line_number":39,"context_line":"        mv_cmd \u003d [\u0027mv\u0027, srcgz, dest]"},{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            utils.execute(*gzip_compress_cmd, run_as_root\u003drun_as_root)"},{"line_number":42,"context_line":"        except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_b7db0be8","line":39,"in_reply_to":"7faddb67_398bd41e","updated":"2019-09-03 08:59:48.000000000","message":"Let me explain it.\nWe do the compression in a middle level between Glance and Cinder. It is transparent to Glance service. And this is through \u0027gzip\u0027 command.\n\nBut while we use \u0027gzip\u0027 to do compression like \u0027gzip -k A\u0027, which means to compress file **A**, file **A.gz** will be produced. And \u0027gzip\u0027 command provide no option to specify the output filename exactly. And Glance service upload file **A**, not file **A.gz**.\n\nWe are not intended to impact previous code for image uploading service. So here we take one more step to remove the suffix.\n\n---\n\nWe have revised these lines to make them more readable.","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5bcd35fc1981e7c41a8fc5faf313bd5728b5e758","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            utils.execute(*gzip_compress_cmd, run_as_root\u003drun_as_root)"},{"line_number":42,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":43,"context_line":"            LOG.error(\"GZIP compression error\")"},{"line_number":44,"context_line":"        try:"},{"line_number":45,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":46,"context_line":"        except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_19ba98e0","line":43,"updated":"2019-08-28 17:04:21.000000000","message":"Not sure that this is very helpful.  Seems that it should also include what the execution error was.","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"92b84ac6829b6a4de65c9723ef480ebdf13f6dce","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            utils.execute(*gzip_compress_cmd, run_as_root\u003drun_as_root)"},{"line_number":42,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":43,"context_line":"            LOG.error(\"GZIP compression error\")"},{"line_number":44,"context_line":"        try:"},{"line_number":45,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":46,"context_line":"        except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_f5109b51","line":43,"in_reply_to":"7faddb67_19ba98e0","updated":"2019-09-03 08:59:48.000000000","message":"Now raise this exception to provide more detailed information.","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        except processutils.ProcessExecutionError as ex:"},{"line_number":43,"context_line":"            ex.description \u003d (\u0027Volume compression failed while uploading \u0027"},{"line_number":44,"context_line":"                              \u0027to glance. GZIP compression command failed.\u0027)"},{"line_number":45,"context_line":"            raise ex"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":48,"context_line":"        except processutils.ProcessExecutionError as ex:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_f6afb791","line":45,"range":{"start_line":45,"start_character":12,"end_line":45,"end_character":20},"updated":"2019-09-09 22:11:04.000000000","message":"Not sure if it matters here, but this will start the stack trace here; if you simply \u0027raise\u0027 with no argument, the stack trace will be from where the exception originated.  (Same thing at lines 50, 60, and 67.)\n\nAlso, I suggest adding a comment here and then moving line 37  and line 39 down before the \u0027try\u0027 at line 46.  The comment would say something like: Gzip compresses a file in-place and adds a .gz extension to the filename, so we rename the compressed file back to the name Cinder expects it to have.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        except processutils.ProcessExecutionError as ex:"},{"line_number":43,"context_line":"            ex.description \u003d (\u0027Volume compression failed while uploading \u0027"},{"line_number":44,"context_line":"                              \u0027to glance. GZIP compression command failed.\u0027)"},{"line_number":45,"context_line":"            raise ex"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":48,"context_line":"        except processutils.ProcessExecutionError as ex:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_0ae7b242","line":45,"range":{"start_line":45,"start_character":12,"end_line":45,"end_character":20},"in_reply_to":"5faad753_f6afb791","updated":"2019-09-10 15:03:48.000000000","message":"We think it will be both okay on \u0027raise\u0027 and \u0027raise ex\u0027. Stack trace will provide enough for debug I think. But still modified to \u0027raise\u0027.\n\nComments added to make it more clear","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":48,"context_line":"        except processutils.ProcessExecutionError as ex:"},{"line_number":49,"context_line":"            ex.description \u003d \"Failed to remove file with suffix .gz\""},{"line_number":50,"context_line":"            raise ex"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def decompress_img(self, src, dest, run_as_root):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_f6eb37ad","line":49,"range":{"start_line":49,"start_character":30,"end_line":49,"end_character":67},"updated":"2019-09-09 22:11:04.000000000","message":"I think you meant \"rename\" here?  The problem isn\u0027t that there\u0027s an extra file left over, it\u0027s that now we have a file that doesn\u0027t have the name that cinder expects it to have.  Since you know what the filename is, it might be worth including its name in the message.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":48,"context_line":"        except processutils.ProcessExecutionError as ex:"},{"line_number":49,"context_line":"            ex.description \u003d \"Failed to remove file with suffix .gz\""},{"line_number":50,"context_line":"            raise ex"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def decompress_img(self, src, dest, run_as_root):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_e066f729","line":49,"range":{"start_line":49,"start_character":30,"end_line":49,"end_character":67},"in_reply_to":"5faad753_f6eb37ad","updated":"2019-09-10 15:03:48.000000000","message":"Thanks! Filename included","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            ex.description \u003d \"Failed to remove file with suffix .gz\""},{"line_number":50,"context_line":"            raise ex"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def decompress_img(self, src, dest, run_as_root):"},{"line_number":53,"context_line":"        gzip_input_filename \u003d src + \u0027.gz\u0027"},{"line_number":54,"context_line":"        mv_cmd \u003d [\u0027mv\u0027, src, gzip_input_filename]"},{"line_number":55,"context_line":"        gzip_decompress_cmd \u003d [\u0027gzip\u0027, \u0027-d\u0027, gzip_input_filename]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_d63abbe5","line":52,"updated":"2019-09-09 22:11:04.000000000","message":"Probably a good idea to add a comment like: Gzip expects a compressed file to have a .gz extension, so we rename the file before calling Gzip.  Gzip will rename the file to its original name (without the extension) automatically.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            ex.description \u003d \"Failed to remove file with suffix .gz\""},{"line_number":50,"context_line":"            raise ex"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def decompress_img(self, src, dest, run_as_root):"},{"line_number":53,"context_line":"        gzip_input_filename \u003d src + \u0027.gz\u0027"},{"line_number":54,"context_line":"        mv_cmd \u003d [\u0027mv\u0027, src, gzip_input_filename]"},{"line_number":55,"context_line":"        gzip_decompress_cmd \u003d [\u0027gzip\u0027, \u0027-d\u0027, gzip_input_filename]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_1b69468a","line":52,"in_reply_to":"5faad753_d63abbe5","updated":"2019-09-10 15:03:48.000000000","message":"Thanks! Comments added.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"259ab486d0d6dddb533fbf2a12d92fd49a5e7a0c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                              \u0027to glance. GZIP compression command failed.\u0027)"},{"line_number":47,"context_line":"            raise"},{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            gzip_output_filename \u003d dest + \u0027.gz\u0027"},{"line_number":50,"context_line":"            mv_cmd \u003d [\u0027mv\u0027, gzip_output_filename, dest]"},{"line_number":51,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":52,"context_line":"        except processutils.ProcessExecutionError as ex:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_5d86c8dd","line":49,"range":{"start_line":49,"start_character":35,"end_line":49,"end_character":39},"updated":"2019-09-11 05:34:58.000000000","message":"src","commit_id":"5803f696cccd5d6c4a057962296d85b3df91d549"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"259ab486d0d6dddb533fbf2a12d92fd49a5e7a0c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    # that it can be accepted by Gzip."},{"line_number":61,"context_line":"    def decompress_img(self, src, dest, run_as_root):"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            gzip_input_filename \u003d src + \u0027.gz\u0027"},{"line_number":64,"context_line":"            mv_cmd \u003d [\u0027mv\u0027, src, gzip_input_filename]"},{"line_number":65,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":66,"context_line":"        except processutils.ProcessExecutionError as ex:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_bde49cad","line":63,"range":{"start_line":63,"start_character":34,"end_line":63,"end_character":37},"updated":"2019-09-11 05:34:58.000000000","message":"dest","commit_id":"5803f696cccd5d6c4a057962296d85b3df91d549"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            gzip_compress_cmd \u003d [\u0027gzip\u0027, \u0027-k\u0027, src]"},{"line_number":47,"context_line":"            utils.execute(*gzip_compress_cmd, run_as_root\u003drun_as_root)"},{"line_number":48,"context_line":"        except processutils.ProcessExecutionError as ex:"},{"line_number":49,"context_line":"            ex.description \u003d (\u0027Volume compression failed while uploading \u0027"},{"line_number":50,"context_line":"                              \u0027to glance. GZIP compression command failed.\u0027)"},{"line_number":51,"context_line":"            raise"},{"line_number":52,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_64e51ba8","line":49,"updated":"2019-09-11 16:49:05.000000000","message":"Kind of seems like we should be raising our own exception that contains the ProcessExecutionError so it\u0027s possible to figure out what the failure is.\n\nAlso, any exception messages that get raised to an end user should be translated with _().","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            gzip_compress_cmd \u003d [\u0027gzip\u0027, \u0027-k\u0027, src]"},{"line_number":47,"context_line":"            utils.execute(*gzip_compress_cmd, run_as_root\u003drun_as_root)"},{"line_number":48,"context_line":"        except processutils.ProcessExecutionError as ex:"},{"line_number":49,"context_line":"            ex.description \u003d (\u0027Volume compression failed while uploading \u0027"},{"line_number":50,"context_line":"                              \u0027to glance. GZIP compression command failed.\u0027)"},{"line_number":51,"context_line":"            raise"},{"line_number":52,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_de95b2e5","line":49,"in_reply_to":"5faad753_64e51ba8","updated":"2019-09-13 08:29:58.000000000","message":"\u003e Kind of seems like we should be raising our own exception that\n \u003e contains the ProcessExecutionError so it\u0027s possible to figure out\n \u003e what the failure is.\n \u003e \n\nSorry but I didn\u0027t get what you mean.. When ProcessExecutionError thrown, we can get detailed failure information in stack trace printout.\nDo you mean that we should implement our exception class inherited from ProcessExecutionError so that the failure information is more specific?\n\n \u003e Also, any exception messages that get raised to an end user should\n \u003e be translated with _().\n\nThanks! Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"810cbd16ec49ae26018312626871da8de6b2a30a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class AccelGZIP(accelerator.AccelBase):"},{"line_number":27,"context_line":"    def is_accel_exist(self):"},{"line_number":28,"context_line":"        cmd \u003d [\u0027which\u0027, \u0027gzip\u0027]"},{"line_number":29,"context_line":"        try:"},{"line_number":30,"context_line":"            utils.execute(*cmd)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_432b72ea","line":27,"updated":"2019-09-18 20:52:01.000000000","message":"It\u0027s almost the same as in  AccelQAT. It would be good to move the common logic into the base class","commit_id":"9073f7591ec398c8825fc82f8dda630c4d8ad3f3"}],"cinder/image/accelerators/qat.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5bcd35fc1981e7c41a8fc5faf313bd5728b5e758","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            utils.execute(*qat_compress_cmd, run_as_root\u003drun_as_root)"},{"line_number":42,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":43,"context_line":"            LOG.error(\"QAT compression error\")"},{"line_number":44,"context_line":"        try:"},{"line_number":45,"context_line":"            utils.execute(*mv_cmd, run_as_root\u003drun_as_root)"},{"line_number":46,"context_line":"        except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_59aa5071","line":43,"updated":"2019-08-28 17:04:21.000000000","message":"Same comments in here as in the other accelerator file.\n\nNeed to report what went wrong to help the end user.  Also, the logic is confusing.  If you are confident it is right maybe a comment on what is happening will help.","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def compress_img(self, src, dest, run_as_root):"},{"line_number":37,"context_line":"        qat_output_filename \u003d dest + \u0027.gz\u0027"},{"line_number":38,"context_line":"        qat_compress_cmd \u003d [\u0027qzip\u0027, \u0027-k\u0027, dest, \u0027-o\u0027, dest]"},{"line_number":39,"context_line":"        mv_cmd \u003d [\u0027mv\u0027, qat_output_filename, dest]"},{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            utils.execute(*qat_compress_cmd, run_as_root\u003drun_as_root)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_19ff2402","line":38,"range":{"start_line":38,"start_character":29,"end_line":38,"end_character":33},"updated":"2019-09-09 22:11:04.000000000","message":"I guess qzip is a drop-in replacement for gzip?  I\u0027d suggest making the same changes as in the other accelerator file so it\u0027s clear what\u0027s going on.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def compress_img(self, src, dest, run_as_root):"},{"line_number":37,"context_line":"        qat_output_filename \u003d dest + \u0027.gz\u0027"},{"line_number":38,"context_line":"        qat_compress_cmd \u003d [\u0027qzip\u0027, \u0027-k\u0027, dest, \u0027-o\u0027, dest]"},{"line_number":39,"context_line":"        mv_cmd \u003d [\u0027mv\u0027, qat_output_filename, dest]"},{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            utils.execute(*qat_compress_cmd, run_as_root\u003drun_as_root)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_fb1b0a18","line":38,"range":{"start_line":38,"start_character":29,"end_line":38,"end_character":33},"in_reply_to":"5faad753_19ff2402","updated":"2019-09-10 15:03:48.000000000","message":"Yes, mostly same with gzip. Revised as gzip file.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"}],"cinder/image/image_utils.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5bcd35fc1981e7c41a8fc5faf313bd5728b5e758","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":621,"context_line":"            LOG.debug(\"COMPRESSED\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":624,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_d9af207b","line":621,"updated":"2019-08-28 17:04:21.000000000","message":"This debug is useless in the real world.  Some context like \u0027Found compressed image type\u0027 would make more sense.","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"92b84ac6829b6a4de65c9723ef480ebdf13f6dce","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":621,"context_line":"            LOG.debug(\"COMPRESSED\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":624,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_15d8d77c","line":621,"in_reply_to":"7faddb67_d9af207b","updated":"2019-09-03 08:59:48.000000000","message":"Done","commit_id":"bdc9a12e55166c817374da36f599138c3d6b3a0c"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"47042235803f1a0fae74b5ddfa784a71bf1e9d40","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        # malicious."},{"line_number":618,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":621,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_aad45ebe","line":620,"updated":"2019-09-10 13:41:56.000000000","message":"Two things about these: (1) \u0027if\u0027 is a statement, not a function call, so put a space after \u0027if\u0027.  (2) You don\u0027t need parentheses around this simple condition that fits on one line.\n\nSame thing at lines 676 and 690.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        # malicious."},{"line_number":618,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":621,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_db92ce4b","line":620,"in_reply_to":"5faad753_aad45ebe","updated":"2019-09-10 15:03:48.000000000","message":"Got it! Fixed.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        # malicious."},{"line_number":618,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":621,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":624,"context_line":"        else:"},{"line_number":625,"context_line":"            LOG.debug(\"%s was %s, converting to %s\","},{"line_number":626,"context_line":"                      image_id, disk_format, volume_format)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_94219b50","line":623,"range":{"start_line":620,"start_character":0,"end_line":623,"end_character":57},"updated":"2019-09-09 22:11:04.000000000","message":"I think these lines should be moved to before the comment at line 611.\n\nAlso, if the \u0027compressed\u0027 image is in a format other than gzip, won\u0027t line 623 raise an exception?  Instead of passing it on, maybe we should raise an ImageUnacceptable exception with reason something like \"Unsupported compressed image format, only gzip is supported\"","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        # malicious."},{"line_number":618,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":621,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":624,"context_line":"        else:"},{"line_number":625,"context_line":"            LOG.debug(\"%s was %s, converting to %s\","},{"line_number":626,"context_line":"                      image_id, disk_format, volume_format)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_3bfa0275","line":623,"range":{"start_line":620,"start_character":0,"end_line":623,"end_character":57},"in_reply_to":"5faad753_94219b50","updated":"2019-09-10 15:03:48.000000000","message":"Lines above moved.\n\nA new function \u0027is_gzip_compressed\u0027 is added in cinder/image/accelerator.py to tell if it is gzip format","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":624,"context_line":"        else:"},{"line_number":625,"context_line":"            LOG.debug(\"%s was %s, converting to %s\","},{"line_number":626,"context_line":"                      image_id, disk_format, volume_format)"},{"line_number":627,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_74517fd8","line":624,"range":{"start_line":624,"start_character":7,"end_line":624,"end_character":13},"updated":"2019-09-09 22:11:04.000000000","message":"I don\u0027t think you want an \u0027else\u0027 here (see the comment at lines 611-617)","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":622,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, dest)"},{"line_number":623,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":624,"context_line":"        else:"},{"line_number":625,"context_line":"            LOG.debug(\"%s was %s, converting to %s\","},{"line_number":626,"context_line":"                      image_id, disk_format, volume_format)"},{"line_number":627,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_1ba86675","line":624,"range":{"start_line":624,"start_character":7,"end_line":624,"end_character":13},"in_reply_to":"5faad753_74517fd8","updated":"2019-09-10 15:03:48.000000000","message":"Done","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":688,"context_line":"                {\u0027f1\u0027: out_format, \u0027f2\u0027: data.file_format})"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":691,"context_line":"            LOG.debug(\"COMPRESSED container_format\")"},{"line_number":692,"context_line":"            accel \u003d accelerator.ImageAccel(volume_path, tmp)"},{"line_number":693,"context_line":"            accel.compress_img(run_as_root\u003drun_as_root)"},{"line_number":694,"context_line":"        with open(tmp, \u0027rb\u0027) as image_file:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_94cbdb51","line":691,"range":{"start_line":691,"start_character":23,"end_line":691,"end_character":50},"updated":"2019-09-09 22:11:04.000000000","message":"A better message might be: \"Detected \u0027compressed\u0027 container_format, compressing image before upload to Glance\"","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":688,"context_line":"                {\u0027f1\u0027: out_format, \u0027f2\u0027: data.file_format})"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":691,"context_line":"            LOG.debug(\"COMPRESSED container_format\")"},{"line_number":692,"context_line":"            accel \u003d accelerator.ImageAccel(volume_path, tmp)"},{"line_number":693,"context_line":"            accel.compress_img(run_as_root\u003drun_as_root)"},{"line_number":694,"context_line":"        with open(tmp, \u0027rb\u0027) as image_file:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_bb2b52e9","line":691,"range":{"start_line":691,"start_character":23,"end_line":691,"end_character":50},"in_reply_to":"5faad753_94cbdb51","updated":"2019-09-10 15:03:48.000000000","message":"Debug information revised.","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5c17932d7cce4033997eb5d0a0d516f578a1a7a0","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":691,"context_line":"            LOG.debug(\"COMPRESSED container_format\")"},{"line_number":692,"context_line":"            accel \u003d accelerator.ImageAccel(volume_path, tmp)"},{"line_number":693,"context_line":"            accel.compress_img(run_as_root\u003drun_as_root)"},{"line_number":694,"context_line":"        with open(tmp, \u0027rb\u0027) as image_file:"},{"line_number":695,"context_line":"            image_service.update(context, image_id, {},"},{"line_number":696,"context_line":"                                 tpool.Proxy(image_file))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_94d0bbf9","line":693,"range":{"start_line":693,"start_character":18,"end_line":693,"end_character":30},"updated":"2019-09-09 22:11:04.000000000","message":"I guess if this fails, there\u0027s nothing useful we can do here? (I\u0027m just asking, I can\u0027t think of anything.)","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"072cba06a1493c94ac3a6ec122776ff84a9222f8","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        if(image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027):"},{"line_number":691,"context_line":"            LOG.debug(\"COMPRESSED container_format\")"},{"line_number":692,"context_line":"            accel \u003d accelerator.ImageAccel(volume_path, tmp)"},{"line_number":693,"context_line":"            accel.compress_img(run_as_root\u003drun_as_root)"},{"line_number":694,"context_line":"        with open(tmp, \u0027rb\u0027) as image_file:"},{"line_number":695,"context_line":"            image_service.update(context, image_id, {},"},{"line_number":696,"context_line":"                                 tpool.Proxy(image_file))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5faad753_1b4b86b0","line":693,"range":{"start_line":693,"start_character":18,"end_line":693,"end_character":30},"in_reply_to":"5faad753_94d0bbf9","updated":"2019-09-10 15:03:48.000000000","message":"If this fails, uploading will fail with stack trace error. We are not doing anything now. I guess we can do some notification thing in horizon?","commit_id":"074c750eb5948d53bc79ec404732fc11786305e8"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"259ab486d0d6dddb533fbf2a12d92fd49a5e7a0c","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                reason\u003d_(\"fmt\u003d%(fmt)s backed by:%(backing_file)s\")"},{"line_number":609,"context_line":"                % {\u0027fmt\u0027: fmt, \u0027backing_file\u0027: backing_file, })"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        # NOTE(ZhengMa): This is used to do image compression on image"},{"line_number":612,"context_line":"        # downloading with \u0027compressed\u0027 container_format. It is a"},{"line_number":613,"context_line":"        # transparent level between original image downloaded from"},{"line_number":614,"context_line":"        # Glance and Cinder image service. So the source file path is"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_8ed64427","line":611,"range":{"start_line":611,"start_character":50,"end_line":611,"end_character":61},"updated":"2019-09-11 05:34:58.000000000","message":"decompression","commit_id":"5803f696cccd5d6c4a057962296d85b3df91d549"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            LOG.error(message)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        raise"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    duration \u003d timeutils.delta_seconds(start_time, timeutils.utcnow())"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    # NOTE(jdg): use a default of 1, mostly for unit test, but in"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_4499ff1c","side":"PARENT","line":282,"updated":"2019-09-11 16:49:05.000000000","message":"Why was this removed?","commit_id":"48f9425d2cdaa2d38f30d77b19115a64ac360c3a"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            LOG.error(message)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        raise"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    duration \u003d timeutils.delta_seconds(start_time, timeutils.utcnow())"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    # NOTE(jdg): use a default of 1, mostly for unit test, but in"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_5f69c988","side":"PARENT","line":282,"in_reply_to":"5faad753_4499ff1c","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"48f9425d2cdaa2d38f30d77b19115a64ac360c3a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0970d28033d6c7c924c8c3f7962cbc0786dda780","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                raise exception.ImageUnacceptable("},{"line_number":620,"context_line":"                    image_id\u003dimage_id,"},{"line_number":621,"context_line":"                    reason\u003d_(\u0027Unsupported compressed image format found. \u0027"},{"line_number":622,"context_line":"                             \u0027Only gzip is supported currently\u0027))"},{"line_number":623,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, tmp)"},{"line_number":624,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":625,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_a8467c7b","line":622,"updated":"2019-09-12 02:44:29.000000000","message":"I think you also need to check CONF.allow_compression_on_image_upload here (the operator may have underpowered nodes and not want the load).  This is another place where it would be nice to detect \u0026 reject the request early (see my comment at line 710).","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                raise exception.ImageUnacceptable("},{"line_number":620,"context_line":"                    image_id\u003dimage_id,"},{"line_number":621,"context_line":"                    reason\u003d_(\u0027Unsupported compressed image format found. \u0027"},{"line_number":622,"context_line":"                             \u0027Only gzip is supported currently\u0027))"},{"line_number":623,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, tmp)"},{"line_number":624,"context_line":"            accel.decompress_img(run_as_root\u003drun_as_root)"},{"line_number":625,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_1d86d567","line":622,"in_reply_to":"5faad753_a8467c7b","updated":"2019-09-13 08:29:58.000000000","message":"Moved this check to API level for image uploading.\nBut for image downloading, I\u0027m not sure if we can get image metadata on API level. So still put the check in \"fetch_to_volume_format\" function in image_utils.py#L547","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0970d28033d6c7c924c8c3f7962cbc0786dda780","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        # NOTE(ZhengMa): This is used to do image compression on image"},{"line_number":699,"context_line":"        # uploading with \u0027compressed\u0027 container_format."},{"line_number":700,"context_line":"        # Compress file \u0027tmp\u0027 in-place"},{"line_number":701,"context_line":"        if image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027:"},{"line_number":702,"context_line":"            allow_image_compression \u003d CONF.allow_compression_on_image_upload"},{"line_number":703,"context_line":"            if allow_image_compression is False:"},{"line_number":704,"context_line":"                compression_param \u003d {\u0027container_format\u0027:"},{"line_number":705,"context_line":"                                     image_meta[\u0027container_format\u0027]}"},{"line_number":706,"context_line":"                raise exception.ImageUnacceptable("},{"line_number":707,"context_line":"                    image_id\u003dimage_id,"},{"line_number":708,"context_line":"                    reason\u003d_(\u0027Image compression upload disallowed, \u0027"},{"line_number":709,"context_line":"                             \u0027but container_format is \u0027"},{"line_number":710,"context_line":"                             \u0027%(container_format)s.\u0027) % compression_param)"},{"line_number":711,"context_line":"            LOG.debug(\u0027Container_format set to \"compressed\", compressing\u0027"},{"line_number":712,"context_line":"                      \u0027image before uploading\u0027)"},{"line_number":713,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, tmp)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_a89f5c01","line":710,"range":{"start_line":701,"start_character":0,"end_line":710,"end_character":74},"updated":"2019-09-12 02:44:29.000000000","message":"This is awfully late in the process to find out that we should fail the upload.  Now that you have added CONF.allow_compression_on_image_upload, maybe this can be checked at the REST API layer when the user\u0027s request is initially received by Cinder?  (Off the top of my head, I don\u0027t know how hard that might be, so take a look and see what you think.)","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"d93675021d559dd5c12345e97a61e5ed26dd6835","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        # NOTE(ZhengMa): This is used to do image compression on image"},{"line_number":699,"context_line":"        # uploading with \u0027compressed\u0027 container_format."},{"line_number":700,"context_line":"        # Compress file \u0027tmp\u0027 in-place"},{"line_number":701,"context_line":"        if image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027:"},{"line_number":702,"context_line":"            allow_image_compression \u003d CONF.allow_compression_on_image_upload"},{"line_number":703,"context_line":"            if allow_image_compression is False:"},{"line_number":704,"context_line":"                compression_param \u003d {\u0027container_format\u0027:"},{"line_number":705,"context_line":"                                     image_meta[\u0027container_format\u0027]}"},{"line_number":706,"context_line":"                raise exception.ImageUnacceptable("},{"line_number":707,"context_line":"                    image_id\u003dimage_id,"},{"line_number":708,"context_line":"                    reason\u003d_(\u0027Image compression upload disallowed, \u0027"},{"line_number":709,"context_line":"                             \u0027but container_format is \u0027"},{"line_number":710,"context_line":"                             \u0027%(container_format)s.\u0027) % compression_param)"},{"line_number":711,"context_line":"            LOG.debug(\u0027Container_format set to \"compressed\", compressing\u0027"},{"line_number":712,"context_line":"                      \u0027image before uploading\u0027)"},{"line_number":713,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, tmp)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_01644bb8","line":710,"range":{"start_line":701,"start_character":0,"end_line":710,"end_character":74},"in_reply_to":"5faad753_a89f5c01","updated":"2019-09-12 05:52:36.000000000","message":"Good idea Rosmaita!!\n\nThis is the top level that can get image metadata(container_format): https://github.com/openstack/cinder/blob/master/cinder/api/contrib/volume_actions.py#L215\nThis function mainly extract image metadata and call volume_api.copy_volume_to_image\n\nBut we\u0027d better to add check here:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/api.py#L1286\nOther checks such as volume status check also happens here.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6ca929deea603f61b9b1f11b2e9fd59a73b45ce7","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        # uploading with \u0027compressed\u0027 container_format."},{"line_number":711,"context_line":"        # Compress file \u0027tmp\u0027 in-place"},{"line_number":712,"context_line":"        if image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027:"},{"line_number":713,"context_line":"            LOG.debug(\u0027Container_format set to \"compressed\", compressing\u0027"},{"line_number":714,"context_line":"                      \u0027image before uploading\u0027)"},{"line_number":715,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, tmp)"},{"line_number":716,"context_line":"            accel.compress_img(run_as_root\u003drun_as_root)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_02541f52","line":713,"updated":"2019-09-13 22:16:24.000000000","message":"Two things here, one a nit and one serious:\n(1) Most messages use single quotes internally (that is, \u0027compressed\u0027 not \"compressed\")\n(2) You need a space before the closing quote to keep the sentence readable when the following line is joined to this string","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"631721f99af268d18fb3d9f3146ae6cc4f565d83","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        # uploading with \u0027compressed\u0027 container_format."},{"line_number":711,"context_line":"        # Compress file \u0027tmp\u0027 in-place"},{"line_number":712,"context_line":"        if image_meta[\u0027container_format\u0027] \u003d\u003d \u0027compressed\u0027:"},{"line_number":713,"context_line":"            LOG.debug(\u0027Container_format set to \"compressed\", compressing\u0027"},{"line_number":714,"context_line":"                      \u0027image before uploading\u0027)"},{"line_number":715,"context_line":"            accel \u003d accelerator.ImageAccel(tmp, tmp)"},{"line_number":716,"context_line":"            accel.compress_img(run_as_root\u003drun_as_root)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_bc076382","line":713,"in_reply_to":"5faad753_02541f52","updated":"2019-09-15 12:49:04.000000000","message":"Fixed.","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        # transparent level between original image downloaded from"},{"line_number":625,"context_line":"        # Glance and Cinder image service. So the source file path is"},{"line_number":626,"context_line":"        # the same with destination file path."},{"line_number":627,"context_line":"        if image_meta.get(\u0027container_format\u0027) \u003d\u003d \u0027compressed\u0027:"},{"line_number":628,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":629,"context_line":"            if not accelerator.is_gzip_compressed(tmp):"},{"line_number":630,"context_line":"                raise exception.ImageUnacceptable("}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_64b7bfda","line":627,"updated":"2019-09-17 03:36:51.000000000","message":"This is a good change.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        # transparent level between original image downloaded from"},{"line_number":625,"context_line":"        # Glance and Cinder image service. So the source file path is"},{"line_number":626,"context_line":"        # the same with destination file path."},{"line_number":627,"context_line":"        if image_meta.get(\u0027container_format\u0027) \u003d\u003d \u0027compressed\u0027:"},{"line_number":628,"context_line":"            LOG.debug(\"Found image with compressed container format\")"},{"line_number":629,"context_line":"            if not accelerator.is_gzip_compressed(tmp):"},{"line_number":630,"context_line":"                raise exception.ImageUnacceptable("}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_5f828c51","line":627,"in_reply_to":"3fa7e38b_64b7bfda","updated":"2019-09-17 05:56:07.000000000","message":"Thanks!","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"}],"cinder/tests/unit/image/accelerators/test_qat_gzip.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder import exception"},{"line_number":18,"context_line":"from cinder.image import accelerator"},{"line_number":19,"context_line":"from cinder import test"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestAccelerators(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_a47793d4","line":20,"updated":"2019-09-11 16:49:05.000000000","message":"Mock should be up above the local cinder imports in its own group.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder import exception"},{"line_number":18,"context_line":"from cinder.image import accelerator"},{"line_number":19,"context_line":"from cinder import test"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestAccelerators(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_abdd1643","line":20,"in_reply_to":"5faad753_a47793d4","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        expected \u003d mock.call(\u0027qzip\u0027, \u0027-k\u0027, dest, \u0027-o\u0027, dest,"},{"line_number":59,"context_line":"                             run_as_root\u003dTrue)"},{"line_number":60,"context_line":"        self.assertFalse(expected in mock_exec.mock_calls)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        expected \u003d ["},{"line_number":63,"context_line":"            mock.call(\u0027gzip\u0027, \u0027-k\u0027, dest,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_043f87d6","line":60,"range":{"start_line":60,"start_character":13,"end_line":60,"end_character":24},"updated":"2019-09-11 16:49:05.000000000","message":"I think you want assert_not_called for this.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        expected \u003d mock.call(\u0027qzip\u0027, \u0027-k\u0027, dest, \u0027-o\u0027, dest,"},{"line_number":59,"context_line":"                             run_as_root\u003dTrue)"},{"line_number":60,"context_line":"        self.assertFalse(expected in mock_exec.mock_calls)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        expected \u003d ["},{"line_number":63,"context_line":"            mock.call(\u0027gzip\u0027, \u0027-k\u0027, dest,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_6be71e14","line":60,"range":{"start_line":60,"start_character":13,"end_line":60,"end_character":24},"in_reply_to":"5faad753_043f87d6","updated":"2019-09-13 08:29:58.000000000","message":"thanks! *assert_not_called* is better","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6ca929deea603f61b9b1f11b2e9fd59a73b45ce7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":23,"context_line":"    @mock.patch(\u0027cinder.image.accelerators.qat.AccelQAT.is_accel_exist\u0027,"},{"line_number":24,"context_line":"                return_value \u003d True)"},{"line_number":25,"context_line":"    def test_compress_img_qat_accel_exist(self, mock_qat_exist, mock_exec):"},{"line_number":26,"context_line":"        source \u003d \u0027fake_path\u0027"},{"line_number":27,"context_line":"        dest \u003d \u0027fake_path\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_9819607b","line":25,"updated":"2019-09-13 22:16:24.000000000","message":"If someone refactors and reorders cider.image.accelerator._accel_path_list alphabetically, this test will fail because the mock for AccelGZIP is \"missing\", which is good.  But I wonder if such a person will realize what that means, or if they\u0027ll just \"fix\" this test so it passes.\n\nI suggest adding the mock for AccelGZIP to return True and then rename the test to something like test_compress_img_prefer_qat_when_available.  Then it should be completely obvious what\u0027s being tested and why when none of us are still working on Cinder.","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"631721f99af268d18fb3d9f3146ae6cc4f565d83","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":23,"context_line":"    @mock.patch(\u0027cinder.image.accelerators.qat.AccelQAT.is_accel_exist\u0027,"},{"line_number":24,"context_line":"                return_value \u003d True)"},{"line_number":25,"context_line":"    def test_compress_img_qat_accel_exist(self, mock_qat_exist, mock_exec):"},{"line_number":26,"context_line":"        source \u003d \u0027fake_path\u0027"},{"line_number":27,"context_line":"        dest \u003d \u0027fake_path\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_fc45dbb4","line":25,"in_reply_to":"5faad753_9819607b","updated":"2019-09-15 12:49:04.000000000","message":"Thanks! Renamed tests and added mock for gzip","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6ca929deea603f61b9b1f11b2e9fd59a73b45ce7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        expected \u003d mock.call(\u0027qzip\u0027, \u0027-k\u0027, dest, \u0027-o\u0027, dest,"},{"line_number":57,"context_line":"                             run_as_root\u003dTrue)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        expected.assert_not_called()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        expected \u003d ["},{"line_number":62,"context_line":"            mock.call(\u0027gzip\u0027, \u0027-k\u0027, dest,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_e5a30d9d","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":36},"updated":"2019-09-13 22:16:24.000000000","message":"This isn\u0027t testing what you intend.  I think you need something like:\n\nself.AssertNotIn(expected, mock_exec.call_args_list)\n\nWhile you\u0027re at it, it might be worth naming the variable \u0027not_called\u0027 instead of \u0027expected\u0027 at line 56 -- will make the test easier to read.","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"631721f99af268d18fb3d9f3146ae6cc4f565d83","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        expected \u003d mock.call(\u0027qzip\u0027, \u0027-k\u0027, dest, \u0027-o\u0027, dest,"},{"line_number":57,"context_line":"                             run_as_root\u003dTrue)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        expected.assert_not_called()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        expected \u003d ["},{"line_number":62,"context_line":"            mock.call(\u0027gzip\u0027, \u0027-k\u0027, dest,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_3cfb7379","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":36},"in_reply_to":"5faad753_e5a30d9d","updated":"2019-09-15 12:49:04.000000000","message":"Thanks! Fixed","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6ca929deea603f61b9b1f11b2e9fd59a73b45ce7","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        expected \u003d mock.call(\u0027qzip\u0027, \u0027-d\u0027, source + \u0027.gz\u0027,"},{"line_number":146,"context_line":"                             run_as_root\u003dTrue)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        expected.assert_not_called()"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        expected \u003d ["},{"line_number":151,"context_line":"            mock.call(\u0027mv\u0027, source, source + \u0027.gz\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_8568191d","line":148,"updated":"2019-09-13 22:16:24.000000000","message":"See my comment at line 59.","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @mock.patch(\u0027cinder.image.accelerators.gzip.AccelGZIP.is_accel_exist\u0027,"},{"line_number":52,"context_line":"                return_value \u003d True)"},{"line_number":53,"context_line":"    # Compress test, QAT not available but GZIP available"},{"line_number":54,"context_line":"    def test_compress_img_prefer_qat_when_not_available(self,"},{"line_number":55,"context_line":"                                                        mock_gzip_exist,"},{"line_number":56,"context_line":"                                                        mock_qat_exist,"},{"line_number":57,"context_line":"                                                        mock_exec):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_a476173e","line":54,"updated":"2019-09-17 03:36:51.000000000","message":"I think the name of this test was OK on the previous test.  This name isn\u0027t so good, because you aren\u0027t preferring the QAT since it isn\u0027t available.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @mock.patch(\u0027cinder.image.accelerators.gzip.AccelGZIP.is_accel_exist\u0027,"},{"line_number":52,"context_line":"                return_value \u003d True)"},{"line_number":53,"context_line":"    # Compress test, QAT not available but GZIP available"},{"line_number":54,"context_line":"    def test_compress_img_prefer_qat_when_not_available(self,"},{"line_number":55,"context_line":"                                                        mock_gzip_exist,"},{"line_number":56,"context_line":"                                                        mock_qat_exist,"},{"line_number":57,"context_line":"                                                        mock_exec):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_ff96d894","line":54,"in_reply_to":"3fa7e38b_a476173e","updated":"2019-09-17 05:56:07.000000000","message":"Changed to previous one.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    @mock.patch(\u0027cinder.image.accelerators.gzip.AccelGZIP.is_accel_exist\u0027,"},{"line_number":150,"context_line":"                return_value \u003d True)"},{"line_number":151,"context_line":"    # Decompress test, QAT not available but GZIP available"},{"line_number":152,"context_line":"    def test_decompress_img_prefer_qat_when_not_available(self,"},{"line_number":153,"context_line":"                                                          mock_gzip_exist,"},{"line_number":154,"context_line":"                                                          mock_qat_exist,"},{"line_number":155,"context_line":"                                                          mock_exec):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_8493db4f","line":152,"updated":"2019-09-17 03:36:51.000000000","message":"I think the old name was better for this one also.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    @mock.patch(\u0027cinder.image.accelerators.gzip.AccelGZIP.is_accel_exist\u0027,"},{"line_number":150,"context_line":"                return_value \u003d True)"},{"line_number":151,"context_line":"    # Decompress test, QAT not available but GZIP available"},{"line_number":152,"context_line":"    def test_decompress_img_prefer_qat_when_not_available(self,"},{"line_number":153,"context_line":"                                                          mock_gzip_exist,"},{"line_number":154,"context_line":"                                                          mock_qat_exist,"},{"line_number":155,"context_line":"                                                          mock_exec):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_df8d1c7c","line":152,"in_reply_to":"3fa7e38b_8493db4f","updated":"2019-09-17 05:56:07.000000000","message":"Done","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"}],"cinder/tests/unit/image/test_accelerator.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cinder.image import accelerator"},{"line_number":18,"context_line":"from cinder import test"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class fakeEngine(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_241ba381","line":19,"updated":"2019-09-11 16:49:05.000000000","message":"Move above in own group.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cinder.image import accelerator"},{"line_number":18,"context_line":"from cinder import test"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class fakeEngine(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_747704d6","line":19,"in_reply_to":"5faad753_241ba381","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"}],"cinder/tests/unit/test_image_utils.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_0418e77e","line":1,"updated":"2019-09-11 16:49:05.000000000","message":"Do not remove existing copyright headers.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":11,"id":"5faad753_3f996e1e","line":1,"in_reply_to":"5faad753_0418e77e","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6ca929deea603f61b9b1f11b2e9fd59a73b45ce7","unresolved":false,"context_lines":[{"line_number":725,"context_line":"              (mock.sentinel.disk_format, mock.sentinel.disk_format, False),"},{"line_number":726,"context_line":"              (\u0027ploop\u0027, \u0027parallels\u0027, True),"},{"line_number":727,"context_line":"              (\u0027ploop\u0027, \u0027parallels\u0027, False))"},{"line_number":728,"context_line":"    @ddt.data((mock.sentinel.container_format, mock.sentinel.container_format),"},{"line_number":729,"context_line":"              (\u0027bare\u0027, \u0027compressed\u0027))"},{"line_number":730,"context_line":"    @mock.patch(\u0027eventlet.tpool.Proxy\u0027)"},{"line_number":731,"context_line":"    @mock.patch(\u0027cinder.image.image_utils.CONF\u0027)"},{"line_number":732,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_1881f0fb","line":729,"range":{"start_line":728,"start_character":0,"end_line":729,"end_character":37},"updated":"2019-09-13 22:16:24.000000000","message":"You\u0027re not using ddt correctly here.  Was the point of changing this test to make sure that there\u0027s a value for image_meta[\u0027container_format\u0027]?  You\u0027re supplying a value at line 744 that does that, and it isn\u0027t actually related to this ddt.data decorator.","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"631721f99af268d18fb3d9f3146ae6cc4f565d83","unresolved":false,"context_lines":[{"line_number":725,"context_line":"              (mock.sentinel.disk_format, mock.sentinel.disk_format, False),"},{"line_number":726,"context_line":"              (\u0027ploop\u0027, \u0027parallels\u0027, True),"},{"line_number":727,"context_line":"              (\u0027ploop\u0027, \u0027parallels\u0027, False))"},{"line_number":728,"context_line":"    @ddt.data((mock.sentinel.container_format, mock.sentinel.container_format),"},{"line_number":729,"context_line":"              (\u0027bare\u0027, \u0027compressed\u0027))"},{"line_number":730,"context_line":"    @mock.patch(\u0027eventlet.tpool.Proxy\u0027)"},{"line_number":731,"context_line":"    @mock.patch(\u0027cinder.image.image_utils.CONF\u0027)"},{"line_number":732,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_10177b47","line":729,"range":{"start_line":728,"start_character":0,"end_line":729,"end_character":37},"in_reply_to":"5faad753_1881f0fb","updated":"2019-09-15 12:49:04.000000000","message":"thanks! lines removed","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"}],"cinder/volume/api.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6ca929deea603f61b9b1f11b2e9fd59a73b45ce7","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"                if allow_compression is False:"},{"line_number":1319,"context_line":"                    compression_param \u003d {\u0027container_format\u0027:"},{"line_number":1320,"context_line":"                                         recv_metadata.get(\u0027container_format\u0027)}"},{"line_number":1321,"context_line":"                    raise exception.ImageUnacceptable("},{"line_number":1322,"context_line":"                        image_id\u003drecv_metadata.get(\u0027id\u0027),"},{"line_number":1323,"context_line":"                        reason\u003d_(\u0027Image compression upload disallowed, \u0027"},{"line_number":1324,"context_line":"                                 \u0027but container_format is \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_780ca4a4","line":1321,"range":{"start_line":1321,"start_character":26,"end_line":1321,"end_character":53},"updated":"2019-09-13 22:16:24.000000000","message":"I\u0027m not sure this is the exception we want to raise -- there isn\u0027t actually an image that we\u0027re using.","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"631721f99af268d18fb3d9f3146ae6cc4f565d83","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"                if allow_compression is False:"},{"line_number":1319,"context_line":"                    compression_param \u003d {\u0027container_format\u0027:"},{"line_number":1320,"context_line":"                                         recv_metadata.get(\u0027container_format\u0027)}"},{"line_number":1321,"context_line":"                    raise exception.ImageUnacceptable("},{"line_number":1322,"context_line":"                        image_id\u003drecv_metadata.get(\u0027id\u0027),"},{"line_number":1323,"context_line":"                        reason\u003d_(\u0027Image compression upload disallowed, \u0027"},{"line_number":1324,"context_line":"                                 \u0027but container_format is \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_1c7b17be","line":1321,"range":{"start_line":1321,"start_character":26,"end_line":1321,"end_character":53},"in_reply_to":"5faad753_780ca4a4","updated":"2019-09-15 12:49:04.000000000","message":"Added a new exception ImageCompressionNotAllowed and raises here","commit_id":"0d8e3adfbf0312a05ea2bb4e0ee3e941aa730091"}],"releasenotes/notes/leverage-compression-accelerator-579c7032290cd1e9.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Leverage compression accelerator"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    A hardware accelerator framework for compression and decompression is"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_3f2c0e98","line":3,"range":{"start_line":2,"start_character":0,"end_line":3,"end_character":36},"updated":"2019-09-11 16:49:05.000000000","message":"The prelude section is for project wide messaging. Remove this.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Leverage compression accelerator"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    A hardware accelerator framework for compression and decompression is"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_342f4ca2","line":3,"range":{"start_line":2,"start_character":0,"end_line":3,"end_character":36},"in_reply_to":"5faad753_3f2c0e98","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    A hardware accelerator framework for compression and decompression is"},{"line_number":7,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":8,"context_line":"    compression of volume and decompression. "},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The identifier ``compressed`` has been added to the list of supported"},{"line_number":11,"context_line":"    container formats.  The intent is that this format identifier will be used"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_df093a2c","line":8,"range":{"start_line":8,"start_character":44,"end_line":8,"end_character":45},"updated":"2019-09-11 16:49:05.000000000","message":"Trailing space","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    A hardware accelerator framework for compression and decompression is"},{"line_number":7,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":8,"context_line":"    compression of volume and decompression. "},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The identifier ``compressed`` has been added to the list of supported"},{"line_number":11,"context_line":"    container formats.  The intent is that this format identifier will be used"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_542a0890","line":8,"range":{"start_line":8,"start_character":44,"end_line":8,"end_character":45},"in_reply_to":"5faad753_df093a2c","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    not otherwise covered by the existing container format identifiers."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    Cinder should be responsible for the actual format of the image file. This"},{"line_number":16,"context_line":"    means Cinder should be able to handle the image created by itself."},{"line_number":17,"context_line":"    "},{"line_number":18,"context_line":"    Further, you should not expect other OpenStack services to be able to"},{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_1f4ef26e","line":16,"range":{"start_line":16,"start_character":52,"end_line":16,"end_character":59},"updated":"2019-09-11 16:49:05.000000000","message":"creation","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    not otherwise covered by the existing container format identifiers."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    Cinder should be responsible for the actual format of the image file. This"},{"line_number":16,"context_line":"    means Cinder should be able to handle the image created by itself."},{"line_number":17,"context_line":"    "},{"line_number":18,"context_line":"    Further, you should not expect other OpenStack services to be able to"},{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_ab41960d","line":16,"range":{"start_line":16,"start_character":52,"end_line":16,"end_character":59},"in_reply_to":"5faad753_1f4ef26e","updated":"2019-09-13 08:29:58.000000000","message":"Since it is explained in the following lines, I think we can remove them.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    Cinder should be responsible for the actual format of the image file. This"},{"line_number":16,"context_line":"    means Cinder should be able to handle the image created by itself."},{"line_number":17,"context_line":"    "},{"line_number":18,"context_line":"    Further, you should not expect other OpenStack services to be able to"},{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"},{"line_number":20,"context_line":"    any services that will consume your image for details."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_5f36aae8","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":4},"updated":"2019-09-11 16:49:05.000000000","message":"Extra spaces.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    Cinder should be responsible for the actual format of the image file. This"},{"line_number":16,"context_line":"    means Cinder should be able to handle the image created by itself."},{"line_number":17,"context_line":"    "},{"line_number":18,"context_line":"    Further, you should not expect other OpenStack services to be able to"},{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"},{"line_number":20,"context_line":"    any services that will consume your image for details."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_b43b3ce9","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":4},"in_reply_to":"5faad753_5f36aae8","updated":"2019-09-13 08:29:58.000000000","message":"Done","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    Further, you should not expect other OpenStack services to be able to"},{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"},{"line_number":20,"context_line":"    any services that will consume your image for details."},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    Two accelerators are implemented under this framework.  One is qzip using"},{"line_number":23,"context_line":"    Intel QAT hardware and another is gzip tool.  Gzip tool is a software"},{"line_number":24,"context_line":"    accelerator used as a fallback in the circumstance that no hardware"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_9faf42e2","line":21,"range":{"start_line":21,"start_character":1,"end_line":21,"end_character":5},"updated":"2019-09-11 16:49:05.000000000","message":"Probably better to make these all one note since they are all part of the same thing.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    Further, you should not expect other OpenStack services to be able to"},{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"},{"line_number":20,"context_line":"    any services that will consume your image for details."},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    Two accelerators are implemented under this framework.  One is qzip using"},{"line_number":23,"context_line":"    Intel QAT hardware and another is gzip tool.  Gzip tool is a software"},{"line_number":24,"context_line":"    accelerator used as a fallback in the circumstance that no hardware"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_6bddde6e","line":21,"range":{"start_line":21,"start_character":1,"end_line":21,"end_character":5},"in_reply_to":"5faad753_9faf42e2","updated":"2019-09-13 08:29:58.000000000","message":"OK","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"},{"line_number":20,"context_line":"    any services that will consume your image for details."},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    Two accelerators are implemented under this framework.  One is qzip using"},{"line_number":23,"context_line":"    Intel QAT hardware and another is gzip tool.  Gzip tool is a software"},{"line_number":24,"context_line":"    accelerator used as a fallback in the circumstance that no hardware"},{"line_number":25,"context_line":"    accelerator is available."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_9f6ae2b0","line":22,"range":{"start_line":22,"start_character":37,"end_line":22,"end_character":57},"updated":"2019-09-11 16:49:05.000000000","message":"What framework? There is no guaranteed ordering in the release note output, so this could be completely out of context with no indication of what this is.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    handle arbitrary compressed file formats.  Consult the documentation of"},{"line_number":20,"context_line":"    any services that will consume your image for details."},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    Two accelerators are implemented under this framework.  One is qzip using"},{"line_number":23,"context_line":"    Intel QAT hardware and another is gzip tool.  Gzip tool is a software"},{"line_number":24,"context_line":"    accelerator used as a fallback in the circumstance that no hardware"},{"line_number":25,"context_line":"    accelerator is available."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_eb054ec3","line":22,"range":{"start_line":22,"start_character":37,"end_line":22,"end_character":57},"in_reply_to":"5faad753_9f6ae2b0","updated":"2019-09-13 08:29:58.000000000","message":"Added few words to explain it.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0cfb97ece4de1c8be07c38aa4af25bd3d2a365e9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    while uploading a Cinder volume to Glance image as well as downloading a"},{"line_number":28,"context_line":"    compressed Glance image to Cinder."},{"line_number":29,"context_line":"issues:"},{"line_number":30,"context_line":"  - |"},{"line_number":31,"context_line":"    The exact format of the compressed file is unspecified.  It is the"},{"line_number":32,"context_line":"    responsibility of the consuming service to analyze the data payload and"},{"line_number":33,"context_line":"    determine the compression format.  A particular OpenStack service may only"},{"line_number":34,"context_line":"    support specific formats.  Thus, even if a service does support the"},{"line_number":35,"context_line":"    ``compressed`` container format, this does not imply that the service can"},{"line_number":36,"context_line":"    handle arbitrary compression formats.  Consult the documentation for the"},{"line_number":37,"context_line":"    service that will consume your image for details."},{"line_number":38,"context_line":"  - |"},{"line_number":39,"context_line":"    As of this release, the only service using the ``compressed`` container"},{"line_number":40,"context_line":"    format is Cinder (Block Storage Service), when Cinder is configured to use"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_ffa8b6db","line":37,"range":{"start_line":30,"start_character":2,"end_line":37,"end_character":53},"updated":"2019-09-11 16:49:05.000000000","message":"I would remove this or just add a some of it to the end of the next note.","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"aa9b790a0280725fbcedf80b29cdf5b9cd60b343","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    while uploading a Cinder volume to Glance image as well as downloading a"},{"line_number":28,"context_line":"    compressed Glance image to Cinder."},{"line_number":29,"context_line":"issues:"},{"line_number":30,"context_line":"  - |"},{"line_number":31,"context_line":"    The exact format of the compressed file is unspecified.  It is the"},{"line_number":32,"context_line":"    responsibility of the consuming service to analyze the data payload and"},{"line_number":33,"context_line":"    determine the compression format.  A particular OpenStack service may only"},{"line_number":34,"context_line":"    support specific formats.  Thus, even if a service does support the"},{"line_number":35,"context_line":"    ``compressed`` container format, this does not imply that the service can"},{"line_number":36,"context_line":"    handle arbitrary compression formats.  Consult the documentation for the"},{"line_number":37,"context_line":"    service that will consume your image for details."},{"line_number":38,"context_line":"  - |"},{"line_number":39,"context_line":"    As of this release, the only service using the ``compressed`` container"},{"line_number":40,"context_line":"    format is Cinder (Block Storage Service), when Cinder is configured to use"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5faad753_8b6ffa90","line":37,"range":{"start_line":30,"start_character":2,"end_line":37,"end_character":53},"in_reply_to":"5faad753_ffa8b6db","updated":"2019-09-13 08:29:58.000000000","message":"Removed","commit_id":"10c4dd8102ef2e7a2c20acf41a75729e9f83cac3"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A hardware accelerator framework for compression and decompression is"},{"line_number":5,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":6,"context_line":"    compression of volume and decompression."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_840afb87","line":4,"range":{"start_line":4,"start_character":41,"end_line":4,"end_character":70},"updated":"2019-09-17 03:36:51.000000000","message":"compression of volumes uploaded to the Image service (Glance) as images and decompression of compressed images used to create volumes","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A hardware accelerator framework for compression and decompression is"},{"line_number":5,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":6,"context_line":"    compression of volume and decompression."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_dfd67cf2","line":4,"range":{"start_line":4,"start_character":41,"end_line":4,"end_character":70},"in_reply_to":"3fa7e38b_840afb87","updated":"2019-09-17 05:56:07.000000000","message":"Revised","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A hardware accelerator framework for compression and decompression is"},{"line_number":5,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":6,"context_line":"    compression of volume and decompression."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The identifier ``compressed`` has been added to the list of supported"},{"line_number":9,"context_line":"    container formats.  The intent is that this format identifier will be used"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_e46baf1c","line":6,"range":{"start_line":5,"start_character":16,"end_line":6,"end_character":44},"updated":"2019-09-17 03:36:51.000000000","message":"I think this is a little misleading.  I think your point that you\u0027ve introduced a general framework to accommodate hardware compression accelerators, but the only accelerator supported in this release is Intel QuickAssist Technology (QAT), which produces a compressed file in gzip format.  Additionally, the framework provides software-based compression if a suitable hardware accelerator is not available.  Because this software fallback could cause performance problems if the Cinder services are not deployed on sufficiently powerful nodes, the default setting is *not* to enable compressed image uploads.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A hardware accelerator framework for compression and decompression is"},{"line_number":5,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":6,"context_line":"    compression of volume and decompression."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The identifier ``compressed`` has been added to the list of supported"},{"line_number":9,"context_line":"    container formats.  The intent is that this format identifier will be used"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_df72fc11","line":6,"range":{"start_line":5,"start_character":16,"end_line":6,"end_character":44},"in_reply_to":"3fa7e38b_e46baf1c","updated":"2019-09-17 05:56:07.000000000","message":"Removed to make it more clear.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":6,"context_line":"    compression of volume and decompression."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The identifier ``compressed`` has been added to the list of supported"},{"line_number":9,"context_line":"    container formats.  The intent is that this format identifier will be used"},{"line_number":10,"context_line":"    for any compressed file archive format (for example, gzip or rar) that is"},{"line_number":11,"context_line":"    not otherwise covered by the existing container format identifiers."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    You should not expect other OpenStack services to be able to handle"},{"line_number":14,"context_line":"    arbitrary compressed file formats.  Consult the documentation of any"},{"line_number":15,"context_line":"    services that will consume your image for details."},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    Two accelerators are implemented under this hardware accelerator framework"},{"line_number":18,"context_line":"    we introdeced."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_84c2fbe8","line":15,"range":{"start_line":8,"start_character":0,"end_line":15,"end_character":54},"updated":"2019-09-17 03:36:51.000000000","message":"These two paragraphs sound more like what you\u0027d say about Glance.  For us, the key points are:\n\nThe compressed image of a volume will be stored in the Image service with the ``container_format`` image property of ``compressed``.  See the `Image service documentation \u003chttps://docs.openstack.org/glance/latest\u003e`_ for more information about this image container format.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    introduced. Any acclerator under this framework can be used to accelerate"},{"line_number":6,"context_line":"    compression of volume and decompression."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The identifier ``compressed`` has been added to the list of supported"},{"line_number":9,"context_line":"    container formats.  The intent is that this format identifier will be used"},{"line_number":10,"context_line":"    for any compressed file archive format (for example, gzip or rar) that is"},{"line_number":11,"context_line":"    not otherwise covered by the existing container format identifiers."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    You should not expect other OpenStack services to be able to handle"},{"line_number":14,"context_line":"    arbitrary compressed file formats.  Consult the documentation of any"},{"line_number":15,"context_line":"    services that will consume your image for details."},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    Two accelerators are implemented under this hardware accelerator framework"},{"line_number":18,"context_line":"    we introdeced."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_ffcfb854","line":15,"range":{"start_line":8,"start_character":0,"end_line":15,"end_character":54},"in_reply_to":"3fa7e38b_84c2fbe8","updated":"2019-09-17 05:56:07.000000000","message":"Revised","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    services that will consume your image for details."},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    Two accelerators are implemented under this hardware accelerator framework"},{"line_number":18,"context_line":"    we introdeced."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    One is qzip using Intel QAT hardware and another is gzip tool.  Gzip tool"},{"line_number":21,"context_line":"    is a software accelerator used as a fallback in the circumstance that no"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_24e9c77f","line":18,"range":{"start_line":18,"start_character":7,"end_line":18,"end_character":17},"updated":"2019-09-17 03:36:51.000000000","message":"introduced","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    services that will consume your image for details."},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    Two accelerators are implemented under this hardware accelerator framework"},{"line_number":18,"context_line":"    we introdeced."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    One is qzip using Intel QAT hardware and another is gzip tool.  Gzip tool"},{"line_number":21,"context_line":"    is a software accelerator used as a fallback in the circumstance that no"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_5feb6caf","line":18,"range":{"start_line":18,"start_character":7,"end_line":18,"end_character":17},"in_reply_to":"3fa7e38b_24e9c77f","updated":"2019-09-17 05:56:07.000000000","message":"Done","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    is a software accelerator used as a fallback in the circumstance that no"},{"line_number":22,"context_line":"    hardware accelerator is available."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    As of this release, acclerators are used by Cinder to do compression"},{"line_number":25,"context_line":"    while uploading a Cinder volume to Glance image as well as downloading a"},{"line_number":26,"context_line":"    compressed Glance image to Cinder."},{"line_number":27,"context_line":"issues:"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_c4f9d34d","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":35},"updated":"2019-09-17 03:36:51.000000000","message":"accelerators","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    is a software accelerator used as a fallback in the circumstance that no"},{"line_number":22,"context_line":"    hardware accelerator is available."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    As of this release, acclerators are used by Cinder to do compression"},{"line_number":25,"context_line":"    while uploading a Cinder volume to Glance image as well as downloading a"},{"line_number":26,"context_line":"    compressed Glance image to Cinder."},{"line_number":27,"context_line":"issues:"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_3fe6b0ea","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":35},"in_reply_to":"3fa7e38b_c4f9d34d","updated":"2019-09-17 05:56:07.000000000","message":"Done","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    As of this release, acclerators are used by Cinder to do compression"},{"line_number":25,"context_line":"    while uploading a Cinder volume to Glance image as well as downloading a"},{"line_number":26,"context_line":"    compressed Glance image to Cinder."},{"line_number":27,"context_line":"issues:"},{"line_number":28,"context_line":"  - |"},{"line_number":29,"context_line":"    As of this release, the only service using the ``compressed`` container"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_c48eb3cf","line":26,"updated":"2019-09-17 03:36:51.000000000","message":"Please add an \"upgrade\" section that names the 2 configuration options you\u0027ve introduced.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    As of this release, acclerators are used by Cinder to do compression"},{"line_number":25,"context_line":"    while uploading a Cinder volume to Glance image as well as downloading a"},{"line_number":26,"context_line":"    compressed Glance image to Cinder."},{"line_number":27,"context_line":"issues:"},{"line_number":28,"context_line":"  - |"},{"line_number":29,"context_line":"    As of this release, the only service using the ``compressed`` container"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_9fe1e4d3","line":26,"in_reply_to":"3fa7e38b_c48eb3cf","updated":"2019-09-17 05:56:07.000000000","message":"\"upgrade\" section added","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    compressed Glance image to Cinder."},{"line_number":27,"context_line":"issues:"},{"line_number":28,"context_line":"  - |"},{"line_number":29,"context_line":"    As of this release, the only service using the ``compressed`` container"},{"line_number":30,"context_line":"    format is Cinder (Block Storage Service), when Cinder is configured to use"},{"line_number":31,"context_line":"    compression when uploading a volume-image to Glance.  While you may expect"},{"line_number":32,"context_line":"    that Cinder will be able to consume any image in ``compressed`` container"},{"line_number":33,"context_line":"    format *that Cinder has created*, you should not expect Cinder to be able"},{"line_number":34,"context_line":"    to successfully use an image in ``compressed`` format that it has not"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_0485abad","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":56},"updated":"2019-09-17 03:36:51.000000000","message":"This also sounds like more of a Glance concern.  I think the point you want to make here is:\n\nIn the Image service, the ``compressed`` container format identifier does not indicate a particular compression technology; it is up to the image consumer to determine what compression has been used, and there is no requirement that OpenStack services must support arbitrary compression technologies.  For the upload and download of compressed images, Cinder supports *only* the gzip format.","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    compressed Glance image to Cinder."},{"line_number":27,"context_line":"issues:"},{"line_number":28,"context_line":"  - |"},{"line_number":29,"context_line":"    As of this release, the only service using the ``compressed`` container"},{"line_number":30,"context_line":"    format is Cinder (Block Storage Service), when Cinder is configured to use"},{"line_number":31,"context_line":"    compression when uploading a volume-image to Glance.  While you may expect"},{"line_number":32,"context_line":"    that Cinder will be able to consume any image in ``compressed`` container"},{"line_number":33,"context_line":"    format *that Cinder has created*, you should not expect Cinder to be able"},{"line_number":34,"context_line":"    to successfully use an image in ``compressed`` format that it has not"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_dfc19c30","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":56},"in_reply_to":"3fa7e38b_0485abad","updated":"2019-09-17 05:56:07.000000000","message":"Revised","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6b9674e6baa6385db7a11ac3bf279b13d59767b2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    that Cinder will be able to consume any image in ``compressed`` container"},{"line_number":33,"context_line":"    format *that Cinder has created*, you should not expect Cinder to be able"},{"line_number":34,"context_line":"    to successfully use an image in ``compressed`` format that it has not"},{"line_number":35,"context_line":"    created itself.  Consult the `Cinder documentation"},{"line_number":36,"context_line":"    \u003chttps://docs.openstack.org/cinder/latest\u003e`_"},{"line_number":37,"context_line":"    for more information."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_a4fcd73e","line":37,"range":{"start_line":35,"start_character":19,"end_line":37,"end_character":25},"updated":"2019-09-17 03:36:51.000000000","message":"probably don\u0027t need this","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"84e808135b11bcd8566363887db842c751932847","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    that Cinder will be able to consume any image in ``compressed`` container"},{"line_number":33,"context_line":"    format *that Cinder has created*, you should not expect Cinder to be able"},{"line_number":34,"context_line":"    to successfully use an image in ``compressed`` format that it has not"},{"line_number":35,"context_line":"    created itself.  Consult the `Cinder documentation"},{"line_number":36,"context_line":"    \u003chttps://docs.openstack.org/cinder/latest\u003e`_"},{"line_number":37,"context_line":"    for more information."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3fa7e38b_1fc89453","line":37,"range":{"start_line":35,"start_character":19,"end_line":37,"end_character":25},"in_reply_to":"3fa7e38b_a4fcd73e","updated":"2019-09-17 05:56:07.000000000","message":"Removed","commit_id":"c99d3f82a062f83bd133800b5109c9629f9f2c4b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c74906521fe4a0f82d674bb8fead2bd386dc6c0a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A general framework to accommodate hardware compression accelerators for"},{"line_number":5,"context_line":"    compression of volumes uploaded to the Image service (Glance) as images"},{"line_number":6,"context_line":"    and and decompression of compressed images used to create volumes is"},{"line_number":7,"context_line":"    introduced."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The only accelerator supported in this release is Intel QuickAssist"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_ea5ff10b","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":11},"updated":"2019-09-17 13:28:56.000000000","message":"duplicate \u0027and\u0027","commit_id":"ae8b9032ddbc2688a6d60aa95f1770747ab00c8a"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"b82d7f5888244bdeab6573f01103b7fd5e07e405","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A general framework to accommodate hardware compression accelerators for"},{"line_number":5,"context_line":"    compression of volumes uploaded to the Image service (Glance) as images"},{"line_number":6,"context_line":"    and and decompression of compressed images used to create volumes is"},{"line_number":7,"context_line":"    introduced."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The only accelerator supported in this release is Intel QuickAssist"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_422141b4","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":11},"in_reply_to":"3fa7e38b_ea5ff10b","updated":"2019-09-18 01:06:12.000000000","message":"Done","commit_id":"ae8b9032ddbc2688a6d60aa95f1770747ab00c8a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"92f4db0363bcfb5ed04cf75d9fe9b2bd9739f649","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    GUNzip tool if a suitable hardware accelerator is not available."},{"line_number":13,"context_line":"    Because this software fallback could cause performance problems if the"},{"line_number":14,"context_line":"    Cinder services are not deployed on sufficiently powerful nodes, the"},{"line_number":15,"context_line":"    default setting is *not* to enable compressed image uploads."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    The compressed image of a volume will be stored in the"},{"line_number":18,"context_line":"    Image service (Glance) with the ``container_format`` image property of"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_cb49d760","line":15,"range":{"start_line":15,"start_character":32,"end_line":15,"end_character":63},"updated":"2019-09-17 15:20:29.000000000","message":"I suggest changing this to: \"enable compression on image upload or download\" so it\u0027s completely clear.","commit_id":"ae8b9032ddbc2688a6d60aa95f1770747ab00c8a"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"b82d7f5888244bdeab6573f01103b7fd5e07e405","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    GUNzip tool if a suitable hardware accelerator is not available."},{"line_number":13,"context_line":"    Because this software fallback could cause performance problems if the"},{"line_number":14,"context_line":"    Cinder services are not deployed on sufficiently powerful nodes, the"},{"line_number":15,"context_line":"    default setting is *not* to enable compressed image uploads."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    The compressed image of a volume will be stored in the"},{"line_number":18,"context_line":"    Image service (Glance) with the ``container_format`` image property of"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_c21e916f","line":15,"range":{"start_line":15,"start_character":32,"end_line":15,"end_character":63},"in_reply_to":"3fa7e38b_cb49d760","updated":"2019-09-18 01:06:12.000000000","message":"Done","commit_id":"ae8b9032ddbc2688a6d60aa95f1770747ab00c8a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c74906521fe4a0f82d674bb8fead2bd386dc6c0a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"upgrade:"},{"line_number":36,"context_line":"  - |"},{"line_number":37,"context_line":"    Added string config option ``compression_format`` in [default] section of"},{"line_number":38,"context_line":"    cinder.conf to specify image compression format. The default value of this"},{"line_number":39,"context_line":"    option is ``gzip``."},{"line_number":40,"context_line":"  - |"},{"line_number":41,"context_line":"    Added boolean config option ``allow_compression_on_image_upload`` in"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_2ad98982","line":38,"range":{"start_line":38,"start_character":53,"end_line":38,"end_character":73},"updated":"2019-09-17 13:28:56.000000000","message":"I suggest replacing this with \"Currently, the only legal value for\"","commit_id":"ae8b9032ddbc2688a6d60aa95f1770747ab00c8a"},{"author":{"_account_id":30648,"name":"ZhengMa","email":"zheng.ma@intel.com","username":"ZhengMa"},"change_message_id":"b82d7f5888244bdeab6573f01103b7fd5e07e405","unresolved":false,"context_lines":[{"line_number":35,"context_line":"upgrade:"},{"line_number":36,"context_line":"  - |"},{"line_number":37,"context_line":"    Added string config option ``compression_format`` in [default] section of"},{"line_number":38,"context_line":"    cinder.conf to specify image compression format. The default value of this"},{"line_number":39,"context_line":"    option is ``gzip``."},{"line_number":40,"context_line":"  - |"},{"line_number":41,"context_line":"    Added boolean config option ``allow_compression_on_image_upload`` in"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_62131d68","line":38,"range":{"start_line":38,"start_character":53,"end_line":38,"end_character":73},"in_reply_to":"3fa7e38b_2ad98982","updated":"2019-09-18 01:06:12.000000000","message":"Done","commit_id":"ae8b9032ddbc2688a6d60aa95f1770747ab00c8a"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"7a22df89b7bba9b688e32398567f0c239717c093","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    The only accelerator supported in this release is Intel QuickAssist"},{"line_number":10,"context_line":"    Technology (QAT), which produces a compressed file in gzip format."},{"line_number":11,"context_line":"    Refer to this `Cinder documentation"},{"line_number":12,"context_line":"    \u003chttps://docs.openstack.org/cinder/latest/admin/blockstorage-accelerate-image-compression.html\u003e`_"},{"line_number":13,"context_line":"    for more information about using this feature."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    Additionally, the framework provides software-based compression using"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3fa7e38b_6b4a1928","line":12,"range":{"start_line":12,"start_character":5,"end_line":12,"end_character":98},"updated":"2019-09-18 03:36:29.000000000","message":"Thanks Rosmaita for the guidance, the related doc page is created in patch: https://review.opendev.org/#/c/682780/","commit_id":"9073f7591ec398c8825fc82f8dda630c4d8ad3f3"}]}
