compact_op.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 "github.com/coreos/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 RPC call wait until
  40. // the compaction is physically applied to the local database
  41. // such that compacted entries are totally removed from the
  42. // backend database.
  43. func WithCompactPhysical() CompactOption {
  44. return func(op *CompactOp) { op.physical = true }
  45. }