aa74032d531a9f13ce2cf5d13dc04d2f873da008 |
|
19-Jul-2016 |
Eugen Kuksa <eugenk@informatik.uni-bremen.de> |
Fix deadlocks caused by semaphore. (#1732) |
e8ec59dda8f903e81cb5cceaef93d20a0812fc77 |
|
01-Jul-2016 |
Eugen Kuksa <eugenk@informatik.uni-bremen.de> |
982 error this iri is already being processed (#1697)
* Add expiration parameter to Semaphore
After the expiration, the semaphore is unlocked. This allows dead
processes (e.g. by kill -9) to release the lock again.
* Namespace the redis semaphore at ontohub:semaphore.
* Code style.
* Code style: use class << self block.
* Add concurrency testing gem.
* Completely revamp Semaphore
* Put it into the same redis-namespace as sidekiq.
* Add method to check if a lock is closed.
* Namespace semaphores even deeper.
Checking if a lock is closed is not an atomic operation. To make it
atomic, we put the check into a mutexed part. In order to really exclude
the locking and unlocking from this mutexed check, these two operations
must be mutexed as well with the same key (LOCK_ACTION_KEY).
Unfortunately, using many threads/processes in an example makes the test
suite hang. This is because of celluloid. Maybe we can unskip the
example after upgrading to sidekiq 4 and dropping sidetiq.
* Add settings keys for Redis.
* Use redis namespace setting for Semaphore.
* Share redis connections between Sidekiq and Semaphore
When all connections are in use, any Redis call will block until a
connection is freed.
Sidekiq is now namespaced deeper in order to prevent conflicts with the
semaphore.
* Fix locked? and perform_exclusively signatures.
* Add lock and unlock methods.
* Use separate redis namespaces for our environments.
* Use Semaphore only if not testing
* Use Semaphore when parsing an Ontology
* Remove not needed method perform_async_on_queue.
* Refactor all the Worker classes for parsing
Now, all comes down to the new OntologyParsingWorker. It performs on a
queue of triples containing the version id, options for the version and
the try_count (number of the next parsing attempt).
If parsing a version fails, it is put back to the queue (at the end),
with an incremented try_count. If this happens too often for the same
version, it is given to the SequentialOntologyParsingWorker that only
parses one OntologyVersion at a time.
The OntologyParsingPriorityWorker is a more elegant way to use the
priotitized queue.
All the background parsing is now performed via the
OntologyParsingWorker or its subclasses.
* Be explicit about the namespace.
* Obey Hound. |
f8b81175f10a73321a33818d2a5adf89b3c75906 |
|
28-Sep-2015 |
Eugen Kuksa <eugenk@informatik.uni-bremen.de> |
Test if constant is defined
For example, parsing failed because Sidekiq::Testing was not defined in
both, the production and development environments. |
f7dc2828bfef1bb48688bdc6d442e4dde90821ac |
|
09-Sep-2015 |
Eugen Kuksa <eugenk@informatik.uni-bremen.de> |
Fix Semaphore creating a deadlock in synchronous environment. |
5ae48bf2cc97a1fced4a67186d280ec7ed0d725d |
|
10-Aug-2015 |
Eugen Kuksa <eugenk@informatik.uni-bremen.de> |
Add redis semaphore. |
00c5ad5a9b1e402cdb4beedbfbfbd36b60a60520 |
|
06-Aug-2015 |
Eugen Kuksa <eugenk@informatik.uni-bremen.de> |
Add redis semaphore. |