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 cabfa2422..b87e2c234 100644 --- a/storage/kvstore.go +++ b/storage/kvstore.go @@ -235,7 +235,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