Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


datecomment
202109reviewed - no change


Table of Contents

Data Sources

...

  • DTO - Data Transfer Object is same object end-users see/use when making API calls.
  • DBO - Database Object is a POJO that maps directly to table.  For every column of the table there will be a matching field in the corresponding DBO. See Adding New Database Objects
  • DAO - Data Access Object is the abstraction that translates to DTOs into DBOs directly performs all datasource CRUD.
  • CRUD - Create, Read, Update, and Delete.

 


Workers

The workers war is composed of many workers each performing separate tasks.  The following diagram shows the components of a typical worker using "search" as an example:

...

When the scheduler fires according to the trigger, the SemaphoreGatedRunner's execute methods is called.  The semaphore will generate a random number between 0 and the maximum number of workers of that type (exclusive) and concatenate that number with the worker's unique key to generate a lock string.  It will then attempt to acquire a global lock on that string using the semaphore RDS table.  If a lock is acquired, it will be held in a try/finally block while configured runner is executed. It will unconditional unconditionally release the lock when the Runner's run() method returns.

...

  • When lock is issued, it is guaranteed to be held until released by the lock holder or the configured timeout is exceeded.
  • The same lock will not be issued to multiple callers.
  • Lock acquisition is non-blocking, meaning it does not wait for a lock to be acquire.  In other words, the SemaphoreGatedRunner will return to the caller immediately if a lock cannot be acquired.
  • When a lock is acquired a new unique token is issued to the lock holder.  This token must be used to release the lock.  The means if one thread is issued a lock but does not release it before the configured timeout is exceed, then the same lock can be issued to another thread but with a new token.  Since the original thread's token is no longer bound to the lock it cannot , that token cannot be used to release the lock since it had been re-issued to the other caller.

...