| Design document | |
|---|---|
| Revision | v1 |
| Status | proposed |
patches in VDIs
“Patches” are signed binary blobs which can be queried and applied.
They are stored in the dom0 filesystem under /var/patch. Unfortunately
the patches can be quite large – imagine a repo full of RPMs – and
the dom0 filesystem is usually quite small, so it can be difficult
to upload and apply some patches.
Instead of writing patches to the dom0 filesystem, we shall write them to disk images (VDIs) instead. We can then take advantage of features like
- shared storage
- cross-host
VDI.copy
to manage the patches.
XenAPI changes
Add a field
pool_patch.VDIof typeRef(VDI). When a new patch is stored in a VDI, it will be referenced here. Older patches and cleaned patches will have invalid references here.The HTTP handler for uploading patches will choose an SR to stream the patch into. It will prefer to use the
pool.default_SRand fall back to choosing an SR on the master whose driver supports theVDI_CLONEcapability: we want the ability to fast clone patches, one per host concurrently installing them. A VDI will be created whose size is 4x the apparent size of the patch, defaulting to 4GiB if we have no size information (i.e. nocontent-lengthheader)pool_patch.clean_on_hostwill be deprecated. It will still try to clean a patch from the local filesystem but this is pointless for the new VDI patch uploads.pool_patch.cleanwill be deprecated. It will still try to clean a patch from the local filesystem of the master but this is pointless for the new VDI patch uploads.pool_patch.pool_cleanwill be deprecated. It will destroy any associated patch VDI. Users will be encouraged to callVDI.destroyinstead.
Changes beneath the XenAPI
pool_patchrecords will only be deleted if both thefilenamefield refers to a missing file on the master and theVDIfield is a dangling referencePatches stored in VDIs will be stored within a filesystem, like we used to do with suspend images. This is needed because (a) we want to execute the patches and block devices cannot be executed; and (b) we can use spare space in the VDI as temporary scratch space during the patch application process. Within the VDI we will call patches
patchrather than using a complicated filename.When a host wishes to apply a patch it will call
VDI.copyto duplicate the VDI to a locally-accessible SR, mount the filesystem and execute it. If the patch is still in the master’s dom0 filesystem then it will fall back to the HTTP handler.
Summary of the impact on the admin
- There will nolonger be a size limit on hotfixes imposed by the mechanism itself.
- There must be enough free space in an SR connected to the host to be able to apply a patch on that host.