diff --git a/Dockerfile.dapper b/Dockerfile.dapper new file mode 100644 index 00000000..971c9eeb --- /dev/null +++ b/Dockerfile.dapper @@ -0,0 +1,135 @@ +FROM registry.suse.com/bci/bci-base:15.4 + +ARG DAPPER_HOST_ARCH=amd64 +ARG http_proxy +ARG https_proxy +ENV HOST_ARCH=${DAPPER_HOST_ARCH} ARCH=${DAPPER_HOST_ARCH} +ENV PROTOBUF_VER=3.18.0 + +# Setup environment +ENV PATH /go/bin:$PATH +ENV DAPPER_DOCKER_SOCKET true +ENV DAPPER_ENV TAG REPO +ENV DAPPER_OUTPUT bin coverage.out +ENV DAPPER_RUN_ARGS --privileged --tmpfs /go/src/github.com/longhorn/longhorn-engine/integration/.venv:exec --tmpfs /go/src/github.com/longhorn/longhorn-engine/integration/.tox:exec -v /dev:/host/dev -v /proc:/host/proc +ENV DAPPER_SOURCE /go/src/github.com/longhorn/longhorn-engine +WORKDIR ${DAPPER_SOURCE} + +RUN zypper -n addrepo --refresh https://download.opensuse.org/repositories/system:/snappy/SLE_15/system:snappy.repo && \ + zypper -n addrepo --refresh https://download.opensuse.org/repositories/network:/utilities/SLE_15_SP4/network:utilities.repo && \ + zypper -n addrepo --refresh https://download.opensuse.org/repositories/devel:libraries:c_c++/15.4/devel:libraries:c_c++.repo && \ + zypper -n addrepo --refresh https://download.opensuse.org/repositories/devel:languages:python:Factory/15.4/devel:languages:python:Factory.repo && \ + zypper -n addrepo --refresh https://download.opensuse.org/repositories/devel:languages:python:backports/SLE_15/devel:languages:python:backports.repo && \ + zypper --gpg-auto-import-keys ref + +RUN zypper -n install cmake wget curl git less file gcc \ + libkmod-devel libnl3-devel linux-glibc-devel pkg-config psmisc tox qemu-tools fuse python3 python3-devel \ + bash-completion librdmacm1 librdmacm-utils libibverbs xsltproc docbook-xsl-stylesheets \ + perl-Config-General libaio-devel glibc-devel-static glibc-devel sg3_utils iptables libltdl7 \ + python3-pip uuid-runtime libdevmapper1_03 iproute2 jq unzip \ + rpm-build rdma-core-devel gcc-c++ docker util-linux-systemd grep nvme-cli && \ + rm -rf rm -rf /var/cache/zypp/* + +# needed for ${!var} substitution +RUN rm -f /bin/sh && ln -s /bin/bash /bin/sh + +RUN if [ ${ARCH} == "s390x" ]; then \ + ln -s /usr/bin/gcc /usr/bin/s390x-linux-gnu-gcc;\ + fi + +# Install Go & tools +ENV GOLANG_ARCH_amd64=amd64 GOLANG_ARCH_arm64=arm64 GOLANG_ARCH_s390x=s390x GOLANG_ARCH=GOLANG_ARCH_${ARCH} \ + GOPATH=/go PATH=/go/bin:/usr/local/go/bin:${PATH} SHELL=/bin/bash +RUN wget -O - https://storage.googleapis.com/golang/go1.20.3.linux-${!GOLANG_ARCH}.tar.gz | tar -xzf - -C /usr/local && \ + go install golang.org/x/lint/golint@latest + +# GRPC dependencies +# GRPC health probe +ENV GRPC_HEALTH_PROBE_amd64=https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.3.2/grpc_health_probe-linux-amd64 \ + GRPC_HEALTH_PROBE_arm64=https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.3.2/grpc_health_probe-linux-arm64 \ + GRPC_HEALTH_PROBE_s390x=https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.3.2/grpc_health_probe-linux-s390x \ + GRPC_HEALTH_PROBE=GRPC_HEALTH_PROBE_${ARCH} + +RUN wget ${!GRPC_HEALTH_PROBE} -O /usr/local/bin/grpc_health_probe && \ + chmod +x /usr/local/bin/grpc_health_probe + +# protoc +ENV PROTOC_amd64=https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOBUF_VER}/protoc-${PROTOBUF_VER}-linux-x86_64.zip \ + PROTOC_arm64=https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOBUF_VER}/protoc-${PROTOBUF_VER}-linux-aarch_64.zip \ + PROTOC_s390x=https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOBUF_VER}/protoc-${PROTOBUF_VER}-linux-s390_64.zip \ + PROTOC=PROTOC_${ARCH} + +RUN cd /usr/src && \ + wget ${!PROTOC} -O protoc_${ARCH}.zip && \ + unzip protoc_${ARCH}.zip -d /usr/local/ + +# protoc-gen-go +RUN cd /go/src/github.com/ && \ + mkdir golang/ && \ + cd golang && \ + git clone https://github.com/golang/protobuf.git && \ + cd protobuf && \ + git checkout v1.3.2 && \ + cd protoc-gen-go && \ + go build && \ + cp protoc-gen-go /usr/local/bin + +# python grpc-tools +RUN if [ "${ARCH}" == "s390x" ]; then \ + zypper -n in libopenssl-devel && \ + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=True pip3 install grpcio==1.25.0 grpcio_tools==1.25.0 protobuf==${PROTOBUF_VER}; \ + else \ + pip3 install grpcio==1.25.0 grpcio_tools==1.25.0 protobuf==${PROTOBUF_VER}; \ + fi + +# buf +ENV GO111MODULE=on +RUN go install github.com/bufbuild/buf/cmd/buf@v1.4.0 + +# Build cache for tox +RUN mkdir integration/ +COPY integration/setup.py integration/tox.ini integration/requirements.txt integration/ +RUN cd integration && \ + if [ "${ARCH}" == "s390x" ]; then \ + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=True tox --notest;\ + else \ + tox --notest; \ + fi + +# Install libqcow to resolve error: +# vendor/github.com/longhorn/longhorn-engine/pkg/qcow/libqcow.go:6:11: fatal error: libqcow.h: No such file or directory +RUN wget -O - https://s3-us-west-1.amazonaws.com/rancher-longhorn/libqcow-alpha-20181117.tar.gz | tar xvzf - -C /usr/src +RUN cd /usr/src/libqcow-20181117 && \ + ./configure +RUN cd /usr/src/libqcow-20181117 && \ + make -j$(nproc) && \ + make install +RUN ldconfig + +# Build SPDK +ENV SPDK_DIR /usr/src/spdk +RUN if [ ${ARCH} == "amd64" ]; then \ + git clone https://github.com/longhorn/spdk.git ${SPDK_DIR} --recursive && \ + cd ${SPDK_DIR} && \ + git checkout 980f535d3876a5a6665486ad0cfaac5d584034aa && \ + git submodule update --init && \ + ./scripts/pkgdep.sh && \ + ./configure --target-arch=nehalem --disable-tests --disable-unit-tests --disable-examples && \ + make -j$(nproc) && \ + make install && \ + rm -rf ${SPDK_DIR}; \ + fi + +# Build longhorn-instance-manager for integration testing +RUN cd /go/src/github.com/longhorn && \ + git clone https://github.com/derekbit/longhorn-instance-manager.git && \ + cd longhorn-instance-manager && \ + git checkout 1f6d365948ee53293c2719f95572cb4f4ad3b4cf && \ + go build -o ./longhorn-instance-manager && \ + cp -r integration/rpc/ ${DAPPER_SOURCE}/integration/rpc/ && \ + cp longhorn-instance-manager /usr/local/bin + +VOLUME /tmp +ENV TMPDIR /tmp +ENTRYPOINT ["./scripts/entry"] +CMD ["ci"] diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..d7d72a16 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +TARGETS := $(shell ls scripts) + +.dapper: + @echo Downloading dapper + @curl -sL https://releases.rancher.com/dapper/latest/dapper-`uname -s`-`uname -m` > .dapper.tmp + @@chmod +x .dapper.tmp + @./.dapper.tmp -v + @mv .dapper.tmp .dapper + +$(TARGETS): .dapper + ./.dapper $@ + +trash: .dapper + ./.dapper -m bind trash + +trash-keep: .dapper + ./.dapper -m bind trash -k + +deps: trash + +.DEFAULT_GOAL := ci + +.PHONY: $(TARGETS) diff --git a/generate_grpc.sh b/generate_grpc.sh index afcbb878..c0171363 100755 --- a/generate_grpc.sh +++ b/generate_grpc.sh @@ -13,4 +13,6 @@ fi # proto lint check #buf check lint -protoc -I proto/spdkrpc/ -I proto/vendor/protobuf/src/ proto/spdkrpc/spdk.proto --go_out=plugins=grpc:proto/spdkrpc/ \ No newline at end of file +mkdir -p integration/rpc/spdk +protoc -I proto/spdkrpc/ -I proto/vendor/protobuf/src/ proto/spdkrpc/spdk.proto --go_out=plugins=grpc:proto/spdkrpc/ +python3 -m grpc_tools.protoc -I proto/spdkrpc/ -I proto/vendor/protobuf/src/ --python_out=integration/rpc/spdk --grpc_python_out=integration/rpc/spdk proto/spdkrpc/spdk.proto diff --git a/integration/common/constants.py b/integration/common/constants.py new file mode 100644 index 00000000..91bbbe17 --- /dev/null +++ b/integration/common/constants.py @@ -0,0 +1,13 @@ +import os + +INSTANCE_MANAGER_PROCESS_MANAGER = "localhost:8500" +INSTANCE_MANAGER_DISK = "localhost:8502" +INSTANCE_MANAGER_INSTANCE = "localhost:8503" +INSTANCE_MANAGER_SPDK = "localhost:8504" + +DISK_TYPE = "block" +DISK_NAME = "test-disk" +DISK_PATH = "/dev/im-disk" +DISK_BLOCK_SIZE = 4096 + +POD_IP = "127.0.0.1" diff --git a/integration/common/util.py b/integration/common/util.py new file mode 100644 index 00000000..2334eb15 --- /dev/null +++ b/integration/common/util.py @@ -0,0 +1,13 @@ +import socket + +def get_pod_ip(): + hostname = socket.gethostname() + addr_info = socket.getaddrinfo(hostname, None) + + pod_ip = "" + for addr in addr_info: + if addr[0] == socket.AF_INET and addr[4][0] != "127.0.0.1": + pod_ip = addr[4][0] + break + + return pod_ip diff --git a/integration/core/__init__.py b/integration/core/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/integration/core/conftest.py b/integration/core/conftest.py new file mode 100644 index 00000000..7983a267 --- /dev/null +++ b/integration/core/conftest.py @@ -0,0 +1,56 @@ +import pytest + + +from rpc.imrpc.process_manager_client import ProcessManagerClient +from rpc.instance.instance_client import InstanceClient +from rpc.spdk.spdk_client import SPDKClient +from rpc.disk.disk_client import DiskClient + +from common.constants import ( + DISK_TYPE, + DISK_NAME, + DISK_PATH, + DISK_BLOCK_SIZE, + INSTANCE_MANAGER_PROCESS_MANAGER, + INSTANCE_MANAGER_INSTANCE, + INSTANCE_MANAGER_SPDK, + INSTANCE_MANAGER_DISK, +) + +def delete_disk(): + try: + disk_client = DiskClient(INSTANCE_MANAGER_DISK) + disk_client.disk_delete(DISK_TYPE, DISK_NAME, DISK_PATH) + except Exception as e: + raise e + + +@pytest.fixture +def grpc_instance_client(request, address=INSTANCE_MANAGER_INSTANCE): + try: + disk_client = DiskClient(INSTANCE_MANAGER_DISK) + disk_client.disk_create(DISK_TYPE, DISK_NAME, DISK_PATH, + DISK_BLOCK_SIZE) + except Exception as e: + raise e + + request.addfinalizer(lambda: delete_disk()) + return InstanceClient(address) + + +@pytest.fixture +def grpc_process_manager_client(request, address=INSTANCE_MANAGER_PROCESS_MANAGER): + c = ProcessManagerClient(address) + return c + + +@pytest.fixture +def grpc_disk_client(request, address=INSTANCE_MANAGER_DISK): + c = DiskClient(address) + return c + + +@pytest.fixture +def grpc_spdk_client(request, address=INSTANCE_MANAGER_SPDK): + c = SPDKClient(address) + return c diff --git a/integration/core/test_disk.py b/integration/core/test_disk.py new file mode 100644 index 00000000..b7b5dff0 --- /dev/null +++ b/integration/core/test_disk.py @@ -0,0 +1,31 @@ +import os +import grpc +import pytest + +from rpc.disk.disk_client import DiskClient + + +def test_disk_create_and_delete(grpc_disk_client): + disk_type = "block" + disk_name = "test-disk" + disk_path = "/dev/im-disk" + block_size = 4096 + + disk = grpc_disk_client.disk_create(disk_type, disk_name, disk_path, + block_size) + assert disk.type == disk_type + assert disk_path == disk.path + assert block_size == disk.block_size + + disk = grpc_disk_client.disk_get(disk_type, disk_name, disk_path) + assert disk.type == disk_type + assert disk_path == disk.path + assert block_size == disk.block_size + + grpc_disk_client.disk_delete(disk_type, disk_name, disk.uuid) + + try: + disk = grpc_disk_client.disk_get(disk_type, disk_name, disk_path) + except Exception as e: + if "NotFound" not in str(e): + raise e diff --git a/integration/core/test_instance.py b/integration/core/test_instance.py new file mode 100644 index 00000000..d16691b4 --- /dev/null +++ b/integration/core/test_instance.py @@ -0,0 +1,222 @@ +import os +import grpc +import pytest +import socket + +from rpc.instance.instance_client import InstanceClient +from rpc.disk.disk_client import DiskClient + +from common.constants import ( + DISK_TYPE, + DISK_NAME, + DISK_PATH, + INSTANCE_MANAGER_DISK, +) + +from common.util import ( + get_pod_ip, +) + + +def test_version_get(grpc_process_manager_client, grpc_instance_client): + """ + Test version_get() method of ProcessManagerClient and InstanceClient. + The two versions should be the same. + """ + pm_version = grpc_process_manager_client.version_get() + instance_version = grpc_instance_client.version_get() + assert pm_version == instance_version + + +def test_instance_list(grpc_instance_client): + """ + Test instance_list() method of InstanceClient. + """ + instances = grpc_instance_client.instance_list() + assert len(instances) == 0 + + +def test_replica_create(grpc_instance_client): + """ + Test replica_create() method of InstanceClient. + 1. Create a disk and a corresponding lvstore. + 2. Create a running replica on the lvstore. + 3. Stop the replica (state: running->stopped) + 4. Resume the replica (state: stopped->running) + 5. Delete the replica + """ + # Create a disk and a corresponding lvstore + try: + disk_client = DiskClient(INSTANCE_MANAGER_DISK) + disk = disk_client.disk_get(DISK_TYPE, DISK_NAME, DISK_PATH) + print(disk) + except Exception as e: + raise e + + replica_name = "replica-1" + volume_name = "test-vol" + # Create a running replica + replica = grpc_instance_client.instance_create(backend_store_driver="spdk", + name=replica_name, + type="replica", + volume_name=volume_name, + disk_name=DISK_NAME, + disk_uuid=disk.uuid, + size=104857600, + expose_required=False) + assert replica.status.state == "running" + + replica = grpc_instance_client.instance_get("spdk", + replica_name, "replica") + assert replica.status.state == "running" + + instances = grpc_instance_client.instance_list() + assert len(instances) == 1 + # Stop the replica + grpc_instance_client.instance_delete(backend_store_driver="spdk", + name=replica_name, + type="replica", + disk_uuid=disk.uuid, + cleanup_required=False) + replica = grpc_instance_client.instance_get("spdk", + replica_name, "replica") + assert replica.status.state == "stopped" + + # Resume the replica + replica = grpc_instance_client.instance_create(backend_store_driver="spdk", + name=replica_name, + type="replica", + volume_name=volume_name, + disk_name=DISK_NAME, + disk_uuid=disk.uuid, + size=104857600, + expose_required=False) + assert replica.status.state == "running" + + # Delete the replica + grpc_instance_client.instance_delete(backend_store_driver="spdk", + name=replica_name, + type="replica", + disk_uuid=disk.uuid, + cleanup_required=True) + instances = grpc_instance_client.instance_list() + assert len(instances) == 0 + + +def test_replica_delete(grpc_instance_client): + """ + Test replica_delete() method of InstanceClient. + 1. Create a disk and a corresponding lvstore. + 2. Create multiple replicas + 3. Delete replicas + """ + # Create a disk and a corresponding lvstore + try: + disk_client = DiskClient(INSTANCE_MANAGER_DISK) + disk = disk_client.disk_get(DISK_TYPE, DISK_NAME, DISK_PATH) + print(disk) + except Exception as e: + raise e + + replicas = [] + num_replicas = 3 + + # Create multiple replicas + for i in range(0, num_replicas): + r = grpc_instance_client.instance_create(backend_store_driver="spdk", + name="replica-{}".format(i), + type="replica", + volume_name="test-vol", + disk_name=DISK_NAME, + disk_uuid=disk.uuid, + size=104857600, + expose_required=False) + replicas += [r] + + assert len(replicas) == num_replicas + + # Delete replicas + for i in range(0, num_replicas): + grpc_instance_client.instance_delete(backend_store_driver="spdk", + name="replica-{}".format(i), + type="replica", + disk_uuid=disk.uuid, + cleanup_required=True) + replicas = grpc_instance_client.instance_list() + assert len(replicas) == num_replicas - i - 1 + + +def test_engine_frontend_nvmf(grpc_instance_client): + """ + Test engine_create() method and "spdk-tcp-nvmf" frontend. + 1. Create a disk and a corresponding lvstore. + 2. Create replicas + 3. Create an engine + 4. Delete the engine + 5. Delete replicas + """ + # Create a disk and a corresponding lvstore + try: + disk_client = DiskClient(INSTANCE_MANAGER_DISK) + disk = disk_client.disk_get(DISK_TYPE, DISK_NAME, DISK_PATH) + print(disk) + except Exception as e: + raise e + + replica_name = "replica-1" + volume_name = "test-vol" + + pod_ip = get_pod_ip() + assert pod_ip != "" + + # Create multiple running replicas + replica_address_map = {} + num_replicas = 3 + for i in range(0, num_replicas): + replica_name = "replica-{}".format(i) + r = grpc_instance_client.instance_create(backend_store_driver="spdk", + name=replica_name, + type="replica", + volume_name=volume_name, + disk_name=DISK_NAME, + disk_uuid=disk.uuid, + size=104857600, + expose_required=False) + assert r.status.state == "running" + replica_address_map[replica_name] = "{}:{}".format(pod_ip, r.status.port_start) # NOQA + + instances = grpc_instance_client.instance_list() + assert len(instances) == num_replicas + + # Create a running engine + frontend = "spdk-tcp-nvmf" + engine = grpc_instance_client.instance_create(backend_store_driver="spdk", + name="engine-1", + type="engine", + volume_name=volume_name, + size=104857600, + replica_address_map=replica_address_map, # NOQA + frontend=frontend) + assert engine.status.state == "running" + + instances = grpc_instance_client.instance_list() + assert len(instances) == num_replicas + 1 # replicas + engine + + # Stop the engine + grpc_instance_client.instance_delete(backend_store_driver="spdk", + name="engine-1", + type="engine", + disk_uuid="", + cleanup_required=True) + instances = grpc_instance_client.instance_list() + assert len(instances) == num_replicas + + # Delete replicas + for i in range(0, num_replicas): + grpc_instance_client.instance_delete(backend_store_driver="spdk", + name="replica-{}".format(i), + type="replica", + disk_uuid=disk.uuid, + cleanup_required=True) + replicas = grpc_instance_client.instance_list() + assert len(replicas) == num_replicas - i - 1 diff --git a/integration/core/test_spdk.py b/integration/core/test_spdk.py new file mode 100644 index 00000000..23ba10d3 --- /dev/null +++ b/integration/core/test_spdk.py @@ -0,0 +1,17 @@ +import os +import grpc +import pytest + +from rpc.imrpc.process_manager_client import ProcessManagerClient +from rpc.instance.instance_client import InstanceClient +from rpc.spdk.spdk_client import SPDKClient + + +def test_version_get(grpc_process_manager_client, grpc_instance_client): + ''' + Test version_get() method of ProcessManagerClient and InstanceClient. + The two versions should be the same. + ''' + pm_version = grpc_process_manager_client.version_get() + instance_version = grpc_instance_client.version_get() + assert pm_version == instance_version diff --git a/integration/requirements.txt b/integration/requirements.txt new file mode 100644 index 00000000..336a4a13 --- /dev/null +++ b/integration/requirements.txt @@ -0,0 +1,8 @@ +cattle==0.5.4 +directio==1.2 +protobuf==3.17.3 +grpcio==1.25.0 + + +pytest==5.3.2 + diff --git a/integration/rpc/spdk/__init__.py b/integration/rpc/spdk/__init__.py new file mode 100644 index 00000000..30b31796 --- /dev/null +++ b/integration/rpc/spdk/__init__.py @@ -0,0 +1,10 @@ +import os +import sys + + +# include current directory to fix relative import in genrated grpc files +sys.path.append( + os.path.abspath( + os.path.join(os.path.split(__file__)[0], ".") + ) +) diff --git a/integration/rpc/spdk/spdk_client.py b/integration/rpc/spdk/spdk_client.py new file mode 100644 index 00000000..e54e8b50 --- /dev/null +++ b/integration/rpc/spdk/spdk_client.py @@ -0,0 +1,23 @@ +import grpc + +import spdk_pb2 +import spdk_pb2_grpc +from google.protobuf import empty_pb2 + +class SPDKClient(object): + def __init__(self, url): + self.address = url + self.channel = grpc.insecure_channel(url) + self.stub = spdk_pb2_grpc.SPDKServiceStub(self.channel) + + def replica_get(self): + return self.stub.ReplicaGet(empty_pb2.Empty()) + + def replica_list(self): + return self.stub.ReplicaList(empty_pb2.Empty()) + + def engine_get(self): + return self.stub.EngineGet(empty_pb2.Empty()) + + def engine_list(self): + return self.stub.EngineList(empty_pb2.Empty()) \ No newline at end of file diff --git a/integration/rpc/spdk/spdk_pb2.py b/integration/rpc/spdk/spdk_pb2.py new file mode 100644 index 00000000..060cf1a0 --- /dev/null +++ b/integration/rpc/spdk/spdk_pb2.py @@ -0,0 +1,1739 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: spdk.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='spdk.proto', + package='spdkrpc', + syntax='proto3', + serialized_options=None, + serialized_pb=_b('\n\nspdk.proto\x12\x07spdkrpc\x1a\x1bgoogle/protobuf/empty.proto\"\xba\x01\n\x04Lvol\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04uuid\x18\x02 \x01(\t\x12\x11\n\tspec_size\x18\x03 \x01(\x04\x12\x13\n\x0b\x61\x63tual_size\x18\x04 \x01(\x04\x12\x0e\n\x06parent\x18\x05 \x01(\t\x12-\n\x08\x63hildren\x18\x06 \x03(\x0b\x32\x1b.spdkrpc.Lvol.ChildrenEntry\x1a/\n\rChildrenEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\"\xbb\x02\n\x07Replica\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04uuid\x18\x02 \x01(\t\x12\x10\n\x08lvs_name\x18\x03 \x01(\t\x12\x10\n\x08lvs_uuid\x18\x04 \x01(\t\x12\x11\n\tspec_size\x18\x05 \x01(\x04\x12\x13\n\x0b\x61\x63tual_size\x18\x06 \x01(\x04\x12\n\n\x02ip\x18\x07 \x01(\t\x12\x12\n\nport_start\x18\x08 \x01(\x05\x12\x10\n\x08port_end\x18\t \x01(\x05\x12\x32\n\tsnapshots\x18\n \x03(\x0b\x32\x1f.spdkrpc.Replica.SnapshotsEntry\x12\x12\n\nrebuilding\x18\x0b \x01(\x08\x12\r\n\x05state\x18\x0c \x01(\t\x1a?\n\x0eSnapshotsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.spdkrpc.Lvol:\x02\x38\x01\"t\n\x14ReplicaCreateRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08lvs_name\x18\x02 \x01(\t\x12\x10\n\x08lvs_uuid\x18\x03 \x01(\t\x12\x11\n\tspec_size\x18\x04 \x01(\x04\x12\x17\n\x0f\x65xpose_required\x18\x05 \x01(\x08\">\n\x14ReplicaDeleteRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x10\x63leanup_required\x18\x02 \x01(\x08\"!\n\x11ReplicaGetRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x96\x01\n\x13ReplicaListResponse\x12<\n\x08replicas\x18\x01 \x03(\x0b\x32*.spdkrpc.ReplicaListResponse.ReplicasEntry\x1a\x41\n\rReplicasEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.spdkrpc.Replica:\x02\x38\x01\"\xab\x03\n\x06\x45ngine\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bvolume_name\x18\x02 \x01(\t\x12\x11\n\tspec_size\x18\x03 \x01(\x04\x12\x13\n\x0b\x61\x63tual_size\x18\x04 \x01(\x04\x12\n\n\x02ip\x18\x05 \x01(\t\x12\x0c\n\x04port\x18\x06 \x01(\x05\x12\x43\n\x13replica_address_map\x18\x07 \x03(\x0b\x32&.spdkrpc.Engine.ReplicaAddressMapEntry\x12=\n\x10replica_mode_map\x18\x08 \x03(\x0b\x32#.spdkrpc.Engine.ReplicaModeMapEntry\x12\x10\n\x08\x66rontend\x18\t \x01(\t\x12\x10\n\x08\x65ndpoint\x18\n \x01(\t\x12\r\n\x05state\x18\x0b \x01(\t\x1a\x38\n\x16ReplicaAddressMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1aK\n\x13ReplicaModeMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0e\x32\x14.spdkrpc.ReplicaMode:\x02\x38\x01\"\xe9\x01\n\x13\x45ngineCreateRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bvolume_name\x18\x02 \x01(\t\x12\x11\n\tspec_size\x18\x03 \x01(\x04\x12P\n\x13replica_address_map\x18\x04 \x03(\x0b\x32\x33.spdkrpc.EngineCreateRequest.ReplicaAddressMapEntry\x12\x10\n\x08\x66rontend\x18\x05 \x01(\t\x1a\x38\n\x16ReplicaAddressMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"#\n\x13\x45ngineDeleteRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\" \n\x10\x45ngineGetRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x90\x01\n\x12\x45ngineListResponse\x12\x39\n\x07\x65ngines\x18\x01 \x03(\x0b\x32(.spdkrpc.EngineListResponse.EnginesEntry\x1a?\n\x0c\x45nginesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.spdkrpc.Engine:\x02\x38\x01\"`\n\x1a\x45ngineReplicaDeleteRequest\x12\x13\n\x0b\x65ngine_name\x18\x01 \x01(\t\x12\x14\n\x0creplica_name\x18\x02 \x01(\t\x12\x17\n\x0freplica_address\x18\x03 \x01(\t\"6\n\x0fSnapshotRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rsnapshot_name\x18\x02 \x01(\t\"\xef\x01\n\rVersionOutput\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x11\n\tgitCommit\x18\x02 \x01(\t\x12\x11\n\tbuildDate\x18\x03 \x01(\t\x12\x15\n\rcliAPIVersion\x18\x04 \x01(\x03\x12\x18\n\x10\x63liAPIMinVersion\x18\x05 \x01(\x03\x12\x1c\n\x14\x63ontrollerAPIVersion\x18\x06 \x01(\x03\x12\x1f\n\x17\x63ontrollerAPIMinVersion\x18\x07 \x01(\x03\x12\x19\n\x11\x64\x61taFormatVersion\x18\x08 \x01(\x03\x12\x1c\n\x14\x64\x61taFormatMinVersion\x18\t \x01(\x03\"@\n\x15VersionDetailGetReply\x12\'\n\x07version\x18\x01 \x01(\x0b\x32\x16.spdkrpc.VersionOutput\"\xb8\x01\n\x04\x44isk\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04uuid\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\x12\x0c\n\x04type\x18\x04 \x01(\t\x12\x12\n\ntotal_size\x18\x05 \x01(\x03\x12\x11\n\tfree_size\x18\x06 \x01(\x03\x12\x14\n\x0ctotal_blocks\x18\x07 \x01(\x03\x12\x13\n\x0b\x66ree_blocks\x18\x08 \x01(\x03\x12\x12\n\nblock_size\x18\t \x01(\x03\x12\x14\n\x0c\x63luster_size\x18\n \x01(\x03\"M\n\x11\x44iskCreateRequest\x12\x11\n\tdisk_name\x18\x01 \x01(\t\x12\x11\n\tdisk_path\x18\x02 \x01(\t\x12\x12\n\nblock_size\x18\x03 \x01(\x03\"#\n\x0e\x44iskGetRequest\x12\x11\n\tdisk_name\x18\x01 \x01(\t\"9\n\x11\x44iskDeleteRequest\x12\x11\n\tdisk_name\x18\x01 \x01(\t\x12\x11\n\tdisk_uuid\x18\x02 \x01(\t*&\n\x0bReplicaMode\x12\x06\n\x02WO\x10\x00\x12\x06\n\x02RW\x10\x01\x12\x07\n\x03\x45RR\x10\x02\x32\x8d\n\n\x0bSPDKService\x12@\n\rReplicaCreate\x12\x1d.spdkrpc.ReplicaCreateRequest\x1a\x10.spdkrpc.Replica\x12\x46\n\rReplicaDelete\x12\x1d.spdkrpc.ReplicaDeleteRequest\x1a\x16.google.protobuf.Empty\x12:\n\nReplicaGet\x12\x1a.spdkrpc.ReplicaGetRequest\x1a\x10.spdkrpc.Replica\x12\x43\n\x15ReplicaSnapshotCreate\x12\x18.spdkrpc.SnapshotRequest\x1a\x10.spdkrpc.Replica\x12I\n\x15ReplicaSnapshotDelete\x12\x18.spdkrpc.SnapshotRequest\x1a\x16.google.protobuf.Empty\x12\x43\n\x0bReplicaList\x12\x16.google.protobuf.Empty\x1a\x1c.spdkrpc.ReplicaListResponse\x12\x42\n\x0cReplicaWatch\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x30\x01\x12=\n\x0c\x45ngineCreate\x12\x1c.spdkrpc.EngineCreateRequest\x1a\x0f.spdkrpc.Engine\x12\x44\n\x0c\x45ngineDelete\x12\x1c.spdkrpc.EngineDeleteRequest\x1a\x16.google.protobuf.Empty\x12\x37\n\tEngineGet\x12\x19.spdkrpc.EngineGetRequest\x1a\x0f.spdkrpc.Engine\x12\x41\n\x14\x45ngineSnapshotCreate\x12\x18.spdkrpc.SnapshotRequest\x1a\x0f.spdkrpc.Engine\x12H\n\x14\x45ngineSnapshotDelete\x12\x18.spdkrpc.SnapshotRequest\x1a\x16.google.protobuf.Empty\x12\x41\n\nEngineList\x12\x16.google.protobuf.Empty\x1a\x1b.spdkrpc.EngineListResponse\x12\x41\n\x0b\x45ngineWatch\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x30\x01\x12T\n\x13\x45ngineReplicaDelete\x12#.spdkrpc.EngineReplicaDeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x37\n\nDiskCreate\x12\x1a.spdkrpc.DiskCreateRequest\x1a\r.spdkrpc.Disk\x12@\n\nDiskDelete\x12\x1a.spdkrpc.DiskDeleteRequest\x1a\x16.google.protobuf.Empty\x12\x31\n\x07\x44iskGet\x12\x17.spdkrpc.DiskGetRequest\x1a\r.spdkrpc.Disk\x12J\n\x10VersionDetailGet\x12\x16.google.protobuf.Empty\x1a\x1e.spdkrpc.VersionDetailGetReplyb\x06proto3') + , + dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,]) + +_REPLICAMODE = _descriptor.EnumDescriptor( + name='ReplicaMode', + full_name='spdkrpc.ReplicaMode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='WO', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RW', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERR', index=2, number=2, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=2637, + serialized_end=2675, +) +_sym_db.RegisterEnumDescriptor(_REPLICAMODE) + +ReplicaMode = enum_type_wrapper.EnumTypeWrapper(_REPLICAMODE) +WO = 0 +RW = 1 +ERR = 2 + + + +_LVOL_CHILDRENENTRY = _descriptor.Descriptor( + name='ChildrenEntry', + full_name='spdkrpc.Lvol.ChildrenEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='spdkrpc.Lvol.ChildrenEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='spdkrpc.Lvol.ChildrenEntry.value', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=_b('8\001'), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=192, + serialized_end=239, +) + +_LVOL = _descriptor.Descriptor( + name='Lvol', + full_name='spdkrpc.Lvol', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.Lvol.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='uuid', full_name='spdkrpc.Lvol.uuid', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='spec_size', full_name='spdkrpc.Lvol.spec_size', index=2, + number=3, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='actual_size', full_name='spdkrpc.Lvol.actual_size', index=3, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='parent', full_name='spdkrpc.Lvol.parent', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='children', full_name='spdkrpc.Lvol.children', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_LVOL_CHILDRENENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=53, + serialized_end=239, +) + + +_REPLICA_SNAPSHOTSENTRY = _descriptor.Descriptor( + name='SnapshotsEntry', + full_name='spdkrpc.Replica.SnapshotsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='spdkrpc.Replica.SnapshotsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='spdkrpc.Replica.SnapshotsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=_b('8\001'), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=494, + serialized_end=557, +) + +_REPLICA = _descriptor.Descriptor( + name='Replica', + full_name='spdkrpc.Replica', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.Replica.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='uuid', full_name='spdkrpc.Replica.uuid', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='lvs_name', full_name='spdkrpc.Replica.lvs_name', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='lvs_uuid', full_name='spdkrpc.Replica.lvs_uuid', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='spec_size', full_name='spdkrpc.Replica.spec_size', index=4, + number=5, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='actual_size', full_name='spdkrpc.Replica.actual_size', index=5, + number=6, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='ip', full_name='spdkrpc.Replica.ip', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='port_start', full_name='spdkrpc.Replica.port_start', index=7, + number=8, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='port_end', full_name='spdkrpc.Replica.port_end', index=8, + number=9, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='snapshots', full_name='spdkrpc.Replica.snapshots', index=9, + number=10, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='rebuilding', full_name='spdkrpc.Replica.rebuilding', index=10, + number=11, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='state', full_name='spdkrpc.Replica.state', index=11, + number=12, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_REPLICA_SNAPSHOTSENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=242, + serialized_end=557, +) + + +_REPLICACREATEREQUEST = _descriptor.Descriptor( + name='ReplicaCreateRequest', + full_name='spdkrpc.ReplicaCreateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.ReplicaCreateRequest.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='lvs_name', full_name='spdkrpc.ReplicaCreateRequest.lvs_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='lvs_uuid', full_name='spdkrpc.ReplicaCreateRequest.lvs_uuid', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='spec_size', full_name='spdkrpc.ReplicaCreateRequest.spec_size', index=3, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='expose_required', full_name='spdkrpc.ReplicaCreateRequest.expose_required', index=4, + number=5, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=559, + serialized_end=675, +) + + +_REPLICADELETEREQUEST = _descriptor.Descriptor( + name='ReplicaDeleteRequest', + full_name='spdkrpc.ReplicaDeleteRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.ReplicaDeleteRequest.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='cleanup_required', full_name='spdkrpc.ReplicaDeleteRequest.cleanup_required', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=677, + serialized_end=739, +) + + +_REPLICAGETREQUEST = _descriptor.Descriptor( + name='ReplicaGetRequest', + full_name='spdkrpc.ReplicaGetRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.ReplicaGetRequest.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=741, + serialized_end=774, +) + + +_REPLICALISTRESPONSE_REPLICASENTRY = _descriptor.Descriptor( + name='ReplicasEntry', + full_name='spdkrpc.ReplicaListResponse.ReplicasEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='spdkrpc.ReplicaListResponse.ReplicasEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='spdkrpc.ReplicaListResponse.ReplicasEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=_b('8\001'), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=862, + serialized_end=927, +) + +_REPLICALISTRESPONSE = _descriptor.Descriptor( + name='ReplicaListResponse', + full_name='spdkrpc.ReplicaListResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='replicas', full_name='spdkrpc.ReplicaListResponse.replicas', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_REPLICALISTRESPONSE_REPLICASENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=777, + serialized_end=927, +) + + +_ENGINE_REPLICAADDRESSMAPENTRY = _descriptor.Descriptor( + name='ReplicaAddressMapEntry', + full_name='spdkrpc.Engine.ReplicaAddressMapEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='spdkrpc.Engine.ReplicaAddressMapEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='spdkrpc.Engine.ReplicaAddressMapEntry.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=_b('8\001'), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1224, + serialized_end=1280, +) + +_ENGINE_REPLICAMODEMAPENTRY = _descriptor.Descriptor( + name='ReplicaModeMapEntry', + full_name='spdkrpc.Engine.ReplicaModeMapEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='spdkrpc.Engine.ReplicaModeMapEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='spdkrpc.Engine.ReplicaModeMapEntry.value', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=_b('8\001'), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1282, + serialized_end=1357, +) + +_ENGINE = _descriptor.Descriptor( + name='Engine', + full_name='spdkrpc.Engine', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.Engine.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='volume_name', full_name='spdkrpc.Engine.volume_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='spec_size', full_name='spdkrpc.Engine.spec_size', index=2, + number=3, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='actual_size', full_name='spdkrpc.Engine.actual_size', index=3, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='ip', full_name='spdkrpc.Engine.ip', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='port', full_name='spdkrpc.Engine.port', index=5, + number=6, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='replica_address_map', full_name='spdkrpc.Engine.replica_address_map', index=6, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='replica_mode_map', full_name='spdkrpc.Engine.replica_mode_map', index=7, + number=8, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='frontend', full_name='spdkrpc.Engine.frontend', index=8, + number=9, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='endpoint', full_name='spdkrpc.Engine.endpoint', index=9, + number=10, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='state', full_name='spdkrpc.Engine.state', index=10, + number=11, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_ENGINE_REPLICAADDRESSMAPENTRY, _ENGINE_REPLICAMODEMAPENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=930, + serialized_end=1357, +) + + +_ENGINECREATEREQUEST_REPLICAADDRESSMAPENTRY = _descriptor.Descriptor( + name='ReplicaAddressMapEntry', + full_name='spdkrpc.EngineCreateRequest.ReplicaAddressMapEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='spdkrpc.EngineCreateRequest.ReplicaAddressMapEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='spdkrpc.EngineCreateRequest.ReplicaAddressMapEntry.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=_b('8\001'), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1224, + serialized_end=1280, +) + +_ENGINECREATEREQUEST = _descriptor.Descriptor( + name='EngineCreateRequest', + full_name='spdkrpc.EngineCreateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.EngineCreateRequest.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='volume_name', full_name='spdkrpc.EngineCreateRequest.volume_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='spec_size', full_name='spdkrpc.EngineCreateRequest.spec_size', index=2, + number=3, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='replica_address_map', full_name='spdkrpc.EngineCreateRequest.replica_address_map', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='frontend', full_name='spdkrpc.EngineCreateRequest.frontend', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_ENGINECREATEREQUEST_REPLICAADDRESSMAPENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1360, + serialized_end=1593, +) + + +_ENGINEDELETEREQUEST = _descriptor.Descriptor( + name='EngineDeleteRequest', + full_name='spdkrpc.EngineDeleteRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.EngineDeleteRequest.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1595, + serialized_end=1630, +) + + +_ENGINEGETREQUEST = _descriptor.Descriptor( + name='EngineGetRequest', + full_name='spdkrpc.EngineGetRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.EngineGetRequest.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1632, + serialized_end=1664, +) + + +_ENGINELISTRESPONSE_ENGINESENTRY = _descriptor.Descriptor( + name='EnginesEntry', + full_name='spdkrpc.EngineListResponse.EnginesEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='spdkrpc.EngineListResponse.EnginesEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='spdkrpc.EngineListResponse.EnginesEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=_b('8\001'), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1748, + serialized_end=1811, +) + +_ENGINELISTRESPONSE = _descriptor.Descriptor( + name='EngineListResponse', + full_name='spdkrpc.EngineListResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='engines', full_name='spdkrpc.EngineListResponse.engines', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_ENGINELISTRESPONSE_ENGINESENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1667, + serialized_end=1811, +) + + +_ENGINEREPLICADELETEREQUEST = _descriptor.Descriptor( + name='EngineReplicaDeleteRequest', + full_name='spdkrpc.EngineReplicaDeleteRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='engine_name', full_name='spdkrpc.EngineReplicaDeleteRequest.engine_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='replica_name', full_name='spdkrpc.EngineReplicaDeleteRequest.replica_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='replica_address', full_name='spdkrpc.EngineReplicaDeleteRequest.replica_address', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1813, + serialized_end=1909, +) + + +_SNAPSHOTREQUEST = _descriptor.Descriptor( + name='SnapshotRequest', + full_name='spdkrpc.SnapshotRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='spdkrpc.SnapshotRequest.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='snapshot_name', full_name='spdkrpc.SnapshotRequest.snapshot_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1911, + serialized_end=1965, +) + + +_VERSIONOUTPUT = _descriptor.Descriptor( + name='VersionOutput', + full_name='spdkrpc.VersionOutput', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='version', full_name='spdkrpc.VersionOutput.version', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='gitCommit', full_name='spdkrpc.VersionOutput.gitCommit', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='buildDate', full_name='spdkrpc.VersionOutput.buildDate', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='cliAPIVersion', full_name='spdkrpc.VersionOutput.cliAPIVersion', index=3, + number=4, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='cliAPIMinVersion', full_name='spdkrpc.VersionOutput.cliAPIMinVersion', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='controllerAPIVersion', full_name='spdkrpc.VersionOutput.controllerAPIVersion', index=5, + number=6, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='controllerAPIMinVersion', full_name='spdkrpc.VersionOutput.controllerAPIMinVersion', index=6, + number=7, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='dataFormatVersion', full_name='spdkrpc.VersionOutput.dataFormatVersion', index=7, + number=8, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='dataFormatMinVersion', full_name='spdkrpc.VersionOutput.dataFormatMinVersion', index=8, + number=9, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1968, + serialized_end=2207, +) + + +_VERSIONDETAILGETREPLY = _descriptor.Descriptor( + name='VersionDetailGetReply', + full_name='spdkrpc.VersionDetailGetReply', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='version', full_name='spdkrpc.VersionDetailGetReply.version', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2209, + serialized_end=2273, +) + + +_DISK = _descriptor.Descriptor( + name='Disk', + full_name='spdkrpc.Disk', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='spdkrpc.Disk.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='uuid', full_name='spdkrpc.Disk.uuid', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='path', full_name='spdkrpc.Disk.path', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='type', full_name='spdkrpc.Disk.type', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='total_size', full_name='spdkrpc.Disk.total_size', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='free_size', full_name='spdkrpc.Disk.free_size', index=5, + number=6, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='total_blocks', full_name='spdkrpc.Disk.total_blocks', index=6, + number=7, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='free_blocks', full_name='spdkrpc.Disk.free_blocks', index=7, + number=8, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='block_size', full_name='spdkrpc.Disk.block_size', index=8, + number=9, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='cluster_size', full_name='spdkrpc.Disk.cluster_size', index=9, + number=10, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2276, + serialized_end=2460, +) + + +_DISKCREATEREQUEST = _descriptor.Descriptor( + name='DiskCreateRequest', + full_name='spdkrpc.DiskCreateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='disk_name', full_name='spdkrpc.DiskCreateRequest.disk_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='disk_path', full_name='spdkrpc.DiskCreateRequest.disk_path', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='block_size', full_name='spdkrpc.DiskCreateRequest.block_size', index=2, + number=3, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2462, + serialized_end=2539, +) + + +_DISKGETREQUEST = _descriptor.Descriptor( + name='DiskGetRequest', + full_name='spdkrpc.DiskGetRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='disk_name', full_name='spdkrpc.DiskGetRequest.disk_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2541, + serialized_end=2576, +) + + +_DISKDELETEREQUEST = _descriptor.Descriptor( + name='DiskDeleteRequest', + full_name='spdkrpc.DiskDeleteRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='disk_name', full_name='spdkrpc.DiskDeleteRequest.disk_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='disk_uuid', full_name='spdkrpc.DiskDeleteRequest.disk_uuid', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2578, + serialized_end=2635, +) + +_LVOL_CHILDRENENTRY.containing_type = _LVOL +_LVOL.fields_by_name['children'].message_type = _LVOL_CHILDRENENTRY +_REPLICA_SNAPSHOTSENTRY.fields_by_name['value'].message_type = _LVOL +_REPLICA_SNAPSHOTSENTRY.containing_type = _REPLICA +_REPLICA.fields_by_name['snapshots'].message_type = _REPLICA_SNAPSHOTSENTRY +_REPLICALISTRESPONSE_REPLICASENTRY.fields_by_name['value'].message_type = _REPLICA +_REPLICALISTRESPONSE_REPLICASENTRY.containing_type = _REPLICALISTRESPONSE +_REPLICALISTRESPONSE.fields_by_name['replicas'].message_type = _REPLICALISTRESPONSE_REPLICASENTRY +_ENGINE_REPLICAADDRESSMAPENTRY.containing_type = _ENGINE +_ENGINE_REPLICAMODEMAPENTRY.fields_by_name['value'].enum_type = _REPLICAMODE +_ENGINE_REPLICAMODEMAPENTRY.containing_type = _ENGINE +_ENGINE.fields_by_name['replica_address_map'].message_type = _ENGINE_REPLICAADDRESSMAPENTRY +_ENGINE.fields_by_name['replica_mode_map'].message_type = _ENGINE_REPLICAMODEMAPENTRY +_ENGINECREATEREQUEST_REPLICAADDRESSMAPENTRY.containing_type = _ENGINECREATEREQUEST +_ENGINECREATEREQUEST.fields_by_name['replica_address_map'].message_type = _ENGINECREATEREQUEST_REPLICAADDRESSMAPENTRY +_ENGINELISTRESPONSE_ENGINESENTRY.fields_by_name['value'].message_type = _ENGINE +_ENGINELISTRESPONSE_ENGINESENTRY.containing_type = _ENGINELISTRESPONSE +_ENGINELISTRESPONSE.fields_by_name['engines'].message_type = _ENGINELISTRESPONSE_ENGINESENTRY +_VERSIONDETAILGETREPLY.fields_by_name['version'].message_type = _VERSIONOUTPUT +DESCRIPTOR.message_types_by_name['Lvol'] = _LVOL +DESCRIPTOR.message_types_by_name['Replica'] = _REPLICA +DESCRIPTOR.message_types_by_name['ReplicaCreateRequest'] = _REPLICACREATEREQUEST +DESCRIPTOR.message_types_by_name['ReplicaDeleteRequest'] = _REPLICADELETEREQUEST +DESCRIPTOR.message_types_by_name['ReplicaGetRequest'] = _REPLICAGETREQUEST +DESCRIPTOR.message_types_by_name['ReplicaListResponse'] = _REPLICALISTRESPONSE +DESCRIPTOR.message_types_by_name['Engine'] = _ENGINE +DESCRIPTOR.message_types_by_name['EngineCreateRequest'] = _ENGINECREATEREQUEST +DESCRIPTOR.message_types_by_name['EngineDeleteRequest'] = _ENGINEDELETEREQUEST +DESCRIPTOR.message_types_by_name['EngineGetRequest'] = _ENGINEGETREQUEST +DESCRIPTOR.message_types_by_name['EngineListResponse'] = _ENGINELISTRESPONSE +DESCRIPTOR.message_types_by_name['EngineReplicaDeleteRequest'] = _ENGINEREPLICADELETEREQUEST +DESCRIPTOR.message_types_by_name['SnapshotRequest'] = _SNAPSHOTREQUEST +DESCRIPTOR.message_types_by_name['VersionOutput'] = _VERSIONOUTPUT +DESCRIPTOR.message_types_by_name['VersionDetailGetReply'] = _VERSIONDETAILGETREPLY +DESCRIPTOR.message_types_by_name['Disk'] = _DISK +DESCRIPTOR.message_types_by_name['DiskCreateRequest'] = _DISKCREATEREQUEST +DESCRIPTOR.message_types_by_name['DiskGetRequest'] = _DISKGETREQUEST +DESCRIPTOR.message_types_by_name['DiskDeleteRequest'] = _DISKDELETEREQUEST +DESCRIPTOR.enum_types_by_name['ReplicaMode'] = _REPLICAMODE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Lvol = _reflection.GeneratedProtocolMessageType('Lvol', (_message.Message,), { + + 'ChildrenEntry' : _reflection.GeneratedProtocolMessageType('ChildrenEntry', (_message.Message,), { + 'DESCRIPTOR' : _LVOL_CHILDRENENTRY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Lvol.ChildrenEntry) + }) + , + 'DESCRIPTOR' : _LVOL, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Lvol) + }) +_sym_db.RegisterMessage(Lvol) +_sym_db.RegisterMessage(Lvol.ChildrenEntry) + +Replica = _reflection.GeneratedProtocolMessageType('Replica', (_message.Message,), { + + 'SnapshotsEntry' : _reflection.GeneratedProtocolMessageType('SnapshotsEntry', (_message.Message,), { + 'DESCRIPTOR' : _REPLICA_SNAPSHOTSENTRY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Replica.SnapshotsEntry) + }) + , + 'DESCRIPTOR' : _REPLICA, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Replica) + }) +_sym_db.RegisterMessage(Replica) +_sym_db.RegisterMessage(Replica.SnapshotsEntry) + +ReplicaCreateRequest = _reflection.GeneratedProtocolMessageType('ReplicaCreateRequest', (_message.Message,), { + 'DESCRIPTOR' : _REPLICACREATEREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.ReplicaCreateRequest) + }) +_sym_db.RegisterMessage(ReplicaCreateRequest) + +ReplicaDeleteRequest = _reflection.GeneratedProtocolMessageType('ReplicaDeleteRequest', (_message.Message,), { + 'DESCRIPTOR' : _REPLICADELETEREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.ReplicaDeleteRequest) + }) +_sym_db.RegisterMessage(ReplicaDeleteRequest) + +ReplicaGetRequest = _reflection.GeneratedProtocolMessageType('ReplicaGetRequest', (_message.Message,), { + 'DESCRIPTOR' : _REPLICAGETREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.ReplicaGetRequest) + }) +_sym_db.RegisterMessage(ReplicaGetRequest) + +ReplicaListResponse = _reflection.GeneratedProtocolMessageType('ReplicaListResponse', (_message.Message,), { + + 'ReplicasEntry' : _reflection.GeneratedProtocolMessageType('ReplicasEntry', (_message.Message,), { + 'DESCRIPTOR' : _REPLICALISTRESPONSE_REPLICASENTRY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.ReplicaListResponse.ReplicasEntry) + }) + , + 'DESCRIPTOR' : _REPLICALISTRESPONSE, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.ReplicaListResponse) + }) +_sym_db.RegisterMessage(ReplicaListResponse) +_sym_db.RegisterMessage(ReplicaListResponse.ReplicasEntry) + +Engine = _reflection.GeneratedProtocolMessageType('Engine', (_message.Message,), { + + 'ReplicaAddressMapEntry' : _reflection.GeneratedProtocolMessageType('ReplicaAddressMapEntry', (_message.Message,), { + 'DESCRIPTOR' : _ENGINE_REPLICAADDRESSMAPENTRY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Engine.ReplicaAddressMapEntry) + }) + , + + 'ReplicaModeMapEntry' : _reflection.GeneratedProtocolMessageType('ReplicaModeMapEntry', (_message.Message,), { + 'DESCRIPTOR' : _ENGINE_REPLICAMODEMAPENTRY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Engine.ReplicaModeMapEntry) + }) + , + 'DESCRIPTOR' : _ENGINE, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Engine) + }) +_sym_db.RegisterMessage(Engine) +_sym_db.RegisterMessage(Engine.ReplicaAddressMapEntry) +_sym_db.RegisterMessage(Engine.ReplicaModeMapEntry) + +EngineCreateRequest = _reflection.GeneratedProtocolMessageType('EngineCreateRequest', (_message.Message,), { + + 'ReplicaAddressMapEntry' : _reflection.GeneratedProtocolMessageType('ReplicaAddressMapEntry', (_message.Message,), { + 'DESCRIPTOR' : _ENGINECREATEREQUEST_REPLICAADDRESSMAPENTRY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.EngineCreateRequest.ReplicaAddressMapEntry) + }) + , + 'DESCRIPTOR' : _ENGINECREATEREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.EngineCreateRequest) + }) +_sym_db.RegisterMessage(EngineCreateRequest) +_sym_db.RegisterMessage(EngineCreateRequest.ReplicaAddressMapEntry) + +EngineDeleteRequest = _reflection.GeneratedProtocolMessageType('EngineDeleteRequest', (_message.Message,), { + 'DESCRIPTOR' : _ENGINEDELETEREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.EngineDeleteRequest) + }) +_sym_db.RegisterMessage(EngineDeleteRequest) + +EngineGetRequest = _reflection.GeneratedProtocolMessageType('EngineGetRequest', (_message.Message,), { + 'DESCRIPTOR' : _ENGINEGETREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.EngineGetRequest) + }) +_sym_db.RegisterMessage(EngineGetRequest) + +EngineListResponse = _reflection.GeneratedProtocolMessageType('EngineListResponse', (_message.Message,), { + + 'EnginesEntry' : _reflection.GeneratedProtocolMessageType('EnginesEntry', (_message.Message,), { + 'DESCRIPTOR' : _ENGINELISTRESPONSE_ENGINESENTRY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.EngineListResponse.EnginesEntry) + }) + , + 'DESCRIPTOR' : _ENGINELISTRESPONSE, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.EngineListResponse) + }) +_sym_db.RegisterMessage(EngineListResponse) +_sym_db.RegisterMessage(EngineListResponse.EnginesEntry) + +EngineReplicaDeleteRequest = _reflection.GeneratedProtocolMessageType('EngineReplicaDeleteRequest', (_message.Message,), { + 'DESCRIPTOR' : _ENGINEREPLICADELETEREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.EngineReplicaDeleteRequest) + }) +_sym_db.RegisterMessage(EngineReplicaDeleteRequest) + +SnapshotRequest = _reflection.GeneratedProtocolMessageType('SnapshotRequest', (_message.Message,), { + 'DESCRIPTOR' : _SNAPSHOTREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.SnapshotRequest) + }) +_sym_db.RegisterMessage(SnapshotRequest) + +VersionOutput = _reflection.GeneratedProtocolMessageType('VersionOutput', (_message.Message,), { + 'DESCRIPTOR' : _VERSIONOUTPUT, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.VersionOutput) + }) +_sym_db.RegisterMessage(VersionOutput) + +VersionDetailGetReply = _reflection.GeneratedProtocolMessageType('VersionDetailGetReply', (_message.Message,), { + 'DESCRIPTOR' : _VERSIONDETAILGETREPLY, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.VersionDetailGetReply) + }) +_sym_db.RegisterMessage(VersionDetailGetReply) + +Disk = _reflection.GeneratedProtocolMessageType('Disk', (_message.Message,), { + 'DESCRIPTOR' : _DISK, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.Disk) + }) +_sym_db.RegisterMessage(Disk) + +DiskCreateRequest = _reflection.GeneratedProtocolMessageType('DiskCreateRequest', (_message.Message,), { + 'DESCRIPTOR' : _DISKCREATEREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.DiskCreateRequest) + }) +_sym_db.RegisterMessage(DiskCreateRequest) + +DiskGetRequest = _reflection.GeneratedProtocolMessageType('DiskGetRequest', (_message.Message,), { + 'DESCRIPTOR' : _DISKGETREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.DiskGetRequest) + }) +_sym_db.RegisterMessage(DiskGetRequest) + +DiskDeleteRequest = _reflection.GeneratedProtocolMessageType('DiskDeleteRequest', (_message.Message,), { + 'DESCRIPTOR' : _DISKDELETEREQUEST, + '__module__' : 'spdk_pb2' + # @@protoc_insertion_point(class_scope:spdkrpc.DiskDeleteRequest) + }) +_sym_db.RegisterMessage(DiskDeleteRequest) + + +_LVOL_CHILDRENENTRY._options = None +_REPLICA_SNAPSHOTSENTRY._options = None +_REPLICALISTRESPONSE_REPLICASENTRY._options = None +_ENGINE_REPLICAADDRESSMAPENTRY._options = None +_ENGINE_REPLICAMODEMAPENTRY._options = None +_ENGINECREATEREQUEST_REPLICAADDRESSMAPENTRY._options = None +_ENGINELISTRESPONSE_ENGINESENTRY._options = None + +_SPDKSERVICE = _descriptor.ServiceDescriptor( + name='SPDKService', + full_name='spdkrpc.SPDKService', + file=DESCRIPTOR, + index=0, + serialized_options=None, + serialized_start=2678, + serialized_end=3971, + methods=[ + _descriptor.MethodDescriptor( + name='ReplicaCreate', + full_name='spdkrpc.SPDKService.ReplicaCreate', + index=0, + containing_service=None, + input_type=_REPLICACREATEREQUEST, + output_type=_REPLICA, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='ReplicaDelete', + full_name='spdkrpc.SPDKService.ReplicaDelete', + index=1, + containing_service=None, + input_type=_REPLICADELETEREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='ReplicaGet', + full_name='spdkrpc.SPDKService.ReplicaGet', + index=2, + containing_service=None, + input_type=_REPLICAGETREQUEST, + output_type=_REPLICA, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='ReplicaSnapshotCreate', + full_name='spdkrpc.SPDKService.ReplicaSnapshotCreate', + index=3, + containing_service=None, + input_type=_SNAPSHOTREQUEST, + output_type=_REPLICA, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='ReplicaSnapshotDelete', + full_name='spdkrpc.SPDKService.ReplicaSnapshotDelete', + index=4, + containing_service=None, + input_type=_SNAPSHOTREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='ReplicaList', + full_name='spdkrpc.SPDKService.ReplicaList', + index=5, + containing_service=None, + input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + output_type=_REPLICALISTRESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='ReplicaWatch', + full_name='spdkrpc.SPDKService.ReplicaWatch', + index=6, + containing_service=None, + input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineCreate', + full_name='spdkrpc.SPDKService.EngineCreate', + index=7, + containing_service=None, + input_type=_ENGINECREATEREQUEST, + output_type=_ENGINE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineDelete', + full_name='spdkrpc.SPDKService.EngineDelete', + index=8, + containing_service=None, + input_type=_ENGINEDELETEREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineGet', + full_name='spdkrpc.SPDKService.EngineGet', + index=9, + containing_service=None, + input_type=_ENGINEGETREQUEST, + output_type=_ENGINE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineSnapshotCreate', + full_name='spdkrpc.SPDKService.EngineSnapshotCreate', + index=10, + containing_service=None, + input_type=_SNAPSHOTREQUEST, + output_type=_ENGINE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineSnapshotDelete', + full_name='spdkrpc.SPDKService.EngineSnapshotDelete', + index=11, + containing_service=None, + input_type=_SNAPSHOTREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineList', + full_name='spdkrpc.SPDKService.EngineList', + index=12, + containing_service=None, + input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + output_type=_ENGINELISTRESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineWatch', + full_name='spdkrpc.SPDKService.EngineWatch', + index=13, + containing_service=None, + input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='EngineReplicaDelete', + full_name='spdkrpc.SPDKService.EngineReplicaDelete', + index=14, + containing_service=None, + input_type=_ENGINEREPLICADELETEREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='DiskCreate', + full_name='spdkrpc.SPDKService.DiskCreate', + index=15, + containing_service=None, + input_type=_DISKCREATEREQUEST, + output_type=_DISK, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='DiskDelete', + full_name='spdkrpc.SPDKService.DiskDelete', + index=16, + containing_service=None, + input_type=_DISKDELETEREQUEST, + output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='DiskGet', + full_name='spdkrpc.SPDKService.DiskGet', + index=17, + containing_service=None, + input_type=_DISKGETREQUEST, + output_type=_DISK, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='VersionDetailGet', + full_name='spdkrpc.SPDKService.VersionDetailGet', + index=18, + containing_service=None, + input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, + output_type=_VERSIONDETAILGETREPLY, + serialized_options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_SPDKSERVICE) + +DESCRIPTOR.services_by_name['SPDKService'] = _SPDKSERVICE + +# @@protoc_insertion_point(module_scope) diff --git a/integration/rpc/spdk/spdk_pb2_grpc.py b/integration/rpc/spdk/spdk_pb2_grpc.py new file mode 100644 index 00000000..2c92ced1 --- /dev/null +++ b/integration/rpc/spdk/spdk_pb2_grpc.py @@ -0,0 +1,353 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +import spdk_pb2 as spdk__pb2 + + +class SPDKServiceStub(object): + # missing associated documentation comment in .proto file + pass + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ReplicaCreate = channel.unary_unary( + '/spdkrpc.SPDKService/ReplicaCreate', + request_serializer=spdk__pb2.ReplicaCreateRequest.SerializeToString, + response_deserializer=spdk__pb2.Replica.FromString, + ) + self.ReplicaDelete = channel.unary_unary( + '/spdkrpc.SPDKService/ReplicaDelete', + request_serializer=spdk__pb2.ReplicaDeleteRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.ReplicaGet = channel.unary_unary( + '/spdkrpc.SPDKService/ReplicaGet', + request_serializer=spdk__pb2.ReplicaGetRequest.SerializeToString, + response_deserializer=spdk__pb2.Replica.FromString, + ) + self.ReplicaSnapshotCreate = channel.unary_unary( + '/spdkrpc.SPDKService/ReplicaSnapshotCreate', + request_serializer=spdk__pb2.SnapshotRequest.SerializeToString, + response_deserializer=spdk__pb2.Replica.FromString, + ) + self.ReplicaSnapshotDelete = channel.unary_unary( + '/spdkrpc.SPDKService/ReplicaSnapshotDelete', + request_serializer=spdk__pb2.SnapshotRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.ReplicaList = channel.unary_unary( + '/spdkrpc.SPDKService/ReplicaList', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=spdk__pb2.ReplicaListResponse.FromString, + ) + self.ReplicaWatch = channel.unary_stream( + '/spdkrpc.SPDKService/ReplicaWatch', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.EngineCreate = channel.unary_unary( + '/spdkrpc.SPDKService/EngineCreate', + request_serializer=spdk__pb2.EngineCreateRequest.SerializeToString, + response_deserializer=spdk__pb2.Engine.FromString, + ) + self.EngineDelete = channel.unary_unary( + '/spdkrpc.SPDKService/EngineDelete', + request_serializer=spdk__pb2.EngineDeleteRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.EngineGet = channel.unary_unary( + '/spdkrpc.SPDKService/EngineGet', + request_serializer=spdk__pb2.EngineGetRequest.SerializeToString, + response_deserializer=spdk__pb2.Engine.FromString, + ) + self.EngineSnapshotCreate = channel.unary_unary( + '/spdkrpc.SPDKService/EngineSnapshotCreate', + request_serializer=spdk__pb2.SnapshotRequest.SerializeToString, + response_deserializer=spdk__pb2.Engine.FromString, + ) + self.EngineSnapshotDelete = channel.unary_unary( + '/spdkrpc.SPDKService/EngineSnapshotDelete', + request_serializer=spdk__pb2.SnapshotRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.EngineList = channel.unary_unary( + '/spdkrpc.SPDKService/EngineList', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=spdk__pb2.EngineListResponse.FromString, + ) + self.EngineWatch = channel.unary_stream( + '/spdkrpc.SPDKService/EngineWatch', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.EngineReplicaDelete = channel.unary_unary( + '/spdkrpc.SPDKService/EngineReplicaDelete', + request_serializer=spdk__pb2.EngineReplicaDeleteRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.DiskCreate = channel.unary_unary( + '/spdkrpc.SPDKService/DiskCreate', + request_serializer=spdk__pb2.DiskCreateRequest.SerializeToString, + response_deserializer=spdk__pb2.Disk.FromString, + ) + self.DiskDelete = channel.unary_unary( + '/spdkrpc.SPDKService/DiskDelete', + request_serializer=spdk__pb2.DiskDeleteRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.DiskGet = channel.unary_unary( + '/spdkrpc.SPDKService/DiskGet', + request_serializer=spdk__pb2.DiskGetRequest.SerializeToString, + response_deserializer=spdk__pb2.Disk.FromString, + ) + self.VersionDetailGet = channel.unary_unary( + '/spdkrpc.SPDKService/VersionDetailGet', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=spdk__pb2.VersionDetailGetReply.FromString, + ) + + +class SPDKServiceServicer(object): + # missing associated documentation comment in .proto file + pass + + def ReplicaCreate(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReplicaDelete(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReplicaGet(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReplicaSnapshotCreate(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReplicaSnapshotDelete(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReplicaList(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReplicaWatch(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineCreate(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineDelete(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineGet(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineSnapshotCreate(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineSnapshotDelete(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineList(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineWatch(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EngineReplicaDelete(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DiskCreate(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DiskDelete(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DiskGet(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def VersionDetailGet(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_SPDKServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ReplicaCreate': grpc.unary_unary_rpc_method_handler( + servicer.ReplicaCreate, + request_deserializer=spdk__pb2.ReplicaCreateRequest.FromString, + response_serializer=spdk__pb2.Replica.SerializeToString, + ), + 'ReplicaDelete': grpc.unary_unary_rpc_method_handler( + servicer.ReplicaDelete, + request_deserializer=spdk__pb2.ReplicaDeleteRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'ReplicaGet': grpc.unary_unary_rpc_method_handler( + servicer.ReplicaGet, + request_deserializer=spdk__pb2.ReplicaGetRequest.FromString, + response_serializer=spdk__pb2.Replica.SerializeToString, + ), + 'ReplicaSnapshotCreate': grpc.unary_unary_rpc_method_handler( + servicer.ReplicaSnapshotCreate, + request_deserializer=spdk__pb2.SnapshotRequest.FromString, + response_serializer=spdk__pb2.Replica.SerializeToString, + ), + 'ReplicaSnapshotDelete': grpc.unary_unary_rpc_method_handler( + servicer.ReplicaSnapshotDelete, + request_deserializer=spdk__pb2.SnapshotRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'ReplicaList': grpc.unary_unary_rpc_method_handler( + servicer.ReplicaList, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=spdk__pb2.ReplicaListResponse.SerializeToString, + ), + 'ReplicaWatch': grpc.unary_stream_rpc_method_handler( + servicer.ReplicaWatch, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'EngineCreate': grpc.unary_unary_rpc_method_handler( + servicer.EngineCreate, + request_deserializer=spdk__pb2.EngineCreateRequest.FromString, + response_serializer=spdk__pb2.Engine.SerializeToString, + ), + 'EngineDelete': grpc.unary_unary_rpc_method_handler( + servicer.EngineDelete, + request_deserializer=spdk__pb2.EngineDeleteRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'EngineGet': grpc.unary_unary_rpc_method_handler( + servicer.EngineGet, + request_deserializer=spdk__pb2.EngineGetRequest.FromString, + response_serializer=spdk__pb2.Engine.SerializeToString, + ), + 'EngineSnapshotCreate': grpc.unary_unary_rpc_method_handler( + servicer.EngineSnapshotCreate, + request_deserializer=spdk__pb2.SnapshotRequest.FromString, + response_serializer=spdk__pb2.Engine.SerializeToString, + ), + 'EngineSnapshotDelete': grpc.unary_unary_rpc_method_handler( + servicer.EngineSnapshotDelete, + request_deserializer=spdk__pb2.SnapshotRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'EngineList': grpc.unary_unary_rpc_method_handler( + servicer.EngineList, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=spdk__pb2.EngineListResponse.SerializeToString, + ), + 'EngineWatch': grpc.unary_stream_rpc_method_handler( + servicer.EngineWatch, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'EngineReplicaDelete': grpc.unary_unary_rpc_method_handler( + servicer.EngineReplicaDelete, + request_deserializer=spdk__pb2.EngineReplicaDeleteRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'DiskCreate': grpc.unary_unary_rpc_method_handler( + servicer.DiskCreate, + request_deserializer=spdk__pb2.DiskCreateRequest.FromString, + response_serializer=spdk__pb2.Disk.SerializeToString, + ), + 'DiskDelete': grpc.unary_unary_rpc_method_handler( + servicer.DiskDelete, + request_deserializer=spdk__pb2.DiskDeleteRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'DiskGet': grpc.unary_unary_rpc_method_handler( + servicer.DiskGet, + request_deserializer=spdk__pb2.DiskGetRequest.FromString, + response_serializer=spdk__pb2.Disk.SerializeToString, + ), + 'VersionDetailGet': grpc.unary_unary_rpc_method_handler( + servicer.VersionDetailGet, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=spdk__pb2.VersionDetailGetReply.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'spdkrpc.SPDKService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/integration/setup.py b/integration/setup.py new file mode 100644 index 00000000..d980ac41 --- /dev/null +++ b/integration/setup.py @@ -0,0 +1,8 @@ +from distutils.core import setup + +setup( + name='Longhorn Integration Tests', + version='0.1', + packages=[], + license='ASL 2.0', +) diff --git a/integration/tox.ini b/integration/tox.ini new file mode 100644 index 00000000..67ed6a6a --- /dev/null +++ b/integration/tox.ini @@ -0,0 +1,7 @@ +[tox] +envlist=py3 + +[testenv] +deps=-rrequirements.txt +changedir={toxinidir} +commands=py.test -vs core --durations=20 {posargs} \ No newline at end of file diff --git a/scripts/entry b/scripts/entry new file mode 100755 index 00000000..6b047fdf --- /dev/null +++ b/scripts/entry @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +trap "chown -R $DAPPER_UID:$DAPPER_GID ." exit + +export GOFLAGS=-mod=vendor + +mkdir -p bin +if [ -e ./scripts/$1 ]; then + ./scripts/"$@" +else + "$@" +fi diff --git a/scripts/integration-test b/scripts/integration-test new file mode 100755 index 00000000..16d139eb --- /dev/null +++ b/scripts/integration-test @@ -0,0 +1,42 @@ +#!/bin/bash +set -e + +if [ -d '/host/dev' ] +then + mount --rbind /host/dev /dev +fi + +# Set POD_IP +IF=`ip addr show | grep "inet " | grep -v "host lo" | awk '{print $2}' | cut -d '/' -f 1 | head -n 1` +if [ -z "$IF" ]; then + echo "Failed to get the IP address of the host" + exit 1 +fi +export POD_IP=$IF + +# Create a loop block device +dd if=/dev/zero of=blockfile bs=1M count=1024 && losetup -f blockfile +dev_path=$(losetup -j blockfile | grep -o "/dev/loop[0-9]*") +# Create /host/{dev_loop} with the same major and minor numbers as ${dev_loop} +dev_loop_major=$(printf "%d\n" 0x$(stat -c '%t' $dev_path)) +dev_loop_minor=$(printf "%d\n" 0x$(stat -c '%T' $dev_path)) +mknod /dev/im-disk b $dev_loop_major $dev_loop_minor + +echo "Starting spdk_tgt" +spdk_tgt & +pid_spdk=$! + +echo "Starting longhorn-instance-manager" +/usr/local/bin/longhorn-instance-manager --debug daemon --spdk-enabled --listen localhost:8500 & +pid_im=$! + +# make sure everything is running before continue integration test +ps $pid_im + +trap "kill $pid_im && kill $pid_spdk && losetup -d $dev_path && rm -rf /dev/im-disk" EXIT + +cd integration +find -depth -name __pycache__ -o -name "*.pyc" -exec rm -rf {} \; +if [ -z "$NO_TEST" ]; then + tox "$@" +fi