Schemas

There are two sets of JSON schemas used by the BackupService. One schema is used for the backup-manifest.json file that gets inserted into a compressed backup archive, and the other is for the JSON block that exists alongside the compressed backup archive.

There is a similar meta property between both schemas. This property is for the metadata about a backup (including information about the time of the backup, and the machine / build that the backup was created on). There is admittedly some redundancy here where this same metadata exists in the JSON block as well as the backup manifest, but this redundancy helps to protect against accidental (or intentional) corruption of a backup.

The drawback of this redundancy is that the schema for the metadata must be maintained in lock-step between both the backup manifest and the JSON block.

This is done by defining the metadata structure separately within the backup manifest schema, and _referring_ to that structure within both the backup manifest schema and the JSON block schema.

This implies that the version numbers between both schemas are also maintained in lock-step. This means that there is a global SCHEMA_VERSION defined inside of ArchiveUtils that represents the current schema version for both the backup manifest as well as the JSON block.

So this means that when you develop a new version of one schema, you must also generate a new schema for the other using the same version number, even if that second schema has not changed.