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

FieldTypeRequiredDescriptionConstraints
object_idstringyes
  • pattern ^med_[0-9A-HJKMNP-TV-Z]{26}$
app_idstring | nullyesThe tenant that owns the object: an app (live, tools…) or a developer project's production tenant (prj_…); null when the object has no tenant.
  • minLength 1
  • maxLength 200
classenumyesThe placement class the move was budgeted against (media.storage_policy classes; tiering.classOf).
  • one of "video", "image", "download", "game-asset", "attachment", "backup"
actionconstyesDraining is always part of a demotion.
  • = "demote"
providerenumyesThe provider whose replica is being drained.
  • one of "local", "b2", "r2"
keystringyesThe object key of the replica being removed.
  • minLength 1
  • maxLength 1024

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 }] }