code: func (s *Reporter) CompareAndSwap(ctx context.Context, expected Item, replaceWith Item) (*Lease, error) {
  	start := s.Clock().Now()
  	lease, err := s.Backend.CompareAndSwap(ctx, expected, replaceWith)
  	writeLatencies.WithLabelValues(s.Component).Observe(time.Since(start).Seconds())
  	writeRequests.WithLabelValues(s.Component).Inc()
  	if err != nil && !trace.IsNotFound(err) && !trace.IsCompareFailed(err) {
  		writeRequestsFailed.WithLabelValues(s.Component).Inc()
  	}
  	s.trackRequest(OpPut, expected.Key, nil)
  	return lease, err
  }
docs: // CompareAndSwap compares item with existing item
  // and replaces is with replaceWith item