code: func (c *Client) Update(node string, other *Coordinate, rtt time.Duration) (*Coordinate, error) {
  	c.mutex.Lock()
  	defer c.mutex.Unlock()
  
  	if err := c.checkCoordinate(other); err != nil {
  		return nil, err
  	}
  
  	// The code down below can handle zero RTTs, which we have seen in
  	// https://github.com/hashicorp/consul/issues/3789, presumably in
  	// environments with coarse-grained monotonic clocks (we are still
  	// trying to pin this down). In any event, this is ok from a code PoV
  	// so we don't need to alert operators with spammy messages. We did
  	// add a counter so this is still observable, though.
  	const maxRTT = 10 * time.Second
  	if rtt < 0 || rtt > maxRTT {
  		return nil, fmt.Errorf("round trip time not in valid range, duration %v is not a positive value less than %v ", rtt, maxRTT)
  	}
  	if rtt == 0 {
  		metrics.IncrCounter([]string{"serf", "coordinate", "zero-rtt"}, 1)
  	}
  
  	rttSeconds := c.latencyFilter(node, rtt.Seconds())
  	c.updateVivaldi(other, rttSeconds)
  	c.updateAdjustment(other, rttSeconds)
  	c.updateGravity()
  	if !c.coord.IsValid() {
  		c.stats.Resets++
  		c.coord = NewCoordinate(c.config)
  	}
  
  	return c.coord.Clone(), nil
  }
docs: // Update takes other, a coordinate for another node, and rtt, a round trip
  // time observation for a ping to that node, and updates the estimated position of
  // the client's coordinate. Returns the updated coordinate.