> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://docs.nvidia.com/dynamo/llms.txt. For full content including API reference and SDK examples, see https://docs.nvidia.com/dynamo/llms-full.txt.

# Writable Operation

An operation which enables a remote worker to write data to the local worker.

To create the operation, a set of local [`Descriptor`](/dynamo/dev/nixl-connect/descriptor) objects must be provided which reference memory intended to receive data from a remote worker.
Once created, the memory referenced by the provided descriptors becomes immediately writable by a remote worker with the necessary metadata.
The NIXL metadata ([RdmaMetadata](/dynamo/dev/nixl-connect/rdma-metadata)) required to access the memory referenced by the provided descriptors is accessible via the operations `.metadata()` method.
Once acquired, the metadata needs to be provided to a remote worker via a secondary channel, most likely HTTP or TCP+NATS.

Disposal of the object will instruct the NIXL subsystem to cancel the operation,
therefore the operation should be awaited until completed unless cancellation is intended.
Cancellation is handled asynchronously.

## Example Usage

```python
    async def recv_data(
      self,
      local_tensor: torch.Tensor
    ) -> None:
      descriptor = dynamo.nixl_connect.Descriptor(local_tensor)

      with await self.connector.create_writable(descriptor) as write_op:
        op_metadata = write_op.metadata()

        # Send the metadata to the remote worker via sideband communication.
        await self.request_remote_data(op_metadata)
        # Wait the remote worker to complete its write operation to local_tensor.
        # AKA receive data from remote worker.
        await write_op.wait_for_completion()
```

## Methods

### metadata

```python
def metadata(self) -> RdmaMetadata
```

Generates and returns the NIXL metadata ([RdmaMetadata](/dynamo/dev/nixl-connect/rdma-metadata)) required for a remote worker to write to the operation.
Once acquired, the metadata needs to be provided to a remote worker via a secondary channel, most likely HTTP or TCP+NATS.

### wait\_for\_completion

```python
async def wait_for_completion(self) -> None
```

Blocks the caller until the operation has received a completion signal from a remote worker.

## Properties

The current state (aka. status) of the operation. See [`OperationStatus`](/dynamo/dev/nixl-connect/operation-status).

## Related Classes

* [Connector](/dynamo/dev/nixl-connect/connector)
* [Descriptor](/dynamo/dev/nixl-connect/descriptor)
* [Device](/dynamo/dev/nixl-connect/device)
* [OperationStatus](/dynamo/dev/nixl-connect/operation-status)
* [RdmaMetadata](/dynamo/dev/nixl-connect/rdma-metadata)
* [ReadOperation](/dynamo/dev/nixl-connect/read-operation)
* [ReadableOperation](/dynamo/dev/nixl-connect/readable-operation)
* [WriteOperation](/dynamo/dev/nixl-connect/write-operation)