There are 5 jobs in sync service:
- PersonOwnerRebuildJob: Calls a stored procedure that truncates and repopulates the 'PersonOwner' table based on an ordered list of ProgrammeMembership criteria
- PersonPlacementEmployingBodyTrustJob: Truncates and repopulates the list of connections between trainees and the employingBody trust. It writes data into the database table tcs.PersonTrust.
- PersonPlacementTrainingBodyTrustJob: Repopulates the list of connections between trainees and the trainingBody trust. It also writes into tcs.PersonTrust, and is triggered after PersonPlacementEmployingBodyTrustJob, so the data wouldn't be truncated at first.
- PostEmployingBodyTrustJob: Truncates and repopulates the list of connections between posts and the employingBody trust. It writes data into the database tcs.PostTrust.
- PostTrainingBodyTrustJob: Repopulates the list of connections between posts and the trainingBody trust. It also writes into tcs.PostTrust, and is triggered after PostTrainingBodyTrustJob, so the data wouldn't be truncated at first.
- PersonElasticSearchSyncJob: Truncates index of persons in ElasticSearch and creates a new index of persons. Then repopulates the documents of PersonViews from TCS-Service and saves these documents in ElasticSearch.
Sequence Diagram for sync jobs:
The processing flows of PersonPlacementTrainingBodyTrustJob, PostEmployingBodyTrustJob, PostTrainingBodyTrustJob are similar to PersonPlacementEmployingBodyTrustJob, so there's no need to repeat the diagram.
Time scheduled
00:05 PersonOwnerRebuildJob
00:09 PersonPlacementEmployingBodyTrustJob
00:29 PersonPlacementTrainingBodyTrustJob
01:09 PostEmployingBodyTrustJob
01:19 PostTrainingBodyTrustJob
01:29 PersonElasticSearchSyncJob
If the container is restarted in a pre-defined time range (00:00:00+00:00 to 07:00:00+00:00) then the jobs are run sequentially.
Job Execution Order
Summary of what to run:
Failed/Out-of-date Job | Managed Bean Name | Method Name | Things that need to be done after this has been started |
---|---|---|---|
PersonOwnerRebuildJob | PersonOwnerRebuildJob | personOwnerRebuildJob | none |
PersonPlacementEmployingBodyTrustJob | PersonPlacementEmployingBodyJob | doPersonPlacementEmployingBodyFullSync | Re-run PersonPlacementTrainingBodyTrustJob and PersonElasticSearchSyncJob |
PersonPlacementTrainingBodyTrustJob | PersonPlacementTrainingBodyTrustJob | PersonPlacementTrainingBodyFullSync | PersonElasticSearchSyncJob (assuming only this failed) |
PostEmployingBodyTrustJob | PostEmployingBodyTrustJob | PostEmployingBodyTrustFullSync | Re-run PostTrainingBodyTrustJob |
PostTrainingBodyTrustJob | PostTrainingBodyTrustJob | PostTrainingBodyTrustFullSync | none (assuming only this failed) |
PersonElasticSearchSyncJob | PersonElasticSearchJob | personElasticSearchSync | none |
Run jobs out of schedule
Instructions taken from Refresh Elasticsearch cache page.
If a job needs to be run manually, e.g. after a database has been re-imported to stage:
- Copy the commands below into your favorite text editor.
- Replace the
$bean_name
and$job_method
with the ones for the job you are re-running. - ssh into
either the blue orgreen server and paste the modified commands in a single chunk and it will go through the process of:- downloading the JDK and the JMX client
- copy them to the container
- extract the compressed JDK
- launch the JMX client and
- restart the sync job.
N.B. Refer to the "Job Execution Order" above to see whether there is an appending Job which needs to be run afterward.
cd /tmp mkdir javatools cd javatools wget https://heetisrequiredapps.blob.core.windows.net/javafiles/jmxterm-1.0.0-uber.jar wget https://heetisrequiredapps.blob.core.windows.net/javafiles/jdk-8-linux-x64.tar.gz cd .. docker cp javatools sync_sync_1:/tmp docker exec -it sync_sync_1 /bin/bash cd /tmp/javatools tar -zxvf jdk-8-linux-x64.tar.gz rm jdk-8-linux-x64.tar.gz ./jdk1.8.0_202/bin/java -jar jmxterm-1.0.0-uber.jar open 1 domain sync.mbean bean sync.mbean:name=$bean_name run $job_method run isCurrentlyRunning exit |
---|
When you're back at the bash-4.4# prompt you can run the following command to keep an eye on the progress of the sync.
tail /var/log/apps/sync.log -f |
---|
Add Comment