blob: 5779713d3dd4df2603d4924ff686110a49755b93 [file] [log] [blame]
Takahiro Suzuki241c10e2020-12-17 20:17:57 +09001// 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
15package clientv3
16
17import (
18 pb "go.etcd.io/etcd/etcdserver/etcdserverpb"
19)
20
21// CompactOp represents a compact operation.
22type CompactOp struct {
23 revision int64
24 physical bool
25}
26
27// CompactOption configures compact operation.
28type CompactOption func(*CompactOp)
29
30func (op *CompactOp) applyCompactOpts(opts []CompactOption) {
31 for _, opt := range opts {
32 opt(op)
33 }
34}
35
36// OpCompact wraps slice CompactOption to create a CompactOp.
37func OpCompact(rev int64, opts ...CompactOption) CompactOp {
38 ret := CompactOp{revision: rev}
39 ret.applyCompactOpts(opts)
40 return ret
41}
42
43func (op CompactOp) toRequest() *pb.CompactionRequest {
44 return &pb.CompactionRequest{Revision: op.revision, Physical: op.physical}
45}
46
47// WithCompactPhysical makes Compact wait until all compacted entries are
48// removed from the etcd server's storage.
49func WithCompactPhysical() CompactOption {
50 return func(op *CompactOp) { op.physical = true }
51}