Feature description
Summary
A VRT references each source by path only. There is no way to record a specific GCS object generation (version) for a source, so opening a VRT always reads the live (current) version of each /vsigs/ source. If a source object is later overwritten (with GCS object versioning enabled), the same VRT silently starts reading different data.
Why this matters
For reproducibility and provenance, a VRT built at a given time should be able to keep referring to the exact object versions it was composed with, independent of later writes to those paths. Today that is impossible: the version information has nowhere to live in the VRT.
Current behaviour
Feature description
Summary
A VRT references each source by path only. There is no way to record a specific GCS object generation (version) for a source, so opening a VRT always reads the live (current) version of each
/vsigs/source. If a source object is later overwritten (with GCS object versioning enabled), the same VRT silently starts reading different data.Why this matters
For reproducibility and provenance, a VRT built at a given time should be able to keep referring to the exact object versions it was composed with, independent of later writes to those paths. Today that is impossible: the version information has nowhere to live in the VRT.
Current behaviour
/vsigs/handler reads the live object. Once /vsigs/: Handle Query-Based Generation Params to Support GCS Object Versioning #14947 is merged and released, a specific generation will be able to be requested via theGS_GENERATIONpath-specific option (see also /vsigs/: support reading a specific object generation (GCS object versioning) #14946). However, the caller has to set that option in code before opening the source; today it cannot be stored in the VRT.VRTSimpleSource::XMLInit/SerializeToXMLinfrmts/vrt/vrtsources.cppparse and writerelativeToVRTandsharedon<SourceFilename>, but nothing for an object version, so a generation cannot be persisted or applied when the source opens.