After installing gpbackup version 1.33.4, database backups directed to third-party S3-compatible storage appliances (specifically Dell ECS) fail immediately during the initial configuration file upload.
Local backups bypassing the S3 plugin complete successfully, but backups utilizing the gpbackup_s3_plugin fail with the following error logged by the plugin:
[ERROR]:-Error while uploading /backups///gpbackup__config.yaml: operation error S3: PutObject, https response error StatusCode: 400, RequestID: <...>, HostID: <...>, api error XAmzContentSHA256Mismatch: The Content-SHA256 you specified did not match what we received
This issue is caused by a behavioral change in the AWS communication libraries used by the plugin:
In gpbackup 1.33.4, the S3 plugin was updated to use the AWS SDK for Go v2. By default, SDK v2 automatically computes and enforces strict streaming payload checksums (x-amz-content-sha256) on upload requests. Dell ECS evaluates these streaming checksums differently than native AWS S3, leading it to reject the uploads.
While AWS SDK v2 allows disabling this behavior via the request_checksum_calculation=when_required parameter (or standard AWS environment variables), the plugin's underlying transfermanager prevented this setting from being passed through correctly. The transfermanager ignored the parameter and continued sending the unsupported checksums regardless of the configuration.
Workaround:
Downgrade the gpbackup and gprestore utilities to version 1.32.2.
Version 1.32.2 utilizes the older AWS SDK v1, which does not enforce these streaming payload checksums by default and is fully compatible with Dell ECS storage. Version 1.32.2 is fully supported on Greenplum 7.x clusters.
Resolution:
This issue will be resolved in gpbackup 1.34.0.
R&D updated the transfermanager dependency in 1.34.0 so that the checksum configuration is properly respected. To implement the fix (once 1.34.0 is available):
Upgrade to gpbackup 1.34.0.
Add this parameter under the options block of your S3 plugin YAML configuration file: request_checksum_calculation: when_required
Run the backup. The plugin will now successfully suppress the unsupported checksums.