code: func (l *LiteBackend) KeepAlive(ctx context.Context, lease backend.Lease, expires time.Time) error {
  	if len(lease.Key) == 0 {
  		return trace.BadParameter("lease key is not specified")
  	}
  	now := l.clock.Now().UTC()
  	return l.inTransaction(ctx, func(tx *sql.Tx) error {
  		var item backend.Item
  		err := l.getInTransaction(ctx, lease.Key, tx, &item)
  		if err != nil {
  			return trace.Wrap(err)
  		}
  		created := l.clock.Now().UTC()
  		if !l.EventsOff {
  			stmt, err := tx.PrepareContext(ctx, "INSERT INTO events(type, created, kv_key, kv_modified, kv_expires, kv_value) values(?, ?, ?, ?, ?, ?)")
  			if err != nil {
  				return trace.Wrap(err)
  			}
  			if _, err := stmt.ExecContext(ctx, backend.OpPut, created, string(item.Key), id(created), expires.UTC(), item.Value); err != nil {
  				return trace.Wrap(err)
  			}
  		}
  		stmt, err := tx.PrepareContext(ctx, "UPDATE kv SET expires = ?, modified = ? WHERE key = ?")
  		if err != nil {
  			return trace.Wrap(err)
  		}
  		result, err := stmt.ExecContext(ctx, expires.UTC(), id(now), string(lease.Key))
  		if err != nil {
  			return trace.Wrap(err)
  		}
  		rows, err := result.RowsAffected()
  		if err != nil {
  			return trace.Wrap(err)
  		}
  		if rows == 0 {
  			return trace.NotFound("key %v is not found", string(lease.Key))
  		}
  		return nil
  	})
  }
docs: // KeepAlive updates TTL on the lease