Commit Graph

9598 Commits

Author SHA1 Message Date
Fabio Erculiani
2e6b176c83 [eit] do not raise any exception in sys.excepthook 2012-08-19 00:25:31 +02:00
Fabio Erculiani
796e71e9ac [repo] migrate shebangs to /usr/bin/python 2012-08-18 16:53:32 +02:00
Fabio Erculiani
c9242e2517 [todo] update TODO 2012-08-18 10:13:46 +02:00
Fabio Erculiani
d56cd777c8 [RigoDaemon] some minor Python 3.x related fixes 2012-08-18 09:53:18 +02:00
Fabio Erculiani
facd0ec069 [equo] update entropy.pot 2012-08-18 09:51:14 +02:00
Fabio Erculiani
41adc104ca [equo] update translations 2012-08-18 09:50:58 +02:00
Fabio Erculiani
e2c0ddb526 [Rigo] Python 3.x compatibility fixes 2012-08-18 09:44:26 +02:00
Fabio Erculiani
1f84203788 [entropy.spm] PortagePlugin: Python 3.x, use f.buffer.write() with bytes() 2012-08-17 22:42:36 +02:00
Fabio Erculiani
fb6957e5fa [equo] fix UGC vote get command, do not require login credentials 2012-08-17 22:32:50 +02:00
Fabio Erculiani
ff133b432a [entropy.services.client] restore Python 3.x compatibility 2012-08-17 22:30:45 +02:00
Fabio Erculiani
333e82ea10 [entropy.spm] PortagePlugin: keep keyslot as unicode, Python 3.x compatibility 2012-08-17 22:30:03 +02:00
Fabio Erculiani
e90cb74c27 [entropy.spm] PortagePlugin: expose __next__() unconditionally 2012-08-17 21:41:08 +02:00
Fabio Erculiani
206fe49203 [entropy.db.sql] add __next__() to iterators, make Python3 happy 2012-08-17 21:40:55 +02:00
Fabio Erculiani
61eeaed14e [entropy.client.package] add __next__() to iterators, make Python3 happy 2012-08-17 21:40:35 +02:00
Fabio Erculiani
96976374fe [RigoDaemon] rewrite Installed Repository I/O event handler
Rewrite the serialization code of the I/O events coming in when
the Installed Packages Repository is modified (at filesystem level)
to better deal with bursts of events.
The new code uses a "baton" Semaphore as mutex that can be passed
through threads. The MainThread event handler function tries to
acquire the Semaphore in NB mode, if it does, it spawns a thread
that executes all the operations (acquire locks in blocking mode,
calculate updates, etc) and releases the Semaphore once done.

Olympic win!
2012-08-17 12:27:55 +02:00
Fabio Erculiani
c5cf96ace0 [RigoDaemon] delay updates calculation by 20 seconds after locks are released 2012-08-17 11:03:58 +02:00
Fabio Erculiani
a37d7ca195 [entropy.db.sqlite] move _addPackage() to entropy.db.sql 2012-08-16 21:35:45 +02:00
Fabio Erculiani
5a49098515 [entropy.db] move _getLiveCacheKey and __hash__ to entropy.db.sql 2012-08-16 21:30:51 +02:00
Fabio Erculiani
a0394ba9a5 [entropy.db.sql] introduce _UPDATE_OR_REPLACE and move remaining SQL to entropy.db.sql 2012-08-16 21:20:46 +02:00
Fabio Erculiani
1b10177640 [entropy.db.sql] major cursor and connection pooling rework
The original idea was to avoid doing cursor and connection resources
cleanup (left by old and dead threads) synchronously every time
_connection() and/or _cursor() is accessed. This strategy also had
a huge drawback: with no activity on the object, resources were
left hanging there forever.

This commit introduces a better strategy for transparent and automatic
cleanup of resources belonging to terminated threads: every time a new
thread_id arrives at _cursor() or _connection(), a new daemon thread
starts and synchronizes with the caller through a simple Thread.join()
(because it's a daemon thread, we can join() daemon threads as well,
even if this is not really compliant with the specs, but it seems to work
just fine in Python).
When the caller thread is joined, it is possible to start the resources
cleanup procedure, carefully taking into account that thread_ids are
recycled and thus there might be clashing with newly created threads.

This helped a design issue to emerge from the sand (like a zombie
at the seaside): it is impossible to cleanup resources left by the
MainThread because this thread never ends living, and if it dies,
everything dies, obviously. So, the first implementation of this new
strategy was NOT touching the MainThread resources but then, the old
behaviour was to kill them as well on EntropyRepository.close().
So, the final version of this patch kept the old buggy behaviour of
touching MainThread stuff (nein, nein, nein, nein would Hitler say).
However, a new keyword argument "safe" has been added to the close()
method so it is possible to start migrating code to the dark side of the
power.

This means nothing really changed for API consumers yet, just entropy.db.sql
code being more efficient (no weird for loops and synchronous crap)
and actually faster (multi-threading ftw).
2012-08-15 20:59:45 +02:00
Fabio Erculiani
f1c60ec30b [entropy.db.mysql] implement support for RestartTransaction through _proxy_call() 2012-08-14 19:27:20 +02:00
Fabio Erculiani
9a699e7ae8 [entropy.db.exceptions] introduce RestartTransaction exception
Exception raised in case the whole transaction has
been aborted by the database and caller is kindly
required to restart it from the beginning.
2012-08-14 19:27:20 +02:00
Fabio Erculiani
760685674e Tagging Entropy version 133 133 2012-08-14 17:51:30 +02:00
Fabio Erculiani
366396bfe7 Release Entropy 133 2012-08-14 17:51:29 +02:00
Fabio Erculiani
8d00d5beec [entropy.db.sql] make custom iterators work across multiple iterations 2012-08-14 10:26:22 +02:00
Fabio Erculiani
a6286b0e21 [entropy.client.package] add one more note about the universal newline mode 2012-08-14 10:13:14 +02:00
Fabio Erculiani
56616e4520 [entropy.db.mysql] add some missing docstrings 2012-08-14 09:41:29 +02:00
Fabio Erculiani
427949d481 [entropy.client.package] make FileContent*Reader iterator work multiple times
As explained in the code comments, this is mandatory for scenarios
in where the iterator has to run multiple times because transactions
can be rolled back and replayed indefinitely.
2012-08-14 09:39:44 +02:00
Fabio Erculiani
8c0c0dc10a [entropy.db.sql] _insertLicenses: tolerate unique constraint violations
The licensename column is declared as UNIQUE, multiple threads inserting
rows can cause unique constraint violations. Considering the nature of
the data, using "INSERT OR REPLACE" can be considered safe and actually
wanted.
2012-08-12 22:11:49 +02:00
Fabio Erculiani
e05b649f98 [entropy.db] remove do_cleanup argument from removePackage() 2012-08-12 16:15:23 +02:00
Fabio Erculiani
9d665e050c [entropy.db] remove do_commit argument from methods 2012-08-12 16:00:02 +02:00
Fabio Erculiani
6f54ac4459 [entropy.client.package] use Universal Newline mode when opening content files
This fixes the readline() truncation issue, as explained in the comments
2012-08-12 15:45:28 +02:00
Fabio Erculiani
f9ee58b48f [entropy.db.sql] add SQLConnectionWrapper.rawstring() and docstrings 2012-08-12 12:51:58 +02:00
Fabio Erculiani
a8e2bbd3ba [entropy.db.sql] do not catch any exception in commit() 2012-08-12 12:08:23 +02:00
Fabio Erculiani
3679fa966a [Rigo] increase search bar maximum entry length to 512 chars. 2012-08-12 12:05:50 +02:00
Fabio Erculiani
70c6823b90 [entropy.client.package] fix non-deterministic bug with Python File.readline()
This issue caused a load of issues with the ca-certificates.

Example of partial readline():
0|obj|/usr/share/ca-certificates/mozilla/NetLock_Arany_=Class_Gold=_F\xc3\x85
and the next call:
\xc2\x91tan\xc3\x83\xc2\xbas\xc3\x83\xc2\xadtv\xc3\x83\xc2\xa1ny.crt\n

Trying to workaround it by reading ahead if line does not end with \n
2012-08-12 11:53:50 +02:00
Fabio Erculiani
c5e80d4153 [entropy.db.sql] define a common API for Cursor and Connection wrappers 2012-08-12 11:39:36 +02:00
Fabio Erculiani
beb21f1660 [entropy.db] move other standard SQL code to entropy.db.sql 2012-08-12 10:29:41 +02:00
Fabio Erculiani
27a51598a0 [entropy.db] move most of the standard SQL code to entropy.db.sql 2012-08-11 21:58:41 +02:00
Fabio Erculiani
4ea217f3fd [entropy.db.mysql] replace FLOAT with REAL for mtime (FLOAT did not give enough precision) 2012-08-11 20:24:28 +02:00
Fabio Erculiani
74f7b4d730 [entropy.db.mysql] fix __iter__ support, iter(self._cur) MUST returned 2012-08-11 18:15:33 +02:00
Fabio Erculiani
7a950cb4b9 [entropy.db] abstract exceptions away from sqlite3
Wrap the Cursor object around and execute every method through
a proxy function that catches adapter-specific exceptions and
translates them into entropy.db.exceptions ones. This way Entropy
is eventually sqlite3 agnostic and adapters for several storage
engines can be written without affecting the rest of the codebase.
2012-08-10 21:35:50 +02:00
Fabio Erculiani
8ac22f4beb [entropy.client.package] FileContent*Reader: keep raising StopIteration() at the end 2012-08-10 17:51:22 +02:00
Fabio Erculiani
08a4343597 [entropy.client.package] add a bit of paranoia to Content*Writers' close() 2012-08-10 17:44:12 +02:00
Fabio Erculiani
2e6e790677 [entropy.db.sqlite] EntropyRepository.retrieveSignatures: check if table exists 2012-08-10 14:06:24 +02:00
Fabio Erculiani
0461ca413a [entropy.db] do not check if "settings" table exists, we're fault tolerant 2012-08-10 14:05:31 +02:00
Fabio Erculiani
90400c4ade [tests/db] drop SCHEMA_2010 related code 2012-08-10 14:05:05 +02:00
Fabio Erculiani
dc4556ef46 [entropy.db] create entropy.db.sql (holding standard SQL methods)
entropy.db.mysql and entropy.db.sqlite are now subclassing
EntropySQLRepository. Methods will be moved there during the
next forthcoming overhaul. Implement ModuleProxy support and
alleviate the exception class objects issue (sqlite3 based
exceptions are thrown by entropy.db.sqlite and oursql based
exceptions are thrown by entropydb.mysql, and there is no
easy/quick fix for this apparently, besides wrapping all the
cursor calls).
2012-08-10 11:41:29 +02:00
Fabio Erculiani
95d23764c3 [entropy.db.skel] move SETTING_KEYS and add ModuleProxy to EntropyRepositoryBase 2012-08-10 11:39:30 +02:00
Fabio Erculiani
23847b99eb [tests/server] directly import EntropyRepositoryCacher from entropy.db.cache 2012-08-10 11:38:55 +02:00