)]}'
{"cinder/backup/drivers/s3.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from oslo_config import cfg"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from cinder import interface"},{"line_number":4,"context_line":"from cinder.backup import chunkeddriver"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_6d48d4cb","line":1,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from oslo_config import cfg"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from cinder import interface"},{"line_number":4,"context_line":"from cinder.backup import chunkeddriver"},{"line_number":5,"context_line":"import boto3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"from botocore.exceptions import ClientError"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_4d4350b0","line":4,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.interface, cinder.backup.chunkeddriver)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from cinder import interface"},{"line_number":4,"context_line":"from cinder.backup import chunkeddriver"},{"line_number":5,"context_line":"import boto3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"from botocore.exceptions import ClientError"},{"line_number":8,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ad130cb8","line":5,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.backup.chunkeddriver, boto3)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from cinder import interface"},{"line_number":4,"context_line":"from cinder.backup import chunkeddriver"},{"line_number":5,"context_line":"import boto3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"from botocore.exceptions import ClientError"},{"line_number":8,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8d1608a7","line":5,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import boto3\u0027 should be before \u0027from cinder.backup import chunkeddriver\u0027 and in a different group.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from cinder import interface"},{"line_number":4,"context_line":"from cinder.backup import chunkeddriver"},{"line_number":5,"context_line":"import boto3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"from botocore.exceptions import ClientError"},{"line_number":8,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ed0d0491","line":5,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import boto3\u0027 is identified as Third Party and \u0027from cinder.backup import chunkeddriver\u0027 is identified as Application.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"from cinder.backup import chunkeddriver"},{"line_number":5,"context_line":"import boto3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"from botocore.exceptions import ClientError"},{"line_number":8,"context_line":"import hashlib"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"from oslo_utils import timeutils"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_cd1000ac","line":7,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I202 Additional newline in a group of imports. \u0027from botocore.exceptions import ClientError\u0027 is identified as Third Party and \u0027import boto3\u0027 is identified as Third Party.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"import boto3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"from botocore.exceptions import ClientError"},{"line_number":8,"context_line":"import hashlib"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"from oslo_utils import timeutils"},{"line_number":11,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_2d27fc14","line":8,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import hashlib\u0027 should be before \u0027from botocore.exceptions import ClientError\u0027 and in a different group.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"import boto3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"from botocore.exceptions import ClientError"},{"line_number":8,"context_line":"import hashlib"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"from oslo_utils import timeutils"},{"line_number":11,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_0d22f801","line":8,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import hashlib\u0027 is identified as Stdlib and \u0027from botocore.exceptions import ClientError\u0027 is identified as Third Party.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":8,"context_line":"import hashlib"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"from oslo_utils import timeutils"},{"line_number":11,"context_line":"from oslo_log import log as logging"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_6d21f4fb","line":11,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (oslo_utils.timeutils, oslo_log.log)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            self.s3.head_bucket(Bucket\u003dcontainer)"},{"line_number":77,"context_line":"        except ClientError:"},{"line_number":78,"context_line":"            print(container)"},{"line_number":79,"context_line":"            self.s3.create_bucket(Bucket\u003dcontainer)"},{"line_number":80,"context_line":"        return"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_4d1cf0c0","line":78,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: C303: print() should not be used. Please use LOG.[info|error|warning|exception|debug]. If print() must be used, use \u0027# noqa\u0027 to skip this check.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            pass"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        def read(self):"},{"line_number":171,"context_line":"            print(self.container)"},{"line_number":172,"context_line":"            print(self.object_name)"},{"line_number":173,"context_line":"            response \u003d self.s3.get_object(Bucket\u003dself.container,"},{"line_number":174,"context_line":"                                          Key\u003dself.object_name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ad782cf8","line":171,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: C303: print() should not be used. Please use LOG.[info|error|warning|exception|debug]. If print() must be used, use \u0027# noqa\u0027 to skip this check.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        def read(self):"},{"line_number":171,"context_line":"            print(self.container)"},{"line_number":172,"context_line":"            print(self.object_name)"},{"line_number":173,"context_line":"            response \u003d self.s3.get_object(Bucket\u003dself.container,"},{"line_number":174,"context_line":"                                          Key\u003dself.object_name,"},{"line_number":175,"context_line":"                                          SSECustomerKey\u003dCONF.backup_sse_customer_key,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8d7ba8f2","line":172,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: C303: print() should not be used. Please use LOG.[info|error|warning|exception|debug]. If print() must be used, use \u0027# noqa\u0027 to skip this check.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            print(self.object_name)"},{"line_number":173,"context_line":"            response \u003d self.s3.get_object(Bucket\u003dself.container,"},{"line_number":174,"context_line":"                                          Key\u003dself.object_name,"},{"line_number":175,"context_line":"                                          SSECustomerKey\u003dCONF.backup_sse_customer_key,"},{"line_number":176,"context_line":"                                          SSECustomerAlgorithm\u003dCONF.backup_sse_customer_algorithm)"},{"line_number":177,"context_line":"            return response[\u0027Body\u0027].read()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ed8224c8","line":175,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            response \u003d self.s3.get_object(Bucket\u003dself.container,"},{"line_number":174,"context_line":"                                          Key\u003dself.object_name,"},{"line_number":175,"context_line":"                                          SSECustomerKey\u003dCONF.backup_sse_customer_key,"},{"line_number":176,"context_line":"                                          SSECustomerAlgorithm\u003dCONF.backup_sse_customer_algorithm)"},{"line_number":177,"context_line":"            return response[\u0027Body\u0027].read()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_cd85a0d1","line":176,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: E501 line too long (98 \u003e 79 characters)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f6d2e8c6d7e2c650b02521e3ffd64e2e8c37660","unresolved":false,"context_lines":[{"line_number":44,"context_line":"from oslo_utils import timeutils"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"from cinder import interface"},{"line_number":47,"context_line":"from cinder.backup import chunkeddriver"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_6e926ea1","line":47,"updated":"2020-08-19 12:51:54.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.interface, cinder.backup.chunkeddriver)","commit_id":"c1c0745998faa78bdfcc86071739ae007a7b9f4d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f6d2e8c6d7e2c650b02521e3ffd64e2e8c37660","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        def read(self):"},{"line_number":206,"context_line":"            response \u003d self.s3.get_object(Bucket\u003dself.container,"},{"line_number":207,"context_line":"                                          Key\u003dself.object_name,"},{"line_number":208,"context_line":"                                          SSECustomerKey\u003dCONF.backup_sse_customer_key,"},{"line_number":209,"context_line":"                                          SSECustomerAlgorithm\u003dCONF.backup_sse_customer_algorithm)"},{"line_number":210,"context_line":"            return response[\u0027Body\u0027].read()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_ce91fa9b","line":208,"updated":"2020-08-19 12:51:54.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"c1c0745998faa78bdfcc86071739ae007a7b9f4d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f6d2e8c6d7e2c650b02521e3ffd64e2e8c37660","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            response \u003d self.s3.get_object(Bucket\u003dself.container,"},{"line_number":207,"context_line":"                                          Key\u003dself.object_name,"},{"line_number":208,"context_line":"                                          SSECustomerKey\u003dCONF.backup_sse_customer_key,"},{"line_number":209,"context_line":"                                          SSECustomerAlgorithm\u003dCONF.backup_sse_customer_algorithm)"},{"line_number":210,"context_line":"            return response[\u0027Body\u0027].read()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_ae8c867f","line":209,"updated":"2020-08-19 12:51:54.000000000","message":"pep8: E501 line too long (98 \u003e 79 characters)","commit_id":"c1c0745998faa78bdfcc86071739ae007a7b9f4d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2dd98c10df0ac92a9d7f34332c70b05d72bc8702","unresolved":false,"context_lines":[{"line_number":44,"context_line":"from oslo_utils import timeutils"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"from cinder import interface"},{"line_number":47,"context_line":"from cinder.backup import chunkeddriver"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_d664ec4b","line":47,"updated":"2020-08-19 16:36:01.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.interface, cinder.backup.chunkeddriver)","commit_id":"ab724fbae1920b848ff41e0dc9d7cd3611717803"},{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"069e00dced6037c282206aa0bc74860cc89c1417","unresolved":true,"context_lines":[{"line_number":75,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"s3backup_service_opts \u003d ["},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027backup_s3_store_host\u0027,"},{"line_number":79,"context_line":"               help\u003d_(\u0027The host where the S3 server is listening.\u0027)),"},{"line_number":80,"context_line":"    cfg.StrOpt(\u0027backup_s3_store_access_key\u0027, secret\u003dTrue,"},{"line_number":81,"context_line":"               help\u003d_(\u0027The S3 query token access key.\u0027)),"}],"source_content_type":"text/x-python","patch_set":13,"id":"f028579f_f893580b","line":78,"updated":"2020-11-25 19:44:30.000000000","message":"I find this name not really intuitive. One could think that this is not an url but just an IP or a DN... I would add a `_url` somewhere in the name (e.g. `backup_s3_url` or `backup_s3_endpoint_url`).","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"512b8200c7b263f812d69a886fb2d849a854ddaa","unresolved":false,"context_lines":[{"line_number":75,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"s3backup_service_opts \u003d ["},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027backup_s3_store_host\u0027,"},{"line_number":79,"context_line":"               help\u003d_(\u0027The host where the S3 server is listening.\u0027)),"},{"line_number":80,"context_line":"    cfg.StrOpt(\u0027backup_s3_store_access_key\u0027, secret\u003dTrue,"},{"line_number":81,"context_line":"               help\u003d_(\u0027The S3 query token access key.\u0027)),"}],"source_content_type":"text/x-python","patch_set":13,"id":"82d13192_decedf3d","line":78,"in_reply_to":"f028579f_f893580b","updated":"2020-12-10 04:32:21.000000000","message":"Done","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"069e00dced6037c282206aa0bc74860cc89c1417","unresolved":true,"context_lines":[{"line_number":108,"context_line":"    cfg.IntOpt(\u0027backup_s3_retry_max_attempts\u0027, default\u003d4,"},{"line_number":109,"context_line":"               help\u003d\u0027An integer representing the maximum number of \u0027"},{"line_number":110,"context_line":"                    \u0027retry attempts that will be made on a single request.\u0027),"},{"line_number":111,"context_line":"    cfg.StrOpt(\u0027backup_s3_retry_mode\u0027, default\u003d\u0027legacy\u0027,"},{"line_number":112,"context_line":"               help\u003d\u0027A string representing the type of retry mode. \u0027"},{"line_number":113,"context_line":"                    \u0027e.g: legacy, standard, adaptive\u0027),"},{"line_number":114,"context_line":"    cfg.BoolOpt(\u0027backup_s3_no_verify_ssl\u0027, default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":13,"id":"857cc108_9b65139d","line":111,"updated":"2020-11-25 19:44:30.000000000","message":"Is there any specific reasons to have by default a `legacy` retry mode instead of `standard` ?","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"512b8200c7b263f812d69a886fb2d849a854ddaa","unresolved":true,"context_lines":[{"line_number":108,"context_line":"    cfg.IntOpt(\u0027backup_s3_retry_max_attempts\u0027, default\u003d4,"},{"line_number":109,"context_line":"               help\u003d\u0027An integer representing the maximum number of \u0027"},{"line_number":110,"context_line":"                    \u0027retry attempts that will be made on a single request.\u0027),"},{"line_number":111,"context_line":"    cfg.StrOpt(\u0027backup_s3_retry_mode\u0027, default\u003d\u0027legacy\u0027,"},{"line_number":112,"context_line":"               help\u003d\u0027A string representing the type of retry mode. \u0027"},{"line_number":113,"context_line":"                    \u0027e.g: legacy, standard, adaptive\u0027),"},{"line_number":114,"context_line":"    cfg.BoolOpt(\u0027backup_s3_no_verify_ssl\u0027, default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":13,"id":"e2f409b0_28d305ae","line":111,"in_reply_to":"857cc108_9b65139d","updated":"2020-12-10 04:32:21.000000000","message":"The reason of default retry mode specified \u0027legacy\u0027 is simply the default value for boto3 module.","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"58680d3928934c3a81b670aa16b0bbfd0967721f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    cfg.IntOpt(\u0027backup_s3_retry_max_attempts\u0027, default\u003d4,"},{"line_number":109,"context_line":"               help\u003d\u0027An integer representing the maximum number of \u0027"},{"line_number":110,"context_line":"                    \u0027retry attempts that will be made on a single request.\u0027),"},{"line_number":111,"context_line":"    cfg.StrOpt(\u0027backup_s3_retry_mode\u0027, default\u003d\u0027legacy\u0027,"},{"line_number":112,"context_line":"               help\u003d\u0027A string representing the type of retry mode. \u0027"},{"line_number":113,"context_line":"                    \u0027e.g: legacy, standard, adaptive\u0027),"},{"line_number":114,"context_line":"    cfg.BoolOpt(\u0027backup_s3_no_verify_ssl\u0027, default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":13,"id":"4b6d49f1_b8cdea21","line":111,"in_reply_to":"e2f409b0_28d305ae","updated":"2020-12-10 12:17:30.000000000","message":"Ack","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"069e00dced6037c282206aa0bc74860cc89c1417","unresolved":true,"context_lines":[{"line_number":116,"context_line":"    cfg.StrOpt(\u0027backup_s3_CAcert_file\u0027, default\u003dNone,"},{"line_number":117,"context_line":"               help\u003d\u0027path/to/cert/bundle.pem \u0027"},{"line_number":118,"context_line":"                    \u0027- A filename of the CA cert bundle to uses.\u0027),"},{"line_number":119,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dFalse,"},{"line_number":120,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027backup_sse_customer_key\u0027, default\u003dNone,"},{"line_number":122,"context_line":"               help\u003d\u0027The SSECustomerKey.\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"4468fb10_15168ee9","line":119,"updated":"2020-11-25 19:44:30.000000000","message":"Maybe this can be enabled by default ? The GCS and the Swift driver already do this by default without any option to disable it.","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"512b8200c7b263f812d69a886fb2d849a854ddaa","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    cfg.StrOpt(\u0027backup_s3_CAcert_file\u0027, default\u003dNone,"},{"line_number":117,"context_line":"               help\u003d\u0027path/to/cert/bundle.pem \u0027"},{"line_number":118,"context_line":"                    \u0027- A filename of the CA cert bundle to uses.\u0027),"},{"line_number":119,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dFalse,"},{"line_number":120,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027backup_sse_customer_key\u0027, default\u003dNone,"},{"line_number":122,"context_line":"               help\u003d\u0027The SSECustomerKey.\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa412d60_3b31ac27","line":119,"in_reply_to":"4468fb10_15168ee9","updated":"2020-12-10 04:32:21.000000000","message":"Done","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"069e00dced6037c282206aa0bc74860cc89c1417","unresolved":true,"context_lines":[{"line_number":118,"context_line":"                    \u0027- A filename of the CA cert bundle to uses.\u0027),"},{"line_number":119,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dFalse,"},{"line_number":120,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027backup_sse_customer_key\u0027, default\u003dNone,"},{"line_number":122,"context_line":"               help\u003d\u0027The SSECustomerKey.\u0027),"},{"line_number":123,"context_line":"    cfg.StrOpt(\u0027backup_sse_customer_algorithm\u0027, default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\u0027The SSECustomerAlgorithm.\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"e7add7a0_73457200","line":121,"updated":"2020-11-25 19:44:30.000000000","message":"I think that all others drivers prefixed their options the same way. Maybe `backup_s3_sse_...` would makes more sense here ?","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"512b8200c7b263f812d69a886fb2d849a854ddaa","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    \u0027- A filename of the CA cert bundle to uses.\u0027),"},{"line_number":119,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dFalse,"},{"line_number":120,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027backup_sse_customer_key\u0027, default\u003dNone,"},{"line_number":122,"context_line":"               help\u003d\u0027The SSECustomerKey.\u0027),"},{"line_number":123,"context_line":"    cfg.StrOpt(\u0027backup_sse_customer_algorithm\u0027, default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\u0027The SSECustomerAlgorithm.\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5815ca5f_471c0653","line":121,"in_reply_to":"e7add7a0_73457200","updated":"2020-12-10 04:32:21.000000000","message":"Done","commit_id":"992b7c4c1d26a0a64aa93a426587a2a80cd574e0"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e1b84b2404a653fbcf96105b9eac2e31d1d721c9","unresolved":true,"context_lines":[{"line_number":49,"context_line":"                       e.g: legacy, standard, adaptive. (default: legacy)"},{"line_number":50,"context_line":":backup_s3_no_verify_ssl: Enable or Disable ssl verify."},{"line_number":51,"context_line":"                          (default: False)"},{"line_number":52,"context_line":":backup_s3_CAcert_file: A filename of the CA cert bundle to uses."},{"line_number":53,"context_line":"                        (default: None)"},{"line_number":54,"context_line":":backup_compression_algorithm: Compression algorithm to use for volume"},{"line_number":55,"context_line":"                               backups. Supported options are:"}],"source_content_type":"text/x-python","patch_set":20,"id":"b070db48_ae65b17c","line":52,"range":{"start_line":52,"start_character":60,"end_line":52,"end_character":64},"updated":"2021-01-14 05:01:09.000000000","message":"use","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"afcbd0924cf3b452ce1a835b1b15da1c39bbbfc2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                       e.g: legacy, standard, adaptive. (default: legacy)"},{"line_number":50,"context_line":":backup_s3_no_verify_ssl: Enable or Disable ssl verify."},{"line_number":51,"context_line":"                          (default: False)"},{"line_number":52,"context_line":":backup_s3_CAcert_file: A filename of the CA cert bundle to uses."},{"line_number":53,"context_line":"                        (default: None)"},{"line_number":54,"context_line":":backup_compression_algorithm: Compression algorithm to use for volume"},{"line_number":55,"context_line":"                               backups. Supported options are:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fc51d0f1_69060121","line":52,"range":{"start_line":52,"start_character":60,"end_line":52,"end_character":64},"in_reply_to":"b070db48_ae65b17c","updated":"2021-01-17 23:58:12.000000000","message":"Done","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e1b84b2404a653fbcf96105b9eac2e31d1d721c9","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                help\u003d\u0027Enable or Disable ssl verify.\u0027),"},{"line_number":117,"context_line":"    cfg.StrOpt(\u0027backup_s3_CAcert_file\u0027, default\u003dNone,"},{"line_number":118,"context_line":"               help\u003d\u0027path/to/cert/bundle.pem \u0027"},{"line_number":119,"context_line":"                    \u0027- A filename of the CA cert bundle to uses.\u0027),"},{"line_number":120,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"},{"line_number":121,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_key\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":20,"id":"f00cb3a4_aa67b8dd","line":119,"range":{"start_line":119,"start_character":59,"end_line":119,"end_character":63},"updated":"2021-01-14 05:01:09.000000000","message":"use","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"afcbd0924cf3b452ce1a835b1b15da1c39bbbfc2","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                help\u003d\u0027Enable or Disable ssl verify.\u0027),"},{"line_number":117,"context_line":"    cfg.StrOpt(\u0027backup_s3_CAcert_file\u0027, default\u003dNone,"},{"line_number":118,"context_line":"               help\u003d\u0027path/to/cert/bundle.pem \u0027"},{"line_number":119,"context_line":"                    \u0027- A filename of the CA cert bundle to uses.\u0027),"},{"line_number":120,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"},{"line_number":121,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_key\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":20,"id":"66792ad5_5814584b","line":119,"range":{"start_line":119,"start_character":59,"end_line":119,"end_character":63},"in_reply_to":"f00cb3a4_aa67b8dd","updated":"2021-01-17 23:58:12.000000000","message":"Done","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e1b84b2404a653fbcf96105b9eac2e31d1d721c9","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        def close(self):"},{"line_number":208,"context_line":"            reader \u003d six.BytesIO(self.data)"},{"line_number":209,"context_line":"            md5 \u003d base64.b64encode("},{"line_number":210,"context_line":"                hashlib.md5(self.data).digest()).decode(\u0027utf-8\u0027)  # nosec"},{"line_number":211,"context_line":"            put_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":212,"context_line":"                        \u0027Body\u0027: reader,"},{"line_number":213,"context_line":"                        \u0027Key\u0027: self.object_name,"}],"source_content_type":"text/x-python","patch_set":20,"id":"36779fbf_71bdd67f","line":210,"range":{"start_line":210,"start_character":16,"end_line":210,"end_character":38},"updated":"2021-01-14 05:01:09.000000000","message":"instead of importing hashlib directly, you should:\n\n  from oslo_utils.secretutils import md5\n\nup top, and here do:\n\n  md5(self.data, usedforsecurity\u003dFalse).digest( ...","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"afcbd0924cf3b452ce1a835b1b15da1c39bbbfc2","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        def close(self):"},{"line_number":208,"context_line":"            reader \u003d six.BytesIO(self.data)"},{"line_number":209,"context_line":"            md5 \u003d base64.b64encode("},{"line_number":210,"context_line":"                hashlib.md5(self.data).digest()).decode(\u0027utf-8\u0027)  # nosec"},{"line_number":211,"context_line":"            put_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":212,"context_line":"                        \u0027Body\u0027: reader,"},{"line_number":213,"context_line":"                        \u0027Key\u0027: self.object_name,"}],"source_content_type":"text/x-python","patch_set":20,"id":"2f92abef_d054b877","line":210,"range":{"start_line":210,"start_character":16,"end_line":210,"end_character":38},"in_reply_to":"36779fbf_71bdd67f","updated":"2021-01-17 23:58:12.000000000","message":"Done","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e1b84b2404a653fbcf96105b9eac2e31d1d721c9","unresolved":true,"context_lines":[{"line_number":348,"context_line":"        try:"},{"line_number":349,"context_line":"            conn.list_buckets()"},{"line_number":350,"context_line":"        except Exception:"},{"line_number":351,"context_line":"            LOG.exception(\"Can not list s3 buckets during backup \""},{"line_number":352,"context_line":"                          \"driver initialization.\")"},{"line_number":353,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":20,"id":"f0e641ae_e842db5f","line":351,"range":{"start_line":351,"start_character":27,"end_line":351,"end_character":34},"updated":"2021-01-14 05:01:09.000000000","message":"Cannot","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"afcbd0924cf3b452ce1a835b1b15da1c39bbbfc2","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        try:"},{"line_number":349,"context_line":"            conn.list_buckets()"},{"line_number":350,"context_line":"        except Exception:"},{"line_number":351,"context_line":"            LOG.exception(\"Can not list s3 buckets during backup \""},{"line_number":352,"context_line":"                          \"driver initialization.\")"},{"line_number":353,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":20,"id":"358923cd_f574e3d7","line":351,"range":{"start_line":351,"start_character":27,"end_line":351,"end_character":34},"in_reply_to":"f0e641ae_e842db5f","updated":"2021-01-17 23:58:12.000000000","message":"Done","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"541a6bd77e46404de66a2ca89be8e3deaab49890","unresolved":true,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        @_wrap_exception"},{"line_number":207,"context_line":"        def close(self):"},{"line_number":208,"context_line":"            reader \u003d six.BytesIO(self.data)"},{"line_number":209,"context_line":"            contentmd5 \u003d base64.b64encode("},{"line_number":210,"context_line":"                md5(self.data, usedforsecurity\u003dFalse).digest()).decode(\u0027utf-8\u0027)"},{"line_number":211,"context_line":"            put_args \u003d {\u0027Bucket\u0027: self.bucket,"}],"source_content_type":"text/x-python","patch_set":22,"id":"63ebcbb8_cb8c5b06","line":208,"range":{"start_line":208,"start_character":21,"end_line":208,"end_character":33},"updated":"2021-01-20 15:27:09.000000000","message":"Shouldn\u0027t be using six.  Everything is python3 now for OpenStack.","commit_id":"1e815878340a363e4f4a4fe4dbba7d236f77d040"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        @_wrap_exception"},{"line_number":207,"context_line":"        def close(self):"},{"line_number":208,"context_line":"            reader \u003d six.BytesIO(self.data)"},{"line_number":209,"context_line":"            contentmd5 \u003d base64.b64encode("},{"line_number":210,"context_line":"                md5(self.data, usedforsecurity\u003dFalse).digest()).decode(\u0027utf-8\u0027)"},{"line_number":211,"context_line":"            put_args \u003d {\u0027Bucket\u0027: self.bucket,"}],"source_content_type":"text/x-python","patch_set":22,"id":"8c895ea6_e44f2fa8","line":208,"range":{"start_line":208,"start_character":21,"end_line":208,"end_character":33},"in_reply_to":"63ebcbb8_cb8c5b06","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"1e815878340a363e4f4a4fe4dbba7d236f77d040"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"541a6bd77e46404de66a2ca89be8e3deaab49890","unresolved":true,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        @_wrap_exception"},{"line_number":239,"context_line":"        def read(self):"},{"line_number":240,"context_line":"            bytes_buffer \u003d six.BytesIO()"},{"line_number":241,"context_line":"            get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":242,"context_line":"                        \u0027Key\u0027: self.object_name,"},{"line_number":243,"context_line":"                        \u0027Fileobj\u0027: bytes_buffer}"}],"source_content_type":"text/x-python","patch_set":22,"id":"d59096cf_b4557bcb","line":240,"range":{"start_line":240,"start_character":28,"end_line":240,"end_character":40},"updated":"2021-01-20 15:27:09.000000000","message":"Same comment here.","commit_id":"1e815878340a363e4f4a4fe4dbba7d236f77d040"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        @_wrap_exception"},{"line_number":239,"context_line":"        def read(self):"},{"line_number":240,"context_line":"            bytes_buffer \u003d six.BytesIO()"},{"line_number":241,"context_line":"            get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":242,"context_line":"                        \u0027Key\u0027: self.object_name,"},{"line_number":243,"context_line":"                        \u0027Fileobj\u0027: bytes_buffer}"}],"source_content_type":"text/x-python","patch_set":22,"id":"68ddfa57_da12b630","line":240,"range":{"start_line":240,"start_character":28,"end_line":240,"end_character":40},"in_reply_to":"d59096cf_b4557bcb","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"1e815878340a363e4f4a4fe4dbba7d236f77d040"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":47,"context_line":"                               a single request.  (default: 4)"},{"line_number":48,"context_line":":backup_s3_retry_mode: A string representing the type of retry mode."},{"line_number":49,"context_line":"                       e.g: legacy, standard, adaptive. (default: legacy)"},{"line_number":50,"context_line":":backup_s3_no_verify_ssl: Enable or Disable ssl verify."},{"line_number":51,"context_line":"                          (default: False)"},{"line_number":52,"context_line":":backup_s3_CAcert_file: A filename of the CA cert bundle to use."},{"line_number":53,"context_line":"                        (default: None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"6250d1b6_1465e63f","line":50,"range":{"start_line":50,"start_character":1,"end_line":50,"end_character":24},"updated":"2021-01-21 11:12:05.000000000","message":"nit: In my eyes it\u0027s more readable as `backup_s3_verify_ssl` with the default set to `True`, similar to the existing `driver_use_ssl` (though that one defaults to False).\n\nMay be different for others, so no downvote for this, just a nit.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                               a single request.  (default: 4)"},{"line_number":48,"context_line":":backup_s3_retry_mode: A string representing the type of retry mode."},{"line_number":49,"context_line":"                       e.g: legacy, standard, adaptive. (default: legacy)"},{"line_number":50,"context_line":":backup_s3_no_verify_ssl: Enable or Disable ssl verify."},{"line_number":51,"context_line":"                          (default: False)"},{"line_number":52,"context_line":":backup_s3_CAcert_file: A filename of the CA cert bundle to use."},{"line_number":53,"context_line":"                        (default: None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"176ae79e_89a15858","line":50,"range":{"start_line":50,"start_character":1,"end_line":50,"end_character":24},"in_reply_to":"6250d1b6_1465e63f","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                               a single request.  (default: 4)"},{"line_number":48,"context_line":":backup_s3_retry_mode: A string representing the type of retry mode."},{"line_number":49,"context_line":"                       e.g: legacy, standard, adaptive. (default: legacy)"},{"line_number":50,"context_line":":backup_s3_no_verify_ssl: Enable or Disable ssl verify."},{"line_number":51,"context_line":"                          (default: False)"},{"line_number":52,"context_line":":backup_s3_CAcert_file: A filename of the CA cert bundle to use."},{"line_number":53,"context_line":"                        (default: None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"ac8a95f5_21e910d2","line":50,"range":{"start_line":50,"start_character":1,"end_line":50,"end_character":24},"in_reply_to":"6250d1b6_1465e63f","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":64,"context_line":"import boto3"},{"line_number":65,"context_line":"from botocore.config import Config"},{"line_number":66,"context_line":"from botocore.exceptions import ClientError"},{"line_number":67,"context_line":"from botocore.exceptions import IncompleteReadError"},{"line_number":68,"context_line":"from botocore.vendored.requests.packages.urllib3.exceptions import \\"},{"line_number":69,"context_line":"    ReadTimeoutError"},{"line_number":70,"context_line":"from oslo_config import cfg"},{"line_number":71,"context_line":"from oslo_log import log as logging"},{"line_number":72,"context_line":"from oslo_utils.secretutils import md5"}],"source_content_type":"text/x-python","patch_set":24,"id":"37be139d_7344f730","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":20},"updated":"2021-01-21 11:12:05.000000000","message":"nit: I\u0027d rather we didn\u0027t import the classes directly, but instead imported the exceptions, something like:\n\n   from botocore import exceptions from boto_exc\n   from botocore.vendored.requests.packages.urllib3 import exceptions as urrlib_exc","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":64,"context_line":"import boto3"},{"line_number":65,"context_line":"from botocore.config import Config"},{"line_number":66,"context_line":"from botocore.exceptions import ClientError"},{"line_number":67,"context_line":"from botocore.exceptions import IncompleteReadError"},{"line_number":68,"context_line":"from botocore.vendored.requests.packages.urllib3.exceptions import \\"},{"line_number":69,"context_line":"    ReadTimeoutError"},{"line_number":70,"context_line":"from oslo_config import cfg"},{"line_number":71,"context_line":"from oslo_log import log as logging"},{"line_number":72,"context_line":"from oslo_utils.secretutils import md5"}],"source_content_type":"text/x-python","patch_set":24,"id":"018f5e57_6fac2e07","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":20},"in_reply_to":"37be139d_7344f730","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"import boto3"},{"line_number":65,"context_line":"from botocore.config import Config"},{"line_number":66,"context_line":"from botocore.exceptions import ClientError"},{"line_number":67,"context_line":"from botocore.exceptions import IncompleteReadError"},{"line_number":68,"context_line":"from botocore.vendored.requests.packages.urllib3.exceptions import \\"},{"line_number":69,"context_line":"    ReadTimeoutError"},{"line_number":70,"context_line":"from oslo_config import cfg"},{"line_number":71,"context_line":"from oslo_log import log as logging"},{"line_number":72,"context_line":"from oslo_utils.secretutils import md5"}],"source_content_type":"text/x-python","patch_set":24,"id":"ffad4c92_d0b9da79","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":20},"in_reply_to":"37be139d_7344f730","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"06acd367fbca2a02f1a0f13d32ce4828f4a7612b","unresolved":true,"context_lines":[{"line_number":95,"context_line":"               help\u003d\u0027The size in bytes that changes are tracked \u0027"},{"line_number":96,"context_line":"                    \u0027for incremental backups. backup_s3_object_size \u0027"},{"line_number":97,"context_line":"                    \u0027has to be multiple of backup_s3_block_size.\u0027),"},{"line_number":98,"context_line":"    cfg.BoolOpt(\u0027backup_s3_enable_progress_timer\u0027, default\u003dTrue,"},{"line_number":99,"context_line":"                help\u003d\u0027Enable or Disable the timer to send the periodic \u0027"},{"line_number":100,"context_line":"                     \u0027progress notifications to Ceilometer when backing \u0027"},{"line_number":101,"context_line":"                     \u0027up the volume to the S3 backend storage. The \u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba83176f_e015b933","line":98,"updated":"2021-01-22 19:48:24.000000000","message":"This one isn\u0027t listed in the doc comment near the top of this file. It would also help if the order they\u0027re documented matched the order they\u0027re defined in the code.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":95,"context_line":"               help\u003d\u0027The size in bytes that changes are tracked \u0027"},{"line_number":96,"context_line":"                    \u0027for incremental backups. backup_s3_object_size \u0027"},{"line_number":97,"context_line":"                    \u0027has to be multiple of backup_s3_block_size.\u0027),"},{"line_number":98,"context_line":"    cfg.BoolOpt(\u0027backup_s3_enable_progress_timer\u0027, default\u003dTrue,"},{"line_number":99,"context_line":"                help\u003d\u0027Enable or Disable the timer to send the periodic \u0027"},{"line_number":100,"context_line":"                     \u0027progress notifications to Ceilometer when backing \u0027"},{"line_number":101,"context_line":"                     \u0027up the volume to the S3 backend storage. The \u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"5807d256_ab4effd4","line":98,"in_reply_to":"ba83176f_e015b933","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":95,"context_line":"               help\u003d\u0027The size in bytes that changes are tracked \u0027"},{"line_number":96,"context_line":"                    \u0027for incremental backups. backup_s3_object_size \u0027"},{"line_number":97,"context_line":"                    \u0027has to be multiple of backup_s3_block_size.\u0027),"},{"line_number":98,"context_line":"    cfg.BoolOpt(\u0027backup_s3_enable_progress_timer\u0027, default\u003dTrue,"},{"line_number":99,"context_line":"                help\u003d\u0027Enable or Disable the timer to send the periodic \u0027"},{"line_number":100,"context_line":"                     \u0027progress notifications to Ceilometer when backing \u0027"},{"line_number":101,"context_line":"                     \u0027up the volume to the S3 backend storage. The \u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"b3f62ed9_a8811978","line":98,"in_reply_to":"ba83176f_e015b933","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"b2cc6a2dfe7708f1cfb3657e8259017c37d69482","unresolved":true,"context_lines":[{"line_number":100,"context_line":"                     \u0027progress notifications to Ceilometer when backing \u0027"},{"line_number":101,"context_line":"                     \u0027up the volume to the S3 backend storage. The \u0027"},{"line_number":102,"context_line":"                     \u0027default value is True to enable the timer.\u0027),"},{"line_number":103,"context_line":"    cfg.StrOpt(\u0027backup_s3_http_proxy\u0027, default\u003d\u0027\u0027, secret\u003dTrue,"},{"line_number":104,"context_line":"               help\u003d\u0027Address or host for the http proxy server.\u0027),"},{"line_number":105,"context_line":"    cfg.StrOpt(\u0027backup_s3_https_proxy\u0027, default\u003d\u0027\u0027, secret\u003dTrue,"},{"line_number":106,"context_line":"               help\u003d\u0027Address or host for the https proxy server.\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"a8521c72_b1e9c342","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":1},"updated":"2021-01-22 19:05:00.000000000","message":"Do these proxy addresses really need to be secret?","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                     \u0027progress notifications to Ceilometer when backing \u0027"},{"line_number":101,"context_line":"                     \u0027up the volume to the S3 backend storage. The \u0027"},{"line_number":102,"context_line":"                     \u0027default value is True to enable the timer.\u0027),"},{"line_number":103,"context_line":"    cfg.StrOpt(\u0027backup_s3_http_proxy\u0027, default\u003d\u0027\u0027, secret\u003dTrue,"},{"line_number":104,"context_line":"               help\u003d\u0027Address or host for the http proxy server.\u0027),"},{"line_number":105,"context_line":"    cfg.StrOpt(\u0027backup_s3_https_proxy\u0027, default\u003d\u0027\u0027, secret\u003dTrue,"},{"line_number":106,"context_line":"               help\u003d\u0027Address or host for the https proxy server.\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"21e31da6_a947312f","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":1},"in_reply_to":"a8521c72_b1e9c342","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                     \u0027progress notifications to Ceilometer when backing \u0027"},{"line_number":101,"context_line":"                     \u0027up the volume to the S3 backend storage. The \u0027"},{"line_number":102,"context_line":"                     \u0027default value is True to enable the timer.\u0027),"},{"line_number":103,"context_line":"    cfg.StrOpt(\u0027backup_s3_http_proxy\u0027, default\u003d\u0027\u0027, secret\u003dTrue,"},{"line_number":104,"context_line":"               help\u003d\u0027Address or host for the http proxy server.\u0027),"},{"line_number":105,"context_line":"    cfg.StrOpt(\u0027backup_s3_https_proxy\u0027, default\u003d\u0027\u0027, secret\u003dTrue,"},{"line_number":106,"context_line":"               help\u003d\u0027Address or host for the https proxy server.\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"9517837d_f40326b9","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":1},"in_reply_to":"a8521c72_b1e9c342","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":118,"context_line":"                    \u0027e.g: legacy, standard, adaptive\u0027),"},{"line_number":119,"context_line":"    cfg.BoolOpt(\u0027backup_s3_no_verify_ssl\u0027, default\u003dFalse,"},{"line_number":120,"context_line":"                help\u003d\u0027Enable or Disable ssl verify.\u0027),"},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027backup_s3_CAcert_file\u0027, default\u003dNone,"},{"line_number":122,"context_line":"               help\u003d\u0027path/to/cert/bundle.pem \u0027"},{"line_number":123,"context_line":"                    \u0027- A filename of the CA cert bundle to use.\u0027),"},{"line_number":124,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":24,"id":"706ef468_784f3c23","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":37},"updated":"2021-01-21 11:12:05.000000000","message":"-1: We don\u0027t do upper cased letters in configuration options.  The swift driver has a similar parameter and they separated it with underscores: `backup_swift_ca_cert_file`","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    \u0027e.g: legacy, standard, adaptive\u0027),"},{"line_number":119,"context_line":"    cfg.BoolOpt(\u0027backup_s3_no_verify_ssl\u0027, default\u003dFalse,"},{"line_number":120,"context_line":"                help\u003d\u0027Enable or Disable ssl verify.\u0027),"},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027backup_s3_CAcert_file\u0027, default\u003dNone,"},{"line_number":122,"context_line":"               help\u003d\u0027path/to/cert/bundle.pem \u0027"},{"line_number":123,"context_line":"                    \u0027- A filename of the CA cert bundle to use.\u0027),"},{"line_number":124,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":24,"id":"06052acc_725dca33","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":37},"in_reply_to":"706ef468_784f3c23","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    \u0027e.g: legacy, standard, adaptive\u0027),"},{"line_number":119,"context_line":"    cfg.BoolOpt(\u0027backup_s3_no_verify_ssl\u0027, default\u003dFalse,"},{"line_number":120,"context_line":"                help\u003d\u0027Enable or Disable ssl verify.\u0027),"},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027backup_s3_CAcert_file\u0027, default\u003dNone,"},{"line_number":122,"context_line":"               help\u003d\u0027path/to/cert/bundle.pem \u0027"},{"line_number":123,"context_line":"                    \u0027- A filename of the CA cert bundle to use.\u0027),"},{"line_number":124,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":24,"id":"51c70054_ad22ec7c","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":37},"in_reply_to":"706ef468_784f3c23","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"b2cc6a2dfe7708f1cfb3657e8259017c37d69482","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                    \u0027- A filename of the CA cert bundle to use.\u0027),"},{"line_number":124,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"},{"line_number":125,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":126,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_key\u0027, default\u003dNone,"},{"line_number":127,"context_line":"               help\u003d\u0027The SSECustomerKey.\u0027),"},{"line_number":128,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_algorithm\u0027, default\u003dNone,"},{"line_number":129,"context_line":"               help\u003d\u0027The SSECustomerAlgorithm.\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"139aed70_7ab1a998","line":126,"updated":"2021-01-22 19:05:00.000000000","message":"backup_s3_sse_customer_key sounds like something that should be secret.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    \u0027- A filename of the CA cert bundle to use.\u0027),"},{"line_number":124,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"},{"line_number":125,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":126,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_key\u0027, default\u003dNone,"},{"line_number":127,"context_line":"               help\u003d\u0027The SSECustomerKey.\u0027),"},{"line_number":128,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_algorithm\u0027, default\u003dNone,"},{"line_number":129,"context_line":"               help\u003d\u0027The SSECustomerAlgorithm.\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"1ed1ece0_2ce3bb2c","line":126,"in_reply_to":"139aed70_7ab1a998","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    \u0027- A filename of the CA cert bundle to use.\u0027),"},{"line_number":124,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"},{"line_number":125,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":126,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_key\u0027, default\u003dNone,"},{"line_number":127,"context_line":"               help\u003d\u0027The SSECustomerKey.\u0027),"},{"line_number":128,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_algorithm\u0027, default\u003dNone,"},{"line_number":129,"context_line":"               help\u003d\u0027The SSECustomerAlgorithm.\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"481d0ba6_6136880e","line":126,"in_reply_to":"139aed70_7ab1a998","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _wrap_exception(func):"},{"line_number":145,"context_line":"    def func_wrapper(*args, **kwargs):"},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            return func(*args, **kwargs)"},{"line_number":148,"context_line":"        except ClientError as err:"}],"source_content_type":"text/x-python","patch_set":24,"id":"8dcbe629_e95cfbf1","line":145,"updated":"2021-01-21 11:12:05.000000000","message":"-1: Please add the `@functools.wraps(func)` decorator to this method to preserve the decorated method\u0027s signature.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _wrap_exception(func):"},{"line_number":145,"context_line":"    def func_wrapper(*args, **kwargs):"},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            return func(*args, **kwargs)"},{"line_number":148,"context_line":"        except ClientError as err:"}],"source_content_type":"text/x-python","patch_set":24,"id":"12d8b013_b34ef2b5","line":145,"in_reply_to":"8dcbe629_e95cfbf1","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _wrap_exception(func):"},{"line_number":145,"context_line":"    def func_wrapper(*args, **kwargs):"},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            return func(*args, **kwargs)"},{"line_number":148,"context_line":"        except ClientError as err:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5cac655b_d35b2a1f","line":145,"in_reply_to":"8dcbe629_e95cfbf1","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":178,"context_line":"                connect_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":179,"context_line":"                read_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":180,"context_line":"                max_pool_connections\u003dCONF.backup_s3_max_pool_connections,"},{"line_number":181,"context_line":"                retries\u003d{"},{"line_number":182,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":183,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":184,"context_line":"        if CONF.backup_s3_no_verify_ssl is False:"},{"line_number":185,"context_line":"            conn_args[\u0027verify\u0027] \u003d CONF.backup_s3_CAcert_file"},{"line_number":186,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"acdccb51_83bb8278","line":183,"range":{"start_line":181,"start_character":0,"end_line":183,"end_character":56},"updated":"2021-01-21 11:12:05.000000000","message":"Nice!!","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                connect_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":179,"context_line":"                read_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":180,"context_line":"                max_pool_connections\u003dCONF.backup_s3_max_pool_connections,"},{"line_number":181,"context_line":"                retries\u003d{"},{"line_number":182,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":183,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":184,"context_line":"        if CONF.backup_s3_no_verify_ssl is False:"},{"line_number":185,"context_line":"            conn_args[\u0027verify\u0027] \u003d CONF.backup_s3_CAcert_file"},{"line_number":186,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"b32798e4_8a281845","line":183,"range":{"start_line":181,"start_character":0,"end_line":183,"end_character":56},"in_reply_to":"acdccb51_83bb8278","updated":"2021-01-27 08:52:52.000000000","message":"Ack","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                connect_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":179,"context_line":"                read_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":180,"context_line":"                max_pool_connections\u003dCONF.backup_s3_max_pool_connections,"},{"line_number":181,"context_line":"                retries\u003d{"},{"line_number":182,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":183,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":184,"context_line":"        if CONF.backup_s3_no_verify_ssl is False:"},{"line_number":185,"context_line":"            conn_args[\u0027verify\u0027] \u003d CONF.backup_s3_CAcert_file"},{"line_number":186,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"06608f47_e320fca2","line":183,"range":{"start_line":181,"start_character":0,"end_line":183,"end_character":56},"in_reply_to":"acdccb51_83bb8278","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @staticmethod"},{"line_number":191,"context_line":"    def get_driver_options():"},{"line_number":192,"context_line":"        return s3backup_service_opts"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    class S3ObjectWriter(object):"},{"line_number":195,"context_line":"        def __init__(self, bucket, object_name, conn):"}],"source_content_type":"text/x-python","patch_set":24,"id":"6ccf661a_6b9fda4d","line":192,"range":{"start_line":192,"start_character":15,"end_line":192,"end_character":36},"updated":"2021-01-21 11:12:05.000000000","message":"-1: This method should return the backup_compression_algorithm config option as well.\n\nYou can see an example of how to mix your driver\u0027s options with common options on the LVM driver https://github.com/openstack/cinder/blob/e39c0406dedd4fbffcb2da617c84f7ef03c4ad00/cinder/volume/drivers/lvm.py#L120-L133","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @staticmethod"},{"line_number":191,"context_line":"    def get_driver_options():"},{"line_number":192,"context_line":"        return s3backup_service_opts"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    class S3ObjectWriter(object):"},{"line_number":195,"context_line":"        def __init__(self, bucket, object_name, conn):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3b2c0476_25e9f9bb","line":192,"range":{"start_line":192,"start_character":15,"end_line":192,"end_character":36},"in_reply_to":"6ccf661a_6b9fda4d","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @staticmethod"},{"line_number":191,"context_line":"    def get_driver_options():"},{"line_number":192,"context_line":"        return s3backup_service_opts"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    class S3ObjectWriter(object):"},{"line_number":195,"context_line":"        def __init__(self, bucket, object_name, conn):"}],"source_content_type":"text/x-python","patch_set":24,"id":"8041bbbf_9bed0210","line":192,"range":{"start_line":192,"start_character":15,"end_line":192,"end_character":36},"in_reply_to":"6ccf661a_6b9fda4d","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":191,"context_line":"    def get_driver_options():"},{"line_number":192,"context_line":"        return s3backup_service_opts"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    class S3ObjectWriter(object):"},{"line_number":195,"context_line":"        def __init__(self, bucket, object_name, conn):"},{"line_number":196,"context_line":"            self.bucket \u003d bucket"},{"line_number":197,"context_line":"            self.object_name \u003d object_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"c255d5e6_8769cc9b","line":194,"updated":"2021-01-21 11:12:05.000000000","message":"request: We try not to use nested classes in the project, so it would be nice not to break convention, but since I can see how structuring it this way can make sense to a developer I won\u0027t downvote, but I think it makes the `S3BackupDriver` class less readable and thus increases the maintenance cost.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    def get_driver_options():"},{"line_number":192,"context_line":"        return s3backup_service_opts"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    class S3ObjectWriter(object):"},{"line_number":195,"context_line":"        def __init__(self, bucket, object_name, conn):"},{"line_number":196,"context_line":"            self.bucket \u003d bucket"},{"line_number":197,"context_line":"            self.object_name \u003d object_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"cb5e25b0_6dd90652","line":194,"in_reply_to":"c255d5e6_8769cc9b","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    def get_driver_options():"},{"line_number":192,"context_line":"        return s3backup_service_opts"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    class S3ObjectWriter(object):"},{"line_number":195,"context_line":"        def __init__(self, bucket, object_name, conn):"},{"line_number":196,"context_line":"            self.bucket \u003d bucket"},{"line_number":197,"context_line":"            self.object_name \u003d object_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"d09cfc8c_89dda2f0","line":194,"in_reply_to":"c255d5e6_8769cc9b","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":218,"context_line":"                        \u0027ContentLength\u0027: len(self.data)}"},{"line_number":219,"context_line":"            if CONF.backup_s3_md5_validation:"},{"line_number":220,"context_line":"                put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":221,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":222,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":223,"context_line":"                put_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":224,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":225,"context_line":"                put_args[\u0027SSECustomerKey\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"6835e8c8_fd834023","line":222,"range":{"start_line":221,"start_character":0,"end_line":222,"end_character":69},"updated":"2021-01-21 11:12:05.000000000","message":"nit: Better if we just do \n\n            if (not CONF.backup_s3_sse_customer_algorithm\n                    and not CONF.backup_s3_sse_customer_key):\n\nSo that we support not only `None` value but also empty strings.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                        \u0027ContentLength\u0027: len(self.data)}"},{"line_number":219,"context_line":"            if CONF.backup_s3_md5_validation:"},{"line_number":220,"context_line":"                put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":221,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":222,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":223,"context_line":"                put_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":224,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":225,"context_line":"                put_args[\u0027SSECustomerKey\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"41e8e6ca_c7a58bd8","line":222,"range":{"start_line":221,"start_character":0,"end_line":222,"end_character":69},"in_reply_to":"6835e8c8_fd834023","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                        \u0027ContentLength\u0027: len(self.data)}"},{"line_number":219,"context_line":"            if CONF.backup_s3_md5_validation:"},{"line_number":220,"context_line":"                put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":221,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":222,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":223,"context_line":"                put_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":224,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":225,"context_line":"                put_args[\u0027SSECustomerKey\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"8edcc691_7aca0d78","line":222,"range":{"start_line":221,"start_character":0,"end_line":222,"end_character":69},"in_reply_to":"6835e8c8_fd834023","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":220,"context_line":"                put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":221,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":222,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":223,"context_line":"                put_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":224,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":225,"context_line":"                put_args[\u0027SSECustomerKey\u0027] \u003d \\"},{"line_number":226,"context_line":"                    CONF.backup_s3_sse_customer_key"},{"line_number":227,"context_line":"            self.conn.put_object(**put_args)"},{"line_number":228,"context_line":"            return contentmd5"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"f4e3950d_35e42f7b","line":226,"range":{"start_line":223,"start_character":0,"end_line":226,"end_character":51},"updated":"2021-01-21 11:12:05.000000000","message":"nit:\n\n                put_args.update(\n                    SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,\n                    SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":221,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":222,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":223,"context_line":"                put_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":224,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":225,"context_line":"                put_args[\u0027SSECustomerKey\u0027] \u003d \\"},{"line_number":226,"context_line":"                    CONF.backup_s3_sse_customer_key"},{"line_number":227,"context_line":"            self.conn.put_object(**put_args)"},{"line_number":228,"context_line":"            return contentmd5"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"af6a51f7_784f1318","line":226,"range":{"start_line":223,"start_character":0,"end_line":226,"end_character":51},"in_reply_to":"f4e3950d_35e42f7b","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":221,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":222,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":223,"context_line":"                put_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":224,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":225,"context_line":"                put_args[\u0027SSECustomerKey\u0027] \u003d \\"},{"line_number":226,"context_line":"                    CONF.backup_s3_sse_customer_key"},{"line_number":227,"context_line":"            self.conn.put_object(**put_args)"},{"line_number":228,"context_line":"            return contentmd5"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"de59e140_dbf4e30e","line":226,"range":{"start_line":223,"start_character":0,"end_line":226,"end_character":51},"in_reply_to":"f4e3950d_35e42f7b","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":227,"context_line":"            self.conn.put_object(**put_args)"},{"line_number":228,"context_line":"            return contentmd5"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    class S3ObjectReader(object):"},{"line_number":231,"context_line":"        def __init__(self, bucket, object_name, conn):"},{"line_number":232,"context_line":"            self.bucket \u003d bucket"},{"line_number":233,"context_line":"            self.object_name \u003d object_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"c25c9149_0f85c892","line":230,"updated":"2021-01-21 11:12:05.000000000","message":"nit: Save as with the `S3ObjectWriter` class","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.conn.put_object(**put_args)"},{"line_number":228,"context_line":"            return contentmd5"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    class S3ObjectReader(object):"},{"line_number":231,"context_line":"        def __init__(self, bucket, object_name, conn):"},{"line_number":232,"context_line":"            self.bucket \u003d bucket"},{"line_number":233,"context_line":"            self.object_name \u003d object_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"8f4b3467_9f6c6547","line":230,"in_reply_to":"c25c9149_0f85c892","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.conn.put_object(**put_args)"},{"line_number":228,"context_line":"            return contentmd5"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    class S3ObjectReader(object):"},{"line_number":231,"context_line":"        def __init__(self, bucket, object_name, conn):"},{"line_number":232,"context_line":"            self.bucket \u003d bucket"},{"line_number":233,"context_line":"            self.object_name \u003d object_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"9706244b_1a4886fb","line":230,"in_reply_to":"c25c9149_0f85c892","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":242,"context_line":"        @_wrap_exception"},{"line_number":243,"context_line":"        def read(self):"},{"line_number":244,"context_line":"            get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":245,"context_line":"                        \u0027Key\u0027: self.object_name}"},{"line_number":246,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":247,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":248,"context_line":"                get_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":249,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":250,"context_line":"                get_args[\u0027SSECustomerKey\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"2ffca194_9df2962b","line":247,"range":{"start_line":245,"start_character":48,"end_line":247,"end_character":69},"updated":"2021-01-21 11:12:05.000000000","message":"nit: Same as L222 comment","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        @_wrap_exception"},{"line_number":243,"context_line":"        def read(self):"},{"line_number":244,"context_line":"            get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":245,"context_line":"                        \u0027Key\u0027: self.object_name}"},{"line_number":246,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":247,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":248,"context_line":"                get_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":249,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":250,"context_line":"                get_args[\u0027SSECustomerKey\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"9fe6b987_19d718c5","line":247,"range":{"start_line":245,"start_character":48,"end_line":247,"end_character":69},"in_reply_to":"2ffca194_9df2962b","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        @_wrap_exception"},{"line_number":243,"context_line":"        def read(self):"},{"line_number":244,"context_line":"            get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":245,"context_line":"                        \u0027Key\u0027: self.object_name}"},{"line_number":246,"context_line":"            if (CONF.backup_s3_sse_customer_algorithm is not None"},{"line_number":247,"context_line":"                    and CONF.backup_s3_sse_customer_key is not None):"},{"line_number":248,"context_line":"                get_args[\u0027SSECustomerAlgorithm\u0027] \u003d \\"},{"line_number":249,"context_line":"                    CONF.backup_s3_sse_customer_algorithm"},{"line_number":250,"context_line":"                get_args[\u0027SSECustomerKey\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"fe6c9e32_5a337853","line":247,"range":{"start_line":245,"start_character":48,"end_line":247,"end_character":69},"in_reply_to":"2ffca194_9df2962b","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":254,"context_line":"                try:"},{"line_number":255,"context_line":"                    resp \u003d self.conn.get_object(**get_args)"},{"line_number":256,"context_line":"                    return resp.get(\u0027Body\u0027).read()"},{"line_number":257,"context_line":"                except (socket.timeout, socket.error,"},{"line_number":258,"context_line":"                        ReadTimeoutError, IncompleteReadError) as e:"},{"line_number":259,"context_line":"                    last_exception \u003d e"},{"line_number":260,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":24,"id":"155cb6e8_cb16192a","line":257,"updated":"2021-01-21 11:12:05.000000000","message":"nit: Maybe add a comment on why we are doing these manual retries on top of the ones provided by boto3 for the read but not the write or the delete...","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                try:"},{"line_number":255,"context_line":"                    resp \u003d self.conn.get_object(**get_args)"},{"line_number":256,"context_line":"                    return resp.get(\u0027Body\u0027).read()"},{"line_number":257,"context_line":"                except (socket.timeout, socket.error,"},{"line_number":258,"context_line":"                        ReadTimeoutError, IncompleteReadError) as e:"},{"line_number":259,"context_line":"                    last_exception \u003d e"},{"line_number":260,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":24,"id":"b2a2e681_9377a0ce","line":257,"in_reply_to":"155cb6e8_cb16192a","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                try:"},{"line_number":255,"context_line":"                    resp \u003d self.conn.get_object(**get_args)"},{"line_number":256,"context_line":"                    return resp.get(\u0027Body\u0027).read()"},{"line_number":257,"context_line":"                except (socket.timeout, socket.error,"},{"line_number":258,"context_line":"                        ReadTimeoutError, IncompleteReadError) as e:"},{"line_number":259,"context_line":"                    last_exception \u003d e"},{"line_number":260,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":24,"id":"f3dcf853_657f75dc","line":257,"in_reply_to":"155cb6e8_cb16192a","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":263,"context_line":"    @_wrap_exception"},{"line_number":264,"context_line":"    def put_container(self, bucket):"},{"line_number":265,"context_line":"        \"\"\"Create the bucket if not exists.\"\"\""},{"line_number":266,"context_line":"        buckets \u003d self.conn.list_buckets()"},{"line_number":267,"context_line":"        if bucket not in [b.get(\u0027Name\u0027) for b in buckets.get(\u0027Buckets\u0027)]:"},{"line_number":268,"context_line":"            self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ea243fb4_bef3446c","line":266,"updated":"2021-01-21 11:12:05.000000000","message":"?: I\u0027m wondering if this could take a bit of time if we have a lot of buckets.  Is there a more efficient way to check if a bucket exists? (maybe there isn\u0027t)","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    @_wrap_exception"},{"line_number":264,"context_line":"    def put_container(self, bucket):"},{"line_number":265,"context_line":"        \"\"\"Create the bucket if not exists.\"\"\""},{"line_number":266,"context_line":"        buckets \u003d self.conn.list_buckets()"},{"line_number":267,"context_line":"        if bucket not in [b.get(\u0027Name\u0027) for b in buckets.get(\u0027Buckets\u0027)]:"},{"line_number":268,"context_line":"            self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1938f8b7_0d6c6d08","line":266,"in_reply_to":"ea243fb4_bef3446c","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    @_wrap_exception"},{"line_number":264,"context_line":"    def put_container(self, bucket):"},{"line_number":265,"context_line":"        \"\"\"Create the bucket if not exists.\"\"\""},{"line_number":266,"context_line":"        buckets \u003d self.conn.list_buckets()"},{"line_number":267,"context_line":"        if bucket not in [b.get(\u0027Name\u0027) for b in buckets.get(\u0027Buckets\u0027)]:"},{"line_number":268,"context_line":"            self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"c375c398_59c6d725","line":266,"in_reply_to":"ea243fb4_bef3446c","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":264,"context_line":"    def put_container(self, bucket):"},{"line_number":265,"context_line":"        \"\"\"Create the bucket if not exists.\"\"\""},{"line_number":266,"context_line":"        buckets \u003d self.conn.list_buckets()"},{"line_number":267,"context_line":"        if bucket not in [b.get(\u0027Name\u0027) for b in buckets.get(\u0027Buckets\u0027)]:"},{"line_number":268,"context_line":"            self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @_wrap_exception"}],"source_content_type":"text/x-python","patch_set":24,"id":"99dd3d24_ab9ac877","line":267,"range":{"start_line":267,"start_character":8,"end_line":267,"end_character":73},"updated":"2021-01-21 11:12:05.000000000","message":"nit: No need to build the whole list and then search within:\n\n    if any(bucket \u003d\u003d b.get(\u0027Name\u0027) for b in buckets.get(\u0027Buckets\u0027)):","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def put_container(self, bucket):"},{"line_number":265,"context_line":"        \"\"\"Create the bucket if not exists.\"\"\""},{"line_number":266,"context_line":"        buckets \u003d self.conn.list_buckets()"},{"line_number":267,"context_line":"        if bucket not in [b.get(\u0027Name\u0027) for b in buckets.get(\u0027Buckets\u0027)]:"},{"line_number":268,"context_line":"            self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @_wrap_exception"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f94b854_a498d8a8","line":267,"range":{"start_line":267,"start_character":8,"end_line":267,"end_character":73},"in_reply_to":"99dd3d24_ab9ac877","updated":"2021-01-27 08:52:52.000000000","message":"Ack","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def put_container(self, bucket):"},{"line_number":265,"context_line":"        \"\"\"Create the bucket if not exists.\"\"\""},{"line_number":266,"context_line":"        buckets \u003d self.conn.list_buckets()"},{"line_number":267,"context_line":"        if bucket not in [b.get(\u0027Name\u0027) for b in buckets.get(\u0027Buckets\u0027)]:"},{"line_number":268,"context_line":"            self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @_wrap_exception"}],"source_content_type":"text/x-python","patch_set":24,"id":"1b49f1aa_b86156f8","line":267,"range":{"start_line":267,"start_character":8,"end_line":267,"end_character":73},"in_reply_to":"99dd3d24_ab9ac877","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":273,"context_line":"        paginator \u003d self.conn.get_paginator(\u0027list_objects_v2\u0027)"},{"line_number":274,"context_line":"        page_iterator \u003d paginator.paginate(Bucket\u003dbucket,"},{"line_number":275,"context_line":"                                           Prefix\u003dprefix)"},{"line_number":276,"context_line":"        object_dict \u003d []"},{"line_number":277,"context_line":"        for page in page_iterator:"},{"line_number":278,"context_line":"            object_dict.extend(page.get(\u0027Contents\u0027))"},{"line_number":279,"context_line":"        return [obj_dict.get(\u0027Key\u0027) for obj_dict in object_dict]"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_object_writer(self, bucket, object_name, extra_metadata\u003dNone):"},{"line_number":282,"context_line":"        \"\"\"Return a writer object."},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"31df32ea_36177ba8","line":280,"range":{"start_line":276,"start_character":0,"end_line":280,"end_character":0},"updated":"2021-01-21 11:12:05.000000000","message":"nit: We could avoid building the intermediary list\n\n    import itertools as it\n\n    result \u003d [obj_dict.get(\u0027Key\u0027) for obj_dict in it.chain.from_iterable(\n              page.get(\u0027Contents\u0027) for page in page_iterator)]","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        paginator \u003d self.conn.get_paginator(\u0027list_objects_v2\u0027)"},{"line_number":274,"context_line":"        page_iterator \u003d paginator.paginate(Bucket\u003dbucket,"},{"line_number":275,"context_line":"                                           Prefix\u003dprefix)"},{"line_number":276,"context_line":"        object_dict \u003d []"},{"line_number":277,"context_line":"        for page in page_iterator:"},{"line_number":278,"context_line":"            object_dict.extend(page.get(\u0027Contents\u0027))"},{"line_number":279,"context_line":"        return [obj_dict.get(\u0027Key\u0027) for obj_dict in object_dict]"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_object_writer(self, bucket, object_name, extra_metadata\u003dNone):"},{"line_number":282,"context_line":"        \"\"\"Return a writer object."},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"164155bd_83ee4c4f","line":280,"range":{"start_line":276,"start_character":0,"end_line":280,"end_character":0},"in_reply_to":"31df32ea_36177ba8","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        paginator \u003d self.conn.get_paginator(\u0027list_objects_v2\u0027)"},{"line_number":274,"context_line":"        page_iterator \u003d paginator.paginate(Bucket\u003dbucket,"},{"line_number":275,"context_line":"                                           Prefix\u003dprefix)"},{"line_number":276,"context_line":"        object_dict \u003d []"},{"line_number":277,"context_line":"        for page in page_iterator:"},{"line_number":278,"context_line":"            object_dict.extend(page.get(\u0027Contents\u0027))"},{"line_number":279,"context_line":"        return [obj_dict.get(\u0027Key\u0027) for obj_dict in object_dict]"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_object_writer(self, bucket, object_name, extra_metadata\u003dNone):"},{"line_number":282,"context_line":"        \"\"\"Return a writer object."},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3e383c0e_173c55c3","line":280,"range":{"start_line":276,"start_character":0,"end_line":280,"end_character":0},"in_reply_to":"31df32ea_36177ba8","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":326,"context_line":"        \"\"\"S3 driver does not use any extra metadata.\"\"\""},{"line_number":327,"context_line":"        return"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def check_for_setup_error(self):"},{"line_number":330,"context_line":"        required_options \u003d (\u0027backup_s3_endpoint_url\u0027,"},{"line_number":331,"context_line":"                            \u0027backup_s3_store_access_key\u0027,"},{"line_number":332,"context_line":"                            \u0027backup_s3_store_secret_key\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"ad2a6ecc_78df1a95","line":329,"updated":"2021-01-21 11:12:05.000000000","message":"?: Should we check if only one of backup_s3_sse_customer_algorithm and backup_s3_sse_customer_key option is set?  Because in that case the option that is set will be ignored, since we need both to be set.\n\nWe could just log a warning, though I would prefer to consider it an error, because the configuration option could be misleading and the driver could be doing something that the operator doesn\u0027t want.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        \"\"\"S3 driver does not use any extra metadata.\"\"\""},{"line_number":327,"context_line":"        return"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def check_for_setup_error(self):"},{"line_number":330,"context_line":"        required_options \u003d (\u0027backup_s3_endpoint_url\u0027,"},{"line_number":331,"context_line":"                            \u0027backup_s3_store_access_key\u0027,"},{"line_number":332,"context_line":"                            \u0027backup_s3_store_secret_key\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"2b32024a_bdd3ed7d","line":329,"in_reply_to":"ad2a6ecc_78df1a95","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        \"\"\"S3 driver does not use any extra metadata.\"\"\""},{"line_number":327,"context_line":"        return"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def check_for_setup_error(self):"},{"line_number":330,"context_line":"        required_options \u003d (\u0027backup_s3_endpoint_url\u0027,"},{"line_number":331,"context_line":"                            \u0027backup_s3_store_access_key\u0027,"},{"line_number":332,"context_line":"                            \u0027backup_s3_store_secret_key\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"2e1c7e3a_64b88a3b","line":329,"in_reply_to":"ad2a6ecc_78df1a95","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":54,"context_line":":backup_s3_enable_progress_timer: Enable or Disable the timer to send the"},{"line_number":55,"context_line":"                                  periodic progress notifications to"},{"line_number":56,"context_line":"                                  Ceilometer when backing up the volume to the"},{"line_number":57,"context_line":"                                  S3 backend storage. The default value is True"},{"line_number":58,"context_line":"                                  to enable the timer. (default: True)"},{"line_number":59,"context_line":":backup_compression_algorithm: Compression algorithm to use for volume"},{"line_number":60,"context_line":"                               backups. Supported options are:"},{"line_number":61,"context_line":"                               None (to disable), zlib, bz2"}],"source_content_type":"text/x-python","patch_set":25,"id":"b931b354_cf9be587","line":58,"range":{"start_line":57,"start_character":54,"end_line":58,"end_character":54},"updated":"2021-01-25 13:55:10.000000000","message":"nit: Since you already include the default in parenthesis we could omit this sentence.","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":54,"context_line":":backup_s3_enable_progress_timer: Enable or Disable the timer to send the"},{"line_number":55,"context_line":"                                  periodic progress notifications to"},{"line_number":56,"context_line":"                                  Ceilometer when backing up the volume to the"},{"line_number":57,"context_line":"                                  S3 backend storage. The default value is True"},{"line_number":58,"context_line":"                                  to enable the timer. (default: True)"},{"line_number":59,"context_line":":backup_compression_algorithm: Compression algorithm to use for volume"},{"line_number":60,"context_line":"                               backups. Supported options are:"},{"line_number":61,"context_line":"                               None (to disable), zlib, bz2"}],"source_content_type":"text/x-python","patch_set":25,"id":"48d0244b_33c0401a","line":58,"range":{"start_line":57,"start_character":54,"end_line":58,"end_character":54},"in_reply_to":"b931b354_cf9be587","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":188,"context_line":"                retries\u003d{"},{"line_number":189,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":190,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":191,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":192,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":193,"context_line":"        else:"},{"line_number":194,"context_line":"            conn_args.update(verify\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"cf7133c8_f59fa2d2","line":191,"range":{"start_line":191,"start_character":11,"end_line":191,"end_character":44},"updated":"2021-01-25 13:55:10.000000000","message":"nit: It\u0027s more pythonic not checking against True or False and using the implicint checking \n\n  if CONF.backup_s3_verify_ssl:","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                retries\u003d{"},{"line_number":189,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":190,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":191,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":192,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":193,"context_line":"        else:"},{"line_number":194,"context_line":"            conn_args.update(verify\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"aec0e9ad_901c0182","line":191,"range":{"start_line":191,"start_character":11,"end_line":191,"end_character":44},"in_reply_to":"cf7133c8_f59fa2d2","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":194,"context_line":"            conn_args.update(verify\u003dFalse)"},{"line_number":195,"context_line":"        self.conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @staticmethod"},{"line_number":198,"context_line":"    def get_driver_options(cls):"},{"line_number":199,"context_line":"        additional_opts \u003d cls._get_oslo_driver_opts("},{"line_number":200,"context_line":"            \u0027backup_compression_algorithm\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"05db0ffb_58904cf3","line":197,"range":{"start_line":197,"start_character":5,"end_line":197,"end_character":17},"updated":"2021-01-25 13:55:10.000000000","message":"-1: classmethod","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":true,"context_lines":[{"line_number":194,"context_line":"            conn_args.update(verify\u003dFalse)"},{"line_number":195,"context_line":"        self.conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @staticmethod"},{"line_number":198,"context_line":"    def get_driver_options(cls):"},{"line_number":199,"context_line":"        additional_opts \u003d cls._get_oslo_driver_opts("},{"line_number":200,"context_line":"            \u0027backup_compression_algorithm\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"8e17f2a3_5f94d185","line":197,"range":{"start_line":197,"start_character":5,"end_line":197,"end_character":17},"in_reply_to":"05db0ffb_58904cf3","updated":"2021-01-27 08:52:52.000000000","message":"\u0027backup_compression_algorithm\u0027 is gotten in chunkeddriver.py. So, changed to get it from CONF.\nhttps://github.com/openstack/cinder/blob/master/cinder/backup/chunkeddriver.py#L50-L59","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0b28482e5e26edc93cbd504a9324151b79718912","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            conn_args.update(verify\u003dFalse)"},{"line_number":195,"context_line":"        self.conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @staticmethod"},{"line_number":198,"context_line":"    def get_driver_options(cls):"},{"line_number":199,"context_line":"        additional_opts \u003d cls._get_oslo_driver_opts("},{"line_number":200,"context_line":"            \u0027backup_compression_algorithm\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"568637bf_352911dd","line":197,"range":{"start_line":197,"start_character":5,"end_line":197,"end_character":17},"in_reply_to":"8e17f2a3_5f94d185","updated":"2021-01-28 09:58:34.000000000","message":"I see that we have an inconsistency in the backup drivers, since the method wasn\u0027t declared on the base driver.  I\u0027ll submit a patch to make it consistent.\n\nIn any case, in Python you can override a static method with a classmethod.  ;-)","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":208,"context_line":"        except boto_exc.ClientError as e:"},{"line_number":209,"context_line":"            # NOTE: If it was a 404 error, then the bucket does not exist."},{"line_number":210,"context_line":"            error_code \u003d e.response[\u0027Error\u0027][\u0027Code\u0027]"},{"line_number":211,"context_line":"            if error_code \u003d\u003d \u0027404\u0027:"},{"line_number":212,"context_line":"                self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":213,"context_line":"            else:"},{"line_number":214,"context_line":"                raise"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @_wrap_exception"},{"line_number":217,"context_line":"    def get_container_entries(self, bucket, prefix):"}],"source_content_type":"text/x-python","patch_set":25,"id":"00eeede3_715445d3","line":214,"range":{"start_line":211,"start_character":0,"end_line":214,"end_character":21},"updated":"2021-01-25 13:55:10.000000000","message":"nit: A frequently used pattern here is to check the \"exit\" condition first, so the continuation code doesn\u0027t need to be indented:\n\n            if error_code !\u003d \u0027404\u0027:\n                raise\n\n            self.conn.create_bucket(Bucket\u003dbucket)","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        except boto_exc.ClientError as e:"},{"line_number":209,"context_line":"            # NOTE: If it was a 404 error, then the bucket does not exist."},{"line_number":210,"context_line":"            error_code \u003d e.response[\u0027Error\u0027][\u0027Code\u0027]"},{"line_number":211,"context_line":"            if error_code \u003d\u003d \u0027404\u0027:"},{"line_number":212,"context_line":"                self.conn.create_bucket(Bucket\u003dbucket)"},{"line_number":213,"context_line":"            else:"},{"line_number":214,"context_line":"                raise"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @_wrap_exception"},{"line_number":217,"context_line":"    def get_container_entries(self, bucket, prefix):"}],"source_content_type":"text/x-python","patch_set":25,"id":"b2a41f8b_d8c868d8","line":214,"range":{"start_line":211,"start_character":0,"end_line":214,"end_character":21},"in_reply_to":"00eeede3_715445d3","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":282,"context_line":"                                                          value\u003dval)"},{"line_number":283,"context_line":"        if ((not CONF.backup_s3_sse_customer_algorithm)"},{"line_number":284,"context_line":"                !\u003d (not CONF.backup_s3_sse_customer_key)):"},{"line_number":285,"context_line":"            LOG.error(\"Both the backup_s3_sse_customer_algorithm and \""},{"line_number":286,"context_line":"                      \"backup_s3_sse_customer_key options must be set \""},{"line_number":287,"context_line":"                      \"to enable SSE.\")"},{"line_number":288,"context_line":"        conn_args \u003d {"}],"source_content_type":"text/x-python","patch_set":25,"id":"15d54073_bbdcb3a5","line":285,"range":{"start_line":285,"start_character":16,"end_line":285,"end_character":21},"updated":"2021-01-25 13:55:10.000000000","message":"-1: If we consider this an error we need to raise an exception, otherwise we should just log a warning (which is also fine).\n\nReading my comment in previous patch I see it could be misleading when I said \"consider it an error\", and it could be interpreted as log it as an error, when I wanted to say \"treat it as an error and raise an exception\".  Sorry about that.","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                                                          value\u003dval)"},{"line_number":283,"context_line":"        if ((not CONF.backup_s3_sse_customer_algorithm)"},{"line_number":284,"context_line":"                !\u003d (not CONF.backup_s3_sse_customer_key)):"},{"line_number":285,"context_line":"            LOG.error(\"Both the backup_s3_sse_customer_algorithm and \""},{"line_number":286,"context_line":"                      \"backup_s3_sse_customer_key options must be set \""},{"line_number":287,"context_line":"                      \"to enable SSE.\")"},{"line_number":288,"context_line":"        conn_args \u003d {"}],"source_content_type":"text/x-python","patch_set":25,"id":"457487b5_d523a5af","line":285,"range":{"start_line":285,"start_character":16,"end_line":285,"end_character":21},"in_reply_to":"15d54073_bbdcb3a5","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":299,"context_line":"                retries\u003d{"},{"line_number":300,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":301,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":302,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":303,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            conn_args.update(verify\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"cae5148c_fa6d3ea4","line":302,"range":{"start_line":302,"start_character":0,"end_line":302,"end_character":45},"updated":"2021-01-25 13:55:10.000000000","message":"nit: It\u0027s more pythonic not checking against True or False and using the implicint checking \n\n  if CONF.backup_s3_verify_ssl:","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                retries\u003d{"},{"line_number":300,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":301,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":302,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":303,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            conn_args.update(verify\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"64c6cb36_db0a1fc2","line":302,"range":{"start_line":302,"start_character":0,"end_line":302,"end_character":45},"in_reply_to":"cae5148c_fa6d3ea4","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":300,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":301,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":302,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":303,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            conn_args.update(verify\u003dFalse)"},{"line_number":306,"context_line":"        conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"}],"source_content_type":"text/x-python","patch_set":25,"id":"28d58afc_38d4803d","line":303,"range":{"start_line":303,"start_character":0,"end_line":303,"end_character":64},"updated":"2021-01-25 13:55:10.000000000","message":"nit: I apologize, as I probably induced this change with my comment on the close method. For single value change/addition we usually use what you had in the previous patch:\n\n    conn_args[\u0027verify\u0027] \u003d CONF.backup_s3_ca_cert_file\n\nAnd for multiple changes/additions we use the `update` method instead.","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                    \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":301,"context_line":"                    \u0027mode\u0027: CONF.backup_s3_retry_mode})}"},{"line_number":302,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":303,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            conn_args.update(verify\u003dFalse)"},{"line_number":306,"context_line":"        conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ecd10bef_5388f265","line":303,"range":{"start_line":303,"start_character":0,"end_line":303,"end_character":64},"in_reply_to":"28d58afc_38d4803d","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":302,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":303,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            conn_args.update(verify\u003dFalse)"},{"line_number":306,"context_line":"        conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":307,"context_line":"        try:"},{"line_number":308,"context_line":"            conn.list_buckets()"}],"source_content_type":"text/x-python","patch_set":25,"id":"68157321_029712b1","line":305,"range":{"start_line":305,"start_character":22,"end_line":305,"end_character":28},"updated":"2021-01-25 13:55:10.000000000","message":"ditto","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        if CONF.backup_s3_verify_ssl is True:"},{"line_number":303,"context_line":"            conn_args.update(verify\u003dCONF.backup_s3_ca_cert_file)"},{"line_number":304,"context_line":"        else:"},{"line_number":305,"context_line":"            conn_args.update(verify\u003dFalse)"},{"line_number":306,"context_line":"        conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":307,"context_line":"        try:"},{"line_number":308,"context_line":"            conn.list_buckets()"}],"source_content_type":"text/x-python","patch_set":25,"id":"8c2fa55c_2ac41478","line":305,"range":{"start_line":305,"start_character":22,"end_line":305,"end_character":28},"in_reply_to":"68157321_029712b1","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":true,"context_lines":[{"line_number":338,"context_line":"                    \u0027Key\u0027: self.object_name,"},{"line_number":339,"context_line":"                    \u0027ContentLength\u0027: len(self.data)}"},{"line_number":340,"context_line":"        if CONF.backup_s3_md5_validation:"},{"line_number":341,"context_line":"            put_args.update(ContentMD5\u003dcontentmd5)"},{"line_number":342,"context_line":"        if (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":343,"context_line":"                and not CONF.backup_s3_sse_customer_key):"},{"line_number":344,"context_line":"            put_args.update("}],"source_content_type":"text/x-python","patch_set":25,"id":"fa9f39ce_f82f9ac6","line":341,"range":{"start_line":341,"start_character":0,"end_line":341,"end_character":50},"updated":"2021-01-25 13:55:10.000000000","message":"nit: ditto","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                    \u0027Key\u0027: self.object_name,"},{"line_number":339,"context_line":"                    \u0027ContentLength\u0027: len(self.data)}"},{"line_number":340,"context_line":"        if CONF.backup_s3_md5_validation:"},{"line_number":341,"context_line":"            put_args.update(ContentMD5\u003dcontentmd5)"},{"line_number":342,"context_line":"        if (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":343,"context_line":"                and not CONF.backup_s3_sse_customer_key):"},{"line_number":344,"context_line":"            put_args.update("}],"source_content_type":"text/x-python","patch_set":25,"id":"c3c1e836_4a94087c","line":341,"range":{"start_line":341,"start_character":0,"end_line":341,"end_character":50},"in_reply_to":"fa9f39ce_f82f9ac6","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"3f2b473bf9068994be04202998b36fed90df099d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0b28482e5e26edc93cbd504a9324151b79718912","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                    \u0027- A filename of the CA cert bundle to use.\u0027),"},{"line_number":133,"context_line":"    cfg.BoolOpt(\u0027backup_s3_md5_validation\u0027, default\u003dTrue,"},{"line_number":134,"context_line":"                help\u003d\u0027Enable or Disable md5 validation in the s3 backend.\u0027),"},{"line_number":135,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_key\u0027, default\u003dNone, secret\u003dTrue,"},{"line_number":136,"context_line":"               help\u003d\u0027The SSECustomerKey. backup_s3_sse_customer_algorithm \u0027"},{"line_number":137,"context_line":"                    \u0027must be set at the same time to enable SSE.\u0027),"},{"line_number":138,"context_line":"    cfg.StrOpt(\u0027backup_s3_sse_customer_algorithm\u0027, default\u003dNone,"},{"line_number":139,"context_line":"               help\u003d\u0027The SSECustomerAlgorithm. backup_s3_sse_customer_key \u0027"},{"line_number":140,"context_line":"                    \u0027must be set at the same time to enable SSE.\u0027)"},{"line_number":141,"context_line":"]"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":28,"id":"c77d8386_57d81387","line":140,"range":{"start_line":135,"start_character":0,"end_line":140,"end_character":66},"updated":"2021-01-28 09:58:34.000000000","message":"nice addition, this will make it easier to avoid misconfigurations.","commit_id":"f133a0a07dcd251799323f66fc1f0db2e3a50681"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0b28482e5e26edc93cbd504a9324151b79718912","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                !\u003d (not CONF.backup_s3_sse_customer_key)):"},{"line_number":289,"context_line":"            LOG.warning(\"Both the backup_s3_sse_customer_algorithm and \""},{"line_number":290,"context_line":"                        \"backup_s3_sse_customer_key options must be set \""},{"line_number":291,"context_line":"                        \"to enable SSE. SSE is disabled.\")"},{"line_number":292,"context_line":"        conn_args \u003d {"},{"line_number":293,"context_line":"            \u0027aws_access_key_id\u0027: CONF.backup_s3_store_access_key,"},{"line_number":294,"context_line":"            \u0027aws_secret_access_key\u0027: CONF.backup_s3_store_secret_key,"}],"source_content_type":"text/x-python","patch_set":28,"id":"91fe0763_7367c662","line":291,"range":{"start_line":291,"start_character":40,"end_line":291,"end_character":55},"updated":"2021-01-28 09:58:34.000000000","message":"Nice addition!","commit_id":"f133a0a07dcd251799323f66fc1f0db2e3a50681"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a5635d6bbb5ffda9c63637d6159d5466fcf3eb8b","unresolved":true,"context_lines":[{"line_number":373,"context_line":"            get_args.update("},{"line_number":374,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":375,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"},{"line_number":376,"context_line":"        # NOTE: these retries account for errors that occur when streamming"},{"line_number":377,"context_line":"        # down the data from s3 (i.e. socket errors and read timeouts that"},{"line_number":378,"context_line":"        # occur after recieving an OK response from s3). Other retryable"},{"line_number":379,"context_line":"        # exceptions such as throttling errors and 5xx errors are already"}],"source_content_type":"text/x-python","patch_set":28,"id":"adf79869_a1949ae6","line":376,"range":{"start_line":376,"start_character":65,"end_line":376,"end_character":75},"updated":"2021-01-27 13:51:39.000000000","message":"nit: streaming (only correct this if you have to put up a new patch set).  This is a good comment, by the way.","commit_id":"f133a0a07dcd251799323f66fc1f0db2e3a50681"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"0d831398d6d99c88c99c3c50ddbeb8ce8fb861f2","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            get_args.update("},{"line_number":374,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":375,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"},{"line_number":376,"context_line":"        # NOTE: these retries account for errors that occur when streamming"},{"line_number":377,"context_line":"        # down the data from s3 (i.e. socket errors and read timeouts that"},{"line_number":378,"context_line":"        # occur after recieving an OK response from s3). Other retryable"},{"line_number":379,"context_line":"        # exceptions such as throttling errors and 5xx errors are already"}],"source_content_type":"text/x-python","patch_set":28,"id":"dd0e3f95_d6e9beeb","line":376,"range":{"start_line":376,"start_character":65,"end_line":376,"end_character":75},"in_reply_to":"adf79869_a1949ae6","updated":"2021-01-28 08:35:33.000000000","message":"Done","commit_id":"f133a0a07dcd251799323f66fc1f0db2e3a50681"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0b28482e5e26edc93cbd504a9324151b79718912","unresolved":true,"context_lines":[{"line_number":291,"context_line":"                !\u003d (not CONF.backup_s3_sse_customer_key)):"},{"line_number":292,"context_line":"            LOG.warning(\"Both the backup_s3_sse_customer_algorithm and \""},{"line_number":293,"context_line":"                        \"backup_s3_sse_customer_key options must be set \""},{"line_number":294,"context_line":"                        \"to enable SSE. SSE is disabled.\")"},{"line_number":295,"context_line":"        conf_args \u003d dict("},{"line_number":296,"context_line":"            connect_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":297,"context_line":"            read_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":298,"context_line":"            max_pool_connections\u003dCONF.backup_s3_max_pool_connections,"},{"line_number":299,"context_line":"            retries\u003d{"},{"line_number":300,"context_line":"                \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":301,"context_line":"                \u0027mode\u0027: CONF.backup_s3_retry_mode})"},{"line_number":302,"context_line":"        if CONF.backup_s3_http_proxy:"},{"line_number":303,"context_line":"            conf_args[\u0027proxies\u0027] \u003d {\u0027http\u0027: CONF.backup_s3_http_proxy}"},{"line_number":304,"context_line":"        if CONF.backup_s3_https_proxy:"},{"line_number":305,"context_line":"            conf_args.setdefault(\u0027proxies\u0027, {}).update("},{"line_number":306,"context_line":"                {\u0027https\u0027: CONF.backup_s3_https_proxy})"},{"line_number":307,"context_line":"        conn_args \u003d {"},{"line_number":308,"context_line":"            \u0027aws_access_key_id\u0027: CONF.backup_s3_store_access_key,"},{"line_number":309,"context_line":"            \u0027aws_secret_access_key\u0027: CONF.backup_s3_store_secret_key,"},{"line_number":310,"context_line":"            \u0027endpoint_url\u0027: CONF.backup_s3_endpoint_url,"},{"line_number":311,"context_line":"            \u0027config\u0027: Config(**conf_args)}"},{"line_number":312,"context_line":"        if CONF.backup_s3_verify_ssl:"},{"line_number":313,"context_line":"            conn_args[\u0027verify\u0027] \u003d CONF.backup_s3_ca_cert_file"},{"line_number":314,"context_line":"        else:"},{"line_number":315,"context_line":"            conn_args[\u0027verify\u0027] \u003d False"},{"line_number":316,"context_line":"        conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":317,"context_line":"        try:"},{"line_number":318,"context_line":"            conn.list_buckets()"},{"line_number":319,"context_line":"        except Exception:"},{"line_number":320,"context_line":"            LOG.exception(\"Cannot list s3 buckets during backup \""},{"line_number":321,"context_line":"                          \"driver initialization.\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"afb7aeab_1ab93cac","line":318,"range":{"start_line":294,"start_character":58,"end_line":318,"end_character":31},"updated":"2021-01-28 09:58:34.000000000","message":"-1: This is the same thing we do in the `__init__` method, so we already have the client in `self.conn`.  Why don\u0027t we just replace all this with:\n\n    try:\n        self.conn.list_buckets()\n\nOr am I missing something?","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fe9ade5303b1956e8c2cf87c40ff6e5afd0d31c4","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                !\u003d (not CONF.backup_s3_sse_customer_key)):"},{"line_number":292,"context_line":"            LOG.warning(\"Both the backup_s3_sse_customer_algorithm and \""},{"line_number":293,"context_line":"                        \"backup_s3_sse_customer_key options must be set \""},{"line_number":294,"context_line":"                        \"to enable SSE. SSE is disabled.\")"},{"line_number":295,"context_line":"        conf_args \u003d dict("},{"line_number":296,"context_line":"            connect_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":297,"context_line":"            read_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":298,"context_line":"            max_pool_connections\u003dCONF.backup_s3_max_pool_connections,"},{"line_number":299,"context_line":"            retries\u003d{"},{"line_number":300,"context_line":"                \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":301,"context_line":"                \u0027mode\u0027: CONF.backup_s3_retry_mode})"},{"line_number":302,"context_line":"        if CONF.backup_s3_http_proxy:"},{"line_number":303,"context_line":"            conf_args[\u0027proxies\u0027] \u003d {\u0027http\u0027: CONF.backup_s3_http_proxy}"},{"line_number":304,"context_line":"        if CONF.backup_s3_https_proxy:"},{"line_number":305,"context_line":"            conf_args.setdefault(\u0027proxies\u0027, {}).update("},{"line_number":306,"context_line":"                {\u0027https\u0027: CONF.backup_s3_https_proxy})"},{"line_number":307,"context_line":"        conn_args \u003d {"},{"line_number":308,"context_line":"            \u0027aws_access_key_id\u0027: CONF.backup_s3_store_access_key,"},{"line_number":309,"context_line":"            \u0027aws_secret_access_key\u0027: CONF.backup_s3_store_secret_key,"},{"line_number":310,"context_line":"            \u0027endpoint_url\u0027: CONF.backup_s3_endpoint_url,"},{"line_number":311,"context_line":"            \u0027config\u0027: Config(**conf_args)}"},{"line_number":312,"context_line":"        if CONF.backup_s3_verify_ssl:"},{"line_number":313,"context_line":"            conn_args[\u0027verify\u0027] \u003d CONF.backup_s3_ca_cert_file"},{"line_number":314,"context_line":"        else:"},{"line_number":315,"context_line":"            conn_args[\u0027verify\u0027] \u003d False"},{"line_number":316,"context_line":"        conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":317,"context_line":"        try:"},{"line_number":318,"context_line":"            conn.list_buckets()"},{"line_number":319,"context_line":"        except Exception:"},{"line_number":320,"context_line":"            LOG.exception(\"Cannot list s3 buckets during backup \""},{"line_number":321,"context_line":"                          \"driver initialization.\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"17caee9d_e5f8c7a8","line":318,"range":{"start_line":294,"start_character":58,"end_line":318,"end_character":31},"in_reply_to":"84ba73ce_b46f8070","updated":"2021-01-29 16:18:16.000000000","message":"Done","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"924feecfe677b0afaa6f608449689b09c0b5a8dc","unresolved":true,"context_lines":[{"line_number":291,"context_line":"                !\u003d (not CONF.backup_s3_sse_customer_key)):"},{"line_number":292,"context_line":"            LOG.warning(\"Both the backup_s3_sse_customer_algorithm and \""},{"line_number":293,"context_line":"                        \"backup_s3_sse_customer_key options must be set \""},{"line_number":294,"context_line":"                        \"to enable SSE. SSE is disabled.\")"},{"line_number":295,"context_line":"        conf_args \u003d dict("},{"line_number":296,"context_line":"            connect_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":297,"context_line":"            read_timeout\u003dCONF.backup_s3_timeout,"},{"line_number":298,"context_line":"            max_pool_connections\u003dCONF.backup_s3_max_pool_connections,"},{"line_number":299,"context_line":"            retries\u003d{"},{"line_number":300,"context_line":"                \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":301,"context_line":"                \u0027mode\u0027: CONF.backup_s3_retry_mode})"},{"line_number":302,"context_line":"        if CONF.backup_s3_http_proxy:"},{"line_number":303,"context_line":"            conf_args[\u0027proxies\u0027] \u003d {\u0027http\u0027: CONF.backup_s3_http_proxy}"},{"line_number":304,"context_line":"        if CONF.backup_s3_https_proxy:"},{"line_number":305,"context_line":"            conf_args.setdefault(\u0027proxies\u0027, {}).update("},{"line_number":306,"context_line":"                {\u0027https\u0027: CONF.backup_s3_https_proxy})"},{"line_number":307,"context_line":"        conn_args \u003d {"},{"line_number":308,"context_line":"            \u0027aws_access_key_id\u0027: CONF.backup_s3_store_access_key,"},{"line_number":309,"context_line":"            \u0027aws_secret_access_key\u0027: CONF.backup_s3_store_secret_key,"},{"line_number":310,"context_line":"            \u0027endpoint_url\u0027: CONF.backup_s3_endpoint_url,"},{"line_number":311,"context_line":"            \u0027config\u0027: Config(**conf_args)}"},{"line_number":312,"context_line":"        if CONF.backup_s3_verify_ssl:"},{"line_number":313,"context_line":"            conn_args[\u0027verify\u0027] \u003d CONF.backup_s3_ca_cert_file"},{"line_number":314,"context_line":"        else:"},{"line_number":315,"context_line":"            conn_args[\u0027verify\u0027] \u003d False"},{"line_number":316,"context_line":"        conn \u003d boto3.client(\u0027s3\u0027, **conn_args)"},{"line_number":317,"context_line":"        try:"},{"line_number":318,"context_line":"            conn.list_buckets()"},{"line_number":319,"context_line":"        except Exception:"},{"line_number":320,"context_line":"            LOG.exception(\"Cannot list s3 buckets during backup \""},{"line_number":321,"context_line":"                          \"driver initialization.\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"84ba73ce_b46f8070","line":318,"range":{"start_line":294,"start_character":58,"end_line":318,"end_character":31},"in_reply_to":"afb7aeab_1ab93cac","updated":"2021-01-28 16:09:53.000000000","message":"You\u0027re right! Thanks.","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0b28482e5e26edc93cbd504a9324151b79718912","unresolved":true,"context_lines":[{"line_number":349,"context_line":"                    \u0027ContentLength\u0027: len(self.data)}"},{"line_number":350,"context_line":"        if CONF.backup_s3_md5_validation:"},{"line_number":351,"context_line":"            put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":352,"context_line":"        if not (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":353,"context_line":"                or not CONF.backup_s3_sse_customer_key):"},{"line_number":354,"context_line":"            put_args.update("},{"line_number":355,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":356,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"}],"source_content_type":"text/x-python","patch_set":29,"id":"22dd38f9_44e97fc8","line":353,"range":{"start_line":352,"start_character":0,"end_line":353,"end_character":56},"updated":"2021-01-28 09:58:34.000000000","message":"-1: This seems like a complicated way of doing:\n\n        if (CONF.backup_s3_sse_customer_algorithm\n                and CONF.backup_s3_sse_customer_key):","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"924feecfe677b0afaa6f608449689b09c0b5a8dc","unresolved":true,"context_lines":[{"line_number":349,"context_line":"                    \u0027ContentLength\u0027: len(self.data)}"},{"line_number":350,"context_line":"        if CONF.backup_s3_md5_validation:"},{"line_number":351,"context_line":"            put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":352,"context_line":"        if not (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":353,"context_line":"                or not CONF.backup_s3_sse_customer_key):"},{"line_number":354,"context_line":"            put_args.update("},{"line_number":355,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":356,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"}],"source_content_type":"text/x-python","patch_set":29,"id":"eb33aa4b_146433d9","line":353,"range":{"start_line":352,"start_character":0,"end_line":353,"end_character":56},"in_reply_to":"22dd38f9_44e97fc8","updated":"2021-01-28 16:09:53.000000000","message":"Yes. This should be fixed.","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fe9ade5303b1956e8c2cf87c40ff6e5afd0d31c4","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    \u0027ContentLength\u0027: len(self.data)}"},{"line_number":350,"context_line":"        if CONF.backup_s3_md5_validation:"},{"line_number":351,"context_line":"            put_args[\u0027ContentMD5\u0027] \u003d contentmd5"},{"line_number":352,"context_line":"        if not (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":353,"context_line":"                or not CONF.backup_s3_sse_customer_key):"},{"line_number":354,"context_line":"            put_args.update("},{"line_number":355,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":356,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"}],"source_content_type":"text/x-python","patch_set":29,"id":"802b7521_f3f02619","line":353,"range":{"start_line":352,"start_character":0,"end_line":353,"end_character":56},"in_reply_to":"eb33aa4b_146433d9","updated":"2021-01-29 16:18:16.000000000","message":"Done","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0b28482e5e26edc93cbd504a9324151b79718912","unresolved":true,"context_lines":[{"line_number":374,"context_line":"    def read(self):"},{"line_number":375,"context_line":"        get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":376,"context_line":"                    \u0027Key\u0027: self.object_name}"},{"line_number":377,"context_line":"        if not (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":378,"context_line":"                or not CONF.backup_s3_sse_customer_key):"},{"line_number":379,"context_line":"            get_args.update("},{"line_number":380,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":381,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3113bf49_1318fe72","line":378,"range":{"start_line":377,"start_character":0,"end_line":378,"end_character":56},"updated":"2021-01-28 09:58:34.000000000","message":"-1: This seems like a complicated way of doing:\n\n        if (CONF.backup_s3_sse_customer_algorithm\n                and CONF.backup_s3_sse_customer_key):","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"924feecfe677b0afaa6f608449689b09c0b5a8dc","unresolved":true,"context_lines":[{"line_number":374,"context_line":"    def read(self):"},{"line_number":375,"context_line":"        get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":376,"context_line":"                    \u0027Key\u0027: self.object_name}"},{"line_number":377,"context_line":"        if not (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":378,"context_line":"                or not CONF.backup_s3_sse_customer_key):"},{"line_number":379,"context_line":"            get_args.update("},{"line_number":380,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":381,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"}],"source_content_type":"text/x-python","patch_set":29,"id":"e32e4657_0b36a04e","line":378,"range":{"start_line":377,"start_character":0,"end_line":378,"end_character":56},"in_reply_to":"3113bf49_1318fe72","updated":"2021-01-28 16:09:53.000000000","message":"ditto","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fe9ade5303b1956e8c2cf87c40ff6e5afd0d31c4","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    def read(self):"},{"line_number":375,"context_line":"        get_args \u003d {\u0027Bucket\u0027: self.bucket,"},{"line_number":376,"context_line":"                    \u0027Key\u0027: self.object_name}"},{"line_number":377,"context_line":"        if not (not CONF.backup_s3_sse_customer_algorithm"},{"line_number":378,"context_line":"                or not CONF.backup_s3_sse_customer_key):"},{"line_number":379,"context_line":"            get_args.update("},{"line_number":380,"context_line":"                SSECustomerAlgorithm\u003dCONF.backup_s3_sse_customer_algorithm,"},{"line_number":381,"context_line":"                SSECustomerKey\u003dCONF.backup_s3_sse_customer_key)"}],"source_content_type":"text/x-python","patch_set":29,"id":"88908ae5_641973a1","line":378,"range":{"start_line":377,"start_character":0,"end_line":378,"end_character":56},"in_reply_to":"e32e4657_0b36a04e","updated":"2021-01-29 16:18:16.000000000","message":"Done","commit_id":"c3d2c342400df85193a6e94dd4768b64550bd63e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3bb52f249ba9cf3df67a25da805844f1e90212fe","unresolved":true,"context_lines":[{"line_number":187,"context_line":"            retries\u003d{"},{"line_number":188,"context_line":"                \u0027max_attempts\u0027: CONF.backup_s3_retry_max_attempts,"},{"line_number":189,"context_line":"                \u0027mode\u0027: CONF.backup_s3_retry_mode})"},{"line_number":190,"context_line":"        if CONF.backup_s3_http_proxy:"},{"line_number":191,"context_line":"            config_args[\u0027proxies\u0027] \u003d {\u0027http\u0027: CONF.backup_s3_http_proxy}"},{"line_number":192,"context_line":"        if CONF.backup_s3_https_proxy:"},{"line_number":193,"context_line":"            config_args.setdefault(\u0027proxies\u0027, {}).update("},{"line_number":194,"context_line":"                {\u0027https\u0027: CONF.backup_s3_https_proxy})"},{"line_number":195,"context_line":"        conn_args \u003d {"},{"line_number":196,"context_line":"            \u0027aws_access_key_id\u0027: CONF.backup_s3_store_access_key,"},{"line_number":197,"context_line":"            \u0027aws_secret_access_key\u0027: CONF.backup_s3_store_secret_key,"}],"source_content_type":"text/x-python","patch_set":30,"id":"ae995317_05824425","line":194,"range":{"start_line":190,"start_character":0,"end_line":194,"end_character":54},"updated":"2021-01-28 23:47:06.000000000","message":"Glad you got this figured out!  This looks like a good way to handle it.","commit_id":"337248138e9265e4dcd2555199a18721ef1db902"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fe9ade5303b1956e8c2cf87c40ff6e5afd0d31c4","unresolved":true,"context_lines":[{"line_number":190,"context_line":"        if CONF.backup_s3_http_proxy:"},{"line_number":191,"context_line":"            config_args[\u0027proxies\u0027] \u003d {\u0027http\u0027: CONF.backup_s3_http_proxy}"},{"line_number":192,"context_line":"        if CONF.backup_s3_https_proxy:"},{"line_number":193,"context_line":"            config_args.setdefault(\u0027proxies\u0027, {}).update("},{"line_number":194,"context_line":"                {\u0027https\u0027: CONF.backup_s3_https_proxy})"},{"line_number":195,"context_line":"        conn_args \u003d {"},{"line_number":196,"context_line":"            \u0027aws_access_key_id\u0027: CONF.backup_s3_store_access_key,"},{"line_number":197,"context_line":"            \u0027aws_secret_access_key\u0027: CONF.backup_s3_store_secret_key,"},{"line_number":198,"context_line":"            \u0027endpoint_url\u0027: CONF.backup_s3_endpoint_url,"}],"source_content_type":"text/x-python","patch_set":30,"id":"612be47d_7fd2147f","line":195,"range":{"start_line":193,"start_character":0,"end_line":195,"end_character":0},"updated":"2021-01-29 16:18:16.000000000","message":"nit: There\u0027s really no need to create the dictionary for the update\n\n            config_args.setdefault(\u0027proxies\u0027, {})[\u0027https\u0027] \u003d (\n                CONF.backup_s3_https_proxy)\n\nor\n\n            config_args.setdefault(\u0027proxies\u0027, {}).update(https\u003d\n                CONF.backup_s3_https_proxy)","commit_id":"337248138e9265e4dcd2555199a18721ef1db902"}],"cinder/cmd/backup.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":73,"context_line":"# operations in a thread. swiftclient will log requests and responses at DEBUG"},{"line_number":74,"context_line":"# level, which can cause a thread switch and break the backup operation. So we"},{"line_number":75,"context_line":"# set a default log level of WARN for swiftclient to try and avoid this issue."},{"line_number":76,"context_line":"# NOTE(mokuri): We set a default log level of WARN for botocore to avoid"},{"line_number":77,"context_line":"# breaking the backup operation."},{"line_number":78,"context_line":"_EXTRA_DEFAULT_LOG_LEVELS \u003d [\u0027swiftclient\u003dWARN\u0027, \u0027botocore\u003dWARN\u0027]"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"6ef4fa06_0b5f0d89","line":76,"range":{"start_line":76,"start_character":7,"end_line":76,"end_character":13},"updated":"2021-01-21 11:12:05.000000000","message":"nit: We no longer include names in the notes (the ones we have right now are technical debt).\n\nAlso, you could remove the name from the previous note and change \"swiftclient\" with \"swiftclient and boto\"","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":73,"context_line":"# operations in a thread. swiftclient will log requests and responses at DEBUG"},{"line_number":74,"context_line":"# level, which can cause a thread switch and break the backup operation. So we"},{"line_number":75,"context_line":"# set a default log level of WARN for swiftclient to try and avoid this issue."},{"line_number":76,"context_line":"# NOTE(mokuri): We set a default log level of WARN for botocore to avoid"},{"line_number":77,"context_line":"# breaking the backup operation."},{"line_number":78,"context_line":"_EXTRA_DEFAULT_LOG_LEVELS \u003d [\u0027swiftclient\u003dWARN\u0027, \u0027botocore\u003dWARN\u0027]"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"256a2874_d5987f87","line":76,"range":{"start_line":76,"start_character":7,"end_line":76,"end_character":13},"in_reply_to":"6ef4fa06_0b5f0d89","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":73,"context_line":"# operations in a thread. swiftclient will log requests and responses at DEBUG"},{"line_number":74,"context_line":"# level, which can cause a thread switch and break the backup operation. So we"},{"line_number":75,"context_line":"# set a default log level of WARN for swiftclient to try and avoid this issue."},{"line_number":76,"context_line":"# NOTE(mokuri): We set a default log level of WARN for botocore to avoid"},{"line_number":77,"context_line":"# breaking the backup operation."},{"line_number":78,"context_line":"_EXTRA_DEFAULT_LOG_LEVELS \u003d [\u0027swiftclient\u003dWARN\u0027, \u0027botocore\u003dWARN\u0027]"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"60effbb7_2cb651f8","line":76,"range":{"start_line":76,"start_character":7,"end_line":76,"end_character":13},"in_reply_to":"6ef4fa06_0b5f0d89","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"}],"cinder/tests/unit/backup/drivers/test_backup_s3.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import bz2"},{"line_number":2,"context_line":"import zlib"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"import ddt"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_0dc6784a","line":1,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"import zlib"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"import ddt"},{"line_number":5,"context_line":"from botocore.exceptions import ClientError"},{"line_number":6,"context_line":"from cinder.tests.unit import test"},{"line_number":7,"context_line":"from cinder import db"},{"line_number":8,"context_line":"from cinder.tests.unit import fake_constants as fake"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_6dc5743c","line":5,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (ddt, botocore.exceptions.clienterror)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"import ddt"},{"line_number":5,"context_line":"from botocore.exceptions import ClientError"},{"line_number":6,"context_line":"from cinder.tests.unit import test"},{"line_number":7,"context_line":"from cinder import db"},{"line_number":8,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":9,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_4dc0702b","line":6,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder.tests.unit import test\u0027 is identified as Application and \u0027from botocore.exceptions import ClientError\u0027 is identified as Third Party.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"import ddt"},{"line_number":5,"context_line":"from botocore.exceptions import ClientError"},{"line_number":6,"context_line":"from cinder.tests.unit import test"},{"line_number":7,"context_line":"from cinder import db"},{"line_number":8,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":9,"context_line":"from cinder import exception"},{"line_number":10,"context_line":"from cinder.backup.drivers import s3 as s3_dr"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_addcac18","line":7,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.tests.unit.test, cinder.db)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"from cinder.tests.unit import test"},{"line_number":7,"context_line":"from cinder import db"},{"line_number":8,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":9,"context_line":"from cinder import exception"},{"line_number":10,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":11,"context_line":"from cinder import context"},{"line_number":12,"context_line":"import boto3"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8ddf280b","line":9,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.tests.unit.fake_constants, cinder.exception)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"from cinder import db"},{"line_number":8,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":9,"context_line":"from cinder import exception"},{"line_number":10,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":11,"context_line":"from cinder import context"},{"line_number":12,"context_line":"import boto3"},{"line_number":13,"context_line":"from moto import mock_s3"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ede6a4e8","line":10,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.exception, cinder.backup.drivers.s3)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from cinder import exception"},{"line_number":10,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":11,"context_line":"from cinder import context"},{"line_number":12,"context_line":"import boto3"},{"line_number":13,"context_line":"from moto import mock_s3"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_cde920b8","line":12,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.context, boto3)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from cinder import exception"},{"line_number":10,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":11,"context_line":"from cinder import context"},{"line_number":12,"context_line":"import boto3"},{"line_number":13,"context_line":"from moto import mock_s3"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_2dd09cf7","line":12,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import boto3\u0027 should be before \u0027from cinder import context\u0027 and in a different group.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"from cinder import exception"},{"line_number":10,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":11,"context_line":"from cinder import context"},{"line_number":12,"context_line":"import boto3"},{"line_number":13,"context_line":"from moto import mock_s3"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_0dcb184a","line":12,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import boto3\u0027 is identified as Third Party and \u0027from cinder import context\u0027 is identified as Application.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"import boto3"},{"line_number":13,"context_line":"from moto import mock_s3"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import hashlib"},{"line_number":16,"context_line":"import tempfile"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":"import shutil"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_6dda9417","line":15,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import hashlib\u0027 should be before \u0027from moto import mock_s3\u0027 and in a different group.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import hashlib"},{"line_number":16,"context_line":"import tempfile"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_4dd510e5","line":18,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (unittest.mock, shutil)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import tempfile"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ad05cc7c","line":19,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (shutil, os)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8d08c891","line":20,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from oslo_config import cfg\u0027 is identified as Third Party and \u0027import os\u0027 is identified as Stdlib.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_edffc464","line":21,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (oslo_config.cfg, cinder.objects)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_cd02c06f","line":21,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from cinder import objects\u0027 is identified as Application and \u0027from oslo_config import cfg\u0027 is identified as Third Party.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"},{"line_number":25,"context_line":"import filecmp"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_2df9bc7f","line":22,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.objects, cinder.i18n._)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"},{"line_number":25,"context_line":"import filecmp"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_0df4b886","line":23,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027from eventlet import tpool\u0027 should be before \u0027from cinder.i18n import _\u0027 and in a different group.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"},{"line_number":25,"context_line":"import filecmp"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_6df3b49f","line":23,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from eventlet import tpool\u0027 is identified as Third Party and \u0027from cinder.i18n import _\u0027 is identified as Application.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"},{"line_number":25,"context_line":"import filecmp"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_4deeb0b4","line":24,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import threading\u0027 should be before \u0027from eventlet import tpool\u0027 and in a different group.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import objects"},{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"},{"line_number":25,"context_line":"import filecmp"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ad2aece3","line":24,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import threading\u0027 is identified as Stdlib and \u0027from eventlet import tpool\u0027 is identified as Third Party.","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder.i18n import _"},{"line_number":23,"context_line":"from eventlet import tpool"},{"line_number":24,"context_line":"import threading"},{"line_number":25,"context_line":"import filecmp"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"ANY \u003d mock.ANY"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_8d2d68ff","line":25,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: H306: imports not in alphabetical order (threading, filecmp)","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def fake_md5(arg\u003d\"test\"):"},{"line_number":33,"context_line":"    class result(object):"},{"line_number":34,"context_line":"        def hexdigest(self):"},{"line_number":35,"context_line":"            return \u0027fake-md5-sum\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_ed34e44c","line":32,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        def digest(self):"},{"line_number":38,"context_line":"            return \u0027fake-md5-sum\u0027.encode(\u0027utf-8\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        def update(self,_):"},{"line_number":41,"context_line":"            return"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    ret \u003d result()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_cd37604d","line":40,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    ret \u003d result()"},{"line_number":44,"context_line":"    return ret"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@mock_s3"},{"line_number":47,"context_line":"@ddt.ddt"},{"line_number":48,"context_line":"class BackupS3TestCase(test.TestCase):"},{"line_number":49,"context_line":"    \"\"\"Test Case for s3.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_2d3edc28","line":46,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea9ba0706a9a3b80e3288543f678a586ad4a3a9c","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        # With no user_id the driver should not initialize itself."},{"line_number":698,"context_line":"        admin_context \u003d context.get_admin_context()"},{"line_number":699,"context_line":"        s3_dr.S3BackupDriver(admin_context)"},{"line_number":700,"context_line":"        mock_initialize.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_0d39583e","line":700,"updated":"2020-08-17 21:19:14.000000000","message":"pep8: W292 no newline at end of file","commit_id":"005f0f4dae59638f4805a4867483330ef5f0eb21"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f6d2e8c6d7e2c650b02521e3ffd64e2e8c37660","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import tempfile"},{"line_number":23,"context_line":"import threading"},{"line_number":24,"context_line":"import zlib"},{"line_number":25,"context_line":"from unittest import mock"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import boto3"},{"line_number":28,"context_line":"import ddt"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_0ee93219","line":25,"updated":"2020-08-19 12:51:54.000000000","message":"pep8: H306: imports not in alphabetical order (zlib, unittest.mock)","commit_id":"c1c0745998faa78bdfcc86071739ae007a7b9f4d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f6d2e8c6d7e2c650b02521e3ffd64e2e8c37660","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import boto3"},{"line_number":28,"context_line":"import ddt"},{"line_number":29,"context_line":"from botocore.exceptions import ClientError"},{"line_number":30,"context_line":"from eventlet import tpool"},{"line_number":31,"context_line":"from moto import mock_s3"},{"line_number":32,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_eeeb1e0f","line":29,"updated":"2020-08-19 12:51:54.000000000","message":"pep8: H306: imports not in alphabetical order (ddt, botocore.exceptions.clienterror)","commit_id":"c1c0745998faa78bdfcc86071739ae007a7b9f4d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f6d2e8c6d7e2c650b02521e3ffd64e2e8c37660","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from cinder import db"},{"line_number":36,"context_line":"from cinder import exception"},{"line_number":37,"context_line":"from cinder import objects"},{"line_number":38,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":39,"context_line":"from cinder.i18n import _"},{"line_number":40,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":41,"context_line":"from cinder.tests.unit import test"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_4ef32a0b","line":38,"updated":"2020-08-19 12:51:54.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.objects, cinder.backup.drivers.s3)","commit_id":"c1c0745998faa78bdfcc86071739ae007a7b9f4d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2dd98c10df0ac92a9d7f34332c70b05d72bc8702","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from cinder import context"},{"line_number":35,"context_line":"from cinder import db"},{"line_number":36,"context_line":"from cinder import exception"},{"line_number":37,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":38,"context_line":"from cinder import objects"},{"line_number":39,"context_line":"from cinder.i18n import _"},{"line_number":40,"context_line":"from cinder.tests.unit import fake_constants as fake"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_365c487d","line":37,"updated":"2020-08-19 16:36:01.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.exception, cinder.backup.drivers.s3)","commit_id":"ab724fbae1920b848ff41e0dc9d7cd3611717803"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2dd98c10df0ac92a9d7f34332c70b05d72bc8702","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder import exception"},{"line_number":37,"context_line":"from cinder.backup.drivers import s3 as s3_dr"},{"line_number":38,"context_line":"from cinder import objects"},{"line_number":39,"context_line":"from cinder.i18n import _"},{"line_number":40,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":41,"context_line":"from cinder.tests.unit import test"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_165f8472","line":39,"updated":"2020-08-19 16:36:01.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.objects, cinder.i18n._)","commit_id":"ab724fbae1920b848ff41e0dc9d7cd3611717803"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f3f097621612b6eb049d66a939f9f1cc253776d","unresolved":false,"context_lines":[{"line_number":706,"context_line":"        result \u003d service._prepare_output_data(already_compressed_data)"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        self.assertEqual(\u0027none\u0027, result[0])"},{"line_number":709,"context_line":"        self.assertEqual(already_compressed_data, result[1])"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_3b2408af","line":709,"updated":"2020-08-21 14:10:01.000000000","message":"pep8: W292 no newline at end of file","commit_id":"2bda97a595c81482f99c69a1f7bf2c4aa85a6ab5"}],"doc/source/configuration/block-storage/backup/s3-backup-driver.rst":[{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"1b4c1181dd6e5b63a1238d38978feb1f1537c191","unresolved":true,"context_lines":[{"line_number":2,"context_line":"S3 Storage backup driver"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The S3 backup driver backs up volumes to any type of Amazon S3 and S3 compatible object storages."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"To enable the S3 backup driver, include the following option in the ``cinder.conf`` file:"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"506c7790_a34e1e1d","line":5,"updated":"2020-12-20 01:51:27.000000000","message":"The line is too long it should be under 80 columns to pass doc8.","commit_id":"21e7bceb05bd002d774c5f5d6896a0ccf41cfbe9"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"e3ad4c8edee0f6badcb50d42bbe9ec87c5b753b5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"S3 Storage backup driver"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The S3 backup driver backs up volumes to any type of Amazon S3 and S3 compatible object storages."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"To enable the S3 backup driver, include the following option in the ``cinder.conf`` file:"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"73292ed0_c534e533","line":5,"in_reply_to":"506c7790_a34e1e1d","updated":"2020-12-23 01:26:05.000000000","message":"Done","commit_id":"21e7bceb05bd002d774c5f5d6896a0ccf41cfbe9"},{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"1b4c1181dd6e5b63a1238d38978feb1f1537c191","unresolved":true,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The S3 backup driver backs up volumes to any type of Amazon S3 and S3 compatible object storages."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"To enable the S3 backup driver, include the following option in the ``cinder.conf`` file:"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. code-block:: ini"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"537ce805_58f51003","line":7,"updated":"2020-12-20 01:51:27.000000000","message":"Same here, the line is too long.","commit_id":"21e7bceb05bd002d774c5f5d6896a0ccf41cfbe9"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"e3ad4c8edee0f6badcb50d42bbe9ec87c5b753b5","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The S3 backup driver backs up volumes to any type of Amazon S3 and S3 compatible object storages."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"To enable the S3 backup driver, include the following option in the ``cinder.conf`` file:"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. code-block:: ini"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"dcf83951_f0ad7216","line":7,"in_reply_to":"537ce805_58f51003","updated":"2020-12-23 01:26:05.000000000","message":"Done","commit_id":"21e7bceb05bd002d774c5f5d6896a0ccf41cfbe9"},{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"1b4c1181dd6e5b63a1238d38978feb1f1537c191","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. code-block:: ini"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    backup_driver \u003d cinder.backup.drivers.gcs.S3BackupDriver"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The following configuration options are available for the S3 backup driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"306aa7b8_9f98ac40","line":11,"updated":"2020-12-20 01:51:27.000000000","message":"I guess that\u0027s my fault, but there is still a \"gcs\" in the path.","commit_id":"21e7bceb05bd002d774c5f5d6896a0ccf41cfbe9"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"e3ad4c8edee0f6badcb50d42bbe9ec87c5b753b5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":".. code-block:: ini"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    backup_driver \u003d cinder.backup.drivers.gcs.S3BackupDriver"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The following configuration options are available for the S3 backup driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"40b7f81c_87056a15","line":11,"in_reply_to":"306aa7b8_9f98ac40","updated":"2020-12-23 01:26:05.000000000","message":"Done","commit_id":"21e7bceb05bd002d774c5f5d6896a0ccf41cfbe9"}],"lower-constraints.txt":[{"author":{"_account_id":32712,"name":"Arthur Outhenin-Chalandre","email":"arthur.outhenin.chalandre@gmail.com","username":"Mr_Freezeex"},"change_message_id":"1b4c1181dd6e5b63a1238d38978feb1f1537c191","unresolved":true,"context_lines":[{"line_number":30,"context_line":"google-api-python-client\u003d\u003d1.11.0"},{"line_number":31,"context_line":"greenlet\u003d\u003d0.4.16"},{"line_number":32,"context_line":"httplib2\u003d\u003d0.18.1"},{"line_number":33,"context_line":"idna\u003d\u003d2.10"},{"line_number":34,"context_line":"importlib-metadata\u003d\u003d3.1.1"},{"line_number":35,"context_line":"iso8601\u003d\u003d0.1.12"},{"line_number":36,"context_line":"Jinja2\u003d\u003d2.11.2"}],"source_content_type":"text/plain","patch_set":15,"id":"b727fb9e_54de606d","side":"PARENT","line":33,"updated":"2020-12-20 01:51:27.000000000","message":"Any specific reason for this downgrade?","commit_id":"d3ffa90baa959530eaa1cd1d4e3800fbe9148806"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"e3ad4c8edee0f6badcb50d42bbe9ec87c5b753b5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"google-api-python-client\u003d\u003d1.11.0"},{"line_number":31,"context_line":"greenlet\u003d\u003d0.4.16"},{"line_number":32,"context_line":"httplib2\u003d\u003d0.18.1"},{"line_number":33,"context_line":"idna\u003d\u003d2.10"},{"line_number":34,"context_line":"importlib-metadata\u003d\u003d3.1.1"},{"line_number":35,"context_line":"iso8601\u003d\u003d0.1.12"},{"line_number":36,"context_line":"Jinja2\u003d\u003d2.11.2"}],"source_content_type":"text/plain","patch_set":15,"id":"b34ca04d_a6051f88","side":"PARENT","line":33,"in_reply_to":"b727fb9e_54de606d","updated":"2020-12-23 01:26:05.000000000","message":"idna need downgrade for moto 1.3.14\nraise moto version upper than 1.3.15 and solved.","commit_id":"d3ffa90baa959530eaa1cd1d4e3800fbe9148806"}],"releasenotes/notes/backup_s3_driver-238e3612acd7cc06.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"501d1125ec87ef9e00d4c66cb2a3bd5c7dd8e4c3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Implementation of an s3 driver for cinder backups."},{"line_number":4,"context_line":"    This can be used with any s3 compatible API and supports encryption using"},{"line_number":5,"context_line":"    SSECustomerKey."},{"line_number":6,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_e6a68b0f","line":3,"updated":"2020-08-20 17:06:42.000000000","message":"The prelude section is for major, cinder-wide announcements that we want to make. This section should be removed.","commit_id":"34d9b6e034ac799d0e06c720f97d91394e109478"},{"author":{"_account_id":32304,"name":"Jegor van Opdorp","email":"jegor@leaf.cloud","username":"jopdorp"},"change_message_id":"ff9a9c6fb3c90500c183ff8cfc44781bed1f9897","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Implementation of an s3 driver for cinder backups."},{"line_number":4,"context_line":"    This can be used with any s3 compatible API and supports encryption using"},{"line_number":5,"context_line":"    SSECustomerKey."},{"line_number":6,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_bfcc9235","line":3,"in_reply_to":"9f560f44_e6a68b0f","updated":"2021-01-20 21:53:57.000000000","message":"will do","commit_id":"34d9b6e034ac799d0e06c720f97d91394e109478"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"501d1125ec87ef9e00d4c66cb2a3bd5c7dd8e4c3","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    Cinder backup s3 driver"},{"line_number":9,"context_line":"    `LP#1891462 \u003chttps://launchpad.net/bugs/1891462\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_067bbf7a","line":9,"updated":"2020-08-20 17:06:42.000000000","message":"This points to an instance evacuation bug. If anything, the release note should point to the blueprint, but I think it would be better to just have something along the lines of:\n\nAdded new backup driver to enable backing up Cinder volumes to S3-compatible storage.","commit_id":"34d9b6e034ac799d0e06c720f97d91394e109478"},{"author":{"_account_id":32304,"name":"Jegor van Opdorp","email":"jegor@leaf.cloud","username":"jopdorp"},"change_message_id":"ff9a9c6fb3c90500c183ff8cfc44781bed1f9897","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    Cinder backup s3 driver"},{"line_number":9,"context_line":"    `LP#1891462 \u003chttps://launchpad.net/bugs/1891462\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_ffd28ad0","line":9,"in_reply_to":"9f560f44_067bbf7a","updated":"2021-01-20 21:53:57.000000000","message":"Will change this, my bad, I wanted to point to the blueprint:\nhttps://blueprints.launchpad.net/cinder/+spec/support-s3-backup-driver","commit_id":"34d9b6e034ac799d0e06c720f97d91394e109478"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e1b84b2404a653fbcf96105b9eac2e31d1d721c9","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added new backup driver to enable backing up cinder volumes to S3-compatible storage."},{"line_number":5,"context_line":"    `Blueprint \u003chttps://blueprints.launchpad.net/cinder/+spec/support-s3-backup-driver\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"33090206_72a5a2c5","line":5,"range":{"start_line":5,"start_character":1,"end_line":5,"end_character":89},"updated":"2021-01-14 05:01:09.000000000","message":"You can probably just delete this part because the blue print doesn\u0027t provide a lot of information beyond what you say here.  But if you want the have a link to it (which is fine), I suggest changing this to\n\n  See the blueprint `Support s3 backup driver\n  \u003chttps://blueprints.launchpad.net/cinder/+spec/support-s3-backup-driver\u003e`_\n  for more information.","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"afcbd0924cf3b452ce1a835b1b15da1c39bbbfc2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added new backup driver to enable backing up cinder volumes to S3-compatible storage."},{"line_number":5,"context_line":"    `Blueprint \u003chttps://blueprints.launchpad.net/cinder/+spec/support-s3-backup-driver\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"05b1ab4f_fc53a557","line":5,"range":{"start_line":5,"start_character":1,"end_line":5,"end_character":89},"in_reply_to":"33090206_72a5a2c5","updated":"2021-01-17 23:58:12.000000000","message":"Done","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"edaa355984f555b9b3bcbfa97014606be72b52a0","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added new backup driver to enable backing up cinder volumes to S3-compatible storage."},{"line_number":5,"context_line":"    See the blueprint `Support s3 backup driver"},{"line_number":6,"context_line":"    \u003chttps://blueprints.launchpad.net/cinder/+spec/support-s3-backup-driver\u003e`_"},{"line_number":7,"context_line":"    for more information."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"a2b1b7be_2aa2b579","line":5,"updated":"2021-01-21 11:12:05.000000000","message":"nit: I think we should reference the backup driver page the patch adds instead of the blueprint, since this is not addressed to developers but admins.","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"82b9c0f0653324b24f6dacfaadfbcdaebfa76bc0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added new backup driver to enable backing up cinder volumes to S3-compatible storage."},{"line_number":5,"context_line":"    See the blueprint `Support s3 backup driver"},{"line_number":6,"context_line":"    \u003chttps://blueprints.launchpad.net/cinder/+spec/support-s3-backup-driver\u003e`_"},{"line_number":7,"context_line":"    for more information."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"26c6c195_e04b906b","line":5,"in_reply_to":"a2b1b7be_2aa2b579","updated":"2021-01-27 08:52:52.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfa610a74b5cb50b0cfc5f16cd4b31d4e3cd2730","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added new backup driver to enable backing up cinder volumes to S3-compatible storage."},{"line_number":5,"context_line":"    See the blueprint `Support s3 backup driver"},{"line_number":6,"context_line":"    \u003chttps://blueprints.launchpad.net/cinder/+spec/support-s3-backup-driver\u003e`_"},{"line_number":7,"context_line":"    for more information."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"506f6dcf_cc678c05","line":5,"in_reply_to":"a2b1b7be_2aa2b579","updated":"2021-01-25 13:55:10.000000000","message":"Done","commit_id":"62f8e398989bd736aa202e3b9513ae34ea2e1398"}],"requirements.txt":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fa84cc9f68b3c83995e7fbadace02c58d37fb0c0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"castellan\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":62,"context_line":"cryptography\u003e\u003d2.1.4 # BSD/Apache-2.0"},{"line_number":63,"context_line":"cursive\u003e\u003d0.2.1 # Apache-2.0"},{"line_number":64,"context_line":"moto\u003e\u003d1.3.14"},{"line_number":65,"context_line":"boto3\u003e\u003d1.14.43"}],"source_content_type":"text/plain","patch_set":6,"id":"9f560f44_f67f5edc","line":64,"range":{"start_line":64,"start_character":0,"end_line":64,"end_character":4},"updated":"2020-08-20 13:52:19.000000000","message":"If only used for unit tests, moto should be in test-requirements.txt instead of requirements.txt.","commit_id":"cfdff5f604fb43e3b8145550737ecb57f1f20b10"},{"author":{"_account_id":32304,"name":"Jegor van Opdorp","email":"jegor@leaf.cloud","username":"jopdorp"},"change_message_id":"ff9a9c6fb3c90500c183ff8cfc44781bed1f9897","unresolved":false,"context_lines":[{"line_number":61,"context_line":"castellan\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":62,"context_line":"cryptography\u003e\u003d2.1.4 # BSD/Apache-2.0"},{"line_number":63,"context_line":"cursive\u003e\u003d0.2.1 # Apache-2.0"},{"line_number":64,"context_line":"moto\u003e\u003d1.3.14"},{"line_number":65,"context_line":"boto3\u003e\u003d1.14.43"}],"source_content_type":"text/plain","patch_set":6,"id":"9f560f44_c10536c4","line":64,"range":{"start_line":64,"start_character":0,"end_line":64,"end_character":4},"in_reply_to":"9f560f44_f67f5edc","updated":"2021-01-20 21:53:57.000000000","message":"thanks! I\u0027ll move it","commit_id":"cfdff5f604fb43e3b8145550737ecb57f1f20b10"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e1b84b2404a653fbcf96105b9eac2e31d1d721c9","unresolved":true,"context_lines":[{"line_number":64,"context_line":"cryptography\u003e\u003d3.1 # BSD/Apache-2.0"},{"line_number":65,"context_line":"cursive\u003e\u003d0.2.2 # Apache-2.0"},{"line_number":66,"context_line":"zstd\u003e\u003d1.4.5.1 # BSD"},{"line_number":67,"context_line":"boto3\u003e\u003d1.14.43 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":20,"id":"c428d142_1ced66e3","line":67,"range":{"start_line":67,"start_character":7,"end_line":67,"end_character":14},"updated":"2021-01-14 05:01:09.000000000","message":"upper-constraints currently allows up to 1.16.51 ... any particular reason not to start off using the most recent boto?","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"},{"author":{"_account_id":32329,"name":"Masahiro Okuri","email":"okuri.masahiro@jp.fujitsu.com","username":"mokuri"},"change_message_id":"afcbd0924cf3b452ce1a835b1b15da1c39bbbfc2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"cryptography\u003e\u003d3.1 # BSD/Apache-2.0"},{"line_number":65,"context_line":"cursive\u003e\u003d0.2.2 # Apache-2.0"},{"line_number":66,"context_line":"zstd\u003e\u003d1.4.5.1 # BSD"},{"line_number":67,"context_line":"boto3\u003e\u003d1.14.43 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":20,"id":"bcd67f23_45188143","line":67,"range":{"start_line":67,"start_character":7,"end_line":67,"end_character":14},"in_reply_to":"c428d142_1ced66e3","updated":"2021-01-17 23:58:12.000000000","message":"there is no particular reason. fixed it.","commit_id":"68c97ac3014995158e7e71efee902b77d1335d12"}]}
