On Tue, Dec 21, 2021 at 05:43:44PM +0100, Pierre Schmitz via arch-dev-public 
wrote:
> Hi all,
> 
> seems to have happened again: the desc file of lxqt-runner had 0
> bytes. I re-added the package. I got the following output. I did not
> get the "...was not locked" message when trying again. Maybe our
> locking does not work as expected:
> 
> ==> ERROR: Repo [community] (x86_64) is already locked by
> repo-{add,remove} process 2150481
> ==> WARNING: Repo [community-debug] (x86_64) is already locked by svenstaro.
>   -> Retrying in 10 seconds...
> ==> Adding lxqt-runner-1.0.0-1-x86_64.pkg.tar.zst to [community]...
> ==> WARNING: An entry for 'lxqt-runner-1.0.0-1' already existed
> ==> WARNING: Repo lock [community] (x86_64) was not locked!
So I'm a little bit unsure what is expected behaviour and what isn't.

I have an annotated version of the log with what happens in the above log
output. Note that the tacke on -debug repositories is what was added last week.


* db-repo-add gets ran
* runs `repo_lock` -> `_repo_lock community`, `_ repo_lock community-debug`

==> ERROR: Repo [community] (x86_64) is already locked by repo-{add,remove} 
process 2150481
* `_repo_lock` checks if the `community.db.lck` exists.
    * this file is created by repo-add/repo-remove.
    * `_repo_lock` return 1, this exit code is never checked
    * Note that we never locked anything. We returned early.

==> WARNING: Repo [community-debug] (x86_64) is already locked by svenstaro.
  -> Retrying in 10 seconds...
* same is done for `community-debug`
    * we don't have `community.db.lck` so we continue
    * timeout happens because svenstaro is modifying the repository
    * we lock `community-debug`
    * `_repo_lock` returns 0, exit code is never checked

==> Adding lxqt-runner-1.0.0-1-x86_64.pkg.tar.zst to [community]...
==> WARNING: An entry for 'lxqt-runner-1.0.0-1' already existed
* We continue adding package

* We run `repo_unlock` -> `_repo_unlock community`, `_repo_unlock 
community-debug`

==> WARNING: Repo lock [community] (x86_64) was not locked!
* `_repo_unlock` checks if `community` is locked.
    * It isn't, return and give warning

* `_repo_unlock` unlocks `community-debug`
    * unlocked properly and returns

I'm not sure if this is new behaviour. It seems like most of this workflow was
there before my debug package implementation. But I'm not sure if this is the
actual root of the bug?

Does anyone know if `repo-add` and `repo-remove` maybe doesn't have proper lock
checking? Could there be a race here?

-- 
Morten Linderud
PGP: 9C02FF419FECBE16

Attachment: signature.asc
Description: PGP signature

Reply via email to