From 7b37bd332c01d14c28e150870de2fd096512e7ed Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Wed, 30 Mar 2016 13:58:10 -0700 Subject: [PATCH] etcdserver, storage: wait for physical compaction if already compacted --- etcdserver/v3demo_server.go | 6 +++--- storage/kvstore.go | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/etcdserver/v3demo_server.go b/etcdserver/v3demo_server.go index 393dbdc52..41cdae814 100644 --- a/etcdserver/v3demo_server.go +++ b/etcdserver/v3demo_server.go @@ -94,12 +94,12 @@ func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse func (s *EtcdServer) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.CompactionResponse, error) { result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{Compaction: r}) - if err != nil { - return nil, err - } if r.Physical && result.physc != nil { <-result.physc } + if err != nil { + return nil, err + } resp := result.resp.(*pb.CompactionResponse) if resp == nil { resp = &pb.CompactionResponse{} diff --git a/storage/kvstore.go b/storage/kvstore.go index 3760fde61..09a76273a 100644 --- a/storage/kvstore.go +++ b/storage/kvstore.go @@ -222,7 +222,9 @@ func (s *store) Compact(rev int64) (<-chan struct{}, error) { s.mu.Lock() defer s.mu.Unlock() if rev <= s.compactMainRev { - return nil, ErrCompacted + ch := make(chan struct{}) + s.fifoSched.Schedule(func(context.Context) { close(ch) }) + return ch, ErrCompacted } if rev > s.currentRev.main { return nil, ErrFutureRev