| Version 2 (modified by , 14 years ago) ( diff ) |
|---|
Recovery system design
Currently, the IPP to PSPS interface is a 'one-way' system. Batches are created by ippToPsps and posted on an IPP instance of the datastore. These batches are collected by the DXLayer on the PSPS side and sent on to the ODM. The IPP urgently requires some feedback from PSPS to determine which batches have succeeded and which have failed (and why they failed). With this information, data can be either deleted or regenerated accordingly. This is important simply because, with such large data volumes, we cannot afford the high levels of redundancy currently in place. At present, for a given batch, the following copies exist within the pipeline:
- a copy exists on the IPP cluster after generation by ippToPsps program
- a copy exists on the IPP datastore after publication by ippToPsps
- the
DXLayerretains a copy after it has sent the csv version to the ODM - the
DXLayeralso keeps a copy of these (larger) csv files
We therefore need to quickly implement the basic framework of a feedback loop so that the IPP can quickly learn if a given batch has been successfully merged into the PSPS database or not. This will enable it to safely delete the data files and remove the copy from the datastore. This will also form the basis for a more comprehensive recovery system, to be developed at a future date.
Previous design
.............................
. ___________ .
. | | .
---------------------------------------| datastore | .
| . |___________| .
.......|........................... . /|\ .
. ____\|/_____ ___________ . . ____|____ _____ .
. | | | | . . | | | | .
. | ippToPsps |----->| datastore |-------------->| DXLayer |<---->| ODM | .
. |___________| |___________| . . |_________| |_____| .
. . . .
................................... ..............................
IPP PSPS
Previously, Conrad and I had discussed a design whereby a second datastore instance would be utilized, this time on the PSPS cluster. The DXLayer would act as the 'middle-man', polling the ODM for updates on loading progress, then posting the results on the PSPS datastore for the IPP to consume. Polling this, ippToPsps could acquire a list of batches it knows are safe to be discarded. Simultaneously, the DXLayer could delete its copies of the same redundant data.
The update placed on the PSPS datastore could take the form of an XML file. At first this would simply detail those files it is safe to delete, but could evolve into a more complex recovery report, i.e. which batches failed, and what is required to be done by the IPP.
New design
------------------------------------------------------------
| |
........|........................... .......................|.....
. ____\|/_____ ___________ . . _________ __|__ .
. | | | | . . | | | | .
. | ippToPsps |----->| datastore |-------------->| DXLayer |----->| ODM | .
. |___________| |___________| . . |_________| |_____| .
. . . .
................................... ..............................
IPP PSPS
Instead of creating a new datastore instance within PSPS and using the DXLayer as communication layer between the ODM and the IPP, we propose that the DXLayer forms no part of the feedback system. It should be simplified such that it only facilitates loading, i.e. polling the IPP datastore for new data, converting it to csv files then sending these on to the ODM. Instead, to complete the circle, the ippToPsps code will poll the ODM directly, bypassing the DXLayer altogether. This also forms the basis of a full recovery system as, at a later date, ippToPsps can be coded to respond intelligently to the myriad of errors that may occur within the ODM. The DXLayer need know nothing of the how or why a certain batch is being submitted by the IPP, it should just grab it, convert it and pass it along to the ODM.
This design would therefore mean simplifying a major PSPS component, the DXLayer, but rather than waste the code already written, it would be taken and used within ippToPsps (for example, the ODM polling scripts). We would simply be shifting responsibility over from PSPS to IPP. Over parts could be dropped completely. For example, since ippToPsps will (soon) keep a record of all the jobs and corresponding exposure IDs in the IPP database, it is unnecessary for this information to be duplicated by the DXLayer, which currently has its own local database for this information.
The question remains of what should be done with the copies of the data currently retained by the DXLayer? The options are that it can either be deleted automatically after a defined amount of time, or the IPP can send a list of batches it is safe to delete through the datastore, or perhaps the DXLayer should not retain files at all. Since it can quickly and easily acquire data from the IPP datastore anyway, it is probably unnecessary for it to hold any copies.
Advantages over previous design
- no need for second datastore (not a big overhead, but it would require additional systems administration in an already complicated system)
- no need to define new XML standard that incorporates the whole array of recovery options
- no need for the
DXLayerto poll the ODM - no need for the
DXLayerto have a database to log the batches (already done on the IPP side) - no need for the
DXLayerto keep data at all?
