func (s *store) delete(key []byte, rev revision) { mainrev := s.currentRev.main + 1 ibytes := newRevBytes() revToBytes(revision{main: mainrev, sub: s.currentRev.sub}, ibytes) ibytes = appendMarkTombstone(ibytes) kv := mvccpb.KeyValue{ Key: key, } d, err := kv.Marshal() if err != nil { plog.Fatalf("cannot marshal event: %v", err) } s.tx.UnsafeSeqPut(keyBucketName, ibytes, d) err = s.kvindex.Tombstone(key, revision{main: mainrev, sub: s.currentRev.sub}) if err != nil { plog.Fatalf("cannot tombstone an existing key (%s): %v", string(key), err) } s.changes = append(s.changes, kv) s.currentRev.sub += 1 ibytes = newRevBytes() revToBytes(rev, ibytes) _, vs := s.tx.UnsafeRange(keyBucketName, ibytes, nil, 0) kv.Reset() if err = kv.Unmarshal(vs[0]); err != nil { plog.Fatalf("cannot unmarshal value: %v", err) } if lease.LeaseID(kv.Lease) != lease.NoLease { err = s.le.Detach(lease.LeaseID(kv.Lease), []lease.LeaseItem{{Key: string(kv.Key)}}) if err != nil { plog.Fatalf("cannot detach %v", err) } } }