summaryrefslogtreecommitdiffstats
path: root/src/arrow/cpp/src/plasma/plasma.fbs
diff options
context:
space:
mode:
Diffstat (limited to 'src/arrow/cpp/src/plasma/plasma.fbs')
-rw-r--r--src/arrow/cpp/src/plasma/plasma.fbs357
1 files changed, 357 insertions, 0 deletions
diff --git a/src/arrow/cpp/src/plasma/plasma.fbs b/src/arrow/cpp/src/plasma/plasma.fbs
new file mode 100644
index 000000000..62c02b96a
--- /dev/null
+++ b/src/arrow/cpp/src/plasma/plasma.fbs
@@ -0,0 +1,357 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+include "common.fbs";
+
+// Plasma protocol specification
+namespace plasma.flatbuf;
+
+enum MessageType:long {
+ // Message that gets send when a client hangs up.
+ PlasmaDisconnectClient = 0,
+ // Create a new object.
+ PlasmaCreateRequest,
+ PlasmaCreateReply,
+ PlasmaCreateAndSealRequest,
+ PlasmaCreateAndSealReply,
+ PlasmaAbortRequest,
+ PlasmaAbortReply,
+ // Seal an object.
+ PlasmaSealRequest,
+ PlasmaSealReply,
+ // Get an object that is stored on the local Plasma store.
+ PlasmaGetRequest,
+ PlasmaGetReply,
+ // Release an object.
+ PlasmaReleaseRequest,
+ PlasmaReleaseReply,
+ // Delete an object.
+ PlasmaDeleteRequest,
+ PlasmaDeleteReply,
+ // See if the store contains an object (will be deprecated).
+ PlasmaContainsRequest,
+ PlasmaContainsReply,
+ // List all objects in the store.
+ PlasmaListRequest,
+ PlasmaListReply,
+ // Get information for a newly connecting client.
+ PlasmaConnectRequest,
+ PlasmaConnectReply,
+ // Make room for new objects in the plasma store.
+ PlasmaEvictRequest,
+ PlasmaEvictReply,
+ // Subscribe to a list of objects or to all objects.
+ PlasmaSubscribeRequest,
+ // Unsubscribe.
+ PlasmaUnsubscribeRequest,
+ // Sending and receiving data.
+ // PlasmaDataRequest initiates sending the data, there will be one
+ // such message per data transfer.
+ PlasmaDataRequest,
+ // PlasmaDataReply contains the actual data and is sent back to the
+ // object store that requested the data. For each transfer, multiple
+ // reply messages get sent. Each one contains a fixed number of bytes.
+ PlasmaDataReply,
+ // Object notifications.
+ PlasmaNotification,
+ // Set memory quota for a client.
+ PlasmaSetOptionsRequest,
+ PlasmaSetOptionsReply,
+ // Get debugging information from the store.
+ PlasmaGetDebugStringRequest,
+ PlasmaGetDebugStringReply,
+ // Create and seal a batch of objects. This should be used to save
+ // IPC for creating many small objects.
+ PlasmaCreateAndSealBatchRequest,
+ PlasmaCreateAndSealBatchReply,
+ // Touch a number of objects to bump their position in the LRU cache.
+ PlasmaRefreshLRURequest,
+ PlasmaRefreshLRUReply,
+}
+
+enum PlasmaError:int {
+ // Operation was successful.
+ OK,
+ // Trying to create an object that already exists.
+ ObjectExists,
+ // Trying to access an object that doesn't exist.
+ ObjectNotFound,
+ // Trying to create an object but there isn't enough space in the store.
+ OutOfMemory,
+ // Trying to delete an object but it's not sealed.
+ ObjectNotSealed,
+ // Trying to delete an object but it's in use.
+ ObjectInUse,
+}
+
+// Plasma store messages
+
+struct PlasmaObjectSpec {
+ // Index of the memory segment (= memory mapped file) that
+ // this object is allocated in.
+ segment_index: int;
+ // The offset in bytes in the memory mapped file of the data.
+ data_offset: ulong;
+ // The size in bytes of the data.
+ data_size: ulong;
+ // The offset in bytes in the memory mapped file of the metadata.
+ metadata_offset: ulong;
+ // The size in bytes of the metadata.
+ metadata_size: ulong;
+ // Device to create buffer on.
+ device_num: int;
+}
+
+table PlasmaSetOptionsRequest {
+ // The name of the client.
+ client_name: string;
+ // The size of the output memory limit in bytes.
+ output_memory_quota: long;
+}
+
+table PlasmaSetOptionsReply {
+ // Whether setting options succeeded.
+ error: PlasmaError;
+}
+
+table PlasmaGetDebugStringRequest {
+}
+
+table PlasmaGetDebugStringReply {
+ // The debug string from the server.
+ debug_string: string;
+}
+
+table PlasmaCreateRequest {
+ // ID of the object to be created.
+ object_id: string;
+ // Whether to evict other objects to make room for this one.
+ evict_if_full: bool;
+ // The size of the object's data in bytes.
+ data_size: ulong;
+ // The size of the object's metadata in bytes.
+ metadata_size: ulong;
+ // Device to create buffer on.
+ device_num: int;
+}
+
+table CudaHandle {
+ handle: [ubyte];
+}
+
+table PlasmaCreateReply {
+ // ID of the object that was created.
+ object_id: string;
+ // The object that is returned with this reply.
+ plasma_object: PlasmaObjectSpec;
+ // Error that occurred for this call.
+ error: PlasmaError;
+ // The file descriptor in the store that corresponds to the file descriptor
+ // being sent to the client right after this message.
+ store_fd: int;
+ // The size in bytes of the segment for the store file descriptor (needed to
+ // call mmap).
+ mmap_size: long;
+ // CUDA IPC Handle for objects on GPU.
+ ipc_handle: CudaHandle;
+}
+
+table PlasmaCreateAndSealRequest {
+ // ID of the object to be created.
+ object_id: string;
+ // Whether to evict other objects to make room for this one.
+ evict_if_full: bool;
+ // The object's data.
+ data: string;
+ // The object's metadata.
+ metadata: string;
+ // Hash of the object data.
+ digest: string;
+}
+
+table PlasmaCreateAndSealReply {
+ // Error that occurred for this call.
+ error: PlasmaError;
+}
+
+table PlasmaCreateAndSealBatchRequest {
+ object_ids: [string];
+ // Whether to evict other objects to make room for these objects.
+ evict_if_full: bool;
+ data: [string];
+ metadata: [string];
+ digest: [string];
+}
+
+table PlasmaCreateAndSealBatchReply {
+ // Error that occurred for this call.
+ error: PlasmaError;
+}
+
+table PlasmaAbortRequest {
+ // ID of the object to be aborted.
+ object_id: string;
+}
+
+table PlasmaAbortReply {
+ // ID of the object that was aborted.
+ object_id: string;
+}
+
+table PlasmaSealRequest {
+ // ID of the object to be sealed.
+ object_id: string;
+ // Hash of the object data.
+ digest: string;
+}
+
+table PlasmaSealReply {
+ // ID of the object that was sealed.
+ object_id: string;
+ // Error code.
+ error: PlasmaError;
+}
+
+table PlasmaGetRequest {
+ // IDs of the objects stored at local Plasma store we are getting.
+ object_ids: [string];
+ // The number of milliseconds before the request should timeout.
+ timeout_ms: long;
+}
+
+table PlasmaGetReply {
+ // IDs of the objects being returned.
+ // This number can be smaller than the number of requested
+ // objects if not all requested objects are stored and sealed
+ // in the local Plasma store.
+ object_ids: [string];
+ // Plasma object information, in the same order as their IDs. The number of
+ // elements in both object_ids and plasma_objects arrays must agree.
+ plasma_objects: [PlasmaObjectSpec];
+ // A list of the file descriptors in the store that correspond to the file
+ // descriptors being sent to the client. The length of this list is the number
+ // of file descriptors that the store will send to the client after this
+ // message.
+ store_fds: [int];
+ // Size in bytes of the segment for each store file descriptor (needed to call
+ // mmap). This list must have the same length as store_fds.
+ mmap_sizes: [long];
+ // The number of elements in both object_ids and plasma_objects arrays must agree.
+ handles: [CudaHandle];
+}
+
+table PlasmaReleaseRequest {
+ // ID of the object to be released.
+ object_id: string;
+}
+
+table PlasmaReleaseReply {
+ // ID of the object that was released.
+ object_id: string;
+ // Error code.
+ error: PlasmaError;
+}
+
+table PlasmaDeleteRequest {
+ // The number of objects to delete.
+ count: int;
+ // ID of the object to be deleted.
+ object_ids: [string];
+}
+
+table PlasmaDeleteReply {
+ // The number of objects to delete.
+ count: int;
+ // ID of the object that was deleted.
+ object_ids: [string];
+ // Error code.
+ errors: [PlasmaError];
+}
+
+table PlasmaContainsRequest {
+ // ID of the object we are querying.
+ object_id: string;
+}
+
+table PlasmaContainsReply {
+ // ID of the object we are querying.
+ object_id: string;
+ // 1 if the object is in the store and 0 otherwise.
+ has_object: int;
+}
+
+table PlasmaListRequest {
+}
+
+table PlasmaListReply {
+ objects: [ObjectInfo];
+}
+
+// PlasmaConnect is used by a plasma client the first time it connects with the
+// store. This is not really necessary, but is used to get some information
+// about the store such as its memory capacity.
+
+table PlasmaConnectRequest {
+}
+
+table PlasmaConnectReply {
+ // The memory capacity of the store.
+ memory_capacity: long;
+}
+
+table PlasmaEvictRequest {
+ // Number of bytes that shall be freed.
+ num_bytes: ulong;
+}
+
+table PlasmaEvictReply {
+ // Number of bytes that have been freed.
+ num_bytes: ulong;
+}
+
+table PlasmaSubscribeRequest {
+}
+
+table PlasmaNotification {
+ object_info: [ObjectInfo];
+}
+
+table PlasmaDataRequest {
+ // ID of the object that is requested.
+ object_id: string;
+ // The host address where the data shall be sent to.
+ address: string;
+ // The port of the manager the data shall be sent to.
+ port: int;
+}
+
+table PlasmaDataReply {
+ // ID of the object that will be sent.
+ object_id: string;
+ // Size of the object data in bytes.
+ object_size: ulong;
+ // Size of the metadata in bytes.
+ metadata_size: ulong;
+}
+
+table PlasmaRefreshLRURequest {
+ // ID of the objects to be bumped in the LRU cache.
+ object_ids: [string];
+}
+
+table PlasmaRefreshLRUReply {
+}