MediaReplicaDrainingPayload media.replica.draining@1
Generated at from
openvibe-contracts v0.97.0 and
openvibe-sdk v0.26.0.
- Version
- 1.0.0
- Owner
- media
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/events/payloads/media.replica.draining.v1.json
media.replica.draining v1 (OpenVibe.Media server/objects/tiering.js demote(), the recordPlacement before the replica is deleted; PR #18). Media decided to drain a replica: the canonical copy has been confirmed good, the replica is about to be removed, and reads should stop being routed to it. Recorded before the delete, so a draining with no following media.replica.evicted means the delete failed and the replica is still there. Envelope: subject { type: object, id: <object_id> }, visibility internal, priority low, actor service:media, source media. Sandbox tenants produce none.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
object_id | string | yes |
| |
app_id | string | null | yes | The tenant that owns the object: an app (live, tools…) or a developer project's production tenant (prj_…); null when the object has no tenant. |
|
class | enum | yes | The placement class the move was budgeted against (media.storage_policy classes; tiering.classOf). |
|
action | const | yes | Draining is always part of a demotion. |
|
provider | enum | yes | The provider whose replica is being drained. |
|
key | string | yes | The object key of the replica being removed. |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: drain-r2
{
"object_id": "med_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"app_id": "live",
"class": "video",
"action": "demote",
"provider": "r2",
"key": "vods/med_01JAB2C3D4E5F6G7H8J9K0MNPQ.mp4"
}Rejected: leaks-bytes
{
"object_id": "med_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"app_id": "live",
"class": "video",
"action": "demote",
"provider": "r2",
"key": "vods/med_01JAB2C3D4E5F6G7H8J9K0MNPQ.mp4",
"bytes": 1048576
}Rejected: promote-action
{
"object_id": "med_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"app_id": "live",
"class": "video",
"action": "promote",
"provider": "r2",
"key": "vods/med_01JAB2C3D4E5F6G7H8J9K0MNPQ.mp4"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('media.replica.draining@1', value); // { valid, errors: [{ path, message }] }