Zirak / pkgfs

1 stars 0 forks source link

Blockingness #11

Open Zirak opened 9 years ago

Zirak commented 9 years ago

(I can't believe that's a word)

Let's say the user runs /pkg/upgrade and there're a lot of packages to upgrade. It's an IO-bound operation, completely out of our control, and it takes a lot of time.

Smack in the middle of the upgrade, the user fancies a thing or another, and ls /pkg/installed. In the naïve, single-threaded and non-concurrent implementation (cough cough), this action will be blocked by the upgrade: Until the upgrade is complete, the user won't get his ls back.

That makes pandas sad.

Should non-blocking behaviour be part of the spec, or is it an implementation bonus? On some platforms (like Python) with an...erm... interesting concurrency model, this is very problematic, and could hamper implementation writers. On the other hand, not implementing this hampers UX.

ralt commented 9 years ago

Imho, this should be left to the implementation. What happens if you run /pkg/installed/foo/uninstall, and you run ls /pkg/installed right after? Should the package be shown while the uninstall is run? Is it random?

This opens a lot more problems than it solves imho, so let's leave it implementation-defined.

ralt commented 9 years ago

By the way, this is surely the reason why apt and yum only allow one apt command to be run at a time.

Zirak commented 9 years ago

Since we defer to the package manager, it'll be the same as if the user ran upgrade, opened another terminal and ran list-installed. It's perfectly valid.

ralt commented 9 years ago

If you use the package manager, it won't let you do that. With apt, you'll get this error:

E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/) is another process using it?
Zirak commented 9 years ago

huh? I just tested this on a ubuntu VM:

  1. apt-get upgrade
  2. dpkg -l

All was well with the world.

ralt commented 9 years ago

Ah, I see what you mean.

Let me think about it.