code: func (m *Memory) Update(ctx context.Context, i backend.Item) (*backend.Lease, error) {
  	if len(i.Key) == 0 {
  		return nil, trace.BadParameter("missing parameter key")
  	}
  	m.Lock()
  	defer m.Unlock()
  	m.removeExpired()
  	if m.tree.Get(&btreeItem{Item: i}) == nil {
  		return nil, trace.NotFound("key %q is not found", string(i.Key))
  	}
  	if !m.Mirror {
  		i.ID = m.generateID()
  	}
  	event := backend.Event{
  		Type: backend.OpPut,
  		Item: i,
  	}
  	m.processEvent(event)
  	if !m.EventsOff {
  		m.buf.Push(event)
  	}
  	return m.newLease(i), nil
  }
docs: // Update updates item if it exists, or returns NotFound error