Skip to content

[FEATURE] Object-store plugin interface contract and conformance suite #3665

Open

Description

Defines the boundary that lets storage backends live outside core: the gRPC protocol, the plugin binary, how it is deployed as a sidecar, and a conformance suite every plugin image must pass.

Tracks the "Object-store plugin interface" contract of the Extensible Install Roadmap.

Owner: provider-neutral core workstream (#3161). Consumers: GKE workstream (external GCS plugin image), other providers (for example Azure, #2595).

Specification.

  • Protocol. gRPC package objectstore.v1 at api/objectstore/v1/objectstore.proto (the roadmap's pkg/proto/... path is out of date):
Service RPC Purpose
NodeProvider FetchSnapshot Download named snapshot files into a local path
NodeProvider UploadSnapshot Upload named files from a local path
ControlProvider CleanupSnapshot Delete everything under a snapshot URI or prefix
ControlProvider CopySnapshot Copy a snapshot from one URI to another
AssetProvider FetchAsset Fetch an asset pinned by SHA-256 into an existing file
  • Binary. objectstore-plugin node|control|healthcheck. node serves NodeProvider and AssetProvider; control serves ControlProvider; both serve gRPC health. Document which flags are part of the contract (--socket, --root, --upload-memory-budget, --asset-staging-dir, --asset-staging-capacity, --timeout, --preview) and which are backend-specific (--transfer-service-account, --exchange-*, --actor-jwt-issuer*, --ateapi-*).
  • Deployment. Native-sidecar initContainer objectstore-plugin, emptyDir volume objectstore-plugin at /run/objectstore-plugin. atelet: node mode, node.sock, plus host path /var/lib/ate and an asset-staging emptyDir. ate-api-server: control mode, control.sock.
  • Backend selection. ATE_STORAGE_BACKEND; backend configuration from the backend's standard environment. An external plugin image may ignore ATE_STORAGE_BACKEND. Align with storage.backend=external in ate-setup: install a provider's object store plugin with --component and storage.backend=external #3651.
  • URI schemes. Each backend serves its own scheme. The plugin refuses asset URLs under a snapshot location.
  • Link the sidecar reference page added by ate-setup: install a provider's object store plugin with --component and storage.backend=external #3651 (docs/reference/object-store-plugin-sidecar.md) as the published form once merged.

Stability. Within a major release, RPCs and fields only gain optional additions; the version skew policy's two-step rule applies where atelet can be newer than the plugin.

Enforcement.

  • Proto breaking-change detection (exists: buf.yaml, hack/verify/proto-breaking.sh).
  • New: a conformance suite that any plugin image, core or external, runs against a test bucket.

Parent Issue: #3160

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions