Commit Graph

10852 Commits

Author SHA1 Message Date
Fabio Erculiani fc686c9c09 [solo.commands.match] use the sharedlock decorator 2013-12-07 20:29:19 +01:00
Fabio Erculiani 7b0dbac6eb [solo.commands.search] use the sharedlock decorator 2013-12-07 20:29:19 +01:00
Fabio Erculiani 6b3f25a8ef [solo.commands.command] add sharedlock and exclusivelock decorators 2013-12-07 20:29:19 +01:00
Fabio Erculiani d802bb8186 [entropy.db.skel] clarify the cases where locking could be avoided 2013-12-07 20:29:18 +01:00
Fabio Erculiani 20a3cc3525 [solo.commands.query] rename entropy_repository to inst_repo for consistency 2013-12-07 20:29:18 +01:00
Fabio Erculiani 532c71261b [solo.utils] print_package_info: improve ability to deal with stale data 2013-12-07 20:29:18 +01:00
Fabio Erculiani d5d5ef11ea [solo.commands.match] add concurrency support 2013-12-07 20:29:18 +01:00
Fabio Erculiani b0c85ffcce [solo.commands.search] do not hold the inst_repo lock while using stdio functions
print_package_info is already able to deal with stale data and we
better not deadlock other threads or processes there.
2013-12-07 20:29:18 +01:00
Fabio Erculiani aa30310ae2 [solo.commands.search] add concurrency support 2013-12-07 20:29:18 +01:00
Fabio Erculiani fa68f56545 [entropy.client.package.actions] install: pass remove_package_id to _install_package_unlocked 2013-12-07 20:29:18 +01:00
Fabio Erculiani 95c69168c5 [entropy.db.sqlite] make possible to acquire the repository lock file in shared mode by users 2013-12-07 20:29:18 +01:00
Fabio Erculiani 86b25739c7 [entropy.client.package.actions] remove: add concurrency support 2013-12-07 20:29:18 +01:00
Fabio Erculiani e6e020e404 [entropy.client.package.actions] _manage: move _get_remove_trigger_data() here 2013-12-07 20:29:18 +01:00
Fabio Erculiani 1a8c291ae0 [solo.commands.query] acquire the Entropy Resources General Lock in shared mode 2013-12-07 20:29:18 +01:00
Fabio Erculiani 8111284a4f [entropy.client.package.actions] config: add concurrency support 2013-12-07 20:29:18 +01:00
Fabio Erculiani 12e4c4a7a3 [entropy.client.package.actions] install: rewrite lock handling
This is a complete rewrite of the PackageInstallAction class, due to
potentially state data collected on setup() that should be rather
collected with the lock held for the whole install transaction.
2013-12-07 20:29:18 +01:00
Fabio Erculiani 3b069f111d [entropy.client.package.actions] install: always validate installed_package_id 2013-12-07 20:27:57 +01:00
Fabio Erculiani 3bd97b8c32 [entropy.client.package.actions] source: add concurrency support 2013-12-07 20:27:57 +01:00
Fabio Erculiani 685b7625d9 [entropy.client.package.actions] multifetch: do not show data transfer if it's 0 2013-12-07 20:27:57 +01:00
Fabio Erculiani fca17af8c8 [entropy.client.package.actions] fetch: avoid using output() with back = True
This improve the output in multithreaded scenarios.
2013-12-07 20:27:57 +01:00
Fabio Erculiani 8c3798c4dc [entropy.client.package.actions] fetch: replace "matches" with "validated" 2013-12-07 20:27:57 +01:00
Fabio Erculiani 2e92fddbf5 [entropy.client.package.actions] multifetch: add concurrency support 2013-12-07 20:27:57 +01:00
Fabio Erculiani 1ac0e38115 [entropy.fetchers] update pre_download_hook API, add post_download_hook 2013-12-07 20:27:57 +01:00
Fabio Erculiani 126caaca9e [entropy.client.package] install: use _is_package_repository() 2013-12-07 20:27:57 +01:00
Fabio Erculiani eab15e1cb7 [entropy.client.package] install: avoid deadlocks during conflicts removal 2013-12-07 20:27:57 +01:00
Fabio Erculiani c54c893e55 [entropy.db] implement locking infrastructure (with the same semantics) for in-memory repositories 2013-12-07 20:27:57 +01:00
Fabio Erculiani d7f22534b2 [entropy.db] rewrite locking infrastructure, handle multithreading use case 2013-12-07 20:27:57 +01:00
Fabio Erculiani 8c2b9c4841 [entropy.fetchers] add locking infrastructure support code 2013-12-07 20:27:57 +01:00
Fabio Erculiani 5b1d071361 [entropy.client.package.actions] fetch: update docstring 2013-12-07 20:27:57 +01:00
Fabio Erculiani 43223c03c5 [entropy.client.package.actions] fetch: avoid potential deadlocks
Holding shared locks on other downloadable files while holding an
exclusive lock on the file to be downloaded is looking for a disaster.
Try not to hold locks on other potentially downloadable files while
holding one already.
2013-12-07 20:27:57 +01:00
Fabio Erculiani 6efc069ddc [entropy.client.package.actions] fetch: reduce installed_repository() lock contention 2013-12-07 20:27:57 +01:00
Fabio Erculiani 4447190b4c [entropy.client.package.actions] action: add stat import 2013-12-07 20:27:56 +01:00
Fabio Erculiani bd5100730e [entropy.client.package] rename fetch phase to _fetch_phase() 2013-12-07 20:27:56 +01:00
Fabio Erculiani 9d3acd63aa [entropy.client.package.actions] install: complete concurrency support
Add concurrency support to package files.
2013-12-07 20:27:56 +01:00
Fabio Erculiani 173b93ab52 [entropy.client.package.actions] action: move _stat_path() here 2013-12-07 20:27:56 +01:00
Fabio Erculiani 1b5253c6e8 [entropy.client.package.actions] fetch: remove unused method 2013-12-07 20:27:56 +01:00
Fabio Erculiani 7e7058eb46 [entropy.client.package] fetch: add initial concurrency support 2013-12-07 20:27:09 +01:00
Fabio Erculiani 85e360b196 [entropy.client.package.actions] action: fix typo in path_lock() 2013-12-07 20:25:56 +01:00
Fabio Erculiani 582bf7262a [entropy.client.package.actions] action: expose a path_lock() method
This method returns a FlockFile based class object instance that
can be used for inter-process synchronization of arbitrary regular
files.
2013-12-07 20:25:56 +01:00
Fabio Erculiani 5d8055cb3c [entropy.client.package.actions] install: drop unused metadata 2013-12-07 20:25:56 +01:00
Fabio Erculiani 9953048c6f [entropy.client.package.action] install: apply tarball files ownership to extra download files as well 2013-12-07 20:25:56 +01:00
Fabio Erculiani f1ef4bb5e5 [entropy.misc] FlockFile: also pass the FlockFile instance to the callback 2013-12-07 20:25:56 +01:00
Fabio Erculiani 8dd42f9663 [entropy.misc] FlockFile: move wait and acquired message callbacks to instance 2013-12-07 20:25:56 +01:00
Fabio Erculiani 2514ab2725 [entropy.misc] FlockFile: add support for wait messages in shared() and exclusive() 2013-12-07 20:25:56 +01:00
Fabio Erculiani 4d24a95667 [entropy.misc] FlockFile: add a get_path() method 2013-12-07 20:25:56 +01:00
Fabio Erculiani 76bd979816 [entropy.client.package] install: add initial concurrency support 2013-12-07 20:25:56 +01:00
Fabio Erculiani 02d35f58c3 [entropy.db.sqlite] commit() any pending transactions on release
This avoids potential deadlocks to occur.
2013-12-07 20:25:56 +01:00
Fabio Erculiani e717f7a1b3 [entropy.db.sqlite] drop support for locking based on rwsem for memory repositories
Firstly, rwsem is semantically different from flock (but this was known) and
this may confuse the API consumer. Secondly, the locking infrastructure is
purely meant for inter-process synchronization, threads synchronization is
not a current use case.
2013-12-07 20:25:55 +01:00
Fabio Erculiani 5b6da64e35 [entropy.db.skel] document further locking infrastructure assumptions 2013-12-07 20:25:55 +01:00
Fabio Erculiani 688b8f9796 [entropy.db.sqlite] clear in-RAM cache after lock acquisition 2013-12-07 20:25:55 +01:00