compact_op.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright 2016 The etcd Authors
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package clientv3
  15. import (
  16. pb "go.etcd.io/etcd/etcdserver/etcdserverpb"
  17. )
  18. // CompactOp represents a compact operation.
  19. type CompactOp struct {
  20. revision int64
  21. physical bool
  22. }
  23. // CompactOption configures compact operation.
  24. type CompactOption func(*CompactOp)
  25. func (op *CompactOp) applyCompactOpts(opts []CompactOption) {
  26. for _, opt := range opts {
  27. opt(op)
  28. }
  29. }
  30. // OpCompact wraps slice CompactOption to create a CompactOp.
  31. func OpCompact(rev int64, opts ...CompactOption) CompactOp {
  32. ret := CompactOp{revision: rev}
  33. ret.applyCompactOpts(opts)
  34. return ret
  35. }
  36. func (op CompactOp) toRequest() *pb.CompactionRequest {
  37. return &pb.CompactionRequest{Revision: op.revision, Physical: op.physical}
  38. }
  39. // WithCompactPhysical makes Compact wait until all compacted entries are
  40. // removed from the etcd server's storage.
  41. func WithCompactPhysical() CompactOption {
  42. return func(op *CompactOp) { op.physical = true }
  43. }