From 38621fd549eb700091e841ebce1bafb50afa5e13 Mon Sep 17 00:00:00 2001 From: Jack Lin Date: Wed, 7 Feb 2024 12:14:18 +0800 Subject: [PATCH] feat(volume): add remount read only volume grpc ref: longhorn/longhorn 7843 Signed-off-by: Jack Lin --- .../pkg/imrpc/proxy_pb2.py | 8 +- .../pkg/imrpc/proxy_pb2_grpc.py | 33 + pkg/client/proxy_volume.go | 16 + pkg/imrpc/proxy.pb.go | 626 ++++++++++-------- pkg/imrpc/proxy.proto | 5 + pkg/proxy/volume.go | 26 + pkg/types/types.go | 2 +- 7 files changed, 452 insertions(+), 264 deletions(-) diff --git a/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2.py b/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2.py index 45074bb34..28384b102 100644 --- a/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2.py +++ b/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2.py @@ -17,7 +17,7 @@ from github.com.longhorn.longhorn_instance_manager.pkg.imrpc import common_pb2 as github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\nCgithub.com/longhorn/longhorn-instance-manager/pkg/imrpc/proxy.proto\x12\x05imrpc\x1a\x1bgoogle/protobuf/empty.proto\x1a\x41github.com/longhorn/longhorn-engine/proto/ptypes/controller.proto\x1a@github.com/longhorn/longhorn-engine/proto/ptypes/syncagent.proto\x1a\x44github.com/longhorn/longhorn-instance-manager/pkg/imrpc/common.proto\"\xb4\x01\n\x12ProxyEngineRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12;\n\x14\x62\x61\x63kend_store_driver\x18\x02 \x01(\x0e\x32\x19.imrpc.BackendStoreDriverB\x02\x18\x01\x12\x13\n\x0b\x65ngine_name\x18\x03 \x01(\t\x12\x13\n\x0bvolume_name\x18\x04 \x01(\t\x12&\n\x0b\x64\x61ta_engine\x18\x05 \x01(\x0e\x32\x11.imrpc.DataEngine\"D\n\x1a\x45ngineVersionProxyResponse\x12&\n\x07version\x18\x01 \x01(\x0b\x32\x15.ptypes.VersionOutput\">\n\x1c\x45ngineVolumeGetProxyResponse\x12\x1e\n\x06volume\x18\x01 \x01(\x0b\x32\x0e.ptypes.Volume\"\x81\x01\n\x19\x45ngineVolumeExpandRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12+\n\x06\x65xpand\x18\x02 \x01(\x0b\x32\x1b.ptypes.VolumeExpandRequest\"\x97\x01\n EngineVolumeFrontendStartRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12:\n\x0e\x66rontend_start\x18\x02 \x01(\x0b\x32\".ptypes.VolumeFrontendStartRequest\"\x8e\x01\n\x1b\x45ngineVolumeSnapshotRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x36\n\x0fsnapshot_volume\x18\x02 \x01(\x0b\x32\x1d.ptypes.VolumeSnapshotRequest\"R\n!EngineVolumeSnapshotProxyResponse\x12-\n\x08snapshot\x18\x01 \x01(\x0b\x32\x1b.ptypes.VolumeSnapshotReply\"\xb6\x01\n/EngineVolumeUnmapMarkSnapChainRemovedSetRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12J\n\x0funmap_mark_snap\x18\x02 \x01(\x0b\x32\x31.ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest\"\x9a\x01\n&EngineVolumeSnapshotMaxCountSetRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x37\n\x05\x63ount\x18\x02 \x01(\x0b\x32(.ptypes.VolumeSnapshotMaxCountSetRequest\"\x97\x01\n%EngineVolumeSnapshotMaxSizeSetRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x35\n\x04size\x18\x02 \x01(\x0b\x32\'.ptypes.VolumeSnapshotMaxSizeSetRequest\"\xb0\x01\n\x1f\x45ngineSnapshotListProxyResponse\x12@\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x31.imrpc.EngineSnapshotListProxyResponse.DisksEntry\x1aK\n\nDisksEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.imrpc.EngineSnapshotDiskInfo:\x02\x38\x01\"\xd6\x02\n\x16\x45ngineSnapshotDiskInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06parent\x18\x02 \x01(\t\x12=\n\x08\x63hildren\x18\x03 \x03(\x0b\x32+.imrpc.EngineSnapshotDiskInfo.ChildrenEntry\x12\x0f\n\x07removed\x18\x04 \x01(\x08\x12\x14\n\x0cuser_created\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\t\x12\x0c\n\x04size\x18\x07 \x01(\t\x12\x39\n\x06labels\x18\x08 \x03(\x0b\x32).imrpc.EngineSnapshotDiskInfo.LabelsEntry\x1a/\n\rChildrenEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x1b\x45ngineSnapshotRevertRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\"r\n\x1a\x45ngineSnapshotPurgeRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x1b\n\x13skip_if_in_progress\x18\x02 \x01(\x08\"\xc7\x01\n&EngineSnapshotPurgeStatusProxyResponse\x12I\n\x06status\x18\x01 \x03(\x0b\x32\x39.imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry\x1aR\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.ptypes.SnapshotPurgeStatusResponse:\x02\x38\x01\"\x8b\x02\n\x1a\x45ngineSnapshotCloneRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x1b\n\x13\x66rom_engine_address\x18\x02 \x01(\t\x12\x15\n\rsnapshot_name\x18\x03 \x01(\t\x12%\n\x1d\x65xport_backing_image_if_exist\x18\x04 \x01(\x08\x12%\n\x1d\x66ile_sync_http_client_timeout\x18\x05 \x01(\x05\x12\x18\n\x10\x66rom_engine_name\x18\x06 \x01(\t\x12\x18\n\x10\x66rom_volume_name\x18\x07 \x01(\t\"\xc7\x01\n&EngineSnapshotCloneStatusProxyResponse\x12I\n\x06status\x18\x01 \x03(\x0b\x32\x39.imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry\x1aR\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.ptypes.SnapshotCloneStatusResponse:\x02\x38\x01\"e\n\x1b\x45ngineSnapshotRemoveRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\r\n\x05names\x18\x02 \x03(\t\"\xa4\x03\n\x1b\x45ngineSnapshotBackupRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x0c\n\x04\x65nvs\x18\x08 \x03(\t\x12\x13\n\x0b\x62\x61\x63kup_name\x18\x02 \x01(\t\x12\x15\n\rsnapshot_name\x18\x03 \x01(\t\x12\x15\n\rbackup_target\x18\x04 \x01(\t\x12\x1a\n\x12\x62\x61\x63king_image_name\x18\x05 \x01(\t\x12\x1e\n\x16\x62\x61\x63king_image_checksum\x18\x06 \x01(\t\x12>\n\x06labels\x18\x07 \x03(\x0b\x32..imrpc.EngineSnapshotBackupRequest.LabelsEntry\x12\x1a\n\x12\x63ompression_method\x18\t \x01(\t\x12\x18\n\x10\x63oncurrent_limit\x18\n \x01(\x05\x12\x1a\n\x12storage_class_name\x18\x0b \x01(\t\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"_\n!EngineSnapshotBackupProxyResponse\x12\x11\n\tbackup_id\x18\x01 \x01(\t\x12\x0f\n\x07replica\x18\x02 \x01(\t\x12\x16\n\x0eis_incremental\x18\x03 \x01(\x08\"\xa0\x01\n!EngineSnapshotBackupStatusRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x13\n\x0b\x62\x61\x63kup_name\x18\x02 \x01(\t\x12\x17\n\x0freplica_address\x18\x03 \x01(\t\x12\x14\n\x0creplica_name\x18\x04 \x01(\t\"\x9d\x01\n\'EngineSnapshotBackupStatusProxyResponse\x12\x12\n\nbackup_url\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x10\n\x08progress\x18\x03 \x01(\x05\x12\x15\n\rsnapshot_name\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x17\n\x0freplica_address\x18\x06 \x01(\t\"\xaf\x01\n\x1a\x45ngineBackupRestoreRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x0c\n\x04\x65nvs\x18\x02 \x03(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x13\n\x0bvolume_name\x18\x05 \x01(\t\x12\x18\n\x10\x63oncurrent_limit\x18\x06 \x01(\x05\"5\n EngineBackupRestoreProxyResponse\x12\x11\n\ttaskError\x18\x01 \x01(\x0c\"\xc4\x01\n&EngineBackupRestoreStatusProxyResponse\x12I\n\x06status\x18\x01 \x03(\x0b\x32\x39.imrpc.EngineBackupRestoreStatusProxyResponse.StatusEntry\x1aO\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .imrpc.EngineBackupRestoreStatus:\x02\x38\x01\"\xc0\x01\n\x19\x45ngineBackupRestoreStatus\x12\x14\n\x0cis_restoring\x18\x01 \x01(\x08\x12\x15\n\rlast_restored\x18\x02 \x01(\t\x12 \n\x18\x63urrent_restoring_backup\x18\x03 \x01(\t\x12\x10\n\x08progress\x18\x04 \x01(\x05\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12\x10\n\x08\x66ilename\x18\x06 \x01(\t\x12\r\n\x05state\x18\x07 \x01(\t\x12\x12\n\nbackup_url\x18\x08 \x01(\t\"[\n EngineBackupRestoreFinishRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\"\xf0\x01\n\x17\x45ngineReplicaAddRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12\x0f\n\x07restore\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x14\n\x0c\x63urrent_size\x18\x05 \x01(\x03\x12\x11\n\tfast_sync\x18\x06 \x01(\x08\x12%\n\x1d\x66ile_sync_http_client_timeout\x18\x07 \x01(\x05\x12\x14\n\x0creplica_name\x18\x08 \x01(\t\"P\n\x1e\x45ngineReplicaListProxyResponse\x12.\n\x0creplica_list\x18\x01 \x01(\x0b\x32\x18.ptypes.ReplicaListReply\"\x8b\x01\n!EngineReplicaVerifyRebuildRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12\x14\n\x0creplica_name\x18\x03 \x01(\t\"\xca\x01\n\'EngineReplicaRebuildStatusProxyResponse\x12J\n\x06status\x18\x01 \x03(\x0b\x32:.imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry\x1aS\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.ptypes.ReplicaRebuildStatusResponse:\x02\x38\x01\"\x84\x01\n\x1a\x45ngineReplicaRemoveRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12\x14\n\x0creplica_name\x18\x03 \x01(\t\"\x95\x01\n\x1e\x45ngineReplicaModeUpdateRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12!\n\x04mode\x18\x03 \x01(\x0e\x32\x13.ptypes.ReplicaMode\"{\n\x19\x45ngineSnapshotHashRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x15\n\rsnapshot_name\x18\x02 \x01(\t\x12\x0e\n\x06rehash\x18\x03 \x01(\x08\"q\n\x1f\x45ngineSnapshotHashStatusRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x15\n\rsnapshot_name\x18\x02 \x01(\t\"\xc4\x01\n%EngineSnapshotHashStatusProxyResponse\x12H\n\x06status\x18\x01 \x03(\x0b\x32\x38.imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry\x1aQ\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".ptypes.SnapshotHashStatusResponse:\x02\x38\x01\"A\n\x1d\x45ngineMetricsGetProxyResponse\x12 \n\x07metrics\x18\x01 \x01(\x0b\x32\x0f.ptypes.Metrics2\xb7\x15\n\x12ProxyEngineService\x12P\n\x10ServerVersionGet\x12\x19.imrpc.ProxyEngineRequest\x1a!.imrpc.EngineVersionProxyResponse\x12K\n\tVolumeGet\x12\x19.imrpc.ProxyEngineRequest\x1a#.imrpc.EngineVolumeGetProxyResponse\x12H\n\x0cVolumeExpand\x12 .imrpc.EngineVolumeExpandRequest\x1a\x16.google.protobuf.Empty\x12V\n\x13VolumeFrontendStart\x12\'.imrpc.EngineVolumeFrontendStartRequest\x1a\x16.google.protobuf.Empty\x12K\n\x16VolumeFrontendShutdown\x12\x19.imrpc.ProxyEngineRequest\x1a\x16.google.protobuf.Empty\x12t\n\"VolumeUnmapMarkSnapChainRemovedSet\x12\x36.imrpc.EngineVolumeUnmapMarkSnapChainRemovedSetRequest\x1a\x16.google.protobuf.Empty\x12\x62\n\x19VolumeSnapshotMaxCountSet\x12-.imrpc.EngineVolumeSnapshotMaxCountSetRequest\x1a\x16.google.protobuf.Empty\x12`\n\x18VolumeSnapshotMaxSizeSet\x12,.imrpc.EngineVolumeSnapshotMaxSizeSetRequest\x1a\x16.google.protobuf.Empty\x12^\n\x0eVolumeSnapshot\x12\".imrpc.EngineVolumeSnapshotRequest\x1a(.imrpc.EngineVolumeSnapshotProxyResponse\x12Q\n\x0cSnapshotList\x12\x19.imrpc.ProxyEngineRequest\x1a&.imrpc.EngineSnapshotListProxyResponse\x12L\n\x0eSnapshotRevert\x12\".imrpc.EngineSnapshotRevertRequest\x1a\x16.google.protobuf.Empty\x12J\n\rSnapshotPurge\x12!.imrpc.EngineSnapshotPurgeRequest\x1a\x16.google.protobuf.Empty\x12_\n\x13SnapshotPurgeStatus\x12\x19.imrpc.ProxyEngineRequest\x1a-.imrpc.EngineSnapshotPurgeStatusProxyResponse\x12J\n\rSnapshotClone\x12!.imrpc.EngineSnapshotCloneRequest\x1a\x16.google.protobuf.Empty\x12_\n\x13SnapshotCloneStatus\x12\x19.imrpc.ProxyEngineRequest\x1a-.imrpc.EngineSnapshotCloneStatusProxyResponse\x12L\n\x0eSnapshotRemove\x12\".imrpc.EngineSnapshotRemoveRequest\x1a\x16.google.protobuf.Empty\x12H\n\x0cSnapshotHash\x12 .imrpc.EngineSnapshotHashRequest\x1a\x16.google.protobuf.Empty\x12j\n\x12SnapshotHashStatus\x12&.imrpc.EngineSnapshotHashStatusRequest\x1a,.imrpc.EngineSnapshotHashStatusProxyResponse\x12^\n\x0eSnapshotBackup\x12\".imrpc.EngineSnapshotBackupRequest\x1a(.imrpc.EngineSnapshotBackupProxyResponse\x12p\n\x14SnapshotBackupStatus\x12(.imrpc.EngineSnapshotBackupStatusRequest\x1a..imrpc.EngineSnapshotBackupStatusProxyResponse\x12[\n\rBackupRestore\x12!.imrpc.EngineBackupRestoreRequest\x1a\'.imrpc.EngineBackupRestoreProxyResponse\x12_\n\x13\x42\x61\x63kupRestoreStatus\x12\x19.imrpc.ProxyEngineRequest\x1a-.imrpc.EngineBackupRestoreStatusProxyResponse\x12V\n\x13\x42\x61\x63kupRestoreFinish\x12\'.imrpc.EngineBackupRestoreFinishRequest\x1a\x16.google.protobuf.Empty\x12J\n\x18\x43leanupBackupMountPoints\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12\x44\n\nReplicaAdd\x12\x1e.imrpc.EngineReplicaAddRequest\x1a\x16.google.protobuf.Empty\x12O\n\x0bReplicaList\x12\x19.imrpc.ProxyEngineRequest\x1a%.imrpc.EngineReplicaListProxyResponse\x12\x64\n\x17ReplicaRebuildingStatus\x12\x19.imrpc.ProxyEngineRequest\x1a..imrpc.EngineReplicaRebuildStatusProxyResponse\x12X\n\x14ReplicaVerifyRebuild\x12(.imrpc.EngineReplicaVerifyRebuildRequest\x1a\x16.google.protobuf.Empty\x12J\n\rReplicaRemove\x12!.imrpc.EngineReplicaRemoveRequest\x1a\x16.google.protobuf.Empty\x12R\n\x11ReplicaModeUpdate\x12%.imrpc.EngineReplicaModeUpdateRequest\x1a\x16.google.protobuf.Empty\x12M\n\nMetricsGet\x12\x19.imrpc.ProxyEngineRequest\x1a$.imrpc.EngineMetricsGetProxyResponseB9Z7github.com/longhorn/longhorn-instance-manager/pkg/imrpcb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\nCgithub.com/longhorn/longhorn-instance-manager/pkg/imrpc/proxy.proto\x12\x05imrpc\x1a\x1bgoogle/protobuf/empty.proto\x1a\x41github.com/longhorn/longhorn-engine/proto/ptypes/controller.proto\x1a@github.com/longhorn/longhorn-engine/proto/ptypes/syncagent.proto\x1a\x44github.com/longhorn/longhorn-instance-manager/pkg/imrpc/common.proto\"\xb4\x01\n\x12ProxyEngineRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12;\n\x14\x62\x61\x63kend_store_driver\x18\x02 \x01(\x0e\x32\x19.imrpc.BackendStoreDriverB\x02\x18\x01\x12\x13\n\x0b\x65ngine_name\x18\x03 \x01(\t\x12\x13\n\x0bvolume_name\x18\x04 \x01(\t\x12&\n\x0b\x64\x61ta_engine\x18\x05 \x01(\x0e\x32\x11.imrpc.DataEngine\"D\n\x1a\x45ngineVersionProxyResponse\x12&\n\x07version\x18\x01 \x01(\x0b\x32\x15.ptypes.VersionOutput\">\n\x1c\x45ngineVolumeGetProxyResponse\x12\x1e\n\x06volume\x18\x01 \x01(\x0b\x32\x0e.ptypes.Volume\"\x81\x01\n\x19\x45ngineVolumeExpandRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12+\n\x06\x65xpand\x18\x02 \x01(\x0b\x32\x1b.ptypes.VolumeExpandRequest\"\x97\x01\n EngineVolumeFrontendStartRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12:\n\x0e\x66rontend_start\x18\x02 \x01(\x0b\x32\".ptypes.VolumeFrontendStartRequest\"\x8e\x01\n\x1b\x45ngineVolumeSnapshotRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x36\n\x0fsnapshot_volume\x18\x02 \x01(\x0b\x32\x1d.ptypes.VolumeSnapshotRequest\"R\n!EngineVolumeSnapshotProxyResponse\x12-\n\x08snapshot\x18\x01 \x01(\x0b\x32\x1b.ptypes.VolumeSnapshotReply\"\xb6\x01\n/EngineVolumeUnmapMarkSnapChainRemovedSetRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12J\n\x0funmap_mark_snap\x18\x02 \x01(\x0b\x32\x31.ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest\"\x9a\x01\n&EngineVolumeSnapshotMaxCountSetRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x37\n\x05\x63ount\x18\x02 \x01(\x0b\x32(.ptypes.VolumeSnapshotMaxCountSetRequest\"\x97\x01\n%EngineVolumeSnapshotMaxSizeSetRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x35\n\x04size\x18\x02 \x01(\x0b\x32\'.ptypes.VolumeSnapshotMaxSizeSetRequest\"\xb0\x01\n\x1f\x45ngineSnapshotListProxyResponse\x12@\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x31.imrpc.EngineSnapshotListProxyResponse.DisksEntry\x1aK\n\nDisksEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.imrpc.EngineSnapshotDiskInfo:\x02\x38\x01\"\xd6\x02\n\x16\x45ngineSnapshotDiskInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06parent\x18\x02 \x01(\t\x12=\n\x08\x63hildren\x18\x03 \x03(\x0b\x32+.imrpc.EngineSnapshotDiskInfo.ChildrenEntry\x12\x0f\n\x07removed\x18\x04 \x01(\x08\x12\x14\n\x0cuser_created\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\t\x12\x0c\n\x04size\x18\x07 \x01(\t\x12\x39\n\x06labels\x18\x08 \x03(\x0b\x32).imrpc.EngineSnapshotDiskInfo.LabelsEntry\x1a/\n\rChildrenEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x1b\x45ngineSnapshotRevertRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\"r\n\x1a\x45ngineSnapshotPurgeRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x1b\n\x13skip_if_in_progress\x18\x02 \x01(\x08\"\xc7\x01\n&EngineSnapshotPurgeStatusProxyResponse\x12I\n\x06status\x18\x01 \x03(\x0b\x32\x39.imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry\x1aR\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.ptypes.SnapshotPurgeStatusResponse:\x02\x38\x01\"\x8b\x02\n\x1a\x45ngineSnapshotCloneRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x1b\n\x13\x66rom_engine_address\x18\x02 \x01(\t\x12\x15\n\rsnapshot_name\x18\x03 \x01(\t\x12%\n\x1d\x65xport_backing_image_if_exist\x18\x04 \x01(\x08\x12%\n\x1d\x66ile_sync_http_client_timeout\x18\x05 \x01(\x05\x12\x18\n\x10\x66rom_engine_name\x18\x06 \x01(\t\x12\x18\n\x10\x66rom_volume_name\x18\x07 \x01(\t\"\xc7\x01\n&EngineSnapshotCloneStatusProxyResponse\x12I\n\x06status\x18\x01 \x03(\x0b\x32\x39.imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry\x1aR\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.ptypes.SnapshotCloneStatusResponse:\x02\x38\x01\"e\n\x1b\x45ngineSnapshotRemoveRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\r\n\x05names\x18\x02 \x03(\t\"\xa4\x03\n\x1b\x45ngineSnapshotBackupRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x0c\n\x04\x65nvs\x18\x08 \x03(\t\x12\x13\n\x0b\x62\x61\x63kup_name\x18\x02 \x01(\t\x12\x15\n\rsnapshot_name\x18\x03 \x01(\t\x12\x15\n\rbackup_target\x18\x04 \x01(\t\x12\x1a\n\x12\x62\x61\x63king_image_name\x18\x05 \x01(\t\x12\x1e\n\x16\x62\x61\x63king_image_checksum\x18\x06 \x01(\t\x12>\n\x06labels\x18\x07 \x03(\x0b\x32..imrpc.EngineSnapshotBackupRequest.LabelsEntry\x12\x1a\n\x12\x63ompression_method\x18\t \x01(\t\x12\x18\n\x10\x63oncurrent_limit\x18\n \x01(\x05\x12\x1a\n\x12storage_class_name\x18\x0b \x01(\t\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"_\n!EngineSnapshotBackupProxyResponse\x12\x11\n\tbackup_id\x18\x01 \x01(\t\x12\x0f\n\x07replica\x18\x02 \x01(\t\x12\x16\n\x0eis_incremental\x18\x03 \x01(\x08\"\xa0\x01\n!EngineSnapshotBackupStatusRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x13\n\x0b\x62\x61\x63kup_name\x18\x02 \x01(\t\x12\x17\n\x0freplica_address\x18\x03 \x01(\t\x12\x14\n\x0creplica_name\x18\x04 \x01(\t\"\x9d\x01\n\'EngineSnapshotBackupStatusProxyResponse\x12\x12\n\nbackup_url\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x10\n\x08progress\x18\x03 \x01(\x05\x12\x15\n\rsnapshot_name\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x17\n\x0freplica_address\x18\x06 \x01(\t\"\xaf\x01\n\x1a\x45ngineBackupRestoreRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x0c\n\x04\x65nvs\x18\x02 \x03(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x13\n\x0bvolume_name\x18\x05 \x01(\t\x12\x18\n\x10\x63oncurrent_limit\x18\x06 \x01(\x05\"5\n EngineBackupRestoreProxyResponse\x12\x11\n\ttaskError\x18\x01 \x01(\x0c\"\xc4\x01\n&EngineBackupRestoreStatusProxyResponse\x12I\n\x06status\x18\x01 \x03(\x0b\x32\x39.imrpc.EngineBackupRestoreStatusProxyResponse.StatusEntry\x1aO\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .imrpc.EngineBackupRestoreStatus:\x02\x38\x01\"\xc0\x01\n\x19\x45ngineBackupRestoreStatus\x12\x14\n\x0cis_restoring\x18\x01 \x01(\x08\x12\x15\n\rlast_restored\x18\x02 \x01(\t\x12 \n\x18\x63urrent_restoring_backup\x18\x03 \x01(\t\x12\x10\n\x08progress\x18\x04 \x01(\x05\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12\x10\n\x08\x66ilename\x18\x06 \x01(\t\x12\r\n\x05state\x18\x07 \x01(\t\x12\x12\n\nbackup_url\x18\x08 \x01(\t\"[\n EngineBackupRestoreFinishRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\"\xf0\x01\n\x17\x45ngineReplicaAddRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12\x0f\n\x07restore\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x14\n\x0c\x63urrent_size\x18\x05 \x01(\x03\x12\x11\n\tfast_sync\x18\x06 \x01(\x08\x12%\n\x1d\x66ile_sync_http_client_timeout\x18\x07 \x01(\x05\x12\x14\n\x0creplica_name\x18\x08 \x01(\t\"P\n\x1e\x45ngineReplicaListProxyResponse\x12.\n\x0creplica_list\x18\x01 \x01(\x0b\x32\x18.ptypes.ReplicaListReply\"\x8b\x01\n!EngineReplicaVerifyRebuildRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12\x14\n\x0creplica_name\x18\x03 \x01(\t\"\xca\x01\n\'EngineReplicaRebuildStatusProxyResponse\x12J\n\x06status\x18\x01 \x03(\x0b\x32:.imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry\x1aS\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.ptypes.ReplicaRebuildStatusResponse:\x02\x38\x01\"\x84\x01\n\x1a\x45ngineReplicaRemoveRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12\x14\n\x0creplica_name\x18\x03 \x01(\t\"\x95\x01\n\x1e\x45ngineReplicaModeUpdateRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x17\n\x0freplica_address\x18\x02 \x01(\t\x12!\n\x04mode\x18\x03 \x01(\x0e\x32\x13.ptypes.ReplicaMode\"{\n\x19\x45ngineSnapshotHashRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x15\n\rsnapshot_name\x18\x02 \x01(\t\x12\x0e\n\x06rehash\x18\x03 \x01(\x08\"q\n\x1f\x45ngineSnapshotHashStatusRequest\x12\x37\n\x14proxy_engine_request\x18\x01 \x01(\x0b\x32\x19.imrpc.ProxyEngineRequest\x12\x15\n\rsnapshot_name\x18\x02 \x01(\t\"\xc4\x01\n%EngineSnapshotHashStatusProxyResponse\x12H\n\x06status\x18\x01 \x03(\x0b\x32\x38.imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry\x1aQ\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".ptypes.SnapshotHashStatusResponse:\x02\x38\x01\"A\n\x1d\x45ngineMetricsGetProxyResponse\x12 \n\x07metrics\x18\x01 \x01(\x0b\x32\x0f.ptypes.Metrics\"+\n\x14RemountVolumeRequest\x12\x13\n\x0bvolume_name\x18\x01 \x01(\t2\x85\x16\n\x12ProxyEngineService\x12P\n\x10ServerVersionGet\x12\x19.imrpc.ProxyEngineRequest\x1a!.imrpc.EngineVersionProxyResponse\x12K\n\tVolumeGet\x12\x19.imrpc.ProxyEngineRequest\x1a#.imrpc.EngineVolumeGetProxyResponse\x12H\n\x0cVolumeExpand\x12 .imrpc.EngineVolumeExpandRequest\x1a\x16.google.protobuf.Empty\x12V\n\x13VolumeFrontendStart\x12\'.imrpc.EngineVolumeFrontendStartRequest\x1a\x16.google.protobuf.Empty\x12K\n\x16VolumeFrontendShutdown\x12\x19.imrpc.ProxyEngineRequest\x1a\x16.google.protobuf.Empty\x12t\n\"VolumeUnmapMarkSnapChainRemovedSet\x12\x36.imrpc.EngineVolumeUnmapMarkSnapChainRemovedSetRequest\x1a\x16.google.protobuf.Empty\x12\x62\n\x19VolumeSnapshotMaxCountSet\x12-.imrpc.EngineVolumeSnapshotMaxCountSetRequest\x1a\x16.google.protobuf.Empty\x12`\n\x18VolumeSnapshotMaxSizeSet\x12,.imrpc.EngineVolumeSnapshotMaxSizeSetRequest\x1a\x16.google.protobuf.Empty\x12^\n\x0eVolumeSnapshot\x12\".imrpc.EngineVolumeSnapshotRequest\x1a(.imrpc.EngineVolumeSnapshotProxyResponse\x12Q\n\x0cSnapshotList\x12\x19.imrpc.ProxyEngineRequest\x1a&.imrpc.EngineSnapshotListProxyResponse\x12L\n\x0eSnapshotRevert\x12\".imrpc.EngineSnapshotRevertRequest\x1a\x16.google.protobuf.Empty\x12J\n\rSnapshotPurge\x12!.imrpc.EngineSnapshotPurgeRequest\x1a\x16.google.protobuf.Empty\x12_\n\x13SnapshotPurgeStatus\x12\x19.imrpc.ProxyEngineRequest\x1a-.imrpc.EngineSnapshotPurgeStatusProxyResponse\x12J\n\rSnapshotClone\x12!.imrpc.EngineSnapshotCloneRequest\x1a\x16.google.protobuf.Empty\x12_\n\x13SnapshotCloneStatus\x12\x19.imrpc.ProxyEngineRequest\x1a-.imrpc.EngineSnapshotCloneStatusProxyResponse\x12L\n\x0eSnapshotRemove\x12\".imrpc.EngineSnapshotRemoveRequest\x1a\x16.google.protobuf.Empty\x12H\n\x0cSnapshotHash\x12 .imrpc.EngineSnapshotHashRequest\x1a\x16.google.protobuf.Empty\x12j\n\x12SnapshotHashStatus\x12&.imrpc.EngineSnapshotHashStatusRequest\x1a,.imrpc.EngineSnapshotHashStatusProxyResponse\x12^\n\x0eSnapshotBackup\x12\".imrpc.EngineSnapshotBackupRequest\x1a(.imrpc.EngineSnapshotBackupProxyResponse\x12p\n\x14SnapshotBackupStatus\x12(.imrpc.EngineSnapshotBackupStatusRequest\x1a..imrpc.EngineSnapshotBackupStatusProxyResponse\x12[\n\rBackupRestore\x12!.imrpc.EngineBackupRestoreRequest\x1a\'.imrpc.EngineBackupRestoreProxyResponse\x12_\n\x13\x42\x61\x63kupRestoreStatus\x12\x19.imrpc.ProxyEngineRequest\x1a-.imrpc.EngineBackupRestoreStatusProxyResponse\x12V\n\x13\x42\x61\x63kupRestoreFinish\x12\'.imrpc.EngineBackupRestoreFinishRequest\x1a\x16.google.protobuf.Empty\x12J\n\x18\x43leanupBackupMountPoints\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12\x44\n\nReplicaAdd\x12\x1e.imrpc.EngineReplicaAddRequest\x1a\x16.google.protobuf.Empty\x12O\n\x0bReplicaList\x12\x19.imrpc.ProxyEngineRequest\x1a%.imrpc.EngineReplicaListProxyResponse\x12\x64\n\x17ReplicaRebuildingStatus\x12\x19.imrpc.ProxyEngineRequest\x1a..imrpc.EngineReplicaRebuildStatusProxyResponse\x12X\n\x14ReplicaVerifyRebuild\x12(.imrpc.EngineReplicaVerifyRebuildRequest\x1a\x16.google.protobuf.Empty\x12J\n\rReplicaRemove\x12!.imrpc.EngineReplicaRemoveRequest\x1a\x16.google.protobuf.Empty\x12R\n\x11ReplicaModeUpdate\x12%.imrpc.EngineReplicaModeUpdateRequest\x1a\x16.google.protobuf.Empty\x12M\n\nMetricsGet\x12\x19.imrpc.ProxyEngineRequest\x1a$.imrpc.EngineMetricsGetProxyResponse\x12L\n\x15RemountReadOnlyVolume\x12\x1b.imrpc.RemountVolumeRequest\x1a\x16.google.protobuf.EmptyB9Z7github.com/longhorn/longhorn-instance-manager/pkg/imrpcb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -138,6 +138,8 @@ _globals['_ENGINESNAPSHOTHASHSTATUSPROXYRESPONSE_STATUSENTRY']._serialized_end=6116 _globals['_ENGINEMETRICSGETPROXYRESPONSE']._serialized_start=6118 _globals['_ENGINEMETRICSGETPROXYRESPONSE']._serialized_end=6183 - _globals['_PROXYENGINESERVICE']._serialized_start=6186 - _globals['_PROXYENGINESERVICE']._serialized_end=8929 + _globals['_REMOUNTVOLUMEREQUEST']._serialized_start=6185 + _globals['_REMOUNTVOLUMEREQUEST']._serialized_end=6228 + _globals['_PROXYENGINESERVICE']._serialized_start=6231 + _globals['_PROXYENGINESERVICE']._serialized_end=9052 # @@protoc_insertion_point(module_scope) diff --git a/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2_grpc.py b/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2_grpc.py index 9d3e55fd0..ac15e888d 100644 --- a/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2_grpc.py +++ b/integration/rpc/proxy/github/com/longhorn/longhorn_instance_manager/pkg/imrpc/proxy_pb2_grpc.py @@ -170,6 +170,11 @@ def __init__(self, channel): request_serializer=github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.ProxyEngineRequest.SerializeToString, response_deserializer=github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.EngineMetricsGetProxyResponse.FromString, ) + self.RemountReadOnlyVolume = channel.unary_unary( + '/imrpc.ProxyEngineService/RemountReadOnlyVolume', + request_serializer=github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.RemountVolumeRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) class ProxyEngineServiceServicer(object): @@ -361,6 +366,12 @@ def MetricsGet(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def RemountReadOnlyVolume(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ProxyEngineServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -519,6 +530,11 @@ def add_ProxyEngineServiceServicer_to_server(servicer, server): request_deserializer=github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.ProxyEngineRequest.FromString, response_serializer=github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.EngineMetricsGetProxyResponse.SerializeToString, ), + 'RemountReadOnlyVolume': grpc.unary_unary_rpc_method_handler( + servicer.RemountReadOnlyVolume, + request_deserializer=github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.RemountVolumeRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'imrpc.ProxyEngineService', rpc_method_handlers) @@ -1055,3 +1071,20 @@ def MetricsGet(request, github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.EngineMetricsGetProxyResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def RemountReadOnlyVolume(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/imrpc.ProxyEngineService/RemountReadOnlyVolume', + github_dot_com_dot_longhorn_dot_longhorn__instance__manager_dot_pkg_dot_imrpc_dot_proxy__pb2.RemountVolumeRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/pkg/client/proxy_volume.go b/pkg/client/proxy_volume.go index ecb7026ac..d40fe11f4 100644 --- a/pkg/client/proxy_volume.go +++ b/pkg/client/proxy_volume.go @@ -296,3 +296,19 @@ func (c *ProxyClient) VolumeSnapshotMaxSizeSet(dataEngine, engineName, volumeNam return nil } + +func (c *ProxyClient) RemountReadOnlyVolume(volumeName string) (err error) { + if volumeName == "" { + return fmt.Errorf("failed to remount volume, volume name is empty") + } + + req := &rpc.RemountVolumeRequest{ + VolumeName: volumeName, + } + + _, err = c.service.RemountReadOnlyVolume(getContextWithGRPCTimeout(c.ctx), req) + if err != nil { + return err + } + return nil +} diff --git a/pkg/imrpc/proxy.pb.go b/pkg/imrpc/proxy.pb.go index b25097e7a..73e376df7 100644 --- a/pkg/imrpc/proxy.pb.go +++ b/pkg/imrpc/proxy.pb.go @@ -2361,6 +2361,53 @@ func (x *EngineMetricsGetProxyResponse) GetMetrics() *ptypes.Metrics { return nil } +type RemountVolumeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VolumeName string `protobuf:"bytes,1,opt,name=volume_name,json=volumeName,proto3" json:"volume_name,omitempty"` +} + +func (x *RemountVolumeRequest) Reset() { + *x = RemountVolumeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RemountVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemountVolumeRequest) ProtoMessage() {} + +func (x *RemountVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemountVolumeRequest.ProtoReflect.Descriptor instead. +func (*RemountVolumeRequest) Descriptor() ([]byte, []int) { + return file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_rawDescGZIP(), []int{37} +} + +func (x *RemountVolumeRequest) GetVolumeName() string { + if x != nil { + return x.VolumeName + } + return "" +} + var File_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto protoreflect.FileDescriptor var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_rawDesc = []byte{ @@ -2851,183 +2898,191 @@ var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_raw 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x32, 0xb7, 0x15, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x10, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x12, - 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, - 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, - 0x09, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x56, 0x0a, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x46, 0x72, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x27, 0x2e, 0x69, 0x6d, - 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x16, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x53, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, - 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x74, 0x0a, 0x22, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x61, 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x53, 0x6e, 0x61, 0x70, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, - 0x36, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x61, 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x53, 0x6e, 0x61, - 0x70, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x62, 0x0a, 0x19, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x12, 0x2d, 0x2e, 0x69, - 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x60, 0x0a, 0x18, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x12, - 0x2c, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x61, 0x78, 0x53, - 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x72, 0x69, 0x63, 0x73, 0x22, 0x37, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x32, 0x85, 0x16, + 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, + 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x09, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, 0x70, + 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x56, 0x0a, + 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x27, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x0e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, - 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6d, - 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x0d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x50, 0x75, 0x72, 0x67, 0x65, 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, - 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x75, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x16, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x46, + 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, + 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x5f, 0x0a, 0x13, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x75, - 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, - 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, - 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x75, 0x72, 0x67, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, - 0x6c, 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, - 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6c, 0x6f, 0x6e, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x5f, 0x0a, 0x13, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6c, 0x6f, 0x6e, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, - 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2d, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4c, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x48, - 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x20, - 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x74, 0x79, 0x12, 0x74, 0x0a, 0x22, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, 0x61, + 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, 0x36, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, + 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x6e, 0x6d, + 0x61, 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x53, 0x6e, 0x61, 0x70, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x6a, 0x0a, 0x12, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, - 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x14, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x2e, 0x69, - 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, - 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x12, 0x27, 0x2e, 0x69, 0x6d, - 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x62, 0x0a, 0x19, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x53, 0x65, 0x74, 0x12, 0x2d, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, + 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x18, - 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4d, 0x6f, 0x75, - 0x6e, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x44, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x41, 0x64, 0x64, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x41, 0x64, 0x64, 0x52, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x60, 0x0a, 0x18, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x61, + 0x78, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x12, 0x2c, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, + 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, - 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, - 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, - 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x64, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, - 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x28, 0x2e, - 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5e, + 0x0a, 0x0e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, + 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, + 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x69, 0x6d, 0x72, 0x70, + 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x76, + 0x65, 0x72, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x4a, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x4a, 0x0a, 0x0d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x75, 0x72, 0x67, 0x65, + 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x75, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x11, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4d, 0x6f, 0x64, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x25, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4d, 0x6f, 0x64, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x4d, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, - 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, - 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, - 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x6f, 0x6e, - 0x67, 0x68, 0x6f, 0x72, 0x6e, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x68, 0x6f, 0x72, 0x6e, 0x2d, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5f, 0x0a, 0x13, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x75, 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, + 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x50, 0x75, 0x72, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0d, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x2e, + 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5f, 0x0a, 0x13, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x69, 0x6d, 0x72, + 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6d, + 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x48, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, + 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x6a, 0x0a, 0x12, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, + 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, + 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2c, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, + 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, + 0x22, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, + 0x14, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, + 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x13, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, + 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, + 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x12, 0x27, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x18, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x44, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x41, 0x64, 0x64, 0x12, + 0x1e, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, + 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x28, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x72, 0x70, + 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4d, + 0x6f, 0x64, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x69, 0x6d, 0x72, 0x70, + 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4d, + 0x6f, 0x64, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x68, 0x6f, 0x72, 0x6e, 0x2f, 0x6c, 0x6f, 0x6e, + 0x67, 0x68, 0x6f, 0x72, 0x6e, 0x2d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x69, 0x6d, 0x72, 0x70, 0x63, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3042,7 +3097,7 @@ func file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_ra return file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_rawDescData } -var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_msgTypes = make([]protoimpl.MessageInfo, 46) +var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_msgTypes = make([]protoimpl.MessageInfo, 47) var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_goTypes = []interface{}{ (*ProxyEngineRequest)(nil), // 0: imrpc.ProxyEngineRequest (*EngineVersionProxyResponse)(nil), // 1: imrpc.EngineVersionProxyResponse @@ -3081,85 +3136,86 @@ var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_goT (*EngineSnapshotHashStatusRequest)(nil), // 34: imrpc.EngineSnapshotHashStatusRequest (*EngineSnapshotHashStatusProxyResponse)(nil), // 35: imrpc.EngineSnapshotHashStatusProxyResponse (*EngineMetricsGetProxyResponse)(nil), // 36: imrpc.EngineMetricsGetProxyResponse - nil, // 37: imrpc.EngineSnapshotListProxyResponse.DisksEntry - nil, // 38: imrpc.EngineSnapshotDiskInfo.ChildrenEntry - nil, // 39: imrpc.EngineSnapshotDiskInfo.LabelsEntry - nil, // 40: imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry - nil, // 41: imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry - nil, // 42: imrpc.EngineSnapshotBackupRequest.LabelsEntry - nil, // 43: imrpc.EngineBackupRestoreStatusProxyResponse.StatusEntry - nil, // 44: imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry - nil, // 45: imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry - (BackendStoreDriver)(0), // 46: imrpc.BackendStoreDriver - (DataEngine)(0), // 47: imrpc.DataEngine - (*ptypes.VersionOutput)(nil), // 48: ptypes.VersionOutput - (*ptypes.Volume)(nil), // 49: ptypes.Volume - (*ptypes.VolumeExpandRequest)(nil), // 50: ptypes.VolumeExpandRequest - (*ptypes.VolumeFrontendStartRequest)(nil), // 51: ptypes.VolumeFrontendStartRequest - (*ptypes.VolumeSnapshotRequest)(nil), // 52: ptypes.VolumeSnapshotRequest - (*ptypes.VolumeSnapshotReply)(nil), // 53: ptypes.VolumeSnapshotReply - (*ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest)(nil), // 54: ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest - (*ptypes.VolumeSnapshotMaxCountSetRequest)(nil), // 55: ptypes.VolumeSnapshotMaxCountSetRequest - (*ptypes.VolumeSnapshotMaxSizeSetRequest)(nil), // 56: ptypes.VolumeSnapshotMaxSizeSetRequest - (*ptypes.ReplicaListReply)(nil), // 57: ptypes.ReplicaListReply - (ptypes.ReplicaMode)(0), // 58: ptypes.ReplicaMode - (*ptypes.Metrics)(nil), // 59: ptypes.Metrics - (*ptypes.SnapshotPurgeStatusResponse)(nil), // 60: ptypes.SnapshotPurgeStatusResponse - (*ptypes.SnapshotCloneStatusResponse)(nil), // 61: ptypes.SnapshotCloneStatusResponse - (*ptypes.ReplicaRebuildStatusResponse)(nil), // 62: ptypes.ReplicaRebuildStatusResponse - (*ptypes.SnapshotHashStatusResponse)(nil), // 63: ptypes.SnapshotHashStatusResponse - (*emptypb.Empty)(nil), // 64: google.protobuf.Empty + (*RemountVolumeRequest)(nil), // 37: imrpc.RemountVolumeRequest + nil, // 38: imrpc.EngineSnapshotListProxyResponse.DisksEntry + nil, // 39: imrpc.EngineSnapshotDiskInfo.ChildrenEntry + nil, // 40: imrpc.EngineSnapshotDiskInfo.LabelsEntry + nil, // 41: imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry + nil, // 42: imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry + nil, // 43: imrpc.EngineSnapshotBackupRequest.LabelsEntry + nil, // 44: imrpc.EngineBackupRestoreStatusProxyResponse.StatusEntry + nil, // 45: imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry + nil, // 46: imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry + (BackendStoreDriver)(0), // 47: imrpc.BackendStoreDriver + (DataEngine)(0), // 48: imrpc.DataEngine + (*ptypes.VersionOutput)(nil), // 49: ptypes.VersionOutput + (*ptypes.Volume)(nil), // 50: ptypes.Volume + (*ptypes.VolumeExpandRequest)(nil), // 51: ptypes.VolumeExpandRequest + (*ptypes.VolumeFrontendStartRequest)(nil), // 52: ptypes.VolumeFrontendStartRequest + (*ptypes.VolumeSnapshotRequest)(nil), // 53: ptypes.VolumeSnapshotRequest + (*ptypes.VolumeSnapshotReply)(nil), // 54: ptypes.VolumeSnapshotReply + (*ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest)(nil), // 55: ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest + (*ptypes.VolumeSnapshotMaxCountSetRequest)(nil), // 56: ptypes.VolumeSnapshotMaxCountSetRequest + (*ptypes.VolumeSnapshotMaxSizeSetRequest)(nil), // 57: ptypes.VolumeSnapshotMaxSizeSetRequest + (*ptypes.ReplicaListReply)(nil), // 58: ptypes.ReplicaListReply + (ptypes.ReplicaMode)(0), // 59: ptypes.ReplicaMode + (*ptypes.Metrics)(nil), // 60: ptypes.Metrics + (*ptypes.SnapshotPurgeStatusResponse)(nil), // 61: ptypes.SnapshotPurgeStatusResponse + (*ptypes.SnapshotCloneStatusResponse)(nil), // 62: ptypes.SnapshotCloneStatusResponse + (*ptypes.ReplicaRebuildStatusResponse)(nil), // 63: ptypes.ReplicaRebuildStatusResponse + (*ptypes.SnapshotHashStatusResponse)(nil), // 64: ptypes.SnapshotHashStatusResponse + (*emptypb.Empty)(nil), // 65: google.protobuf.Empty } var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_depIdxs = []int32{ - 46, // 0: imrpc.ProxyEngineRequest.backend_store_driver:type_name -> imrpc.BackendStoreDriver - 47, // 1: imrpc.ProxyEngineRequest.data_engine:type_name -> imrpc.DataEngine - 48, // 2: imrpc.EngineVersionProxyResponse.version:type_name -> ptypes.VersionOutput - 49, // 3: imrpc.EngineVolumeGetProxyResponse.volume:type_name -> ptypes.Volume + 47, // 0: imrpc.ProxyEngineRequest.backend_store_driver:type_name -> imrpc.BackendStoreDriver + 48, // 1: imrpc.ProxyEngineRequest.data_engine:type_name -> imrpc.DataEngine + 49, // 2: imrpc.EngineVersionProxyResponse.version:type_name -> ptypes.VersionOutput + 50, // 3: imrpc.EngineVolumeGetProxyResponse.volume:type_name -> ptypes.Volume 0, // 4: imrpc.EngineVolumeExpandRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 50, // 5: imrpc.EngineVolumeExpandRequest.expand:type_name -> ptypes.VolumeExpandRequest + 51, // 5: imrpc.EngineVolumeExpandRequest.expand:type_name -> ptypes.VolumeExpandRequest 0, // 6: imrpc.EngineVolumeFrontendStartRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 51, // 7: imrpc.EngineVolumeFrontendStartRequest.frontend_start:type_name -> ptypes.VolumeFrontendStartRequest + 52, // 7: imrpc.EngineVolumeFrontendStartRequest.frontend_start:type_name -> ptypes.VolumeFrontendStartRequest 0, // 8: imrpc.EngineVolumeSnapshotRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 52, // 9: imrpc.EngineVolumeSnapshotRequest.snapshot_volume:type_name -> ptypes.VolumeSnapshotRequest - 53, // 10: imrpc.EngineVolumeSnapshotProxyResponse.snapshot:type_name -> ptypes.VolumeSnapshotReply + 53, // 9: imrpc.EngineVolumeSnapshotRequest.snapshot_volume:type_name -> ptypes.VolumeSnapshotRequest + 54, // 10: imrpc.EngineVolumeSnapshotProxyResponse.snapshot:type_name -> ptypes.VolumeSnapshotReply 0, // 11: imrpc.EngineVolumeUnmapMarkSnapChainRemovedSetRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 54, // 12: imrpc.EngineVolumeUnmapMarkSnapChainRemovedSetRequest.unmap_mark_snap:type_name -> ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest + 55, // 12: imrpc.EngineVolumeUnmapMarkSnapChainRemovedSetRequest.unmap_mark_snap:type_name -> ptypes.VolumeUnmapMarkSnapChainRemovedSetRequest 0, // 13: imrpc.EngineVolumeSnapshotMaxCountSetRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 55, // 14: imrpc.EngineVolumeSnapshotMaxCountSetRequest.count:type_name -> ptypes.VolumeSnapshotMaxCountSetRequest + 56, // 14: imrpc.EngineVolumeSnapshotMaxCountSetRequest.count:type_name -> ptypes.VolumeSnapshotMaxCountSetRequest 0, // 15: imrpc.EngineVolumeSnapshotMaxSizeSetRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 56, // 16: imrpc.EngineVolumeSnapshotMaxSizeSetRequest.size:type_name -> ptypes.VolumeSnapshotMaxSizeSetRequest - 37, // 17: imrpc.EngineSnapshotListProxyResponse.disks:type_name -> imrpc.EngineSnapshotListProxyResponse.DisksEntry - 38, // 18: imrpc.EngineSnapshotDiskInfo.children:type_name -> imrpc.EngineSnapshotDiskInfo.ChildrenEntry - 39, // 19: imrpc.EngineSnapshotDiskInfo.labels:type_name -> imrpc.EngineSnapshotDiskInfo.LabelsEntry + 57, // 16: imrpc.EngineVolumeSnapshotMaxSizeSetRequest.size:type_name -> ptypes.VolumeSnapshotMaxSizeSetRequest + 38, // 17: imrpc.EngineSnapshotListProxyResponse.disks:type_name -> imrpc.EngineSnapshotListProxyResponse.DisksEntry + 39, // 18: imrpc.EngineSnapshotDiskInfo.children:type_name -> imrpc.EngineSnapshotDiskInfo.ChildrenEntry + 40, // 19: imrpc.EngineSnapshotDiskInfo.labels:type_name -> imrpc.EngineSnapshotDiskInfo.LabelsEntry 0, // 20: imrpc.EngineSnapshotRevertRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest 0, // 21: imrpc.EngineSnapshotPurgeRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 40, // 22: imrpc.EngineSnapshotPurgeStatusProxyResponse.status:type_name -> imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry + 41, // 22: imrpc.EngineSnapshotPurgeStatusProxyResponse.status:type_name -> imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry 0, // 23: imrpc.EngineSnapshotCloneRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 41, // 24: imrpc.EngineSnapshotCloneStatusProxyResponse.status:type_name -> imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry + 42, // 24: imrpc.EngineSnapshotCloneStatusProxyResponse.status:type_name -> imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry 0, // 25: imrpc.EngineSnapshotRemoveRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest 0, // 26: imrpc.EngineSnapshotBackupRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 42, // 27: imrpc.EngineSnapshotBackupRequest.labels:type_name -> imrpc.EngineSnapshotBackupRequest.LabelsEntry + 43, // 27: imrpc.EngineSnapshotBackupRequest.labels:type_name -> imrpc.EngineSnapshotBackupRequest.LabelsEntry 0, // 28: imrpc.EngineSnapshotBackupStatusRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest 0, // 29: imrpc.EngineBackupRestoreRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 43, // 30: imrpc.EngineBackupRestoreStatusProxyResponse.status:type_name -> imrpc.EngineBackupRestoreStatusProxyResponse.StatusEntry + 44, // 30: imrpc.EngineBackupRestoreStatusProxyResponse.status:type_name -> imrpc.EngineBackupRestoreStatusProxyResponse.StatusEntry 0, // 31: imrpc.EngineBackupRestoreFinishRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest 0, // 32: imrpc.EngineReplicaAddRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 57, // 33: imrpc.EngineReplicaListProxyResponse.replica_list:type_name -> ptypes.ReplicaListReply + 58, // 33: imrpc.EngineReplicaListProxyResponse.replica_list:type_name -> ptypes.ReplicaListReply 0, // 34: imrpc.EngineReplicaVerifyRebuildRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 44, // 35: imrpc.EngineReplicaRebuildStatusProxyResponse.status:type_name -> imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry + 45, // 35: imrpc.EngineReplicaRebuildStatusProxyResponse.status:type_name -> imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry 0, // 36: imrpc.EngineReplicaRemoveRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest 0, // 37: imrpc.EngineReplicaModeUpdateRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 58, // 38: imrpc.EngineReplicaModeUpdateRequest.mode:type_name -> ptypes.ReplicaMode + 59, // 38: imrpc.EngineReplicaModeUpdateRequest.mode:type_name -> ptypes.ReplicaMode 0, // 39: imrpc.EngineSnapshotHashRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest 0, // 40: imrpc.EngineSnapshotHashStatusRequest.proxy_engine_request:type_name -> imrpc.ProxyEngineRequest - 45, // 41: imrpc.EngineSnapshotHashStatusProxyResponse.status:type_name -> imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry - 59, // 42: imrpc.EngineMetricsGetProxyResponse.metrics:type_name -> ptypes.Metrics + 46, // 41: imrpc.EngineSnapshotHashStatusProxyResponse.status:type_name -> imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry + 60, // 42: imrpc.EngineMetricsGetProxyResponse.metrics:type_name -> ptypes.Metrics 11, // 43: imrpc.EngineSnapshotListProxyResponse.DisksEntry.value:type_name -> imrpc.EngineSnapshotDiskInfo - 60, // 44: imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry.value:type_name -> ptypes.SnapshotPurgeStatusResponse - 61, // 45: imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry.value:type_name -> ptypes.SnapshotCloneStatusResponse + 61, // 44: imrpc.EngineSnapshotPurgeStatusProxyResponse.StatusEntry.value:type_name -> ptypes.SnapshotPurgeStatusResponse + 62, // 45: imrpc.EngineSnapshotCloneStatusProxyResponse.StatusEntry.value:type_name -> ptypes.SnapshotCloneStatusResponse 25, // 46: imrpc.EngineBackupRestoreStatusProxyResponse.StatusEntry.value:type_name -> imrpc.EngineBackupRestoreStatus - 62, // 47: imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry.value:type_name -> ptypes.ReplicaRebuildStatusResponse - 63, // 48: imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry.value:type_name -> ptypes.SnapshotHashStatusResponse + 63, // 47: imrpc.EngineReplicaRebuildStatusProxyResponse.StatusEntry.value:type_name -> ptypes.ReplicaRebuildStatusResponse + 64, // 48: imrpc.EngineSnapshotHashStatusProxyResponse.StatusEntry.value:type_name -> ptypes.SnapshotHashStatusResponse 0, // 49: imrpc.ProxyEngineService.ServerVersionGet:input_type -> imrpc.ProxyEngineRequest 0, // 50: imrpc.ProxyEngineService.VolumeGet:input_type -> imrpc.ProxyEngineRequest 3, // 51: imrpc.ProxyEngineService.VolumeExpand:input_type -> imrpc.EngineVolumeExpandRequest @@ -3183,7 +3239,7 @@ var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_dep 22, // 69: imrpc.ProxyEngineService.BackupRestore:input_type -> imrpc.EngineBackupRestoreRequest 0, // 70: imrpc.ProxyEngineService.BackupRestoreStatus:input_type -> imrpc.ProxyEngineRequest 26, // 71: imrpc.ProxyEngineService.BackupRestoreFinish:input_type -> imrpc.EngineBackupRestoreFinishRequest - 64, // 72: imrpc.ProxyEngineService.CleanupBackupMountPoints:input_type -> google.protobuf.Empty + 65, // 72: imrpc.ProxyEngineService.CleanupBackupMountPoints:input_type -> google.protobuf.Empty 27, // 73: imrpc.ProxyEngineService.ReplicaAdd:input_type -> imrpc.EngineReplicaAddRequest 0, // 74: imrpc.ProxyEngineService.ReplicaList:input_type -> imrpc.ProxyEngineRequest 0, // 75: imrpc.ProxyEngineService.ReplicaRebuildingStatus:input_type -> imrpc.ProxyEngineRequest @@ -3191,39 +3247,41 @@ var file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_dep 31, // 77: imrpc.ProxyEngineService.ReplicaRemove:input_type -> imrpc.EngineReplicaRemoveRequest 32, // 78: imrpc.ProxyEngineService.ReplicaModeUpdate:input_type -> imrpc.EngineReplicaModeUpdateRequest 0, // 79: imrpc.ProxyEngineService.MetricsGet:input_type -> imrpc.ProxyEngineRequest - 1, // 80: imrpc.ProxyEngineService.ServerVersionGet:output_type -> imrpc.EngineVersionProxyResponse - 2, // 81: imrpc.ProxyEngineService.VolumeGet:output_type -> imrpc.EngineVolumeGetProxyResponse - 64, // 82: imrpc.ProxyEngineService.VolumeExpand:output_type -> google.protobuf.Empty - 64, // 83: imrpc.ProxyEngineService.VolumeFrontendStart:output_type -> google.protobuf.Empty - 64, // 84: imrpc.ProxyEngineService.VolumeFrontendShutdown:output_type -> google.protobuf.Empty - 64, // 85: imrpc.ProxyEngineService.VolumeUnmapMarkSnapChainRemovedSet:output_type -> google.protobuf.Empty - 64, // 86: imrpc.ProxyEngineService.VolumeSnapshotMaxCountSet:output_type -> google.protobuf.Empty - 64, // 87: imrpc.ProxyEngineService.VolumeSnapshotMaxSizeSet:output_type -> google.protobuf.Empty - 6, // 88: imrpc.ProxyEngineService.VolumeSnapshot:output_type -> imrpc.EngineVolumeSnapshotProxyResponse - 10, // 89: imrpc.ProxyEngineService.SnapshotList:output_type -> imrpc.EngineSnapshotListProxyResponse - 64, // 90: imrpc.ProxyEngineService.SnapshotRevert:output_type -> google.protobuf.Empty - 64, // 91: imrpc.ProxyEngineService.SnapshotPurge:output_type -> google.protobuf.Empty - 14, // 92: imrpc.ProxyEngineService.SnapshotPurgeStatus:output_type -> imrpc.EngineSnapshotPurgeStatusProxyResponse - 64, // 93: imrpc.ProxyEngineService.SnapshotClone:output_type -> google.protobuf.Empty - 16, // 94: imrpc.ProxyEngineService.SnapshotCloneStatus:output_type -> imrpc.EngineSnapshotCloneStatusProxyResponse - 64, // 95: imrpc.ProxyEngineService.SnapshotRemove:output_type -> google.protobuf.Empty - 64, // 96: imrpc.ProxyEngineService.SnapshotHash:output_type -> google.protobuf.Empty - 35, // 97: imrpc.ProxyEngineService.SnapshotHashStatus:output_type -> imrpc.EngineSnapshotHashStatusProxyResponse - 19, // 98: imrpc.ProxyEngineService.SnapshotBackup:output_type -> imrpc.EngineSnapshotBackupProxyResponse - 21, // 99: imrpc.ProxyEngineService.SnapshotBackupStatus:output_type -> imrpc.EngineSnapshotBackupStatusProxyResponse - 23, // 100: imrpc.ProxyEngineService.BackupRestore:output_type -> imrpc.EngineBackupRestoreProxyResponse - 24, // 101: imrpc.ProxyEngineService.BackupRestoreStatus:output_type -> imrpc.EngineBackupRestoreStatusProxyResponse - 64, // 102: imrpc.ProxyEngineService.BackupRestoreFinish:output_type -> google.protobuf.Empty - 64, // 103: imrpc.ProxyEngineService.CleanupBackupMountPoints:output_type -> google.protobuf.Empty - 64, // 104: imrpc.ProxyEngineService.ReplicaAdd:output_type -> google.protobuf.Empty - 28, // 105: imrpc.ProxyEngineService.ReplicaList:output_type -> imrpc.EngineReplicaListProxyResponse - 30, // 106: imrpc.ProxyEngineService.ReplicaRebuildingStatus:output_type -> imrpc.EngineReplicaRebuildStatusProxyResponse - 64, // 107: imrpc.ProxyEngineService.ReplicaVerifyRebuild:output_type -> google.protobuf.Empty - 64, // 108: imrpc.ProxyEngineService.ReplicaRemove:output_type -> google.protobuf.Empty - 64, // 109: imrpc.ProxyEngineService.ReplicaModeUpdate:output_type -> google.protobuf.Empty - 36, // 110: imrpc.ProxyEngineService.MetricsGet:output_type -> imrpc.EngineMetricsGetProxyResponse - 80, // [80:111] is the sub-list for method output_type - 49, // [49:80] is the sub-list for method input_type + 37, // 80: imrpc.ProxyEngineService.RemountReadOnlyVolume:input_type -> imrpc.RemountVolumeRequest + 1, // 81: imrpc.ProxyEngineService.ServerVersionGet:output_type -> imrpc.EngineVersionProxyResponse + 2, // 82: imrpc.ProxyEngineService.VolumeGet:output_type -> imrpc.EngineVolumeGetProxyResponse + 65, // 83: imrpc.ProxyEngineService.VolumeExpand:output_type -> google.protobuf.Empty + 65, // 84: imrpc.ProxyEngineService.VolumeFrontendStart:output_type -> google.protobuf.Empty + 65, // 85: imrpc.ProxyEngineService.VolumeFrontendShutdown:output_type -> google.protobuf.Empty + 65, // 86: imrpc.ProxyEngineService.VolumeUnmapMarkSnapChainRemovedSet:output_type -> google.protobuf.Empty + 65, // 87: imrpc.ProxyEngineService.VolumeSnapshotMaxCountSet:output_type -> google.protobuf.Empty + 65, // 88: imrpc.ProxyEngineService.VolumeSnapshotMaxSizeSet:output_type -> google.protobuf.Empty + 6, // 89: imrpc.ProxyEngineService.VolumeSnapshot:output_type -> imrpc.EngineVolumeSnapshotProxyResponse + 10, // 90: imrpc.ProxyEngineService.SnapshotList:output_type -> imrpc.EngineSnapshotListProxyResponse + 65, // 91: imrpc.ProxyEngineService.SnapshotRevert:output_type -> google.protobuf.Empty + 65, // 92: imrpc.ProxyEngineService.SnapshotPurge:output_type -> google.protobuf.Empty + 14, // 93: imrpc.ProxyEngineService.SnapshotPurgeStatus:output_type -> imrpc.EngineSnapshotPurgeStatusProxyResponse + 65, // 94: imrpc.ProxyEngineService.SnapshotClone:output_type -> google.protobuf.Empty + 16, // 95: imrpc.ProxyEngineService.SnapshotCloneStatus:output_type -> imrpc.EngineSnapshotCloneStatusProxyResponse + 65, // 96: imrpc.ProxyEngineService.SnapshotRemove:output_type -> google.protobuf.Empty + 65, // 97: imrpc.ProxyEngineService.SnapshotHash:output_type -> google.protobuf.Empty + 35, // 98: imrpc.ProxyEngineService.SnapshotHashStatus:output_type -> imrpc.EngineSnapshotHashStatusProxyResponse + 19, // 99: imrpc.ProxyEngineService.SnapshotBackup:output_type -> imrpc.EngineSnapshotBackupProxyResponse + 21, // 100: imrpc.ProxyEngineService.SnapshotBackupStatus:output_type -> imrpc.EngineSnapshotBackupStatusProxyResponse + 23, // 101: imrpc.ProxyEngineService.BackupRestore:output_type -> imrpc.EngineBackupRestoreProxyResponse + 24, // 102: imrpc.ProxyEngineService.BackupRestoreStatus:output_type -> imrpc.EngineBackupRestoreStatusProxyResponse + 65, // 103: imrpc.ProxyEngineService.BackupRestoreFinish:output_type -> google.protobuf.Empty + 65, // 104: imrpc.ProxyEngineService.CleanupBackupMountPoints:output_type -> google.protobuf.Empty + 65, // 105: imrpc.ProxyEngineService.ReplicaAdd:output_type -> google.protobuf.Empty + 28, // 106: imrpc.ProxyEngineService.ReplicaList:output_type -> imrpc.EngineReplicaListProxyResponse + 30, // 107: imrpc.ProxyEngineService.ReplicaRebuildingStatus:output_type -> imrpc.EngineReplicaRebuildStatusProxyResponse + 65, // 108: imrpc.ProxyEngineService.ReplicaVerifyRebuild:output_type -> google.protobuf.Empty + 65, // 109: imrpc.ProxyEngineService.ReplicaRemove:output_type -> google.protobuf.Empty + 65, // 110: imrpc.ProxyEngineService.ReplicaModeUpdate:output_type -> google.protobuf.Empty + 36, // 111: imrpc.ProxyEngineService.MetricsGet:output_type -> imrpc.EngineMetricsGetProxyResponse + 65, // 112: imrpc.ProxyEngineService.RemountReadOnlyVolume:output_type -> google.protobuf.Empty + 81, // [81:113] is the sub-list for method output_type + 49, // [49:81] is the sub-list for method input_type 49, // [49:49] is the sub-list for extension type_name 49, // [49:49] is the sub-list for extension extendee 0, // [0:49] is the sub-list for field type_name @@ -3680,6 +3738,18 @@ func file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_in return nil } } + file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemountVolumeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3687,7 +3757,7 @@ func file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_in GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_github_com_longhorn_longhorn_instance_manager_pkg_imrpc_proxy_proto_rawDesc, NumEnums: 0, - NumMessages: 46, + NumMessages: 47, NumExtensions: 0, NumServices: 1, }, @@ -3744,6 +3814,7 @@ type ProxyEngineServiceClient interface { ReplicaRemove(ctx context.Context, in *EngineReplicaRemoveRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) ReplicaModeUpdate(ctx context.Context, in *EngineReplicaModeUpdateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) MetricsGet(ctx context.Context, in *ProxyEngineRequest, opts ...grpc.CallOption) (*EngineMetricsGetProxyResponse, error) + RemountReadOnlyVolume(ctx context.Context, in *RemountVolumeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type proxyEngineServiceClient struct { @@ -4033,6 +4104,15 @@ func (c *proxyEngineServiceClient) MetricsGet(ctx context.Context, in *ProxyEngi return out, nil } +func (c *proxyEngineServiceClient) RemountReadOnlyVolume(ctx context.Context, in *RemountVolumeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/imrpc.ProxyEngineService/RemountReadOnlyVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ProxyEngineServiceServer is the server API for ProxyEngineService service. type ProxyEngineServiceServer interface { ServerVersionGet(context.Context, *ProxyEngineRequest) (*EngineVersionProxyResponse, error) @@ -4066,6 +4146,7 @@ type ProxyEngineServiceServer interface { ReplicaRemove(context.Context, *EngineReplicaRemoveRequest) (*emptypb.Empty, error) ReplicaModeUpdate(context.Context, *EngineReplicaModeUpdateRequest) (*emptypb.Empty, error) MetricsGet(context.Context, *ProxyEngineRequest) (*EngineMetricsGetProxyResponse, error) + RemountReadOnlyVolume(context.Context, *RemountVolumeRequest) (*emptypb.Empty, error) } // UnimplementedProxyEngineServiceServer can be embedded to have forward compatible implementations. @@ -4165,6 +4246,9 @@ func (*UnimplementedProxyEngineServiceServer) ReplicaModeUpdate(context.Context, func (*UnimplementedProxyEngineServiceServer) MetricsGet(context.Context, *ProxyEngineRequest) (*EngineMetricsGetProxyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MetricsGet not implemented") } +func (*UnimplementedProxyEngineServiceServer) RemountReadOnlyVolume(context.Context, *RemountVolumeRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemountReadOnlyVolume not implemented") +} func RegisterProxyEngineServiceServer(s *grpc.Server, srv ProxyEngineServiceServer) { s.RegisterService(&_ProxyEngineService_serviceDesc, srv) @@ -4728,6 +4812,24 @@ func _ProxyEngineService_MetricsGet_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _ProxyEngineService_RemountReadOnlyVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemountVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProxyEngineServiceServer).RemountReadOnlyVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/imrpc.ProxyEngineService/RemountReadOnlyVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProxyEngineServiceServer).RemountReadOnlyVolume(ctx, req.(*RemountVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _ProxyEngineService_serviceDesc = grpc.ServiceDesc{ ServiceName: "imrpc.ProxyEngineService", HandlerType: (*ProxyEngineServiceServer)(nil), @@ -4856,6 +4958,10 @@ var _ProxyEngineService_serviceDesc = grpc.ServiceDesc{ MethodName: "MetricsGet", Handler: _ProxyEngineService_MetricsGet_Handler, }, + { + MethodName: "RemountReadOnlyVolume", + Handler: _ProxyEngineService_RemountReadOnlyVolume_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "github.com/longhorn/longhorn-instance-manager/pkg/imrpc/proxy.proto", diff --git a/pkg/imrpc/proxy.proto b/pkg/imrpc/proxy.proto index 65ef749d4..f4391ce64 100644 --- a/pkg/imrpc/proxy.proto +++ b/pkg/imrpc/proxy.proto @@ -47,6 +47,7 @@ service ProxyEngineService { rpc ReplicaModeUpdate(EngineReplicaModeUpdateRequest) returns (google.protobuf.Empty); rpc MetricsGet(ProxyEngineRequest) returns (EngineMetricsGetProxyResponse); + rpc RemountReadOnlyVolume(RemountVolumeRequest) returns (google.protobuf.Empty); } message ProxyEngineRequest{ @@ -293,3 +294,7 @@ message EngineSnapshotHashStatusProxyResponse { message EngineMetricsGetProxyResponse { ptypes.Metrics metrics = 1; } + +message RemountVolumeRequest { + string volume_name = 1; +} diff --git a/pkg/proxy/volume.go b/pkg/proxy/volume.go index 3ef207603..f7394786d 100644 --- a/pkg/proxy/volume.go +++ b/pkg/proxy/volume.go @@ -1,6 +1,10 @@ package proxy import ( + "crypto/sha256" + "encoding/hex" + "os/exec" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/net/context" @@ -12,6 +16,7 @@ import ( eptypes "github.com/longhorn/longhorn-engine/proto/ptypes" rpc "github.com/longhorn/longhorn-instance-manager/pkg/imrpc" + "github.com/longhorn/longhorn-instance-manager/pkg/util" ) func (p *Proxy) VolumeGet(ctx context.Context, req *rpc.ProxyEngineRequest) (resp *rpc.EngineVolumeGetProxyResponse, err error) { @@ -308,3 +313,24 @@ func (ops V2DataEngineProxyOps) VolumeSnapshotMaxSizeSet(ctx context.Context, re /* TODO: Implement this */ return &emptypb.Empty{}, nil } + +func (p *Proxy) RemountReadOnlyVolume(ctx context.Context, req *rpc.RemountVolumeRequest) (resp *emptypb.Empty, err error) { + volumeName := req.VolumeName + volumeNameSHA := sha256.Sum256([]byte(volumeName)) + volumeNameSHAStr := hex.EncodeToString(volumeNameSHA[:]) + + volumeMountPointMap, err := util.GetVolumeMountPointMap() + if err != nil { + logrus.WithError(err).Warn("Failed to get all volume mount points") + } + + if mp, exists := volumeMountPointMap[volumeNameSHAStr]; exists { + cmd := exec.CommandContext(ctx, "mount", "-o", "remount,rw", mp.Path) + if out, err := cmd.CombinedOutput(); err != nil { + return nil, grpcstatus.Errorf(grpccodes.Internal, "remount failed with output: %v", out) + } + + } + + return &emptypb.Empty{}, nil +} diff --git a/pkg/types/types.go b/pkg/types/types.go index 493b4f5ab..a8c8aa33d 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -44,7 +44,7 @@ const ( ) const ( - GlobalMountPathPattern = "/host/var/lib/kubelet/plugins/kubernetes.io/csi/driver.longhorn.io/*/globalmount" + GlobalMountPathPattern = "/host/*/plugins/kubernetes.io/csi/driver.longhorn.io/*/globalmount" EngineConditionFilesystemReadOnly = "FilesystemReadOnly" )