Updates to Tokenization Process
In order to help facilitate some of the Tokenization updates we need to make a few updates to how things currently work.
We'll want a more centralized approach to keeping track of state, allowing both the ChronopolisTokenRequestBatch
and TokenRegistrar
to update a StateMachine with the state of a ManifestEntry
. It will basically cycle between queued
, processing
, token_received
, and completed
. We could also have an error
state to be safe.
I'm not sure if it would be best to go with a push or a pull model here when distributing work:
- doing a push keeps all threading a bit more centralized in the
StateMachine
but has impacts on the dependencies when creating beans - doing a pull pushes the threading outside of the scope of the
StateMachine
and might create a cleaner dependency graph
To start off, we have a few new Interfaces (return values tbd):
StateMachine (name tbd)
void start(ManifestEntry entry); // Queue a ManifestEntry for Processing
void retry(ManifestEntry entry); // Requeue a ManifestEntry for Processing
void associate(ManifestEntry entry, TokenResponse response); // Mark a ManifestEntry as having received a Token
// Might be able to combine these two, not sure of the impact
void rm(ManifestEntry entry);
void complete(ManifestEntry entry);
// if doing pull
Set<ManifestEntry> getQueued(int size, long timeout, TimeUnit timeUnit);
Map<ManifestEntry, TokenResponse> getReceived(int size, long timeout, TimeUnit timeUnit);
Implemented By
- TokenStateMachine
Registrar
void submit(Map<ManifestEntry, TokenResponse> tokenResponses);
Implemented By
- HttpTokenRegistrar
ChronopolisRequestBatch
void fetchTokens(Set<ManifestEntry> entries);
Implemented By
- ChronopolisTokenRequestBatch
Filter
Predicate<ManifestEntry>
Replaced by Implemented By
- HttpFilter
- StateMachineFilter
There are also some minor changes we'll want to make to the BagProcessor
, notably removing the ManifestTuple
and creating ManifestEntry
from the start and moving from a single Filter
to a List<Filter>
.