257 lines
5.9 KiB
Plaintext
257 lines
5.9 KiB
Plaintext
|
|
= Design
|
|
|
|
== Job activity
|
|
|
|
[plantuml, job_activity_puml, svg]
|
|
....
|
|
title __Job activity__
|
|
control Timer as timer
|
|
actor Scheduler as scheduler
|
|
database MetadataStorage as storage
|
|
boundary JobActivationQueue as jobQueue
|
|
boundary NotifyQueue as notify
|
|
actor Runner as runner
|
|
entity JobCode as jobStorage
|
|
actor NotifyRunner as notifyRunner
|
|
database NotifyStorage as notifyStorage
|
|
entity NotifyCode as notifyCode
|
|
|
|
note over scheduler
|
|
Schedules tasks
|
|
end note
|
|
|
|
/ note over storage
|
|
Stores job metadata
|
|
end note
|
|
|
|
/ note over jobQueue
|
|
A queue that receives the job GUID
|
|
for jobs that needs to be run
|
|
end note
|
|
|
|
/ note over notify
|
|
A queue that receives the job GUID
|
|
and the job state it needs to be
|
|
notified of
|
|
end note
|
|
|
|
|
|
/ note over runner
|
|
Runs the job code
|
|
end note
|
|
|
|
/ note over jobStorage
|
|
Converts a job GUID to
|
|
runnable code
|
|
end note
|
|
|
|
/ note over notifyRunner
|
|
Runs notification code
|
|
end note
|
|
|
|
/ note over notifyStorage
|
|
Stores notification metadata
|
|
end note
|
|
|
|
/ note over notifyCode
|
|
Converts a notification GUID
|
|
to runnable code
|
|
end note
|
|
|
|
== Scheduling ==
|
|
timer -> scheduler : Every 1 sec
|
|
activate scheduler
|
|
scheduler -> storage : Get job guid list
|
|
storage -> scheduler
|
|
scheduler -> storage : For each guid get metadata
|
|
storage -> scheduler
|
|
scheduler -> scheduler : Filter next tick
|
|
scheduler -> storage : Next tick, last tick\nfor scheduled guids
|
|
scheduler -> jobQueue : GUIDs of next job
|
|
scheduler -> notify : GUID + SCHEDULED
|
|
deactivate scheduler
|
|
|
|
== Run the job ==
|
|
jobQueue -> runner : GUID of scheduled GUID
|
|
activate runner
|
|
runner -> jobStorage : Get runnable code\nvs GUID
|
|
jobStorage -> runner
|
|
runner -> notify : GUID + STARTED
|
|
runner -> runner : Run job
|
|
runner -> notify : GUID + DONE
|
|
deactivate runner
|
|
|
|
== Notification ==
|
|
notify -> notifyRunner : GUID + <JOB STATE>
|
|
activate notifyRunner
|
|
notifyRunner -> notifyStorage : Get notify GUIDs for\njob GUID + job state
|
|
notifyStorage -> notifyRunner
|
|
notifyRunner -> notifyCode : Get notify code to run\nusing Notify GUID
|
|
notifyCode -> notifyRunner
|
|
notifyRunner -> notifyRunner : Run notification code
|
|
deactivate notifyRunner
|
|
|
|
....
|
|
|
|
== Create job
|
|
|
|
[plantuml, job_creation_puml, svg]
|
|
....
|
|
title __Create job__
|
|
actor CreateJob as createJob
|
|
boundary JobCreateQueue as notify
|
|
boundary JobCreatedQueue as done
|
|
actor JobCreator as jobCreator
|
|
database MetadataStorage as storage
|
|
entity JobCode as runStorage
|
|
|
|
note over createJob
|
|
Starts the create job
|
|
process
|
|
end note
|
|
|
|
/ note over notify
|
|
Queue that produces
|
|
job metadata
|
|
end note
|
|
|
|
/ note over jobCreator
|
|
Handles the creation
|
|
message from the queue
|
|
end note
|
|
|
|
/ note over storage
|
|
Stores job metadata
|
|
end note
|
|
|
|
/ note over runStorage
|
|
Converts a job GUID
|
|
to runnable code
|
|
end note
|
|
|
|
/ note over done
|
|
Queue that produces
|
|
job metadata when a job
|
|
is done being made
|
|
end note
|
|
|
|
createJob -> notify : New Job
|
|
activate createJob
|
|
notify -> runStorage
|
|
notify -> jobCreator
|
|
activate jobCreator
|
|
jobCreator -> jobCreator : Generate next tick
|
|
jobCreator -> storage : Save metadata
|
|
jobCreator -> storage : Get list of GUIDs
|
|
storage -> jobCreator
|
|
jobCreator -> storage : Update list of GUIDs
|
|
jobCreator -> done : Job GUID
|
|
deactivate jobCreator
|
|
done -> createJob
|
|
deactivate createJob
|
|
|
|
....
|
|
|
|
|
|
== Create notification
|
|
|
|
[plantuml, create_notification_puml, svg]
|
|
....
|
|
title __Create notification__
|
|
actor CreateNotification as create
|
|
boundary NotifyCreateQueue as notify
|
|
boundary NotifyCreatedQueue as notified
|
|
actor NotificationCreator as creator
|
|
database NotifyStorage as notifyStorage
|
|
entity NotifyCode as notifyCode
|
|
|
|
create -> notify : Job GUID +\nNotify GUID +\nJob State
|
|
activate create
|
|
notify -> notifyCode
|
|
notify -> creator
|
|
activate creator
|
|
creator -> notifyStorage : Get notification data
|
|
notifyStorage -> creator
|
|
creator -> creator : Update job metadata\nwith new data
|
|
creator -> notifyStorage : Save
|
|
creator -> notified : Notify GUID + Job State
|
|
deactivate creator
|
|
notified -> create
|
|
deactivate create
|
|
|
|
|
|
....
|
|
|
|
== Delete notification
|
|
|
|
[plantuml, delete_notification_puml, svg]
|
|
....
|
|
title __Delete notification__
|
|
|
|
actor DeleteNotification as deleter
|
|
boundary NotifyDeleteQueue as notify
|
|
boundary NotifyDeletedQueue as notified
|
|
actor NotificationDeleter as delete
|
|
database NotifyStorage as storage
|
|
entity NotifyCode as notifyCode
|
|
|
|
deleter -> notify : Notify GUID + Job State
|
|
notify -> delete
|
|
activate delete
|
|
delete -> storage : Get notification\nmetadata
|
|
delete -> delete : Update metadata\nwith new data
|
|
delete -> storage : Save metadata
|
|
delete -> notified : Notify GUID + Job State
|
|
notified -> notifyCode
|
|
notified -> deleter
|
|
|
|
deactivate delete
|
|
....
|
|
|
|
== Delete job
|
|
|
|
[plantuml, job_deletion_puml, svg]
|
|
....
|
|
title __Delete job__
|
|
|
|
actor DeleteJob as deleter
|
|
boundary DeleteJobQueue as deleteQueue
|
|
boundary DeletedJobQueue as deletedQueue
|
|
actor Deleter as delete
|
|
database MetadataStorage as storage
|
|
entity JobCode as jobStorage
|
|
actor NotifyDeleter as notifyDelete
|
|
database NotifyStorage as notifyStorage
|
|
boundary NotifyDeletedQueue as notifyDeleted
|
|
entity NotifyCode as notifyCode
|
|
|
|
deleter -> deleteQueue : Job GUID
|
|
activate deleteQueue
|
|
deleteQueue -> delete
|
|
activate delete
|
|
|
|
group Delete Job
|
|
delete -> storage : Delete metadata
|
|
storage -> delete
|
|
delete -> deletedQueue : GUID
|
|
deletedQueue -> jobStorage
|
|
deactivate delete
|
|
deletedQueue -> deleter
|
|
end
|
|
|
|
deleteQueue -> notifyDelete
|
|
deactivate deleteQueue
|
|
group Delete notifications
|
|
activate notifyDelete
|
|
notifyDelete -> notifyStorage : Get notifications for Job ID
|
|
notifyStorage -> notifyDelete
|
|
notifyDelete -> notifyStorage : For each,\ndelete notification
|
|
notifyDelete -> notifyDeleted : For each\ndeleted notification,\nNotification GUID +\nJob GUID + State
|
|
notifyDeleted -> notifyCode
|
|
deactivate notifyDelete
|
|
end
|
|
|
|
|
|
....
|