diff --git a/csi.proto b/csi.proto index f55e39b5..abae2f22 100644 --- a/csi.proto +++ b/csi.proto @@ -770,10 +770,6 @@ message ControllerServiceCapability { // CREATE_DELETE_SNAPSHOT MUST support creating volume from // snapshot. CREATE_DELETE_SNAPSHOT = 5; - // LIST_SNAPSHOTS is NOT REQUIRED. For plugins that need to upload - // a snapshot after it is being cut, LIST_SNAPSHOTS COULD be used - // with the snapshot_id as the filter to query whether the - // uploading process is complete or not. LIST_SNAPSHOTS = 6; // Plugins supporting volume cloning at the storage level MAY // report this capability. The source volume must be managed by @@ -857,37 +853,10 @@ message Snapshot { // field is REQUIRED. int64 created_at = 4; - // The status of a snapshot. - SnapshotStatus status = 5; -} - -// The status of a snapshot. -message SnapshotStatus { - enum Type { - UNKNOWN = 0; - // A snapshot is ready for use. - READY = 1; - // A snapshot is cut and is now being uploaded. - // Some cloud providers and storage systems uploads the snapshot - // to the cloud after the snapshot is cut. During this phase, - // `thaw` can be done so the application can be running again if - // `freeze` was done before taking the snapshot. - UPLOADING = 2; - // An error occurred during the snapshot uploading process. - // This error status is specific for uploading because - // `CreateSnaphot` is a blocking call before the snapshot is - // cut and therefore it SHOULD NOT come back with an error - // status when an error occurs. Instead a gRPC error code SHALL - // be returned by `CreateSnapshot` when an error occurs before - // a snapshot is cut. - ERROR_UPLOADING = 3; - } - // This field is REQUIRED. - Type type = 1; - - // Additional information to describe why a snapshot ended up in the - // `ERROR_UPLOADING` status. This field is OPTIONAL. - string details = 2; + // Indicates if a snapshot is ready to use as a + // `volume_content_source` in a `CreateVolumeRequest`. The default + // value is false. This field is REQUIRED. + bool ready_to_use = 5; } message DeleteSnapshotRequest { // The ID of the snapshot to be deleted. @@ -927,7 +896,8 @@ message ListSnapshotsRequest { // Identity information for a specific snapshot. This field is // OPTIONAL. It can be used to list only a specific snapshot. // ListSnapshots will return with current snapshot information - // and will not block if the snapshot is being uploaded. + // and will not block if the snapshot is being processed after + // it is cut. string snapshot_id = 4; } diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go index 425a06c9..07887256 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/csi.pb.go @@ -61,7 +61,7 @@ func (x PluginCapability_Service_Type) String() string { return proto.EnumName(PluginCapability_Service_Type_name, int32(x)) } func (PluginCapability_Service_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{4, 0, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{4, 0, 0} } type VolumeCapability_AccessMode_Mode int32 @@ -105,7 +105,7 @@ func (x VolumeCapability_AccessMode_Mode) String() string { return proto.EnumName(VolumeCapability_AccessMode_Mode_name, int32(x)) } func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{10, 2, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{10, 2, 0} } type ControllerServiceCapability_RPC_Type int32 @@ -121,11 +121,7 @@ const ( // CREATE_DELETE_SNAPSHOT MUST support creating volume from // snapshot. ControllerServiceCapability_RPC_CREATE_DELETE_SNAPSHOT ControllerServiceCapability_RPC_Type = 5 - // LIST_SNAPSHOTS is NOT REQUIRED. For plugins that need to upload - // a snapshot after it is being cut, LIST_SNAPSHOTS COULD be used - // with the snapshot_id as the filter to query whether the - // uploading process is complete or not. - ControllerServiceCapability_RPC_LIST_SNAPSHOTS ControllerServiceCapability_RPC_Type = 6 + ControllerServiceCapability_RPC_LIST_SNAPSHOTS ControllerServiceCapability_RPC_Type = 6 // Plugins supporting volume cloning at the storage level MAY // report this capability. The source volume must be managed by // the same plugin. Not all volume sources and parameters @@ -158,49 +154,7 @@ func (x ControllerServiceCapability_RPC_Type) String() string { return proto.EnumName(ControllerServiceCapability_RPC_Type_name, int32(x)) } func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{29, 0, 0} -} - -type SnapshotStatus_Type int32 - -const ( - SnapshotStatus_UNKNOWN SnapshotStatus_Type = 0 - // A snapshot is ready for use. - SnapshotStatus_READY SnapshotStatus_Type = 1 - // A snapshot is cut and is now being uploaded. - // Some cloud providers and storage systems uploads the snapshot - // to the cloud after the snapshot is cut. During this phase, - // `thaw` can be done so the application can be running again if - // `freeze` was done before taking the snapshot. - SnapshotStatus_UPLOADING SnapshotStatus_Type = 2 - // An error occurred during the snapshot uploading process. - // This error status is specific for uploading because - // `CreateSnaphot` is a blocking call before the snapshot is - // cut and therefore it SHOULD NOT come back with an error - // status when an error occurs. Instead a gRPC error code SHALL - // be returned by `CreateSnapshot` when an error occurs before - // a snapshot is cut. - SnapshotStatus_ERROR_UPLOADING SnapshotStatus_Type = 3 -) - -var SnapshotStatus_Type_name = map[int32]string{ - 0: "UNKNOWN", - 1: "READY", - 2: "UPLOADING", - 3: "ERROR_UPLOADING", -} -var SnapshotStatus_Type_value = map[string]int32{ - "UNKNOWN": 0, - "READY": 1, - "UPLOADING": 2, - "ERROR_UPLOADING": 3, -} - -func (x SnapshotStatus_Type) String() string { - return proto.EnumName(SnapshotStatus_Type_name, int32(x)) -} -func (SnapshotStatus_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{33, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{29, 0, 0} } type VolumeUsage_Unit int32 @@ -226,7 +180,7 @@ func (x VolumeUsage_Unit) String() string { return proto.EnumName(VolumeUsage_Unit_name, int32(x)) } func (VolumeUsage_Unit) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{48, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{47, 0} } type NodeServiceCapability_RPC_Type int32 @@ -255,7 +209,7 @@ func (x NodeServiceCapability_RPC_Type) String() string { return proto.EnumName(NodeServiceCapability_RPC_Type_name, int32(x)) } func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{51, 0, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{50, 0, 0} } type GetPluginInfoRequest struct { @@ -268,7 +222,7 @@ func (m *GetPluginInfoRequest) Reset() { *m = GetPluginInfoRequest{} } func (m *GetPluginInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetPluginInfoRequest) ProtoMessage() {} func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{0} } func (m *GetPluginInfoRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginInfoRequest.Unmarshal(m, b) @@ -310,7 +264,7 @@ func (m *GetPluginInfoResponse) Reset() { *m = GetPluginInfoResponse{} } func (m *GetPluginInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetPluginInfoResponse) ProtoMessage() {} func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{1} + return fileDescriptor_csi_3006fd5468ec2d28, []int{1} } func (m *GetPluginInfoResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginInfoResponse.Unmarshal(m, b) @@ -361,7 +315,7 @@ func (m *GetPluginCapabilitiesRequest) Reset() { *m = GetPluginCapabilit func (m *GetPluginCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*GetPluginCapabilitiesRequest) ProtoMessage() {} func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{2} + return fileDescriptor_csi_3006fd5468ec2d28, []int{2} } func (m *GetPluginCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginCapabilitiesRequest.Unmarshal(m, b) @@ -394,7 +348,7 @@ func (m *GetPluginCapabilitiesResponse) Reset() { *m = GetPluginCapabili func (m *GetPluginCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*GetPluginCapabilitiesResponse) ProtoMessage() {} func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{3} + return fileDescriptor_csi_3006fd5468ec2d28, []int{3} } func (m *GetPluginCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPluginCapabilitiesResponse.Unmarshal(m, b) @@ -435,7 +389,7 @@ func (m *PluginCapability) Reset() { *m = PluginCapability{} } func (m *PluginCapability) String() string { return proto.CompactTextString(m) } func (*PluginCapability) ProtoMessage() {} func (*PluginCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{4} + return fileDescriptor_csi_3006fd5468ec2d28, []int{4} } func (m *PluginCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PluginCapability.Unmarshal(m, b) @@ -545,7 +499,7 @@ func (m *PluginCapability_Service) Reset() { *m = PluginCapability_Servi func (m *PluginCapability_Service) String() string { return proto.CompactTextString(m) } func (*PluginCapability_Service) ProtoMessage() {} func (*PluginCapability_Service) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{4, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{4, 0} } func (m *PluginCapability_Service) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PluginCapability_Service.Unmarshal(m, b) @@ -582,7 +536,7 @@ func (m *ProbeRequest) Reset() { *m = ProbeRequest{} } func (m *ProbeRequest) String() string { return proto.CompactTextString(m) } func (*ProbeRequest) ProtoMessage() {} func (*ProbeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{5} + return fileDescriptor_csi_3006fd5468ec2d28, []int{5} } func (m *ProbeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProbeRequest.Unmarshal(m, b) @@ -633,7 +587,7 @@ func (m *ProbeResponse) Reset() { *m = ProbeResponse{} } func (m *ProbeResponse) String() string { return proto.CompactTextString(m) } func (*ProbeResponse) ProtoMessage() {} func (*ProbeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{6} + return fileDescriptor_csi_3006fd5468ec2d28, []int{6} } func (m *ProbeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProbeResponse.Unmarshal(m, b) @@ -723,7 +677,7 @@ func (m *CreateVolumeRequest) Reset() { *m = CreateVolumeRequest{} } func (m *CreateVolumeRequest) String() string { return proto.CompactTextString(m) } func (*CreateVolumeRequest) ProtoMessage() {} func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{7} + return fileDescriptor_csi_3006fd5468ec2d28, []int{7} } func (m *CreateVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateVolumeRequest.Unmarshal(m, b) @@ -808,7 +762,7 @@ func (m *VolumeContentSource) Reset() { *m = VolumeContentSource{} } func (m *VolumeContentSource) String() string { return proto.CompactTextString(m) } func (*VolumeContentSource) ProtoMessage() {} func (*VolumeContentSource) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{8} + return fileDescriptor_csi_3006fd5468ec2d28, []int{8} } func (m *VolumeContentSource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeContentSource.Unmarshal(m, b) @@ -954,7 +908,7 @@ func (m *VolumeContentSource_SnapshotSource) Reset() { *m = VolumeConten func (m *VolumeContentSource_SnapshotSource) String() string { return proto.CompactTextString(m) } func (*VolumeContentSource_SnapshotSource) ProtoMessage() {} func (*VolumeContentSource_SnapshotSource) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{8, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{8, 0} } func (m *VolumeContentSource_SnapshotSource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeContentSource_SnapshotSource.Unmarshal(m, b) @@ -995,7 +949,7 @@ func (m *VolumeContentSource_VolumeSource) Reset() { *m = VolumeContentS func (m *VolumeContentSource_VolumeSource) String() string { return proto.CompactTextString(m) } func (*VolumeContentSource_VolumeSource) ProtoMessage() {} func (*VolumeContentSource_VolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{8, 1} + return fileDescriptor_csi_3006fd5468ec2d28, []int{8, 1} } func (m *VolumeContentSource_VolumeSource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeContentSource_VolumeSource.Unmarshal(m, b) @@ -1036,7 +990,7 @@ func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } func (m *CreateVolumeResponse) String() string { return proto.CompactTextString(m) } func (*CreateVolumeResponse) ProtoMessage() {} func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{9} + return fileDescriptor_csi_3006fd5468ec2d28, []int{9} } func (m *CreateVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateVolumeResponse.Unmarshal(m, b) @@ -1083,7 +1037,7 @@ func (m *VolumeCapability) Reset() { *m = VolumeCapability{} } func (m *VolumeCapability) String() string { return proto.CompactTextString(m) } func (*VolumeCapability) ProtoMessage() {} func (*VolumeCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{10} + return fileDescriptor_csi_3006fd5468ec2d28, []int{10} } func (m *VolumeCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability.Unmarshal(m, b) @@ -1232,7 +1186,7 @@ func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_B func (m *VolumeCapability_BlockVolume) String() string { return proto.CompactTextString(m) } func (*VolumeCapability_BlockVolume) ProtoMessage() {} func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{10, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{10, 0} } func (m *VolumeCapability_BlockVolume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability_BlockVolume.Unmarshal(m, b) @@ -1272,7 +1226,7 @@ func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_M func (m *VolumeCapability_MountVolume) String() string { return proto.CompactTextString(m) } func (*VolumeCapability_MountVolume) ProtoMessage() {} func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{10, 1} + return fileDescriptor_csi_3006fd5468ec2d28, []int{10, 1} } func (m *VolumeCapability_MountVolume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability_MountVolume.Unmarshal(m, b) @@ -1319,7 +1273,7 @@ func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_Ac func (m *VolumeCapability_AccessMode) String() string { return proto.CompactTextString(m) } func (*VolumeCapability_AccessMode) ProtoMessage() {} func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{10, 2} + return fileDescriptor_csi_3006fd5468ec2d28, []int{10, 2} } func (m *VolumeCapability_AccessMode) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCapability_AccessMode.Unmarshal(m, b) @@ -1367,7 +1321,7 @@ func (m *CapacityRange) Reset() { *m = CapacityRange{} } func (m *CapacityRange) String() string { return proto.CompactTextString(m) } func (*CapacityRange) ProtoMessage() {} func (*CapacityRange) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{11} + return fileDescriptor_csi_3006fd5468ec2d28, []int{11} } func (m *CapacityRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CapacityRange.Unmarshal(m, b) @@ -1460,7 +1414,7 @@ func (m *Volume) Reset() { *m = Volume{} } func (m *Volume) String() string { return proto.CompactTextString(m) } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{12} + return fileDescriptor_csi_3006fd5468ec2d28, []int{12} } func (m *Volume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Volume.Unmarshal(m, b) @@ -1652,7 +1606,7 @@ func (m *TopologyRequirement) Reset() { *m = TopologyRequirement{} } func (m *TopologyRequirement) String() string { return proto.CompactTextString(m) } func (*TopologyRequirement) ProtoMessage() {} func (*TopologyRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{13} + return fileDescriptor_csi_3006fd5468ec2d28, []int{13} } func (m *TopologyRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TopologyRequirement.Unmarshal(m, b) @@ -1726,7 +1680,7 @@ func (m *Topology) Reset() { *m = Topology{} } func (m *Topology) String() string { return proto.CompactTextString(m) } func (*Topology) ProtoMessage() {} func (*Topology) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{14} + return fileDescriptor_csi_3006fd5468ec2d28, []int{14} } func (m *Topology) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Topology.Unmarshal(m, b) @@ -1770,7 +1724,7 @@ func (m *DeleteVolumeRequest) Reset() { *m = DeleteVolumeRequest{} } func (m *DeleteVolumeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeRequest) ProtoMessage() {} func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{15} + return fileDescriptor_csi_3006fd5468ec2d28, []int{15} } func (m *DeleteVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteVolumeRequest.Unmarshal(m, b) @@ -1814,7 +1768,7 @@ func (m *DeleteVolumeResponse) Reset() { *m = DeleteVolumeResponse{} } func (m *DeleteVolumeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeResponse) ProtoMessage() {} func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{16} + return fileDescriptor_csi_3006fd5468ec2d28, []int{16} } func (m *DeleteVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteVolumeResponse.Unmarshal(m, b) @@ -1864,7 +1818,7 @@ func (m *ControllerPublishVolumeRequest) Reset() { *m = ControllerPublis func (m *ControllerPublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeRequest) ProtoMessage() {} func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{17} + return fileDescriptor_csi_3006fd5468ec2d28, []int{17} } func (m *ControllerPublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerPublishVolumeRequest.Unmarshal(m, b) @@ -1941,7 +1895,7 @@ func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPubli func (m *ControllerPublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeResponse) ProtoMessage() {} func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{18} + return fileDescriptor_csi_3006fd5468ec2d28, []int{18} } func (m *ControllerPublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerPublishVolumeResponse.Unmarshal(m, b) @@ -1992,7 +1946,7 @@ func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpu func (m *ControllerUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeRequest) ProtoMessage() {} func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{19} + return fileDescriptor_csi_3006fd5468ec2d28, []int{19} } func (m *ControllerUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerUnpublishVolumeRequest.Unmarshal(m, b) @@ -2043,7 +1997,7 @@ func (m *ControllerUnpublishVolumeResponse) Reset() { *m = ControllerUnp func (m *ControllerUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeResponse) ProtoMessage() {} func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{20} + return fileDescriptor_csi_3006fd5468ec2d28, []int{20} } func (m *ControllerUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerUnpublishVolumeResponse.Unmarshal(m, b) @@ -2089,7 +2043,7 @@ func (m *ValidateVolumeCapabilitiesRequest) Reset() { *m = ValidateVolum func (m *ValidateVolumeCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {} func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{21} + return fileDescriptor_csi_3006fd5468ec2d28, []int{21} } func (m *ValidateVolumeCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Unmarshal(m, b) @@ -2167,7 +2121,7 @@ func (m *ValidateVolumeCapabilitiesResponse) Reset() { *m = ValidateVolu func (m *ValidateVolumeCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {} func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{22} + return fileDescriptor_csi_3006fd5468ec2d28, []int{22} } func (m *ValidateVolumeCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Unmarshal(m, b) @@ -2224,7 +2178,7 @@ func (m *ValidateVolumeCapabilitiesResponse_Confirmed) String() string { } func (*ValidateVolumeCapabilitiesResponse_Confirmed) ProtoMessage() {} func (*ValidateVolumeCapabilitiesResponse_Confirmed) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{22, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{22, 0} } func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Unmarshal(m, b) @@ -2289,7 +2243,7 @@ func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } func (m *ListVolumesRequest) String() string { return proto.CompactTextString(m) } func (*ListVolumesRequest) ProtoMessage() {} func (*ListVolumesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{23} + return fileDescriptor_csi_3006fd5468ec2d28, []int{23} } func (m *ListVolumesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListVolumesRequest.Unmarshal(m, b) @@ -2341,7 +2295,7 @@ func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } func (m *ListVolumesResponse) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse) ProtoMessage() {} func (*ListVolumesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{24} + return fileDescriptor_csi_3006fd5468ec2d28, []int{24} } func (m *ListVolumesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListVolumesResponse.Unmarshal(m, b) @@ -2386,7 +2340,7 @@ func (m *ListVolumesResponse_Entry) Reset() { *m = ListVolumesResponse_E func (m *ListVolumesResponse_Entry) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse_Entry) ProtoMessage() {} func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{24, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{24, 0} } func (m *ListVolumesResponse_Entry) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListVolumesResponse_Entry.Unmarshal(m, b) @@ -2441,7 +2395,7 @@ func (m *GetCapacityRequest) Reset() { *m = GetCapacityRequest{} } func (m *GetCapacityRequest) String() string { return proto.CompactTextString(m) } func (*GetCapacityRequest) ProtoMessage() {} func (*GetCapacityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{25} + return fileDescriptor_csi_3006fd5468ec2d28, []int{25} } func (m *GetCapacityRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCapacityRequest.Unmarshal(m, b) @@ -2499,7 +2453,7 @@ func (m *GetCapacityResponse) Reset() { *m = GetCapacityResponse{} } func (m *GetCapacityResponse) String() string { return proto.CompactTextString(m) } func (*GetCapacityResponse) ProtoMessage() {} func (*GetCapacityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{26} + return fileDescriptor_csi_3006fd5468ec2d28, []int{26} } func (m *GetCapacityResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCapacityResponse.Unmarshal(m, b) @@ -2536,7 +2490,7 @@ func (m *ControllerGetCapabilitiesRequest) Reset() { *m = ControllerGetC func (m *ControllerGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesRequest) ProtoMessage() {} func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{27} + return fileDescriptor_csi_3006fd5468ec2d28, []int{27} } func (m *ControllerGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerGetCapabilitiesRequest.Unmarshal(m, b) @@ -2569,7 +2523,7 @@ func (m *ControllerGetCapabilitiesResponse) Reset() { *m = ControllerGet func (m *ControllerGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesResponse) ProtoMessage() {} func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{28} + return fileDescriptor_csi_3006fd5468ec2d28, []int{28} } func (m *ControllerGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerGetCapabilitiesResponse.Unmarshal(m, b) @@ -2610,7 +2564,7 @@ func (m *ControllerServiceCapability) Reset() { *m = ControllerServiceCa func (m *ControllerServiceCapability) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability) ProtoMessage() {} func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{29} + return fileDescriptor_csi_3006fd5468ec2d28, []int{29} } func (m *ControllerServiceCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerServiceCapability.Unmarshal(m, b) @@ -2720,7 +2674,7 @@ func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServi func (m *ControllerServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability_RPC) ProtoMessage() {} func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{29, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{29, 0} } func (m *ControllerServiceCapability_RPC) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ControllerServiceCapability_RPC.Unmarshal(m, b) @@ -2782,7 +2736,7 @@ func (m *CreateSnapshotRequest) Reset() { *m = CreateSnapshotRequest{} } func (m *CreateSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*CreateSnapshotRequest) ProtoMessage() {} func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{30} + return fileDescriptor_csi_3006fd5468ec2d28, []int{30} } func (m *CreateSnapshotRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateSnapshotRequest.Unmarshal(m, b) @@ -2844,7 +2798,7 @@ func (m *CreateSnapshotResponse) Reset() { *m = CreateSnapshotResponse{} func (m *CreateSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*CreateSnapshotResponse) ProtoMessage() {} func (*CreateSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{31} + return fileDescriptor_csi_3006fd5468ec2d28, []int{31} } func (m *CreateSnapshotResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateSnapshotResponse.Unmarshal(m, b) @@ -2896,18 +2850,20 @@ type Snapshot struct { // current time in nanoseconds since 1970-01-01 00:00:00 UTC. This // field is REQUIRED. CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - // The status of a snapshot. - Status *SnapshotStatus `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Indicates if a snapshot is ready to use as a + // `volume_content_source` in a `CreateVolumeRequest`. The default + // value is false. This field is REQUIRED. + ReadyToUse bool `protobuf:"varint,5,opt,name=ready_to_use,json=readyToUse,proto3" json:"ready_to_use,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Snapshot) Reset() { *m = Snapshot{} } func (m *Snapshot) String() string { return proto.CompactTextString(m) } func (*Snapshot) ProtoMessage() {} func (*Snapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{32} + return fileDescriptor_csi_3006fd5468ec2d28, []int{32} } func (m *Snapshot) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Snapshot.Unmarshal(m, b) @@ -2955,61 +2911,11 @@ func (m *Snapshot) GetCreatedAt() int64 { return 0 } -func (m *Snapshot) GetStatus() *SnapshotStatus { - if m != nil { - return m.Status - } - return nil -} - -// The status of a snapshot. -type SnapshotStatus struct { - // This field is REQUIRED. - Type SnapshotStatus_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v0.SnapshotStatus_Type" json:"type,omitempty"` - // Additional information to describe why a snapshot ended up in the - // `ERROR_UPLOADING` status. This field is OPTIONAL. - Details string `protobuf:"bytes,2,opt,name=details,proto3" json:"details,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SnapshotStatus) Reset() { *m = SnapshotStatus{} } -func (m *SnapshotStatus) String() string { return proto.CompactTextString(m) } -func (*SnapshotStatus) ProtoMessage() {} -func (*SnapshotStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{33} -} -func (m *SnapshotStatus) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SnapshotStatus.Unmarshal(m, b) -} -func (m *SnapshotStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SnapshotStatus.Marshal(b, m, deterministic) -} -func (dst *SnapshotStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_SnapshotStatus.Merge(dst, src) -} -func (m *SnapshotStatus) XXX_Size() int { - return xxx_messageInfo_SnapshotStatus.Size(m) -} -func (m *SnapshotStatus) XXX_DiscardUnknown() { - xxx_messageInfo_SnapshotStatus.DiscardUnknown(m) -} - -var xxx_messageInfo_SnapshotStatus proto.InternalMessageInfo - -func (m *SnapshotStatus) GetType() SnapshotStatus_Type { - if m != nil { - return m.Type - } - return SnapshotStatus_UNKNOWN -} - -func (m *SnapshotStatus) GetDetails() string { +func (m *Snapshot) GetReadyToUse() bool { if m != nil { - return m.Details + return m.ReadyToUse } - return "" + return false } type DeleteSnapshotRequest struct { @@ -3029,7 +2935,7 @@ func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*DeleteSnapshotRequest) ProtoMessage() {} func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{34} + return fileDescriptor_csi_3006fd5468ec2d28, []int{33} } func (m *DeleteSnapshotRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteSnapshotRequest.Unmarshal(m, b) @@ -3073,7 +2979,7 @@ func (m *DeleteSnapshotResponse) Reset() { *m = DeleteSnapshotResponse{} func (m *DeleteSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*DeleteSnapshotResponse) ProtoMessage() {} func (*DeleteSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{35} + return fileDescriptor_csi_3006fd5468ec2d28, []int{34} } func (m *DeleteSnapshotResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteSnapshotResponse.Unmarshal(m, b) @@ -3116,7 +3022,8 @@ type ListSnapshotsRequest struct { // Identity information for a specific snapshot. This field is // OPTIONAL. It can be used to list only a specific snapshot. // ListSnapshots will return with current snapshot information - // and will not block if the snapshot is being uploaded. + // and will not block if the snapshot is being processed after + // it is cut. SnapshotId string `protobuf:"bytes,4,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -3127,7 +3034,7 @@ func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsRequest) ProtoMessage() {} func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{36} + return fileDescriptor_csi_3006fd5468ec2d28, []int{35} } func (m *ListSnapshotsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSnapshotsRequest.Unmarshal(m, b) @@ -3193,7 +3100,7 @@ func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsResponse) ProtoMessage() {} func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{37} + return fileDescriptor_csi_3006fd5468ec2d28, []int{36} } func (m *ListSnapshotsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSnapshotsResponse.Unmarshal(m, b) @@ -3238,7 +3145,7 @@ func (m *ListSnapshotsResponse_Entry) Reset() { *m = ListSnapshotsRespon func (m *ListSnapshotsResponse_Entry) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsResponse_Entry) ProtoMessage() {} func (*ListSnapshotsResponse_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{37, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{36, 0} } func (m *ListSnapshotsResponse_Entry) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSnapshotsResponse_Entry.Unmarshal(m, b) @@ -3300,7 +3207,7 @@ func (m *NodeStageVolumeRequest) Reset() { *m = NodeStageVolumeRequest{} func (m *NodeStageVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeStageVolumeRequest) ProtoMessage() {} func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{38} + return fileDescriptor_csi_3006fd5468ec2d28, []int{37} } func (m *NodeStageVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeStageVolumeRequest.Unmarshal(m, b) @@ -3372,7 +3279,7 @@ func (m *NodeStageVolumeResponse) Reset() { *m = NodeStageVolumeResponse func (m *NodeStageVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeStageVolumeResponse) ProtoMessage() {} func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{39} + return fileDescriptor_csi_3006fd5468ec2d28, []int{38} } func (m *NodeStageVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeStageVolumeResponse.Unmarshal(m, b) @@ -3408,7 +3315,7 @@ func (m *NodeUnstageVolumeRequest) Reset() { *m = NodeUnstageVolumeReque func (m *NodeUnstageVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeUnstageVolumeRequest) ProtoMessage() {} func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{40} + return fileDescriptor_csi_3006fd5468ec2d28, []int{39} } func (m *NodeUnstageVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnstageVolumeRequest.Unmarshal(m, b) @@ -3452,7 +3359,7 @@ func (m *NodeUnstageVolumeResponse) Reset() { *m = NodeUnstageVolumeResp func (m *NodeUnstageVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeUnstageVolumeResponse) ProtoMessage() {} func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{41} + return fileDescriptor_csi_3006fd5468ec2d28, []int{40} } func (m *NodeUnstageVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnstageVolumeResponse.Unmarshal(m, b) @@ -3518,7 +3425,7 @@ func (m *NodePublishVolumeRequest) Reset() { *m = NodePublishVolumeReque func (m *NodePublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeRequest) ProtoMessage() {} func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{42} + return fileDescriptor_csi_3006fd5468ec2d28, []int{41} } func (m *NodePublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodePublishVolumeRequest.Unmarshal(m, b) @@ -3604,7 +3511,7 @@ func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResp func (m *NodePublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeResponse) ProtoMessage() {} func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{43} + return fileDescriptor_csi_3006fd5468ec2d28, []int{42} } func (m *NodePublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodePublishVolumeResponse.Unmarshal(m, b) @@ -3640,7 +3547,7 @@ func (m *NodeUnpublishVolumeRequest) Reset() { *m = NodeUnpublishVolumeR func (m *NodeUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeRequest) ProtoMessage() {} func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{44} + return fileDescriptor_csi_3006fd5468ec2d28, []int{43} } func (m *NodeUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnpublishVolumeRequest.Unmarshal(m, b) @@ -3684,7 +3591,7 @@ func (m *NodeUnpublishVolumeResponse) Reset() { *m = NodeUnpublishVolume func (m *NodeUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeResponse) ProtoMessage() {} func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{45} + return fileDescriptor_csi_3006fd5468ec2d28, []int{44} } func (m *NodeUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeUnpublishVolumeResponse.Unmarshal(m, b) @@ -3722,7 +3629,7 @@ func (m *NodeGetVolumeStatsRequest) Reset() { *m = NodeGetVolumeStatsReq func (m *NodeGetVolumeStatsRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetVolumeStatsRequest) ProtoMessage() {} func (*NodeGetVolumeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{46} + return fileDescriptor_csi_3006fd5468ec2d28, []int{45} } func (m *NodeGetVolumeStatsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetVolumeStatsRequest.Unmarshal(m, b) @@ -3768,7 +3675,7 @@ func (m *NodeGetVolumeStatsResponse) Reset() { *m = NodeGetVolumeStatsRe func (m *NodeGetVolumeStatsResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetVolumeStatsResponse) ProtoMessage() {} func (*NodeGetVolumeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{47} + return fileDescriptor_csi_3006fd5468ec2d28, []int{46} } func (m *NodeGetVolumeStatsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetVolumeStatsResponse.Unmarshal(m, b) @@ -3816,7 +3723,7 @@ func (m *VolumeUsage) Reset() { *m = VolumeUsage{} } func (m *VolumeUsage) String() string { return proto.CompactTextString(m) } func (*VolumeUsage) ProtoMessage() {} func (*VolumeUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{48} + return fileDescriptor_csi_3006fd5468ec2d28, []int{47} } func (m *VolumeUsage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeUsage.Unmarshal(m, b) @@ -3874,7 +3781,7 @@ func (m *NodeGetCapabilitiesRequest) Reset() { *m = NodeGetCapabilitiesR func (m *NodeGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesRequest) ProtoMessage() {} func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{49} + return fileDescriptor_csi_3006fd5468ec2d28, []int{48} } func (m *NodeGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetCapabilitiesRequest.Unmarshal(m, b) @@ -3907,7 +3814,7 @@ func (m *NodeGetCapabilitiesResponse) Reset() { *m = NodeGetCapabilities func (m *NodeGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesResponse) ProtoMessage() {} func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{50} + return fileDescriptor_csi_3006fd5468ec2d28, []int{49} } func (m *NodeGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetCapabilitiesResponse.Unmarshal(m, b) @@ -3948,7 +3855,7 @@ func (m *NodeServiceCapability) Reset() { *m = NodeServiceCapability{} } func (m *NodeServiceCapability) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability) ProtoMessage() {} func (*NodeServiceCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{51} + return fileDescriptor_csi_3006fd5468ec2d28, []int{50} } func (m *NodeServiceCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeServiceCapability.Unmarshal(m, b) @@ -4058,7 +3965,7 @@ func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability func (m *NodeServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability_RPC) ProtoMessage() {} func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{51, 0} + return fileDescriptor_csi_3006fd5468ec2d28, []int{50, 0} } func (m *NodeServiceCapability_RPC) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeServiceCapability_RPC.Unmarshal(m, b) @@ -4095,7 +4002,7 @@ func (m *NodeGetInfoRequest) Reset() { *m = NodeGetInfoRequest{} } func (m *NodeGetInfoRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetInfoRequest) ProtoMessage() {} func (*NodeGetInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{52} + return fileDescriptor_csi_3006fd5468ec2d28, []int{51} } func (m *NodeGetInfoRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetInfoRequest.Unmarshal(m, b) @@ -4153,7 +4060,7 @@ func (m *NodeGetInfoResponse) Reset() { *m = NodeGetInfoResponse{} } func (m *NodeGetInfoResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetInfoResponse) ProtoMessage() {} func (*NodeGetInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_csi_dfcdaff0469af0d4, []int{53} + return fileDescriptor_csi_3006fd5468ec2d28, []int{52} } func (m *NodeGetInfoResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NodeGetInfoResponse.Unmarshal(m, b) @@ -4255,7 +4162,6 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "csi.v0.CreateSnapshotRequest.ParametersEntry") proto.RegisterType((*CreateSnapshotResponse)(nil), "csi.v0.CreateSnapshotResponse") proto.RegisterType((*Snapshot)(nil), "csi.v0.Snapshot") - proto.RegisterType((*SnapshotStatus)(nil), "csi.v0.SnapshotStatus") proto.RegisterType((*DeleteSnapshotRequest)(nil), "csi.v0.DeleteSnapshotRequest") proto.RegisterMapType((map[string]string)(nil), "csi.v0.DeleteSnapshotRequest.DeleteSnapshotSecretsEntry") proto.RegisterType((*DeleteSnapshotResponse)(nil), "csi.v0.DeleteSnapshotResponse") @@ -4288,7 +4194,6 @@ func init() { proto.RegisterEnum("csi.v0.PluginCapability_Service_Type", PluginCapability_Service_Type_name, PluginCapability_Service_Type_value) proto.RegisterEnum("csi.v0.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) proto.RegisterEnum("csi.v0.ControllerServiceCapability_RPC_Type", ControllerServiceCapability_RPC_Type_name, ControllerServiceCapability_RPC_Type_value) - proto.RegisterEnum("csi.v0.SnapshotStatus_Type", SnapshotStatus_Type_name, SnapshotStatus_Type_value) proto.RegisterEnum("csi.v0.VolumeUsage_Unit", VolumeUsage_Unit_name, VolumeUsage_Unit_value) proto.RegisterEnum("csi.v0.NodeServiceCapability_RPC_Type", NodeServiceCapability_RPC_Type_name, NodeServiceCapability_RPC_Type_value) } @@ -5088,210 +4993,206 @@ var _Node_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("github.com/container-storage-interface/spec/csi.proto", fileDescriptor_csi_dfcdaff0469af0d4) + proto.RegisterFile("github.com/container-storage-interface/spec/csi.proto", fileDescriptor_csi_3006fd5468ec2d28) } -var fileDescriptor_csi_dfcdaff0469af0d4 = []byte{ - // 3208 bytes of a gzipped FileDescriptorProto +var fileDescriptor_csi_3006fd5468ec2d28 = []byte{ + // 3149 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3a, 0xcd, 0x6f, 0xe3, 0xc6, - 0xf5, 0xa6, 0x3e, 0xfc, 0xf1, 0xfc, 0x11, 0xed, 0xf8, 0x4b, 0x4b, 0x7f, 0xac, 0x97, 0x9b, 0x4d, - 0x36, 0xfb, 0xcb, 0xca, 0xf9, 0xb9, 0x49, 0x90, 0x8f, 0x4d, 0x5a, 0x59, 0x56, 0x6c, 0x65, 0x65, - 0xd9, 0xa1, 0x64, 0x07, 0xde, 0x36, 0x60, 0x68, 0x69, 0xac, 0x65, 0x23, 0x93, 0x0a, 0x49, 0x39, - 0xeb, 0xde, 0xda, 0x02, 0x45, 0xd1, 0x5b, 0x4f, 0x3d, 0x06, 0xc8, 0xad, 0x45, 0x83, 0x22, 0x45, - 0x2f, 0x45, 0x81, 0xde, 0x7a, 0xed, 0xb9, 0xa7, 0xb6, 0x7f, 0x40, 0x7b, 0x29, 0x72, 0x6a, 0x51, - 0xa0, 0x20, 0x67, 0x48, 0x71, 0x46, 0x43, 0x5a, 0xca, 0x2e, 0x82, 0x9c, 0x24, 0xbe, 0xaf, 0x79, - 0xf3, 0xe6, 0xbd, 0x37, 0xef, 0x3d, 0x12, 0x5e, 0x69, 0x1b, 0xee, 0xa3, 0xde, 0x69, 0xa1, 0x69, - 0x9d, 0x6f, 0x36, 0x2d, 0xd3, 0xd5, 0x0d, 0x13, 0xdb, 0xf7, 0x1c, 0xd7, 0xb2, 0xf5, 0x36, 0xbe, - 0x67, 0x98, 0x2e, 0xb6, 0xcf, 0xf4, 0x26, 0xde, 0x74, 0xba, 0xb8, 0xb9, 0xd9, 0x74, 0x8c, 0x42, - 0xd7, 0xb6, 0x5c, 0x0b, 0x8d, 0x7b, 0x7f, 0x2f, 0x5e, 0x92, 0xd7, 0xdb, 0x96, 0xd5, 0xee, 0xe0, - 0x4d, 0x1f, 0x7a, 0xda, 0x3b, 0xdb, 0xfc, 0xc4, 0xd6, 0xbb, 0x5d, 0x6c, 0x3b, 0x84, 0x4e, 0x59, - 0x82, 0x85, 0x5d, 0xec, 0x1e, 0x76, 0x7a, 0x6d, 0xc3, 0xac, 0x98, 0x67, 0x96, 0x8a, 0x3f, 0xee, - 0x61, 0xc7, 0x55, 0xfe, 0x22, 0xc1, 0x22, 0x87, 0x70, 0xba, 0x96, 0xe9, 0x60, 0x84, 0x20, 0x63, - 0xea, 0xe7, 0x38, 0x2f, 0x6d, 0x48, 0x77, 0xa6, 0x54, 0xff, 0x3f, 0xba, 0x0d, 0x73, 0x17, 0xd8, - 0x6c, 0x59, 0xb6, 0x76, 0x81, 0x6d, 0xc7, 0xb0, 0xcc, 0x7c, 0xca, 0xc7, 0xce, 0x12, 0xe8, 0x31, - 0x01, 0xa2, 0x5d, 0x98, 0x3c, 0xd7, 0x4d, 0xe3, 0x0c, 0x3b, 0x6e, 0x3e, 0xbd, 0x91, 0xbe, 0x33, - 0xbd, 0xf5, 0x7f, 0x05, 0xa2, 0x67, 0x41, 0xb8, 0x56, 0x61, 0x9f, 0x52, 0x97, 0x4d, 0xd7, 0xbe, - 0x54, 0x43, 0x66, 0xf9, 0x4d, 0x98, 0x65, 0x50, 0x28, 0x07, 0xe9, 0x8f, 0xf0, 0x25, 0xd5, 0xc9, - 0xfb, 0x8b, 0x16, 0x20, 0x7b, 0xa1, 0x77, 0x7a, 0x98, 0x6a, 0x42, 0x1e, 0xde, 0x48, 0xbd, 0x26, - 0x29, 0xeb, 0xb0, 0x1a, 0xae, 0x56, 0xd2, 0xbb, 0xfa, 0xa9, 0xd1, 0x31, 0x5c, 0x03, 0x3b, 0xc1, - 0xd6, 0x3f, 0x80, 0xb5, 0x18, 0x3c, 0xb5, 0xc0, 0x7d, 0x98, 0x69, 0x46, 0xe0, 0xf9, 0x94, 0xbf, - 0x95, 0x7c, 0xb0, 0x15, 0x8e, 0xf3, 0x52, 0x65, 0xa8, 0x95, 0x7f, 0x49, 0x90, 0xe3, 0x49, 0xd0, - 0x7d, 0x98, 0x70, 0xb0, 0x7d, 0x61, 0x34, 0x89, 0x5d, 0xa7, 0xb7, 0x36, 0xe2, 0xa4, 0x15, 0xea, - 0x84, 0x6e, 0x6f, 0x4c, 0x0d, 0x58, 0xe4, 0x5f, 0x48, 0x30, 0x41, 0xc1, 0xe8, 0x75, 0xc8, 0xb8, - 0x97, 0x5d, 0x22, 0x66, 0x6e, 0xeb, 0xf6, 0x55, 0x62, 0x0a, 0x8d, 0xcb, 0x2e, 0x56, 0x7d, 0x16, - 0xe5, 0x3d, 0xc8, 0x78, 0x4f, 0x68, 0x1a, 0x26, 0x8e, 0x6a, 0x0f, 0x6a, 0x07, 0xef, 0xd7, 0x72, - 0x63, 0x68, 0x09, 0x50, 0xe9, 0xa0, 0xd6, 0x50, 0x0f, 0xaa, 0xd5, 0xb2, 0xaa, 0xd5, 0xcb, 0xea, - 0x71, 0xa5, 0x54, 0xce, 0x49, 0xe8, 0x59, 0xd8, 0x38, 0x3e, 0xa8, 0x1e, 0xed, 0x97, 0xb5, 0x62, - 0xa9, 0x54, 0xae, 0xd7, 0x2b, 0xdb, 0x95, 0x6a, 0xa5, 0x71, 0xa2, 0x95, 0x0e, 0x6a, 0xf5, 0x86, - 0x5a, 0xac, 0xd4, 0x1a, 0xf5, 0x5c, 0x6a, 0x7b, 0x9c, 0x68, 0xa3, 0xcc, 0xc1, 0xcc, 0xa1, 0x6d, - 0x9d, 0xe2, 0xc0, 0xc6, 0x45, 0x98, 0xa5, 0xcf, 0xd4, 0xa6, 0x2f, 0x41, 0xd6, 0xc6, 0x7a, 0xeb, - 0x92, 0x6e, 0x5f, 0x2e, 0x10, 0xbf, 0x2d, 0x04, 0x7e, 0x5b, 0xd8, 0xb6, 0xac, 0xce, 0xb1, 0x77, - 0x86, 0x2a, 0x21, 0x54, 0x3e, 0xcf, 0xc2, 0x7c, 0xc9, 0xc6, 0xba, 0x8b, 0x8f, 0xad, 0x4e, 0xef, - 0x3c, 0x10, 0x2d, 0xf4, 0xcf, 0xfb, 0x30, 0xe7, 0x9d, 0x41, 0xd3, 0x70, 0x2f, 0x35, 0x5b, 0x37, - 0xdb, 0xc4, 0x2b, 0xa6, 0xb7, 0x16, 0x03, 0xf3, 0x94, 0x28, 0x56, 0xf5, 0x90, 0xea, 0x6c, 0x33, - 0xfa, 0x88, 0x2a, 0x30, 0x7f, 0xe1, 0x2f, 0xa1, 0x31, 0xc7, 0x9e, 0x66, 0x8f, 0x9d, 0x68, 0x11, - 0x39, 0x76, 0x74, 0xc1, 0x42, 0x0c, 0xec, 0xa0, 0x07, 0x00, 0x5d, 0xdd, 0xd6, 0xcf, 0xb1, 0x8b, - 0x6d, 0x27, 0x9f, 0x61, 0x63, 0x40, 0xb0, 0x9b, 0xc2, 0x61, 0x48, 0x4d, 0x62, 0x20, 0xc2, 0x8e, - 0x5c, 0xb8, 0xee, 0x65, 0x04, 0xdb, 0xea, 0x74, 0xb0, 0xad, 0x35, 0x7d, 0x6e, 0xcd, 0xc1, 0x4d, - 0x1b, 0xbb, 0x4e, 0x3e, 0xeb, 0xcb, 0x7e, 0x2d, 0x49, 0x76, 0x29, 0x64, 0x26, 0xd8, 0x3a, 0x61, - 0x25, 0x0b, 0x2d, 0x37, 0xc5, 0x58, 0x74, 0x00, 0x8b, 0x81, 0x35, 0x2c, 0xd3, 0xc5, 0xa6, 0xab, - 0x39, 0x56, 0xcf, 0x6e, 0xe2, 0xfc, 0xb8, 0x6f, 0xd2, 0x15, 0xce, 0x1e, 0x84, 0xa6, 0xee, 0x93, - 0xa8, 0xd4, 0x8e, 0x0c, 0x10, 0x3d, 0x04, 0x59, 0x6f, 0x36, 0xb1, 0xe3, 0x18, 0xc4, 0x70, 0x9a, - 0x8d, 0x3f, 0xee, 0x19, 0x36, 0x3e, 0xc7, 0xa6, 0xeb, 0xe4, 0x27, 0x58, 0xa9, 0x0d, 0xab, 0x6b, - 0x75, 0xac, 0xf6, 0xa5, 0xda, 0xa7, 0x51, 0xaf, 0x33, 0xec, 0x11, 0x8c, 0x23, 0xbf, 0x05, 0xcf, - 0x70, 0x16, 0x1c, 0x25, 0x55, 0xc8, 0xef, 0xc2, 0x6a, 0x92, 0x91, 0x46, 0x4a, 0x3b, 0xff, 0x94, - 0x60, 0x5e, 0x60, 0x13, 0xb4, 0x07, 0x93, 0x8e, 0xa9, 0x77, 0x9d, 0x47, 0x96, 0x4b, 0x9d, 0xff, - 0x6e, 0x82, 0x09, 0x0b, 0x75, 0x4a, 0x4b, 0x1e, 0xf7, 0xc6, 0xd4, 0x90, 0x1b, 0x6d, 0xc3, 0x38, - 0xb1, 0x2f, 0xf5, 0xee, 0x3b, 0x49, 0x72, 0x08, 0x2c, 0x94, 0x42, 0x39, 0xe5, 0x0d, 0x98, 0x63, - 0x57, 0x40, 0x73, 0x90, 0x32, 0x5a, 0x74, 0x8b, 0x29, 0xa3, 0x25, 0xaf, 0xc3, 0x4c, 0x94, 0x97, - 0xc7, 0x87, 0x21, 0xff, 0x36, 0x2c, 0xb0, 0x4e, 0x47, 0x23, 0xfd, 0xb9, 0x50, 0x4b, 0xb2, 0xdb, - 0x39, 0x56, 0xcb, 0x40, 0x13, 0xe5, 0x57, 0x19, 0xc8, 0xf1, 0x31, 0x85, 0xee, 0x43, 0xf6, 0xb4, - 0x63, 0x35, 0x3f, 0xa2, 0xbc, 0xcf, 0xc6, 0x05, 0x5f, 0x61, 0xdb, 0xa3, 0x22, 0xd0, 0xbd, 0x31, - 0x95, 0x30, 0x79, 0xdc, 0xe7, 0x56, 0xcf, 0x74, 0xa9, 0x7d, 0xe2, 0xb9, 0xf7, 0x3d, 0xaa, 0x3e, - 0xb7, 0xcf, 0x84, 0x76, 0x60, 0x9a, 0x38, 0x9a, 0x76, 0x6e, 0xb5, 0x70, 0x3e, 0xed, 0xcb, 0xb8, - 0x15, 0x2b, 0xa3, 0xe8, 0xd3, 0xee, 0x5b, 0x2d, 0xac, 0x82, 0x1e, 0xfe, 0x97, 0x67, 0x61, 0x3a, - 0xa2, 0x9b, 0xbc, 0x0b, 0xd3, 0x91, 0xc5, 0xd0, 0x32, 0x4c, 0x9c, 0x39, 0x5a, 0x98, 0xc0, 0xa7, - 0xd4, 0xf1, 0x33, 0xc7, 0xcf, 0xc9, 0x37, 0x60, 0xda, 0xd7, 0x42, 0x3b, 0xeb, 0xe8, 0x6d, 0x72, - 0xe5, 0x4c, 0xa9, 0xe0, 0x83, 0xde, 0xf1, 0x20, 0xf2, 0x3f, 0x24, 0x80, 0xfe, 0x92, 0xe8, 0x3e, - 0x64, 0x7c, 0x2d, 0xc9, 0x35, 0x70, 0x67, 0x08, 0x2d, 0x0b, 0xbe, 0xaa, 0x3e, 0x97, 0xf2, 0xa9, - 0x04, 0x19, 0x5f, 0x0c, 0x7f, 0x15, 0xd4, 0x2b, 0xb5, 0xdd, 0x6a, 0x59, 0xab, 0x1d, 0xec, 0x94, - 0xb5, 0xf7, 0xd5, 0x4a, 0xa3, 0xac, 0xe6, 0x24, 0xb4, 0x02, 0xcb, 0x51, 0xb8, 0x5a, 0x2e, 0xee, - 0x94, 0x55, 0xed, 0xa0, 0x56, 0x3d, 0xc9, 0xa5, 0x90, 0x0c, 0x4b, 0xfb, 0x47, 0xd5, 0x46, 0x65, - 0x10, 0x97, 0x46, 0xab, 0x90, 0x8f, 0xe0, 0xa8, 0x0c, 0x2a, 0x36, 0xe3, 0x89, 0x8d, 0x60, 0xc9, - 0x5f, 0x8a, 0xcc, 0x6e, 0xcf, 0x86, 0x87, 0xe1, 0x3b, 0xdb, 0xfb, 0x30, 0xcb, 0xa4, 0x70, 0xaf, - 0x22, 0xa1, 0x69, 0xa4, 0xa5, 0x9d, 0x5e, 0xba, 0xd8, 0xf1, 0x2d, 0x91, 0x56, 0x67, 0x03, 0xe8, - 0xb6, 0x07, 0xf4, 0xcc, 0xda, 0x31, 0xce, 0x0d, 0x97, 0xd2, 0xa4, 0x7c, 0x1a, 0xf0, 0x41, 0x3e, - 0x81, 0xf2, 0xa7, 0x14, 0x8c, 0xd3, 0xb3, 0xb9, 0x1d, 0xb9, 0x44, 0x18, 0x91, 0x01, 0x94, 0x88, - 0x24, 0xf1, 0x90, 0x0a, 0xe2, 0x01, 0xbd, 0x0d, 0xa0, 0xbb, 0xae, 0x6d, 0x9c, 0xf6, 0xdc, 0xf0, - 0xd2, 0x58, 0x67, 0xcf, 0xa3, 0x50, 0x0c, 0x09, 0x68, 0x96, 0xef, 0x73, 0xa0, 0x6d, 0x98, 0xe3, - 0x12, 0x6d, 0xe6, 0xea, 0x44, 0x3b, 0xdb, 0x64, 0x72, 0x4c, 0x11, 0xe6, 0x83, 0x1c, 0xd9, 0xc1, - 0x9a, 0x4b, 0x73, 0x28, 0xbd, 0x23, 0x72, 0x03, 0xb9, 0x15, 0xf5, 0x89, 0x03, 0x98, 0x97, 0x49, - 0x39, 0x2d, 0x47, 0xca, 0x7e, 0x3d, 0x98, 0x17, 0xa4, 0x6e, 0x54, 0x80, 0x29, 0xff, 0x40, 0x1c, - 0xc3, 0xf5, 0x7c, 0x55, 0xac, 0x4e, 0x9f, 0xc4, 0xa3, 0xef, 0xda, 0xf8, 0x0c, 0xdb, 0x36, 0x6e, - 0xd1, 0xba, 0x4b, 0x40, 0x1f, 0x92, 0x28, 0x3f, 0x96, 0x60, 0x32, 0x80, 0xa3, 0x37, 0x60, 0xd2, - 0xc1, 0x6d, 0x72, 0xad, 0x48, 0xec, 0x39, 0x04, 0x34, 0x85, 0x3a, 0x25, 0xa0, 0x15, 0x67, 0x40, - 0xef, 0x55, 0x9c, 0x0c, 0x6a, 0xa4, 0xcd, 0x7f, 0x29, 0xc1, 0xfc, 0x0e, 0xee, 0x60, 0xbe, 0x54, - 0x59, 0x81, 0x29, 0x7a, 0x95, 0x86, 0x19, 0x74, 0x92, 0x00, 0x2a, 0x2d, 0xee, 0x76, 0x6f, 0xf9, - 0xec, 0xe1, 0xed, 0x9e, 0x62, 0x6f, 0x77, 0x81, 0xf0, 0xc8, 0xed, 0x4e, 0xb0, 0x71, 0xb7, 0x3b, - 0x83, 0x65, 0x6f, 0xbc, 0x41, 0xc6, 0x91, 0xb6, 0xbd, 0x04, 0x0b, 0xac, 0x62, 0xe4, 0x06, 0x50, - 0xfe, 0x90, 0x81, 0xf5, 0xfe, 0x22, 0x87, 0xbd, 0xd3, 0x8e, 0xe1, 0x3c, 0x1a, 0xc1, 0x32, 0xcb, - 0x30, 0x61, 0x5a, 0x2d, 0x1f, 0x45, 0xd6, 0x1c, 0xf7, 0x1e, 0x2b, 0x2d, 0x54, 0x86, 0x6b, 0x7c, - 0xa1, 0x76, 0x49, 0xf3, 0x74, 0x7c, 0x99, 0x96, 0xbb, 0xe0, 0x2f, 0x19, 0x19, 0x26, 0xbd, 0x12, - 0xd3, 0x32, 0x3b, 0x97, 0x7e, 0xac, 0x4d, 0xaa, 0xe1, 0x33, 0xfa, 0x91, 0x04, 0x72, 0xe4, 0x58, - 0xba, 0x44, 0x79, 0xae, 0xea, 0xda, 0x09, 0xab, 0xae, 0xc4, 0x5d, 0x0e, 0xa2, 0x99, 0x33, 0xca, - 0x37, 0x63, 0xd0, 0xc8, 0x08, 0xf7, 0x19, 0xc9, 0x2c, 0xe3, 0xfe, 0xd2, 0xf7, 0x87, 0x5c, 0x9a, - 0x3c, 0xf1, 0x79, 0x87, 0xda, 0xa2, 0x0f, 0x96, 0x1f, 0xc0, 0x5a, 0xa2, 0x96, 0x23, 0x95, 0x53, - 0x25, 0x58, 0x14, 0xae, 0x3b, 0x92, 0x57, 0xfd, 0x51, 0x82, 0x1b, 0xb1, 0x9b, 0xa3, 0x35, 0xc6, - 0x77, 0x61, 0x26, 0x38, 0x19, 0xc3, 0x3c, 0xb3, 0x68, 0xb4, 0xbf, 0x76, 0xa5, 0x6d, 0x68, 0xdb, - 0x49, 0xa1, 0x5e, 0x2b, 0x4a, 0xec, 0x32, 0xdd, 0xed, 0x43, 0xe4, 0xb7, 0x21, 0xc7, 0x13, 0x8c, - 0xb4, 0x81, 0xdf, 0xa5, 0x60, 0xa3, 0xaf, 0xc1, 0x91, 0xd9, 0x7d, 0x7a, 0x01, 0xf0, 0x33, 0x09, - 0x56, 0x23, 0xde, 0xd9, 0x33, 0x79, 0xff, 0x24, 0xd7, 0xcf, 0xde, 0xa0, 0x21, 0xc4, 0x6a, 0x88, - 0x08, 0x18, 0x1f, 0x8d, 0xc4, 0x02, 0x4f, 0x20, 0xef, 0x47, 0xcf, 0x49, 0xc8, 0x3e, 0x92, 0xd9, - 0x6e, 0xc1, 0xcd, 0x04, 0x75, 0x69, 0x6a, 0xf9, 0x22, 0x0b, 0x37, 0x8f, 0xf5, 0x8e, 0xd1, 0x0a, - 0xeb, 0x4e, 0x41, 0x87, 0x9f, 0x6c, 0xdc, 0x8e, 0x28, 0xb8, 0x48, 0xbe, 0xfd, 0x76, 0x98, 0x44, - 0xae, 0x5a, 0x62, 0xd8, 0xf8, 0x7a, 0x9a, 0xbd, 0xe5, 0x89, 0xa0, 0xb7, 0x7c, 0x7d, 0x78, 0x8d, - 0x93, 0x3a, 0xcd, 0x9f, 0x4a, 0xb0, 0x12, 0xf1, 0xab, 0x0b, 0x2a, 0x8c, 0x4b, 0x7b, 0x7b, 0xc3, - 0x2f, 0xd6, 0x3f, 0xc9, 0x80, 0x96, 0x71, 0xab, 0xc8, 0xcd, 0xc7, 0xe1, 0x9f, 0x4a, 0x0e, 0x79, - 0xd2, 0xb6, 0xb0, 0x1a, 0xbd, 0xbf, 0x44, 0x1b, 0x18, 0xc9, 0xb1, 0xff, 0x9c, 0x01, 0x25, 0xc9, - 0x62, 0x34, 0xa7, 0xa9, 0x30, 0xd5, 0xb4, 0xcc, 0x33, 0xc3, 0x3e, 0xc7, 0x2d, 0xda, 0xfe, 0xbc, - 0x3c, 0x8c, 0xc1, 0x69, 0x4e, 0x2b, 0x05, 0xbc, 0x6a, 0x5f, 0x0c, 0xca, 0xc3, 0xc4, 0x39, 0x76, - 0x1c, 0xbd, 0x1d, 0xa8, 0x15, 0x3c, 0xca, 0xbf, 0x4f, 0xc3, 0x54, 0xc8, 0x82, 0x3e, 0x11, 0xc5, - 0x04, 0x49, 0xaa, 0xef, 0x7e, 0x15, 0x1d, 0x9e, 0x34, 0x3c, 0x52, 0x5f, 0x21, 0x3c, 0x5a, 0x4c, - 0x78, 0xa4, 0xd9, 0x8b, 0x7a, 0x24, 0xe5, 0x13, 0x22, 0xe5, 0x9b, 0xe0, 0x9e, 0xca, 0xf7, 0x00, - 0x55, 0x0d, 0x87, 0xb6, 0x94, 0x61, 0xd2, 0xf3, 0x3a, 0x48, 0xfd, 0xb1, 0x86, 0x4d, 0xd7, 0x36, - 0x68, 0xef, 0x92, 0x55, 0xe1, 0x5c, 0x7f, 0x5c, 0x26, 0x10, 0xaf, 0xbf, 0x71, 0x5c, 0xdd, 0x76, - 0x0d, 0xb3, 0xad, 0xb9, 0xd6, 0x47, 0x38, 0x1c, 0xe2, 0x06, 0xd0, 0x86, 0x07, 0x54, 0x3e, 0x93, - 0x60, 0x9e, 0x11, 0x4f, 0xfd, 0xf3, 0x4d, 0x98, 0xe8, 0xcb, 0xf6, 0x8c, 0x7b, 0x33, 0x30, 0xae, - 0x80, 0xba, 0x40, 0x2c, 0x17, 0x70, 0xa0, 0x35, 0x00, 0x13, 0x3f, 0x76, 0x99, 0x75, 0xa7, 0x3c, - 0x88, 0xbf, 0xa6, 0xbc, 0x09, 0x59, 0x62, 0x86, 0x61, 0x87, 0x07, 0x9f, 0xa7, 0x00, 0xed, 0x62, - 0x37, 0xec, 0x09, 0xa9, 0x0d, 0x62, 0xdc, 0x49, 0xfa, 0x0a, 0xee, 0xf4, 0x2e, 0xe3, 0x4e, 0xc4, - 0x21, 0xef, 0x46, 0xa6, 0xd9, 0xdc, 0xd2, 0x89, 0xe9, 0x35, 0xa6, 0x3d, 0x23, 0x95, 0xeb, 0xd0, - 0xed, 0xd9, 0x93, 0xb8, 0xcc, 0x0e, 0xcc, 0x33, 0x3a, 0xd3, 0x33, 0xbd, 0x07, 0x48, 0xbf, 0xd0, - 0x8d, 0x8e, 0xee, 0xe9, 0x15, 0xb4, 0xb9, 0xb4, 0xed, 0xbd, 0x16, 0x62, 0x02, 0x36, 0x45, 0x89, - 0x16, 0x36, 0x54, 0x1e, 0x3f, 0x5d, 0xef, 0x44, 0xaf, 0xf1, 0x01, 0x1a, 0xba, 0xee, 0xae, 0x70, - 0xc2, 0x7e, 0x6b, 0xb0, 0x6c, 0xa1, 0x53, 0xec, 0xd8, 0x61, 0xfb, 0xdf, 0x53, 0xb0, 0x92, 0x40, - 0x8d, 0xde, 0x84, 0xb4, 0xdd, 0x6d, 0x52, 0x67, 0x7a, 0x7e, 0x08, 0xf9, 0x05, 0xf5, 0xb0, 0xb4, - 0x37, 0xa6, 0x7a, 0x5c, 0xf2, 0x7f, 0x24, 0x48, 0xab, 0x87, 0x25, 0xf4, 0x1d, 0x66, 0xe4, 0xfe, - 0xe2, 0x90, 0x52, 0xa2, 0x93, 0xf7, 0x2f, 0x24, 0xd1, 0xe8, 0x3d, 0x0f, 0x0b, 0x25, 0xb5, 0x5c, - 0x6c, 0x94, 0xb5, 0x9d, 0x72, 0xb5, 0xdc, 0x28, 0x6b, 0x64, 0xe0, 0x9e, 0x93, 0xd0, 0x2a, 0xe4, - 0x0f, 0x8f, 0xb6, 0xab, 0x95, 0xfa, 0x9e, 0x76, 0x54, 0x0b, 0xfe, 0x51, 0x6c, 0x0a, 0xe5, 0x60, - 0xa6, 0x5a, 0xa9, 0x37, 0x28, 0xa0, 0x9e, 0x4b, 0x7b, 0x90, 0xdd, 0x72, 0x43, 0x2b, 0x15, 0x0f, - 0x8b, 0xa5, 0x4a, 0xe3, 0x24, 0x97, 0x41, 0x32, 0x2c, 0xb1, 0xb2, 0xeb, 0xb5, 0xe2, 0x61, 0x7d, - 0xef, 0xa0, 0x91, 0xcb, 0x22, 0x04, 0x73, 0x3e, 0x7f, 0x00, 0xaa, 0xe7, 0xc6, 0x3d, 0x09, 0xa5, - 0xea, 0x41, 0x2d, 0xd4, 0x61, 0x22, 0x9c, 0xf3, 0x7d, 0x9a, 0x86, 0x45, 0x3a, 0x1a, 0xa5, 0x83, - 0xc3, 0x20, 0xda, 0xee, 0x40, 0x8e, 0x4c, 0x2c, 0x34, 0xbe, 0xda, 0x9a, 0x23, 0xf0, 0xe3, 0xa0, - 0xe6, 0x0a, 0x66, 0xf6, 0xa9, 0xc8, 0xcc, 0xbe, 0x0b, 0xcb, 0xc1, 0x48, 0x9b, 0xca, 0xe5, 0xaa, - 0x58, 0x6e, 0xb6, 0xcd, 0xad, 0xce, 0x41, 0x99, 0xf2, 0x62, 0xb1, 0x29, 0xc2, 0xa1, 0x7d, 0x41, - 0x01, 0x75, 0x2f, 0x79, 0x91, 0xa4, 0xab, 0x60, 0x0f, 0xe4, 0x78, 0x1d, 0xbe, 0xce, 0xfb, 0xe0, - 0x1d, 0x58, 0xe2, 0xb5, 0xa7, 0x71, 0xf6, 0xe2, 0xc0, 0xec, 0x39, 0xcc, 0x36, 0x21, 0x6d, 0x48, - 0xa1, 0xfc, 0x56, 0x82, 0xc9, 0x00, 0xec, 0x65, 0x6c, 0xc7, 0xf8, 0x01, 0x66, 0x26, 0x61, 0x53, - 0x1e, 0x44, 0x3c, 0x05, 0x13, 0xf9, 0x42, 0x5a, 0xe8, 0x0b, 0x6b, 0x00, 0xe4, 0x78, 0x5a, 0x9a, - 0xee, 0xfa, 0xfd, 0x77, 0x5a, 0x9d, 0xa2, 0x90, 0xa2, 0x8b, 0x0a, 0x30, 0xee, 0xb8, 0xba, 0xdb, - 0xf3, 0x8a, 0x4e, 0x4f, 0xe1, 0x25, 0x5e, 0xe1, 0xba, 0x8f, 0x55, 0x29, 0x95, 0xf2, 0xa9, 0x14, - 0x99, 0x68, 0xfb, 0x20, 0xb4, 0xc9, 0xc4, 0xeb, 0x8a, 0x58, 0x40, 0x24, 0x3c, 0xbd, 0x32, 0xa9, - 0x85, 0x5d, 0xdd, 0xe8, 0x38, 0x41, 0x99, 0x44, 0x1f, 0x95, 0x6d, 0x51, 0xdc, 0x4e, 0x41, 0x56, - 0x2d, 0x17, 0x77, 0x4e, 0x72, 0x12, 0x9a, 0x85, 0xa9, 0xa3, 0xc3, 0xea, 0x41, 0x71, 0xa7, 0x52, - 0xdb, 0xcd, 0xa5, 0xd0, 0x3c, 0x3c, 0x53, 0x56, 0xd5, 0x03, 0x55, 0xeb, 0x03, 0xd3, 0xca, 0x97, - 0x12, 0x2c, 0xd2, 0x49, 0x0b, 0x17, 0x40, 0x37, 0x60, 0x3a, 0xf4, 0xfd, 0x30, 0x76, 0x20, 0x00, - 0x55, 0x5a, 0x5e, 0x8c, 0x04, 0x83, 0x21, 0x3e, 0x46, 0x84, 0x13, 0x22, 0xde, 0x7d, 0x59, 0x28, - 0x1b, 0x23, 0x2d, 0x11, 0xce, 0x73, 0xea, 0x78, 0xa6, 0x91, 0xbc, 0x32, 0x0f, 0x4b, 0xbc, 0x52, - 0xb4, 0x89, 0xfb, 0xa5, 0x04, 0x0b, 0x5e, 0xcd, 0x10, 0x20, 0x9e, 0x76, 0x09, 0x33, 0x82, 0x33, - 0x72, 0x27, 0x90, 0xe1, 0x4f, 0x40, 0xf9, 0xb5, 0x04, 0x8b, 0x9c, 0xae, 0x34, 0xb6, 0xde, 0xe2, - 0xeb, 0xa1, 0x5b, 0xd1, 0x7a, 0x68, 0x80, 0x7e, 0xc4, 0x8a, 0xe8, 0x95, 0xa0, 0x22, 0x1a, 0x2d, - 0x84, 0x7f, 0x9e, 0x85, 0xa5, 0x9a, 0xd5, 0xc2, 0x75, 0x57, 0x6f, 0x8f, 0x32, 0x8c, 0x54, 0xb9, - 0x81, 0x0a, 0xf1, 0xae, 0xcd, 0x60, 0x25, 0xb1, 0xc8, 0xe4, 0x39, 0x0a, 0x2a, 0xc0, 0xbc, 0xe3, - 0xea, 0x6d, 0xff, 0xac, 0x74, 0xbb, 0x8d, 0x5d, 0xad, 0xab, 0xbb, 0x8f, 0xe8, 0x41, 0x5c, 0xa3, - 0xa8, 0x86, 0x8f, 0x39, 0xd4, 0xdd, 0x47, 0xe2, 0xe9, 0x5e, 0x66, 0xe4, 0xe9, 0xde, 0x29, 0x20, - 0x7f, 0x78, 0xe2, 0x2d, 0xc0, 0x77, 0xb0, 0x2f, 0x5f, 0xb1, 0xa1, 0x10, 0xcc, 0x84, 0x4a, 0xce, - 0xe4, 0xc0, 0x48, 0x8f, 0x1f, 0xd0, 0x5d, 0xb5, 0xc4, 0xb0, 0x83, 0xb9, 0x27, 0x9c, 0x42, 0x79, - 0x8d, 0x8a, 0x70, 0x37, 0x5f, 0xff, 0x40, 0xef, 0x3a, 0x2c, 0x0f, 0xd8, 0x82, 0x66, 0x82, 0x36, - 0xe4, 0x3d, 0xd4, 0x91, 0xe9, 0x8c, 0xe8, 0xaf, 0x31, 0xbe, 0x95, 0x8a, 0xf1, 0x2d, 0x65, 0x05, - 0xae, 0x0b, 0x16, 0xa2, 0x5a, 0xfc, 0x35, 0x4b, 0xd4, 0x18, 0x7d, 0x52, 0xdd, 0x10, 0x86, 0xcd, - 0xff, 0x47, 0x5d, 0x40, 0x38, 0x9d, 0x7d, 0xba, 0x81, 0x73, 0x03, 0xa6, 0xa3, 0x74, 0x34, 0x89, - 0xb9, 0x57, 0x44, 0x56, 0xf6, 0x89, 0xe6, 0xe6, 0xe3, 0xdc, 0xdc, 0xfc, 0xfb, 0xb0, 0xe0, 0x47, - 0x1d, 0x3f, 0x90, 0x9c, 0x60, 0xaf, 0xa9, 0x58, 0x8b, 0x44, 0x10, 0x4c, 0xec, 0xf9, 0xb1, 0xcc, - 0x8d, 0xc7, 0x9b, 0xa2, 0xe8, 0x9b, 0xf4, 0x17, 0x7a, 0xf5, 0xca, 0x85, 0xbe, 0xae, 0xf8, 0x2b, - 0x13, 0xaf, 0xff, 0x46, 0x8c, 0xd4, 0xa9, 0xf7, 0x0b, 0x87, 0xe1, 0xca, 0x43, 0x90, 0x49, 0x68, - 0x8c, 0x3e, 0xa7, 0xe6, 0x1c, 0x2f, 0xc5, 0x3b, 0x9e, 0xb2, 0x06, 0x2b, 0x42, 0xd9, 0x74, 0xe9, - 0x13, 0xa2, 0xd7, 0x2e, 0xa6, 0xe3, 0x03, 0xaf, 0x32, 0x73, 0x86, 0x5d, 0x99, 0x22, 0xa3, 0x2b, - 0x13, 0x90, 0xbf, 0xf2, 0x2e, 0xd9, 0x15, 0x2f, 0x9a, 0xde, 0xdd, 0x2f, 0x40, 0xb6, 0xe7, 0x4f, - 0xc5, 0xc8, 0xcd, 0x3d, 0xcf, 0x06, 0xc1, 0x91, 0x87, 0x52, 0x09, 0x85, 0xf2, 0x1b, 0x09, 0xa6, - 0x23, 0x60, 0xb4, 0x0a, 0x53, 0x61, 0x63, 0x1c, 0x94, 0xc5, 0x21, 0xc0, 0x3b, 0x03, 0xd7, 0x72, - 0xf5, 0x0e, 0x7d, 0xd3, 0x4c, 0x1e, 0xbc, 0xf6, 0xa7, 0xe7, 0x60, 0x52, 0x83, 0xa4, 0x55, 0xff, - 0x3f, 0x7a, 0x11, 0x32, 0x3d, 0xd3, 0x20, 0x05, 0xf0, 0x1c, 0x1f, 0x86, 0xfe, 0x52, 0x85, 0x23, - 0xd3, 0x70, 0x55, 0x9f, 0x4a, 0xb9, 0x0b, 0x19, 0xef, 0x69, 0xa0, 0x0e, 0xdd, 0x3e, 0x69, 0x94, - 0xeb, 0x39, 0x09, 0x01, 0x8c, 0x57, 0x6a, 0x07, 0x3b, 0xe5, 0x7a, 0x2e, 0xa5, 0xac, 0x86, 0x5b, - 0x17, 0xf5, 0xe7, 0x1f, 0x92, 0x23, 0x89, 0xeb, 0xcc, 0x8b, 0x5c, 0x67, 0x4e, 0x0c, 0xb4, 0xc6, - 0x5c, 0x6a, 0x57, 0xf4, 0xe4, 0x7f, 0x93, 0xe8, 0xd5, 0x33, 0xd0, 0x8d, 0xbf, 0x12, 0xed, 0xc6, - 0x6f, 0x26, 0xca, 0x8c, 0xf6, 0xe1, 0x3f, 0xa1, 0x7d, 0xf8, 0x1b, 0x4c, 0x5d, 0xff, 0xdc, 0x95, - 0xfc, 0xd1, 0x0e, 0xbc, 0x14, 0xd3, 0x80, 0xd7, 0x1b, 0xc5, 0xdd, 0xb2, 0x76, 0x54, 0x23, 0xbf, - 0x61, 0x03, 0xbe, 0x00, 0x39, 0xaf, 0xa1, 0xa6, 0x5f, 0xc0, 0xd5, 0x1b, 0x45, 0xe6, 0x6b, 0xb7, - 0x05, 0x40, 0xd4, 0x86, 0xd1, 0x4f, 0x2a, 0x3f, 0x93, 0x60, 0x9e, 0x01, 0x53, 0x93, 0x46, 0xde, - 0xe6, 0x48, 0xcc, 0xdb, 0x9c, 0x4d, 0x58, 0xf0, 0xca, 0x5d, 0xe2, 0xb5, 0x8e, 0xd6, 0xc5, 0xb6, - 0xe6, 0x61, 0xa8, 0xef, 0x5c, 0x3b, 0xd7, 0x1f, 0xd3, 0xa9, 0xda, 0x21, 0xb6, 0x3d, 0xc1, 0x4f, - 0x61, 0x8e, 0xb4, 0xf5, 0x6f, 0x09, 0x26, 0x2b, 0x2d, 0x6c, 0xba, 0xde, 0x79, 0xd4, 0x60, 0x96, - 0xf9, 0x2e, 0x13, 0xad, 0xc6, 0x7c, 0xae, 0xe9, 0x6f, 0x50, 0x5e, 0x4b, 0xfc, 0x98, 0x53, 0x19, - 0x43, 0x67, 0x91, 0x6f, 0x4a, 0x99, 0x61, 0xda, 0xb3, 0x03, 0x9c, 0x02, 0xd7, 0x94, 0x6f, 0x5f, - 0x41, 0x15, 0xae, 0xf3, 0x2a, 0x64, 0xfd, 0xaf, 0x0b, 0xd1, 0x42, 0xf8, 0xf9, 0x63, 0xe4, 0xe3, - 0x43, 0x79, 0x91, 0x83, 0x06, 0x7c, 0x5b, 0xff, 0x9d, 0x00, 0xe8, 0x4f, 0x6d, 0xd0, 0x03, 0x98, - 0x89, 0x7e, 0xc1, 0x84, 0x56, 0x12, 0x3e, 0xa6, 0x93, 0x57, 0xc5, 0xc8, 0x50, 0xa7, 0x07, 0x30, - 0x13, 0x7d, 0x19, 0xde, 0x17, 0x26, 0x78, 0x77, 0xdf, 0x17, 0x26, 0x7c, 0x7f, 0x3e, 0x86, 0x3a, - 0xb0, 0x1c, 0xf3, 0x0e, 0x13, 0x3d, 0x37, 0xdc, 0x0b, 0x60, 0xf9, 0xf9, 0x21, 0x5f, 0x86, 0x2a, - 0x63, 0xc8, 0x86, 0xeb, 0xb1, 0x6f, 0xde, 0xd0, 0x9d, 0x61, 0xdf, 0x25, 0xca, 0x2f, 0x0c, 0x41, - 0x19, 0xae, 0xd9, 0x03, 0x39, 0x7e, 0x26, 0x8f, 0x5e, 0x18, 0xfa, 0x4d, 0x93, 0x7c, 0x77, 0xf8, - 0x11, 0xbf, 0x32, 0x86, 0xf6, 0x60, 0x3a, 0x32, 0xad, 0x46, 0xb2, 0x70, 0x84, 0x4d, 0x04, 0xaf, - 0x24, 0x8c, 0xb7, 0x89, 0xa4, 0xc8, 0x44, 0xb5, 0x2f, 0x69, 0x70, 0x34, 0xdc, 0x97, 0x24, 0x18, - 0xc1, 0xf2, 0xe6, 0xe7, 0xf2, 0xb2, 0xc8, 0xfc, 0xe2, 0xc4, 0x2e, 0x32, 0x7f, 0x4c, 0x92, 0x57, - 0xc6, 0xd0, 0x7b, 0x30, 0xc7, 0x8e, 0x8c, 0xd0, 0x5a, 0xe2, 0x20, 0x4c, 0x5e, 0x8f, 0x43, 0x47, - 0x45, 0xb2, 0xfd, 0x7e, 0x5f, 0xa4, 0x70, 0x38, 0xd1, 0x17, 0x19, 0x33, 0x26, 0x18, 0xf3, 0xf2, - 0x13, 0xd3, 0x4b, 0xf7, 0xf3, 0x93, 0x68, 0x7c, 0xd0, 0xcf, 0x4f, 0xc2, 0x06, 0x5c, 0x19, 0xdb, - 0xfa, 0x61, 0x16, 0x32, 0x7e, 0x22, 0x6d, 0xc0, 0x33, 0x5c, 0x4b, 0x82, 0xd6, 0x93, 0xfb, 0x36, - 0xf9, 0x46, 0x2c, 0x3e, 0x54, 0xf7, 0x21, 0x5c, 0x1b, 0x68, 0x32, 0xd0, 0x46, 0x94, 0x4f, 0xd4, - 0xe8, 0xc8, 0x37, 0x13, 0x28, 0x78, 0xd9, 0x6c, 0x2e, 0xd8, 0xb8, 0xaa, 0xda, 0x65, 0x65, 0xc7, - 0xc5, 0xff, 0x87, 0xe4, 0xde, 0xe2, 0x23, 0x5f, 0x61, 0xf5, 0x12, 0xc6, 0xfc, 0xad, 0x44, 0x9a, - 0x70, 0x85, 0x0f, 0xc2, 0x0b, 0x33, 0x52, 0x8d, 0x21, 0x46, 0x39, 0x61, 0x11, 0x28, 0x2b, 0x49, - 0x24, 0xfc, 0x06, 0xf8, 0xd8, 0xe1, 0x99, 0x45, 0x51, 0x73, 0x2b, 0x91, 0x26, 0x1a, 0xed, 0x91, - 0xab, 0xbd, 0x1f, 0xed, 0x83, 0x65, 0x40, 0x3f, 0xda, 0x05, 0xb5, 0x80, 0x32, 0xb6, 0x9d, 0x7d, - 0x98, 0x6e, 0x3a, 0xc6, 0xe9, 0xb8, 0xff, 0xe1, 0xfb, 0xb7, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, - 0xdb, 0x86, 0xe7, 0x48, 0xff, 0x31, 0x00, 0x00, + 0xf5, 0xa6, 0x3e, 0xfc, 0xf1, 0xfc, 0x11, 0xed, 0xf8, 0x63, 0xb5, 0xf4, 0xc7, 0x7a, 0xb9, 0xd9, + 0x64, 0xb3, 0xbf, 0xac, 0x9c, 0x9f, 0x9b, 0x04, 0xf9, 0xd8, 0xa4, 0x95, 0x65, 0xc5, 0x56, 0x56, + 0x96, 0x1d, 0x4a, 0x76, 0xb0, 0xdb, 0x06, 0x0c, 0x2d, 0x8d, 0xb5, 0x6c, 0x24, 0x52, 0x21, 0x29, + 0x67, 0xdd, 0x5b, 0x5b, 0xa0, 0x28, 0x7a, 0xeb, 0xa9, 0xc7, 0x00, 0x41, 0x2f, 0x2d, 0x1a, 0x14, + 0x01, 0x7a, 0x29, 0x0a, 0xf4, 0xd6, 0x6b, 0xcf, 0x3d, 0xb5, 0xfd, 0x03, 0xda, 0x4b, 0x91, 0x53, + 0x8b, 0x02, 0x05, 0x39, 0x43, 0x8a, 0x33, 0x1a, 0xd2, 0x52, 0x76, 0x11, 0xe4, 0x24, 0xf1, 0x7d, + 0xcd, 0x9b, 0x37, 0xef, 0xbd, 0x79, 0xef, 0x91, 0xf0, 0x4a, 0xdb, 0x70, 0x1f, 0xf5, 0x4f, 0x0b, + 0x4d, 0xab, 0xbb, 0xd5, 0xb4, 0x4c, 0x57, 0x37, 0x4c, 0x6c, 0xdf, 0x75, 0x5c, 0xcb, 0xd6, 0xdb, + 0xf8, 0xae, 0x61, 0xba, 0xd8, 0x3e, 0xd3, 0x9b, 0x78, 0xcb, 0xe9, 0xe1, 0xe6, 0x56, 0xd3, 0x31, + 0x0a, 0x3d, 0xdb, 0x72, 0x2d, 0x34, 0xe9, 0xfd, 0x3d, 0x7f, 0x49, 0xde, 0x68, 0x5b, 0x56, 0xbb, + 0x83, 0xb7, 0x7c, 0xe8, 0x69, 0xff, 0x6c, 0xeb, 0x13, 0x5b, 0xef, 0xf5, 0xb0, 0xed, 0x10, 0x3a, + 0x65, 0x05, 0x96, 0xf6, 0xb0, 0x7b, 0xd4, 0xe9, 0xb7, 0x0d, 0xb3, 0x62, 0x9e, 0x59, 0x2a, 0xfe, + 0xb8, 0x8f, 0x1d, 0x57, 0xf9, 0x8b, 0x04, 0xcb, 0x1c, 0xc2, 0xe9, 0x59, 0xa6, 0x83, 0x11, 0x82, + 0x8c, 0xa9, 0x77, 0x71, 0x5e, 0xda, 0x94, 0x6e, 0xcf, 0xa8, 0xfe, 0x7f, 0x74, 0x0b, 0x16, 0xce, + 0xb1, 0xd9, 0xb2, 0x6c, 0xed, 0x1c, 0xdb, 0x8e, 0x61, 0x99, 0xf9, 0x94, 0x8f, 0x9d, 0x27, 0xd0, + 0x13, 0x02, 0x44, 0x7b, 0x30, 0xdd, 0xd5, 0x4d, 0xe3, 0x0c, 0x3b, 0x6e, 0x3e, 0xbd, 0x99, 0xbe, + 0x3d, 0xbb, 0xfd, 0x7f, 0x05, 0xa2, 0x67, 0x41, 0xb8, 0x56, 0xe1, 0x80, 0x52, 0x97, 0x4d, 0xd7, + 0xbe, 0x50, 0x43, 0x66, 0xf9, 0x4d, 0x98, 0x67, 0x50, 0x28, 0x07, 0xe9, 0x8f, 0xf0, 0x05, 0xd5, + 0xc9, 0xfb, 0x8b, 0x96, 0x20, 0x7b, 0xae, 0x77, 0xfa, 0x98, 0x6a, 0x42, 0x1e, 0xde, 0x48, 0xbd, + 0x26, 0x29, 0x1b, 0xb0, 0x16, 0xae, 0x56, 0xd2, 0x7b, 0xfa, 0xa9, 0xd1, 0x31, 0x5c, 0x03, 0x3b, + 0xc1, 0xd6, 0x3f, 0x80, 0xf5, 0x18, 0x3c, 0xb5, 0xc0, 0x3d, 0x98, 0x6b, 0x46, 0xe0, 0xf9, 0x94, + 0xbf, 0x95, 0x7c, 0xb0, 0x15, 0x8e, 0xf3, 0x42, 0x65, 0xa8, 0x95, 0x7f, 0x49, 0x90, 0xe3, 0x49, + 0xd0, 0x3d, 0x98, 0x72, 0xb0, 0x7d, 0x6e, 0x34, 0x89, 0x5d, 0x67, 0xb7, 0x37, 0xe3, 0xa4, 0x15, + 0xea, 0x84, 0x6e, 0x7f, 0x42, 0x0d, 0x58, 0xe4, 0x5f, 0x48, 0x30, 0x45, 0xc1, 0xe8, 0x75, 0xc8, + 0xb8, 0x17, 0x3d, 0x22, 0x66, 0x61, 0xfb, 0xd6, 0x65, 0x62, 0x0a, 0x8d, 0x8b, 0x1e, 0x56, 0x7d, + 0x16, 0xe5, 0x3d, 0xc8, 0x78, 0x4f, 0x68, 0x16, 0xa6, 0x8e, 0x6b, 0xf7, 0x6b, 0x87, 0xef, 0xd7, + 0x72, 0x13, 0x68, 0x05, 0x50, 0xe9, 0xb0, 0xd6, 0x50, 0x0f, 0xab, 0xd5, 0xb2, 0xaa, 0xd5, 0xcb, + 0xea, 0x49, 0xa5, 0x54, 0xce, 0x49, 0xe8, 0x59, 0xd8, 0x3c, 0x39, 0xac, 0x1e, 0x1f, 0x94, 0xb5, + 0x62, 0xa9, 0x54, 0xae, 0xd7, 0x2b, 0x3b, 0x95, 0x6a, 0xa5, 0xf1, 0x40, 0x2b, 0x1d, 0xd6, 0xea, + 0x0d, 0xb5, 0x58, 0xa9, 0x35, 0xea, 0xb9, 0xd4, 0xce, 0x24, 0xd1, 0x46, 0x59, 0x80, 0xb9, 0x23, + 0xdb, 0x3a, 0xc5, 0x81, 0x8d, 0x8b, 0x30, 0x4f, 0x9f, 0xa9, 0x4d, 0x5f, 0x82, 0xac, 0x8d, 0xf5, + 0xd6, 0x05, 0xdd, 0xbe, 0x5c, 0x20, 0x7e, 0x5b, 0x08, 0xfc, 0xb6, 0xb0, 0x63, 0x59, 0x9d, 0x13, + 0xef, 0x0c, 0x55, 0x42, 0xa8, 0x7c, 0x9e, 0x85, 0xc5, 0x92, 0x8d, 0x75, 0x17, 0x9f, 0x58, 0x9d, + 0x7e, 0x37, 0x10, 0x2d, 0xf4, 0xcf, 0x7b, 0xb0, 0xe0, 0x9d, 0x41, 0xd3, 0x70, 0x2f, 0x34, 0x5b, + 0x37, 0xdb, 0xc4, 0x2b, 0x66, 0xb7, 0x97, 0x03, 0xf3, 0x94, 0x28, 0x56, 0xf5, 0x90, 0xea, 0x7c, + 0x33, 0xfa, 0x88, 0x2a, 0xb0, 0x78, 0xee, 0x2f, 0xa1, 0x31, 0xc7, 0x9e, 0x66, 0x8f, 0x9d, 0x68, + 0x11, 0x39, 0x76, 0x74, 0xce, 0x42, 0x0c, 0xec, 0xa0, 0xfb, 0x00, 0x3d, 0xdd, 0xd6, 0xbb, 0xd8, + 0xc5, 0xb6, 0x93, 0xcf, 0xb0, 0x31, 0x20, 0xd8, 0x4d, 0xe1, 0x28, 0xa4, 0x26, 0x31, 0x10, 0x61, + 0x47, 0x2e, 0x5c, 0xf3, 0x32, 0x82, 0x6d, 0x75, 0x3a, 0xd8, 0xd6, 0x9a, 0x3e, 0xb7, 0xe6, 0xe0, + 0xa6, 0x8d, 0x5d, 0x27, 0x9f, 0xf5, 0x65, 0xbf, 0x96, 0x24, 0xbb, 0x14, 0x32, 0x13, 0x6c, 0x9d, + 0xb0, 0x92, 0x85, 0xae, 0x36, 0xc5, 0x58, 0x74, 0x08, 0xcb, 0x81, 0x35, 0x2c, 0xd3, 0xc5, 0xa6, + 0xab, 0x39, 0x56, 0xdf, 0x6e, 0xe2, 0xfc, 0xa4, 0x6f, 0xd2, 0x55, 0xce, 0x1e, 0x84, 0xa6, 0xee, + 0x93, 0xa8, 0xd4, 0x8e, 0x0c, 0x10, 0x3d, 0x04, 0x59, 0x6f, 0x36, 0xb1, 0xe3, 0x18, 0xc4, 0x70, + 0x9a, 0x8d, 0x3f, 0xee, 0x1b, 0x36, 0xee, 0x62, 0xd3, 0x75, 0xf2, 0x53, 0xac, 0xd4, 0x86, 0xd5, + 0xb3, 0x3a, 0x56, 0xfb, 0x42, 0x1d, 0xd0, 0xa8, 0xd7, 0x18, 0xf6, 0x08, 0xc6, 0x91, 0xdf, 0x82, + 0x67, 0x38, 0x0b, 0x8e, 0x93, 0x2a, 0xe4, 0x77, 0x61, 0x2d, 0xc9, 0x48, 0x63, 0xa5, 0x9d, 0x7f, + 0x4a, 0xb0, 0x28, 0xb0, 0x09, 0xda, 0x87, 0x69, 0xc7, 0xd4, 0x7b, 0xce, 0x23, 0xcb, 0xa5, 0xce, + 0x7f, 0x27, 0xc1, 0x84, 0x85, 0x3a, 0xa5, 0x25, 0x8f, 0xfb, 0x13, 0x6a, 0xc8, 0x8d, 0x76, 0x60, + 0x92, 0xd8, 0x97, 0x7a, 0xf7, 0xed, 0x24, 0x39, 0x04, 0x16, 0x4a, 0xa1, 0x9c, 0xf2, 0x26, 0x2c, + 0xb0, 0x2b, 0xa0, 0x05, 0x48, 0x19, 0x2d, 0xba, 0xc5, 0x94, 0xd1, 0x92, 0x37, 0x60, 0x2e, 0xca, + 0xcb, 0xe3, 0xc3, 0x90, 0x7f, 0x1b, 0x96, 0x58, 0xa7, 0xa3, 0x91, 0xfe, 0x5c, 0xa8, 0x25, 0xd9, + 0xed, 0x02, 0xab, 0x65, 0xa0, 0x89, 0xf2, 0xeb, 0x0c, 0xe4, 0xf8, 0x98, 0x42, 0xf7, 0x20, 0x7b, + 0xda, 0xb1, 0x9a, 0x1f, 0x51, 0xde, 0x67, 0xe3, 0x82, 0xaf, 0xb0, 0xe3, 0x51, 0x11, 0xe8, 0xfe, + 0x84, 0x4a, 0x98, 0x3c, 0xee, 0xae, 0xd5, 0x37, 0x5d, 0x6a, 0x9f, 0x78, 0xee, 0x03, 0x8f, 0x6a, + 0xc0, 0xed, 0x33, 0xa1, 0x5d, 0x98, 0x25, 0x8e, 0xa6, 0x75, 0xad, 0x16, 0xce, 0xa7, 0x7d, 0x19, + 0x37, 0x63, 0x65, 0x14, 0x7d, 0xda, 0x03, 0xab, 0x85, 0x55, 0xd0, 0xc3, 0xff, 0xf2, 0x3c, 0xcc, + 0x46, 0x74, 0x93, 0xf7, 0x60, 0x36, 0xb2, 0x18, 0xba, 0x0a, 0x53, 0x67, 0x8e, 0x16, 0x26, 0xf0, + 0x19, 0x75, 0xf2, 0xcc, 0xf1, 0x73, 0xf2, 0x75, 0x98, 0xf5, 0xb5, 0xd0, 0xce, 0x3a, 0x7a, 0x9b, + 0x5c, 0x39, 0x33, 0x2a, 0xf8, 0xa0, 0x77, 0x3c, 0x88, 0xfc, 0x0f, 0x09, 0x60, 0xb0, 0x24, 0xba, + 0x07, 0x19, 0x5f, 0x4b, 0x72, 0x0d, 0xdc, 0x1e, 0x41, 0xcb, 0x82, 0xaf, 0xaa, 0xcf, 0xa5, 0x7c, + 0x2a, 0x41, 0xc6, 0x17, 0xc3, 0x5f, 0x05, 0xf5, 0x4a, 0x6d, 0xaf, 0x5a, 0xd6, 0x6a, 0x87, 0xbb, + 0x65, 0xed, 0x7d, 0xb5, 0xd2, 0x28, 0xab, 0x39, 0x09, 0xad, 0xc2, 0xd5, 0x28, 0x5c, 0x2d, 0x17, + 0x77, 0xcb, 0xaa, 0x76, 0x58, 0xab, 0x3e, 0xc8, 0xa5, 0x90, 0x0c, 0x2b, 0x07, 0xc7, 0xd5, 0x46, + 0x65, 0x18, 0x97, 0x46, 0x6b, 0x90, 0x8f, 0xe0, 0xa8, 0x0c, 0x2a, 0x36, 0xe3, 0x89, 0x8d, 0x60, + 0xc9, 0x5f, 0x8a, 0xcc, 0xee, 0xcc, 0x87, 0x87, 0xe1, 0x3b, 0xdb, 0xfb, 0x30, 0xcf, 0xa4, 0x70, + 0xaf, 0x22, 0xa1, 0x69, 0xa4, 0xa5, 0x9d, 0x5e, 0xb8, 0xd8, 0xf1, 0x2d, 0x91, 0x56, 0xe7, 0x03, + 0xe8, 0x8e, 0x07, 0xf4, 0xcc, 0xda, 0x31, 0xba, 0x86, 0x4b, 0x69, 0x52, 0x3e, 0x0d, 0xf8, 0x20, + 0x9f, 0x40, 0xf9, 0x53, 0x0a, 0x26, 0xe9, 0xd9, 0xdc, 0x8a, 0x5c, 0x22, 0x8c, 0xc8, 0x00, 0x4a, + 0x44, 0x92, 0x78, 0x48, 0x05, 0xf1, 0x80, 0xde, 0x06, 0xd0, 0x5d, 0xd7, 0x36, 0x4e, 0xfb, 0x6e, + 0x78, 0x69, 0x6c, 0xb0, 0xe7, 0x51, 0x28, 0x86, 0x04, 0x34, 0xcb, 0x0f, 0x38, 0xd0, 0x0e, 0x2c, + 0x70, 0x89, 0x36, 0x73, 0x79, 0xa2, 0x9d, 0x6f, 0x32, 0x39, 0xa6, 0x08, 0x8b, 0x41, 0x8e, 0xec, + 0x60, 0xcd, 0xa5, 0x39, 0x94, 0xde, 0x11, 0xb9, 0xa1, 0xdc, 0x8a, 0x06, 0xc4, 0x01, 0xcc, 0xcb, + 0xa4, 0x9c, 0x96, 0x63, 0x65, 0xbf, 0x3e, 0x2c, 0x0a, 0x52, 0x37, 0x2a, 0xc0, 0x8c, 0x7f, 0x20, + 0x8e, 0xe1, 0x7a, 0xbe, 0x2a, 0x56, 0x67, 0x40, 0xe2, 0xd1, 0xf7, 0x6c, 0x7c, 0x86, 0x6d, 0x1b, + 0xb7, 0x68, 0xdd, 0x25, 0xa0, 0x0f, 0x49, 0x94, 0x1f, 0x4b, 0x30, 0x1d, 0xc0, 0xd1, 0x1b, 0x30, + 0xed, 0xe0, 0x36, 0xb9, 0x56, 0x24, 0xf6, 0x1c, 0x02, 0x9a, 0x42, 0x9d, 0x12, 0xd0, 0x8a, 0x33, + 0xa0, 0xf7, 0x2a, 0x4e, 0x06, 0x35, 0xd6, 0xe6, 0xbf, 0x94, 0x60, 0x71, 0x17, 0x77, 0x30, 0x5f, + 0xaa, 0xac, 0xc2, 0x0c, 0xbd, 0x4a, 0xc3, 0x0c, 0x3a, 0x4d, 0x00, 0x95, 0x16, 0x77, 0xbb, 0xb7, + 0x7c, 0xf6, 0xf0, 0x76, 0x4f, 0xb1, 0xb7, 0xbb, 0x40, 0x78, 0xe4, 0x76, 0x27, 0xd8, 0xb8, 0xdb, + 0x9d, 0xc1, 0xb2, 0x37, 0xde, 0x30, 0xe3, 0x58, 0xdb, 0x5e, 0x81, 0x25, 0x56, 0x31, 0x72, 0x03, + 0x28, 0x7f, 0xc8, 0xc0, 0xc6, 0x60, 0x91, 0xa3, 0xfe, 0x69, 0xc7, 0x70, 0x1e, 0x8d, 0x61, 0x99, + 0xab, 0x30, 0x65, 0x5a, 0x2d, 0x1f, 0x45, 0xd6, 0x9c, 0xf4, 0x1e, 0x2b, 0x2d, 0x54, 0x86, 0x2b, + 0x7c, 0xa1, 0x76, 0x41, 0xf3, 0x74, 0x7c, 0x99, 0x96, 0x3b, 0xe7, 0x2f, 0x19, 0x19, 0xa6, 0xbd, + 0x12, 0xd3, 0x32, 0x3b, 0x17, 0x7e, 0xac, 0x4d, 0xab, 0xe1, 0x33, 0xfa, 0x91, 0x04, 0x72, 0xe4, + 0x58, 0x7a, 0x44, 0x79, 0xae, 0xea, 0xda, 0x0d, 0xab, 0xae, 0xc4, 0x5d, 0x0e, 0xa3, 0x99, 0x33, + 0xca, 0x37, 0x63, 0xd0, 0xc8, 0x08, 0xf7, 0x19, 0xc9, 0x2c, 0x93, 0xfe, 0xd2, 0xf7, 0x46, 0x5c, + 0x9a, 0x3c, 0xf1, 0x79, 0x87, 0xda, 0x62, 0x00, 0x96, 0xef, 0xc3, 0x7a, 0xa2, 0x96, 0x63, 0x95, + 0x53, 0x25, 0x58, 0x16, 0xae, 0x3b, 0x96, 0x57, 0xfd, 0x51, 0x82, 0xeb, 0xb1, 0x9b, 0xa3, 0x35, + 0xc6, 0x77, 0x61, 0x2e, 0x38, 0x19, 0xc3, 0x3c, 0xb3, 0x68, 0xb4, 0xbf, 0x76, 0xa9, 0x6d, 0x68, + 0xdb, 0x49, 0xa1, 0x5e, 0x2b, 0x4a, 0xec, 0x32, 0xdb, 0x1b, 0x40, 0xe4, 0xb7, 0x21, 0xc7, 0x13, + 0x8c, 0xb5, 0x81, 0xdf, 0xa5, 0x60, 0x73, 0xa0, 0xc1, 0xb1, 0xd9, 0x7b, 0x7a, 0x01, 0xf0, 0x33, + 0x09, 0xd6, 0x22, 0xde, 0xd9, 0x37, 0x79, 0xff, 0x24, 0xd7, 0xcf, 0xfe, 0xb0, 0x21, 0xc4, 0x6a, + 0x88, 0x08, 0x18, 0x1f, 0x8d, 0xc4, 0x02, 0x4f, 0x20, 0x1f, 0x44, 0xcf, 0x49, 0xc8, 0x3e, 0x96, + 0xd9, 0x6e, 0xc2, 0x8d, 0x04, 0x75, 0x69, 0x6a, 0xf9, 0x22, 0x0b, 0x37, 0x4e, 0xf4, 0x8e, 0xd1, + 0x0a, 0xeb, 0x4e, 0x41, 0x87, 0x9f, 0x6c, 0xdc, 0x8e, 0x28, 0xb8, 0x48, 0xbe, 0xfd, 0x76, 0x98, + 0x44, 0x2e, 0x5b, 0x62, 0xd4, 0xf8, 0x7a, 0x9a, 0xbd, 0xe5, 0x03, 0x41, 0x6f, 0xf9, 0xfa, 0xe8, + 0x1a, 0x27, 0x75, 0x9a, 0x3f, 0x95, 0x60, 0x35, 0xe2, 0x57, 0xe7, 0x54, 0x18, 0x97, 0xf6, 0xf6, + 0x47, 0x5f, 0x6c, 0x70, 0x92, 0x01, 0x2d, 0xe3, 0x56, 0x91, 0x9b, 0x8f, 0xc3, 0x3f, 0x95, 0x1c, + 0xf2, 0xa4, 0x6d, 0x61, 0x35, 0x7a, 0x7f, 0x89, 0x36, 0x30, 0x96, 0x63, 0xff, 0x39, 0x03, 0x4a, + 0x92, 0xc5, 0x68, 0x4e, 0x53, 0x61, 0xa6, 0x69, 0x99, 0x67, 0x86, 0xdd, 0xc5, 0x2d, 0xda, 0xfe, + 0xbc, 0x3c, 0x8a, 0xc1, 0x69, 0x4e, 0x2b, 0x05, 0xbc, 0xea, 0x40, 0x0c, 0xca, 0xc3, 0x54, 0x17, + 0x3b, 0x8e, 0xde, 0x0e, 0xd4, 0x0a, 0x1e, 0xe5, 0xdf, 0xa7, 0x61, 0x26, 0x64, 0x41, 0x9f, 0x88, + 0x62, 0x82, 0x24, 0xd5, 0x77, 0xbf, 0x8a, 0x0e, 0x4f, 0x1a, 0x1e, 0xa9, 0xaf, 0x10, 0x1e, 0x2d, + 0x26, 0x3c, 0xd2, 0xec, 0x45, 0x3d, 0x96, 0xf2, 0x09, 0x91, 0xf2, 0x4d, 0x70, 0x4f, 0xe5, 0x7b, + 0x80, 0xaa, 0x86, 0x43, 0x5b, 0xca, 0x30, 0xe9, 0x79, 0x1d, 0xa4, 0xfe, 0x58, 0xc3, 0xa6, 0x6b, + 0x1b, 0xb4, 0x77, 0xc9, 0xaa, 0xd0, 0xd5, 0x1f, 0x97, 0x09, 0xc4, 0xeb, 0x6f, 0x1c, 0x57, 0xb7, + 0x5d, 0xc3, 0x6c, 0x6b, 0xae, 0xf5, 0x11, 0x0e, 0x87, 0xb8, 0x01, 0xb4, 0xe1, 0x01, 0x95, 0xcf, + 0x24, 0x58, 0x64, 0xc4, 0x53, 0xff, 0x7c, 0x13, 0xa6, 0x06, 0xb2, 0x3d, 0xe3, 0xde, 0x08, 0x8c, + 0x2b, 0xa0, 0x2e, 0x10, 0xcb, 0x05, 0x1c, 0x68, 0x1d, 0xc0, 0xc4, 0x8f, 0x5d, 0x66, 0xdd, 0x19, + 0x0f, 0xe2, 0xaf, 0x29, 0x6f, 0x41, 0x96, 0x98, 0x61, 0xd4, 0xe1, 0xc1, 0xe7, 0x29, 0x40, 0x7b, + 0xd8, 0x0d, 0x7b, 0x42, 0x6a, 0x83, 0x18, 0x77, 0x92, 0xbe, 0x82, 0x3b, 0xbd, 0xcb, 0xb8, 0x13, + 0x71, 0xc8, 0x3b, 0x91, 0x69, 0x36, 0xb7, 0x74, 0x62, 0x7a, 0x8d, 0x69, 0xcf, 0x48, 0xe5, 0x3a, + 0x72, 0x7b, 0xf6, 0x24, 0x2e, 0xb3, 0x0b, 0x8b, 0x8c, 0xce, 0xf4, 0x4c, 0xef, 0x02, 0xd2, 0xcf, + 0x75, 0xa3, 0xa3, 0x7b, 0x7a, 0x05, 0x6d, 0x2e, 0x6d, 0x7b, 0xaf, 0x84, 0x98, 0x80, 0x4d, 0x51, + 0xa2, 0x85, 0x0d, 0x95, 0xc7, 0x4f, 0xd7, 0x3b, 0xd1, 0x6b, 0x7c, 0x88, 0x86, 0xae, 0xbb, 0x27, + 0x9c, 0xb0, 0xdf, 0x1c, 0x2e, 0x5b, 0xe8, 0x14, 0x3b, 0x76, 0xd8, 0xfe, 0xf7, 0x14, 0xac, 0x26, + 0x50, 0xa3, 0x37, 0x21, 0x6d, 0xf7, 0x9a, 0xd4, 0x99, 0x9e, 0x1f, 0x41, 0x7e, 0x41, 0x3d, 0x2a, + 0xed, 0x4f, 0xa8, 0x1e, 0x97, 0xfc, 0x1f, 0x09, 0xd2, 0xea, 0x51, 0x09, 0x7d, 0x87, 0x19, 0xb9, + 0xbf, 0x38, 0xa2, 0x94, 0xe8, 0xe4, 0xfd, 0x0b, 0x49, 0x34, 0x7a, 0xcf, 0xc3, 0x52, 0x49, 0x2d, + 0x17, 0x1b, 0x65, 0x6d, 0xb7, 0x5c, 0x2d, 0x37, 0xca, 0x1a, 0x19, 0xb8, 0xe7, 0x24, 0xb4, 0x06, + 0xf9, 0xa3, 0xe3, 0x9d, 0x6a, 0xa5, 0xbe, 0xaf, 0x1d, 0xd7, 0x82, 0x7f, 0x14, 0x9b, 0x42, 0x39, + 0x98, 0xab, 0x56, 0xea, 0x0d, 0x0a, 0xa8, 0xe7, 0xd2, 0x1e, 0x64, 0xaf, 0xdc, 0xd0, 0x4a, 0xc5, + 0xa3, 0x62, 0xa9, 0xd2, 0x78, 0x90, 0xcb, 0x20, 0x19, 0x56, 0x58, 0xd9, 0xf5, 0x5a, 0xf1, 0xa8, + 0xbe, 0x7f, 0xd8, 0xc8, 0x65, 0x11, 0x82, 0x05, 0x9f, 0x3f, 0x00, 0xd5, 0x73, 0x93, 0x9e, 0x84, + 0x52, 0xf5, 0xb0, 0x16, 0xea, 0x30, 0x15, 0xce, 0xf9, 0x3e, 0x4d, 0xc3, 0x32, 0x1d, 0x8d, 0xd2, + 0xc1, 0x61, 0x10, 0x6d, 0xb7, 0x21, 0x47, 0x26, 0x16, 0x1a, 0x5f, 0x6d, 0x2d, 0x10, 0xf8, 0x49, + 0x50, 0x73, 0x05, 0x33, 0xfb, 0x54, 0x64, 0x66, 0xdf, 0x83, 0xab, 0xc1, 0x48, 0x9b, 0xca, 0xe5, + 0xaa, 0x58, 0x6e, 0xb6, 0xcd, 0xad, 0xce, 0x41, 0x99, 0xf2, 0x62, 0xb9, 0x29, 0xc2, 0xa1, 0x03, + 0x41, 0x01, 0x75, 0x37, 0x79, 0x91, 0xa4, 0xab, 0x60, 0x1f, 0xe4, 0x78, 0x1d, 0xbe, 0xce, 0xfb, + 0xe0, 0x1d, 0x58, 0xe1, 0xb5, 0xa7, 0x71, 0xf6, 0xe2, 0xd0, 0xec, 0x39, 0xcc, 0x36, 0x21, 0x6d, + 0x48, 0xa1, 0xfc, 0x52, 0x82, 0xe9, 0x00, 0xec, 0x65, 0x6c, 0xc7, 0xf8, 0x01, 0x66, 0x26, 0x61, + 0x33, 0x1e, 0x44, 0x3c, 0x05, 0x13, 0xf9, 0x42, 0x5a, 0xe8, 0x0b, 0xeb, 0x00, 0xe4, 0x78, 0x5a, + 0x9a, 0xee, 0xfa, 0xfd, 0x77, 0x5a, 0x9d, 0xa1, 0x90, 0xa2, 0x8b, 0x36, 0x61, 0xce, 0x7f, 0xff, + 0xa3, 0xb9, 0x96, 0xd6, 0x77, 0x70, 0x3e, 0xeb, 0x37, 0xe8, 0xe0, 0xc3, 0x1a, 0xd6, 0xb1, 0x83, + 0x95, 0x2f, 0x25, 0x58, 0xa6, 0x93, 0x0b, 0xce, 0x21, 0xaf, 0xc3, 0x6c, 0xe8, 0x4b, 0xa1, 0x2f, + 0x42, 0x00, 0xaa, 0xb4, 0x3c, 0x9f, 0x0b, 0x06, 0x2d, 0xbc, 0xcf, 0x09, 0x27, 0x2e, 0xbc, 0x3b, + 0xb0, 0x50, 0xd6, 0xe7, 0x5a, 0x22, 0x9c, 0xe7, 0x24, 0xf1, 0x4c, 0x63, 0x9d, 0x72, 0x1e, 0x56, + 0x78, 0xa5, 0x68, 0x53, 0xf4, 0x2b, 0x09, 0x96, 0xbc, 0x3b, 0x38, 0x40, 0x3c, 0xed, 0x92, 0x60, + 0x8c, 0xc3, 0xe5, 0x4e, 0x20, 0xc3, 0x9f, 0x80, 0xf2, 0x1b, 0x09, 0x96, 0x39, 0x5d, 0xa9, 0xaf, + 0xbe, 0xc5, 0xd7, 0x17, 0x37, 0xa3, 0xf5, 0xc5, 0x10, 0xfd, 0x98, 0x15, 0xc6, 0x2b, 0x41, 0x85, + 0x31, 0x5e, 0x48, 0xfc, 0x3c, 0x0b, 0x2b, 0x35, 0xab, 0x85, 0xeb, 0xae, 0xde, 0x1e, 0x67, 0xb8, + 0xa7, 0x72, 0x03, 0x0a, 0xe2, 0x5d, 0x5b, 0xc1, 0x4a, 0x62, 0x91, 0xc9, 0x73, 0x09, 0x54, 0x80, + 0x45, 0xc7, 0xd5, 0xdb, 0xfe, 0x59, 0xe9, 0x76, 0x1b, 0xbb, 0x5a, 0x4f, 0x77, 0x1f, 0xd1, 0x83, + 0xb8, 0x42, 0x51, 0x0d, 0x1f, 0x73, 0xa4, 0xbb, 0x8f, 0xc4, 0xd3, 0xb2, 0xcc, 0xd8, 0xd3, 0xb2, + 0x53, 0x40, 0xfe, 0x30, 0xc2, 0x5b, 0x80, 0xef, 0x08, 0x5f, 0xbe, 0x64, 0x43, 0x21, 0x98, 0x09, + 0x95, 0x9c, 0xc9, 0x81, 0x91, 0x1e, 0x3f, 0xf0, 0xba, 0x6c, 0x89, 0x51, 0x07, 0x5d, 0x4f, 0x38, + 0xd5, 0xf1, 0x0a, 0x7f, 0xe1, 0x6e, 0xbe, 0xfe, 0x01, 0xd9, 0x35, 0xb8, 0x3a, 0x64, 0x0b, 0x9a, + 0x09, 0xda, 0x90, 0xf7, 0x50, 0xc7, 0xa6, 0x33, 0xa6, 0xbf, 0xc6, 0xf8, 0x56, 0x2a, 0xc6, 0xb7, + 0x94, 0x55, 0xb8, 0x26, 0x58, 0x88, 0x6a, 0xf1, 0xd7, 0x2c, 0x51, 0x63, 0xfc, 0xc9, 0x6f, 0x43, + 0x18, 0x36, 0xff, 0x1f, 0x75, 0x01, 0xe1, 0xb4, 0xf3, 0xe9, 0x06, 0xce, 0x75, 0x98, 0x8d, 0xd2, + 0xd1, 0x24, 0xe6, 0x5e, 0x12, 0x59, 0xd9, 0x27, 0x9a, 0x43, 0x4f, 0x72, 0x73, 0xe8, 0xef, 0xc3, + 0x92, 0x1f, 0x75, 0xfc, 0x80, 0x6f, 0x8a, 0xbd, 0xa6, 0x62, 0x2d, 0x12, 0x41, 0x30, 0xb1, 0xe7, + 0xc7, 0x32, 0x37, 0x6e, 0x6e, 0x8a, 0xa2, 0x6f, 0xda, 0x5f, 0xe8, 0xd5, 0x4b, 0x17, 0xfa, 0xba, + 0xe2, 0xaf, 0x4c, 0xbc, 0xfe, 0x1b, 0x31, 0xa2, 0xa6, 0xde, 0x2f, 0x1c, 0x2e, 0x2b, 0x0f, 0x41, + 0x26, 0xa1, 0x31, 0xfe, 0xdc, 0x97, 0x73, 0xbc, 0x14, 0xef, 0x78, 0xca, 0x3a, 0xac, 0x0a, 0x65, + 0xd3, 0xa5, 0x1f, 0x10, 0xbd, 0xf6, 0x30, 0x6d, 0xc7, 0xeb, 0xae, 0xee, 0x3a, 0xa3, 0xae, 0x4c, + 0x91, 0xd1, 0x95, 0x09, 0xc8, 0x5f, 0x79, 0x8f, 0xec, 0x8a, 0x17, 0x4d, 0xef, 0xee, 0x17, 0x20, + 0xdb, 0xf7, 0xa7, 0x4c, 0xe4, 0xe6, 0x5e, 0x64, 0x83, 0xe0, 0xd8, 0x43, 0xa9, 0x84, 0x42, 0xf9, + 0xad, 0x04, 0xb3, 0x11, 0x30, 0x5a, 0x83, 0x99, 0xb0, 0xd1, 0x0c, 0xca, 0xcc, 0x10, 0xe0, 0x9d, + 0x81, 0x6b, 0xb9, 0x7a, 0x87, 0xbe, 0xb9, 0x25, 0x0f, 0x5e, 0x3b, 0xd1, 0x77, 0x30, 0xa9, 0x41, + 0xd2, 0xaa, 0xff, 0x1f, 0xbd, 0x08, 0x99, 0xbe, 0x69, 0x90, 0x82, 0x72, 0x81, 0x0f, 0x43, 0x7f, + 0xa9, 0xc2, 0xb1, 0x69, 0xb8, 0xaa, 0x4f, 0xa5, 0xdc, 0x81, 0x8c, 0xf7, 0xc4, 0xf6, 0x63, 0x33, + 0x90, 0xdd, 0x79, 0xd0, 0x28, 0xd7, 0x73, 0x12, 0x02, 0x98, 0xac, 0xd4, 0x0e, 0x77, 0xcb, 0xf5, + 0x5c, 0x4a, 0x59, 0x0b, 0xb7, 0x2e, 0xea, 0x77, 0x3f, 0x24, 0x47, 0x12, 0xd7, 0xe9, 0x16, 0xb9, + 0x4e, 0x97, 0x18, 0x68, 0x9d, 0xb9, 0xd4, 0x2e, 0xe9, 0x71, 0xff, 0x26, 0xd1, 0xab, 0x67, 0xa8, + 0xbb, 0x7d, 0x25, 0xda, 0xdd, 0xde, 0x48, 0x94, 0x19, 0xed, 0x6b, 0x7f, 0x42, 0xfb, 0xda, 0x37, + 0x98, 0xbe, 0xf6, 0xb9, 0x4b, 0xf9, 0xa3, 0x1d, 0x6d, 0x29, 0xa6, 0xa1, 0xad, 0x37, 0x8a, 0x7b, + 0x65, 0xed, 0xb8, 0x46, 0x7e, 0xc3, 0x86, 0x76, 0x09, 0x72, 0x5e, 0x83, 0x4a, 0xbf, 0x28, 0xab, + 0x37, 0x8a, 0xcc, 0xd7, 0x63, 0x4b, 0x80, 0xa8, 0x0d, 0xa3, 0x9f, 0x28, 0x7e, 0x26, 0xc1, 0x22, + 0x03, 0xa6, 0x26, 0x8d, 0xbc, 0x1d, 0x91, 0x98, 0xb7, 0x23, 0x5b, 0xb0, 0xe4, 0x95, 0xbb, 0xc4, + 0x6b, 0x1d, 0xad, 0x87, 0x6d, 0xcd, 0xc3, 0x50, 0xdf, 0xb9, 0xd2, 0xd5, 0x1f, 0xd3, 0x29, 0xd5, + 0x11, 0xb6, 0x3d, 0xc1, 0x4f, 0x61, 0x2e, 0xb3, 0xfd, 0x6f, 0x09, 0xa6, 0x2b, 0x2d, 0x6c, 0xba, + 0xde, 0x79, 0xd4, 0x60, 0x9e, 0xf9, 0xce, 0x11, 0xad, 0xc5, 0x7c, 0xfe, 0xe8, 0x6f, 0x50, 0x5e, + 0x4f, 0xfc, 0x38, 0x52, 0x99, 0x40, 0x67, 0x91, 0x6f, 0x34, 0x99, 0xe1, 0xd4, 0xb3, 0x43, 0x9c, + 0x02, 0xd7, 0x94, 0x6f, 0x5d, 0x42, 0x15, 0xae, 0xf3, 0x2a, 0x64, 0xfd, 0xaf, 0xf5, 0xd0, 0x52, + 0xf8, 0x39, 0x61, 0xe4, 0x63, 0x3e, 0x79, 0x99, 0x83, 0x06, 0x7c, 0xdb, 0xff, 0x9d, 0x02, 0x18, + 0x4c, 0x41, 0xd0, 0x7d, 0x98, 0x8b, 0x7e, 0x11, 0x84, 0x56, 0x13, 0x3e, 0x4e, 0x93, 0xd7, 0xc4, + 0xc8, 0x50, 0xa7, 0xfb, 0x30, 0x17, 0x7d, 0xb9, 0x3c, 0x10, 0x26, 0x78, 0x17, 0x3e, 0x10, 0x26, + 0x7c, 0x1f, 0x3d, 0x81, 0x3a, 0x70, 0x35, 0xe6, 0x9d, 0x20, 0x7a, 0x6e, 0xb4, 0x17, 0xaa, 0xf2, + 0xf3, 0x23, 0xbe, 0x5c, 0x54, 0x26, 0x90, 0x0d, 0xd7, 0x62, 0xdf, 0x64, 0xa1, 0xdb, 0xa3, 0xbe, + 0x9b, 0x93, 0x5f, 0x18, 0x81, 0x32, 0x5c, 0xb3, 0x0f, 0x72, 0xfc, 0x8c, 0x1b, 0xbd, 0x30, 0xf2, + 0x9b, 0x1b, 0xf9, 0xce, 0xe8, 0x23, 0x73, 0x65, 0x02, 0xed, 0xc3, 0x6c, 0x64, 0xfa, 0x8b, 0x64, + 0xe1, 0x48, 0x98, 0x08, 0x5e, 0x4d, 0x18, 0x17, 0x13, 0x49, 0x91, 0x09, 0xe5, 0x40, 0xd2, 0xf0, + 0xa8, 0x75, 0x20, 0x49, 0x30, 0xd2, 0xe4, 0xcd, 0xcf, 0xe5, 0x65, 0x91, 0xf9, 0xc5, 0x89, 0x5d, + 0x64, 0xfe, 0x98, 0x24, 0xaf, 0x4c, 0xa0, 0xf7, 0x60, 0x81, 0x1d, 0xc1, 0xa0, 0xf5, 0xc4, 0xc1, + 0x92, 0xbc, 0x11, 0x87, 0x8e, 0x8a, 0x64, 0xfb, 0xfd, 0x81, 0x48, 0xe1, 0x70, 0x62, 0x20, 0x32, + 0x66, 0x4c, 0x30, 0xe1, 0xe5, 0x27, 0xa6, 0x97, 0x1e, 0xe4, 0x27, 0xd1, 0xf8, 0x60, 0x90, 0x9f, + 0x84, 0x0d, 0xb8, 0x32, 0xb1, 0xfd, 0xc3, 0x2c, 0x64, 0xfc, 0x44, 0xda, 0x80, 0x67, 0xb8, 0x96, + 0x04, 0x6d, 0x24, 0xf7, 0x6d, 0xf2, 0xf5, 0x58, 0x7c, 0xa8, 0xee, 0x43, 0xb8, 0x32, 0xd4, 0x64, + 0xa0, 0xcd, 0x28, 0x9f, 0xa8, 0xd1, 0x91, 0x6f, 0x24, 0x50, 0xf0, 0xb2, 0xd9, 0x5c, 0xb0, 0x79, + 0x59, 0xb5, 0xcb, 0xca, 0x8e, 0x8b, 0xff, 0x0f, 0xc9, 0xbd, 0xc5, 0x47, 0xbe, 0xc2, 0xea, 0x25, + 0x8c, 0xf9, 0x9b, 0x89, 0x34, 0xe1, 0x0a, 0x1f, 0x84, 0x17, 0x66, 0xa4, 0x1a, 0x43, 0x8c, 0x72, + 0xc2, 0x22, 0x50, 0x56, 0x92, 0x48, 0xf8, 0x0d, 0xf0, 0xb1, 0xc3, 0x33, 0x8b, 0xa2, 0xe6, 0x66, + 0x22, 0x4d, 0x34, 0xda, 0x23, 0x57, 0xfb, 0x20, 0xda, 0x87, 0xcb, 0x80, 0x41, 0xb4, 0x0b, 0x6a, + 0x01, 0x65, 0x62, 0x27, 0xfb, 0x30, 0xdd, 0x74, 0x8c, 0xd3, 0x49, 0xff, 0x43, 0xf2, 0x6f, 0xfd, + 0x2f, 0x00, 0x00, 0xff, 0xff, 0xe2, 0x0d, 0x77, 0xe9, 0x4f, 0x31, 0x00, 0x00, } diff --git a/spec.md b/spec.md index b5fe28d8..99e3dea3 100644 --- a/spec.md +++ b/spec.md @@ -1382,10 +1382,6 @@ message ControllerServiceCapability { // CREATE_DELETE_SNAPSHOT MUST support creating volume from // snapshot. CREATE_DELETE_SNAPSHOT = 5; - // LIST_SNAPSHOTS is NOT REQUIRED. For plugins that need to upload - // a snapshot after it is being cut, LIST_SNAPSHOTS COULD be used - // with the snapshot_id as the filter to query whether the - // uploading process is complete or not. LIST_SNAPSHOTS = 6; // Plugins supporting volume cloning at the storage level MAY // report this capability. The source volume must be managed by @@ -1414,17 +1410,43 @@ A Controller Plugin MUST implement this RPC call if it has `CREATE_DELETE_SNAPSH This RPC will be called by the CO to create a new snapshot from a source volume on behalf of a user. This operation MUST be idempotent. -If a snapshot corresponding to the specified snapshot `name` is already successfully cut and uploaded (if upload is part of the process) and is compatible with the specified `source_volume_id` and `parameters` in the `CreateSnapshotRequest`, the Plugin MUST reply `0 OK` with the corresponding `CreateSnapshotResponse`. +If a snapshot corresponding to the specified snapshot `name` is successfully cut and ready to use (meaning it may be specified as a `volume_content_source` in a `CreateVolumeRequest`), the Plugin MUST reply `0 OK` with the corresponding `CreateSnapshotResponse`. If an error occurs before a snapshot is cut, `CreateSnapshot` SHOULD return a corresponding gRPC error code that reflects the error condition. -For plugins that implement snapshot uploads, `CreateSnapshot` SHOULD return `10 ABORTED`, a gRPC code that indicates the operation is pending for snapshot, during the snapshot uploading processs. -If an error occurs during the uploading process, `CreateSnapshot` SHOULD return a corresponding gRPC error code that reflects the error condition. +For plugins that supports snapshot post processing such as uploading, `CreateSnapshot` SHOULD return `0 OK` and `ready_to_use` SHOULD be set to `false` after the snapshot is cut but still being processed. +CO SHOULD then reissue the same `CreateSnapshotRequest` periodically until boolean `ready_to_use` flips to `true` indicating the snapshot has been "processed" and is ready to use to create new volumes. +If an error occurs during the process, `CreateSnapshot` SHOULD return a corresponding gRPC error code that reflects the error condition. A snapshot MAY be used as the source to provision a new volume. -A CreateVolumeRequest message may specify an OPTIONAL source snapshot parameter. +A CreateVolumeRequest message MAY specify an OPTIONAL source snapshot parameter. Reverting a snapshot, where data in the original volume is erased and replaced with data in the snapshot, is an advanced functionality not every storage system can support and therefore is currently out of scope. +##### The ready_to_use Parameter + +Some SPs MAY "process" the snapshot after the snapshot is cut, for example, maybe uploading the snapshot somewhere after the snapshot is cut. +The post-cut process may be a long process that could take hours. +The CO MAY freeze the application using the source volume before taking the snapshot. +The purpose of `freeze` is to ensure the application data is in consistent state. +When `freeze` is performed, the container is paused and the application is also paused. +When `thaw` is performed, the container and the application start running again. +During the snapshot processing phase, since the snapshot is already cut, a `thaw` operation can be performed so application can start running without waiting for the process to complete. +The `ready_to_use` parameter of the snapshot will become `true` after the process is complete. + +For SPs that do not do additional processing after cut, the `ready_to_use` parameter SHOULD be `true` after the snapshot is cut. +`thaw` can be done when the `ready_to_use` parameter is `true` in this case. + +The `ready_to_use` parameter provides guidance to the CO on when it can "thaw" the application in the process of snapshotting. +If the cloud provider or storage system needs to process the snapshot after the snapshot is cut, the `ready_to_use` parameter returned by CreateSnapshot SHALL be `false`. +CO MAY continue to call CreateSnapshot while waiting for the process to complete until `ready_to_use` becomes `true`. +Note that CreateSnapshot no longer blocks after the snapshot is cut. + +A gRPC error code SHALL be returned if an error occurs during any stage of the snapshotting process. +A CO SHOULD explicitly delete snapshots when an error occurs. + +Based on this information, CO can issue repeated (idemponent) calls to CreateSnapshot, monitor the response, and make decisions. +Note that CreateSnapshot is a synchronous call and it MUST block until the snapshot is cut. + ```protobuf message CreateSnapshotRequest { // The ID of the source volume to be snapshotted. @@ -1493,37 +1515,10 @@ message Snapshot { // field is REQUIRED. int64 created_at = 4; - // The status of a snapshot. - SnapshotStatus status = 5; -} - -// The status of a snapshot. -message SnapshotStatus { - enum Type { - UNKNOWN = 0; - // A snapshot is ready for use. - READY = 1; - // A snapshot is cut and is now being uploaded. - // Some cloud providers and storage systems uploads the snapshot - // to the cloud after the snapshot is cut. During this phase, - // `thaw` can be done so the application can be running again if - // `freeze` was done before taking the snapshot. - UPLOADING = 2; - // An error occurred during the snapshot uploading process. - // This error status is specific for uploading because - // `CreateSnaphot` is a blocking call before the snapshot is - // cut and therefore it SHOULD NOT come back with an error - // status when an error occurs. Instead a gRPC error code SHALL - // be returned by `CreateSnapshot` when an error occurs before - // a snapshot is cut. - ERROR_UPLOADING = 3; - } - // This field is REQUIRED. - Type type = 1; - - // Additional information to describe why a snapshot ended up in the - // `ERROR_UPLOADING` status. This field is OPTIONAL. - string details = 2; + // Indicates if a snapshot is ready to use as a + // `volume_content_source` in a `CreateVolumeRequest`. The default + // value is false. This field is REQUIRED. + bool ready_to_use = 5; } ``` @@ -1537,7 +1532,7 @@ The CO MUST implement the specified error recovery behavior when it encounters t |-----------|-----------|-------------|-------------------| | Snapshot already exists but is incompatible | 6 ALREADY_EXISTS | Indicates that a snapshot corresponding to the specified snapshot `name` already exists but is incompatible with the specified `volume_id`. | Caller MUST fix the arguments or use a different `name` before retrying. | | Operation pending for snapshot | 10 ABORTED | Indicates that there is already an operation pending for the specified snapshot. In general the Cluster Orchestrator (CO) is responsible for ensuring that there is no more than one call "in-flight" per snapshot at a given time. However, in some circumstances, the CO MAY lose state (for example when the CO crashes and restarts), and MAY issue multiple calls simultaneously for the same snapshot. The Plugin, SHOULD handle this as gracefully as possible, and MAY return this error code to reject secondary calls. | Caller SHOULD ensure that there are no other calls pending for the specified snapshot, and then retry with exponential back off. | -| Not enough space to create snapshot | 13 RESOURCE_EXHAUSTED | There is not enough space on the storage system to handle the create snapshot request. | Caller should fail this request. Future calls to CreateSnapshot may succeed if space is freed up. | +| Not enough space to create snapshot | 13 RESOURCE_EXHAUSTED | There is not enough space on the storage system to handle the create snapshot request. | Caller should fail this request. Future calls to CreateSnapshot MAY succeed if space is freed up. | #### `DeleteSnapshot` @@ -1610,7 +1605,8 @@ message ListSnapshotsRequest { // Identity information for a specific snapshot. This field is // OPTIONAL. It can be used to list only a specific snapshot. // ListSnapshots will return with current snapshot information - // and will not block if the snapshot is being uploaded. + // and will not block if the snapshot is being processed after + // it is cut. string snapshot_id = 4; } @@ -1665,40 +1661,10 @@ If a `CreateSnapshot` operation times out before the snapshot is cut, leaving th 2. The CO takes no further action regarding the timed out RPC, a snapshot is possibly leaked and the operator/user is expected to clean up. It is NOT REQUIRED for a controller plugin to implement the `LIST_SNAPSHOTS` capability if it supports the `CREATE_DELETE_SNAPSHOT` capability: the onus is upon the CO to take into consideration the full range of plugin capabilities before deciding how to proceed in the above scenario. -A controller plugin COULD implement the `LIST_SNAPSHOTS` capability and call it repeatedly with the `snapshot_id` as a filter to query whether the uploading process is complete or not if it needs to upload a snapshot after it is being cut. - -##### Snapshot Statuses - -A snapshot could have the following statusus: UPLOADING, READY, and ERROR. - -Some cloud providers will upload the snapshot to a location in the cloud (i.e., an object store) after the snapshot is cut. -Uploading may be a long process that could take hours. -If a `freeze` operation was done on the application before taking the snapshot, it could be a long time before the application can be running again if we wait until the upload is complete to `thaw` the application. -The purpose of `freeze` is to ensure the application data is in consistent state. -When `freeze` is performed, the container is paused and the application is also paused. -When `thaw` is performed, the container and the application start running again. -During the snapshot uploading phase, since the snapshot is already cut, a `thaw` operation can be performed so application can start running without waiting for the upload to complete. -The status of the snapshot will become `READY` after the upload is complete. - -For cloud providers and storage systems that don't have the uploading process, the status should be `READY` after the snapshot is cut. -`thaw` can be done when the status is `READY` in this case. - -A `CREATING` status is not included here because CreateSnapshot is synchronous and will block until the snapshot is cut. - -`ERROR` is a terminal snapshot status. -A CO SHOULD explicitly delete snapshots in this status. - -The SnapshotStatus parameter provides guidance to the CO on what action can be taken in the process of snapshotting. -Based on this information, CO can issue repeated (idemponent) calls to CreateSnapshot, monitor the response, and make decisions. -Note that CreateSnapshot is a synchronous call and it must block until the snapshot is cut. -If the cloud provider or storage system does not need to upload the snapshot after it is cut, the status returned by CreateSnapshot SHALL be `READY`. -If the cloud provider or storage system needs to upload the snapshot after the snapshot is cut, the status returned by CreateSnapshot SHALL be `UPLOADING`. -CO MAY continue to call CreateSnapshot while waiting for the upload to complete until the status becomes `READY`. -Note that CreateSnapshot no longer blocks after the snapshot is cut. -Alternatively, ListSnapshots can be called repeatedly with snapshot_id as filtering to wait for the upload to complete. ListSnapshots SHALL return with current information regarding the snapshots on the storage system. -When upload is complete, the status of the snapshot from ListSnapshots SHALL become `READY`. +When processing is complete, the `ready_to_use` parameter of the snapshot from ListSnapshots SHALL become `true`. +The downside of calling ListSnapshots is that ListSnapshots will not return a gRPC error code if an error occurs during the processing. So calling CreateSnapshot repeatedly is the preferred way to check if the processing is complete. ### Node Service RPC