code: func (locker *Etcd3Locker) UnlockUpload(id string) error {
  	locker.mutex.Lock()
  	defer locker.mutex.Unlock()
  
  	// Complain if no lock has been found. This can only happen if LockUpload
  	// has not been invoked before or UnlockUpload multiple times.
  	lock, ok := locker.locks[locker.getId(id)]
  	if !ok {
  		return ErrLockNotHeld
  	}
  
  	err := lock.Release()
  	if err != nil {
  		return err
  	}
  
  	defer delete(locker.locks, locker.getId(id))
  	return lock.CloseSession()
  }
docs: // UnlockUpload releases a lock.