원클릭으로
ovstorage-user-write-safely
Use when writing a new object without clobbering or updating an existing object with optimistic concurrency.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when writing a new object without clobbering or updating an existing object with optimistic concurrency.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Deploy and develop against NVIDIA Omniverse Storage APIs on any Kubernetes cluster (MicroK8s, EKS, AKS, GKE, bare metal). Two storage adapters: (1) Example Storage Adapter — Python filesystem reference implementation + Discovery for learning and custom adapter development; (2) S3/Azure Production Storage Adapter — NVIDIA pre-built S3/Azure adapter + Discovery as minimum, expandable with Event Aggregation, Event Consumer, RabbitMQ, Envoy Auth Extension, Storage Navigator, and Contour ingress. Can deploy on the developer's behalf (generating scripts + .env) or guide manual deployment. Custom adapter development covers three APIs: Storage, Notifications, and Permissions. Use when a developer asks about deploying, configuring, validating, troubleshooting, or building any component of the Omniverse Storage APIs stack.
Use when adding or reviewing an authz plugin for ovstorage-broker or ovstorage-rest - covers the AuthzPlugin trait, the 21 operations, the policy-epoch model, and the cdylib cancellation contract.
Use when adding or reviewing a storage backend plugin for ovstorage.
Use when Rust changes affect ovstorage C or C++ headers and checked-in generated headers must be refreshed.
Use when starting an ovstorage-broker locally for development or integration testing - covers a minimal TOML, the cdylib plugin path, and how to hit the listener with broker-client or curl.
Use when checking the Storage API wire contract that ovstorage-plugin-services-client depends on.
| name | ovstorage-user-write-safely |
| description | Use when writing a new object without clobbering or updating an existing object with optimistic concurrency. |
| license | CC-BY-4.0 |
| version | 0.1.0 |
| author | NVIDIA Omniverse |
| tags | ["ovstorage","write","safety"] |
| tools | ["Read"] |
| compatibility | Requires ovstorage MCP tools or equivalent library calls and an already-configured backend route with write permission. |
Goal: Upload an object's bytes to a path. By default, fail loudly if the destination already exists rather than silently overwriting.
When to use this: You're writing something new and the destination should not exist yet, OR you're updating an existing object and want to verify it hasn't changed since you last looked.
Pass if_dest: { "kind": "fail" } to refuse to overwrite. The call
fails with AlreadyExists if the address is taken.
{
"tool": "ovstorage_write",
"arguments": {
"address": "s3://my-bucket/output/report.json",
"data_base64": "ewogICJyZXN1bHQiOiAib2sifQo=",
"if_dest": { "kind": "fail" }
}
}
Pass if_dest: { "kind": "match_etag", "etag": "<s>" } with the etag
you read earlier. If another writer has changed the object since then,
the call fails with ObjectModified and you can decide whether to
merge or restart.
{
"tool": "ovstorage_write",
"arguments": {
"address": "s3://my-bucket/state/counter.json",
"data_base64": "eyJjIjogN30=",
"if_dest": { "kind": "match_etag", "etag": "\"abc123\"" }
}
}
The default behavior when if_dest is omitted is to overwrite. Pass
if_dest: { "kind": "overwrite" } explicitly to document intent.
{
"tool": "ovstorage_write",
"arguments": {
"address": "s3://my-bucket/cache/latest.json",
"data_base64": "...",
"if_dest": { "kind": "overwrite" }
}
}
{
"v": "0.1",
"ok": true,
"operation": "ovstorage_write",
"result": {
"info": {
"address": "s3://my-bucket/output/report.json",
"size": 4231,
"etag": "\"def456\"",
"version": null
}
}
}
Save info.etag (and info.version if your backend has it) — you
need them for any later optimistic-concurrency write or if_match
read.
user_metadata — map of {key: value} strings attached to the object. Treated as opaque by ovstorage; the backend persists what it can.message — an annotation associated with the write (used as a commit message by backends that version objects, e.g. Nucleus checkpoints).error.code | Likely cause | What to do |
|---|---|---|
AlreadyExists | if_dest: {"kind": "fail"} and the destination exists | Pick a different address, or drop if_dest (or set {"kind": "overwrite"}) after confirming you really want to clobber |
ObjectModified | if_dest: {"kind": "match_etag", ...} didn't match current identity | Re-read with ovstorage_stat, decide whether to merge, retry with the new etag |
PermissionDenied | Credentials can't write here | Check ovstorage_doctor connection state |
IntegrityFailure | Bytes received didn't match a checksum (rare) | Retry the write |
Transient | Backend hiccup | retryable: true — try again |
Unsupported | Backend doesn't support etag-conditional writes | Drop if_dest (or use {"kind": "overwrite"}); you lose the concurrency guarantee. Check ovstorage_capabilities to verify in advance |
info.etag) for if_match