replication.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package tos
  2. import (
  3. "bytes"
  4. "context"
  5. "net/http"
  6. )
  7. func (cli *ClientV2) PutBucketReplication(ctx context.Context, input *PutBucketReplicationInput) (*PutBucketReplicationOutput, error) {
  8. if input == nil {
  9. return nil, InputIsNilClientError
  10. }
  11. if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
  12. return nil, err
  13. }
  14. data, contentMD5, err := marshalInput("PutBucketReplication", putBucketReplicationInput{Role: input.Role, Rules: input.Rules})
  15. if err != nil {
  16. return nil, err
  17. }
  18. res, err := cli.newBuilder(input.Bucket, "").
  19. WithQuery("replication", "").
  20. WithHeader(HeaderContentMD5, contentMD5).
  21. WithRetry(OnRetryFromStart, StatusCodeClassifier{}).
  22. Request(ctx, http.MethodPut, bytes.NewReader(data), cli.roundTripper(http.StatusOK))
  23. if err != nil {
  24. return nil, err
  25. }
  26. defer res.Close()
  27. output := PutBucketReplicationOutput{RequestInfo: res.RequestInfo()}
  28. return &output, nil
  29. }
  30. func (cli *ClientV2) GetBucketReplication(ctx context.Context, input *GetBucketReplicationInput) (*GetBucketReplicationOutput, error) {
  31. if input == nil {
  32. return nil, InputIsNilClientError
  33. }
  34. if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
  35. return nil, err
  36. }
  37. req := cli.newBuilder(input.Bucket, "").
  38. WithQuery("replication", "").
  39. WithQuery("progress", "").
  40. WithRetry(nil, StatusCodeClassifier{})
  41. if input.RuleID != "" {
  42. req.WithQuery("rule-id", input.RuleID)
  43. }
  44. res, err := req.Request(ctx, http.MethodGet, nil, cli.roundTripper(http.StatusOK))
  45. if err != nil {
  46. return nil, err
  47. }
  48. defer res.Close()
  49. output := GetBucketReplicationOutput{RequestInfo: res.RequestInfo()}
  50. if err = marshalOutput(output.RequestID, res.Body, &output); err != nil {
  51. return nil, err
  52. }
  53. return &output, nil
  54. }
  55. func (cli *ClientV2) DeleteBucketReplication(ctx context.Context, input *DeleteBucketReplicationInput) (*DeleteBucketReplicationOutput, error) {
  56. if input == nil {
  57. return nil, InputIsNilClientError
  58. }
  59. if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
  60. return nil, err
  61. }
  62. res, err := cli.newBuilder(input.Bucket, "").
  63. WithQuery("replication", "").
  64. WithRetry(nil, StatusCodeClassifier{}).
  65. Request(ctx, http.MethodDelete, nil, cli.roundTripper(http.StatusNoContent))
  66. if err != nil {
  67. return nil, err
  68. }
  69. defer res.Close()
  70. output := DeleteBucketReplicationOutput{RequestInfo: res.RequestInfo()}
  71. return &output, nil
  72. }