Refactor sandbox controller interface
Update the sandbox controller interface to use local types rather than using the API types. Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
		| @@ -1039,11 +1039,11 @@ file { | |||||||
|   message_type { |   message_type { | ||||||
|     name: "SandboxStatusResponse" |     name: "SandboxStatusResponse" | ||||||
|     field { |     field { | ||||||
|       name: "id" |       name: "sandbox_id" | ||||||
|       number: 1 |       number: 1 | ||||||
|       label: LABEL_OPTIONAL |       label: LABEL_OPTIONAL | ||||||
|       type: TYPE_STRING |       type: TYPE_STRING | ||||||
|       json_name: "id" |       json_name: "sandboxId" | ||||||
|     } |     } | ||||||
|     field { |     field { | ||||||
|       name: "pid" |       name: "pid" | ||||||
| @@ -5176,11 +5176,11 @@ file { | |||||||
|   message_type { |   message_type { | ||||||
|     name: "ControllerStatusResponse" |     name: "ControllerStatusResponse" | ||||||
|     field { |     field { | ||||||
|       name: "id" |       name: "sandbox_id" | ||||||
|       number: 1 |       number: 1 | ||||||
|       label: LABEL_OPTIONAL |       label: LABEL_OPTIONAL | ||||||
|       type: TYPE_STRING |       type: TYPE_STRING | ||||||
|       json_name: "id" |       json_name: "sandboxId" | ||||||
|     } |     } | ||||||
|     field { |     field { | ||||||
|       name: "pid" |       name: "pid" | ||||||
|   | |||||||
| @@ -699,7 +699,7 @@ type SandboxStatusResponse struct { | |||||||
| 	sizeCache     protoimpl.SizeCache | 	sizeCache     protoimpl.SizeCache | ||||||
| 	unknownFields protoimpl.UnknownFields | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
| 	ID        string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` | 	SandboxID string                 `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` | ||||||
| 	Pid       uint32                 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` | 	Pid       uint32                 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` | ||||||
| 	State     string                 `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` | 	State     string                 `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` | ||||||
| 	Info      map[string]string      `protobuf:"bytes,4,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` | 	Info      map[string]string      `protobuf:"bytes,4,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` | ||||||
| @@ -740,9 +740,9 @@ func (*SandboxStatusResponse) Descriptor() ([]byte, []int) { | |||||||
| 	return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{13} | 	return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{13} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (x *SandboxStatusResponse) GetID() string { | func (x *SandboxStatusResponse) GetSandboxID() string { | ||||||
| 	if x != nil { | 	if x != nil { | ||||||
| 		return x.ID | 		return x.SandboxID | ||||||
| 	} | 	} | ||||||
| 	return "" | 	return "" | ||||||
| } | } | ||||||
| @@ -1051,105 +1051,105 @@ var file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_r | |||||||
| 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, | 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, | ||||||
| 	0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, | 	0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, | ||||||
| 	0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, | 	0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, | ||||||
| 	0x62, 0x6f, 0x73, 0x65, 0x22, 0xfc, 0x02, 0x0a, 0x15, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | 	0x62, 0x6f, 0x73, 0x65, 0x22, 0x8b, 0x03, 0x0a, 0x15, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
| 	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, | 	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, | ||||||
| 	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, | 	0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, | ||||||
| 	0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, | 	0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x10, 0x0a, | ||||||
| 	0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, | 	0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, | ||||||
| 	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, | 	0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, | ||||||
| 	0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, | 	0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, | ||||||
|  | 	0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, | ||||||
|  | 	0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
|  | 	0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, | ||||||
|  | 	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, | ||||||
|  | 	0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, | ||||||
|  | 	0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, | ||||||
|  | 	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, | ||||||
|  | 	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, | ||||||
|  | 	0x65, 0x64, 0x41, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, | ||||||
|  | 	0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, | ||||||
|  | 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, | ||||||
|  | 	0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2a, 0x0a, | ||||||
|  | 	0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, | ||||||
|  | 	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, | ||||||
|  | 	0x6e, 0x79, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, | ||||||
|  | 	0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, | ||||||
|  | 	0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, | ||||||
|  | 	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, | ||||||
|  | 	0x38, 0x01, 0x22, 0x2c, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, | ||||||
|  | 	0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, | ||||||
|  | 	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, | ||||||
|  | 	0x22, 0x0e, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | ||||||
|  | 	0x22, 0x37, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, | ||||||
|  | 	0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, | ||||||
|  | 	0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, | ||||||
|  | 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x68, 0x75, | ||||||
|  | 	0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, | ||||||
|  | 	0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbe, 0x07, 0x0a, 0x07, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
|  | 	0x12, 0x7a, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, | ||||||
|  | 	0x78, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, | ||||||
|  | 	0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, | ||||||
|  | 	0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, | ||||||
|  | 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, | ||||||
|  | 	0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, | ||||||
|  | 	0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, | ||||||
|  | 	0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0c, | ||||||
|  | 	0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x32, 0x2e, 0x63, | ||||||
|  | 	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, | ||||||
|  | 	0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, | ||||||
|  | 	0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||||
|  | 	0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, | ||||||
|  | 	0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, | ||||||
|  | 	0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, | ||||||
|  | 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, | ||||||
|  | 	0x6d, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, | ||||||
|  | 	0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, | ||||||
|  | 	0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, | ||||||
|  | 	0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, | ||||||
|  | 	0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, | ||||||
|  | 	0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | ||||||
|  | 	0x73, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, | ||||||
|  | 	0x78, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, | ||||||
|  | 	0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, | ||||||
|  | 	0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, | ||||||
|  | 	0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, | ||||||
|  | 	0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, | ||||||
|  | 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
|  | 	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x57, 0x61, 0x69, 0x74, | ||||||
|  | 	0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, | ||||||
|  | 	0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, | ||||||
|  | 	0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, 0x64, | ||||||
|  | 	0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, | ||||||
|  | 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, | ||||||
|  | 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x53, | ||||||
|  | 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, | ||||||
|  | 	0x0a, 0x0d, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, | ||||||
|  | 	0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, | ||||||
|  | 	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, | ||||||
|  | 	0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, | ||||||
|  | 	0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, | ||||||
| 	0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, | 	0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, | ||||||
| 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, | 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, | ||||||
| 	0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, | 	0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x50, 0x69, | ||||||
| 	0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, | 	0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, | ||||||
| 	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, | 	0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, | ||||||
| 	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, | 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, | ||||||
| 	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, | 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, | ||||||
| 	0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, |  | ||||||
| 	0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, |  | ||||||
| 	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, |  | ||||||
| 	0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2a, |  | ||||||
| 	0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, |  | ||||||
| 	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, |  | ||||||
| 	0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, |  | ||||||
| 	0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, |  | ||||||
| 	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, |  | ||||||
| 	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, |  | ||||||
| 	0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, |  | ||||||
| 	0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, |  | ||||||
| 	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, |  | ||||||
| 	0x64, 0x22, 0x0e, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, |  | ||||||
| 	0x65, 0x22, 0x37, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, |  | ||||||
| 	0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, |  | ||||||
| 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, |  | ||||||
| 	0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x68, |  | ||||||
| 	0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, |  | ||||||
| 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbe, 0x07, 0x0a, 0x07, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, |  | ||||||
| 	0x78, 0x12, 0x7a, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, |  | ||||||
| 	0x6f, 0x78, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, |  | ||||||
| 	0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, |  | ||||||
| 	0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, |  | ||||||
| 	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, |  | ||||||
| 	0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, |  | ||||||
| 	0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, |  | ||||||
| 	0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, |  | ||||||
| 	0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x32, 0x2e, |  | ||||||
| 	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, |  | ||||||
| 	0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, |  | ||||||
| 	0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, |  | ||||||
| 	0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, |  | ||||||
| 	0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, |  | ||||||
| 	0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, |  | ||||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, |  | ||||||
| 	0x72, 0x6d, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, |  | ||||||
| 	0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, |  | ||||||
| 	0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, |  | ||||||
| 	0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, |  | ||||||
| 	0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, |  | ||||||
| 	0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, |  | ||||||
| 	0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, |  | ||||||
| 	0x6f, 0x78, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, |  | ||||||
| 	0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, |  | ||||||
| 	0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, |  | ||||||
| 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, |  | ||||||
| 	0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, | 	0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, | ||||||
| 	0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, | 	0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | ||||||
| 	0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x57, 0x61, 0x69, | 	0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, | ||||||
| 	0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, | 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, | ||||||
| 	0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, |  | ||||||
| 	0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, |  | ||||||
| 	0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, |  | ||||||
| 	0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, |  | ||||||
| 	0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, |  | ||||||
| 	0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, |  | ||||||
| 	0x7a, 0x0a, 0x0d, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, |  | ||||||
| 	0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, |  | ||||||
| 	0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, |  | ||||||
| 	0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, |  | ||||||
| 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, |  | ||||||
| 	0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, |  | ||||||
| 	0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, |  | ||||||
| 	0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x50, |  | ||||||
| 	0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, |  | ||||||
| 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, |  | ||||||
| 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, |  | ||||||
| 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, |  | ||||||
| 	0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, | 	0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, | ||||||
| 	0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, | 	0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, | ||||||
| 	0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, | 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, | ||||||
| 	0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, | 	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, | ||||||
| 	0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, | 	0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, | ||||||
| 	0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, | 	0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, | ||||||
| 	0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, | 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, | ||||||
| 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, | 	0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, | ||||||
| 	0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, | 	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, | ||||||
| 	0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, | 	0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x76, 0x31, | ||||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, | 	0x3b, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||||
| 	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, |  | ||||||
| 	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, |  | ||||||
| 	0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x76, |  | ||||||
| 	0x31, 0x3b, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, |  | ||||||
| 	0x33, |  | ||||||
| } | } | ||||||
|  |  | ||||||
| var ( | var ( | ||||||
|   | |||||||
| @@ -113,7 +113,7 @@ message SandboxStatusRequest { | |||||||
| } | } | ||||||
|  |  | ||||||
| message SandboxStatusResponse { | message SandboxStatusResponse { | ||||||
| 	string id = 1; | 	string sandbox_id = 1; | ||||||
| 	uint32 pid = 2; | 	uint32 pid = 2; | ||||||
| 	string state = 3; | 	string state = 3; | ||||||
| 	map<string, string> info = 4; | 	map<string, string> info = 4; | ||||||
|   | |||||||
| @@ -1092,7 +1092,7 @@ type ControllerStatusResponse struct { | |||||||
| 	sizeCache     protoimpl.SizeCache | 	sizeCache     protoimpl.SizeCache | ||||||
| 	unknownFields protoimpl.UnknownFields | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
| 	ID        string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` | 	SandboxID string                 `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` | ||||||
| 	Pid       uint32                 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` | 	Pid       uint32                 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` | ||||||
| 	State     string                 `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` | 	State     string                 `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` | ||||||
| 	Info      map[string]string      `protobuf:"bytes,4,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` | 	Info      map[string]string      `protobuf:"bytes,4,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` | ||||||
| @@ -1133,9 +1133,9 @@ func (*ControllerStatusResponse) Descriptor() ([]byte, []int) { | |||||||
| 	return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{21} | 	return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{21} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (x *ControllerStatusResponse) GetID() string { | func (x *ControllerStatusResponse) GetSandboxID() string { | ||||||
| 	if x != nil { | 	if x != nil { | ||||||
| 		return x.ID | 		return x.SandboxID | ||||||
| 	} | 	} | ||||||
| 	return "" | 	return "" | ||||||
| } | } | ||||||
| @@ -1398,133 +1398,134 @@ var file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_ | |||||||
| 	0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, | 	0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, | ||||||
| 	0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x18, 0x0a, | 	0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x18, 0x0a, | ||||||
| 	0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, | 	0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, | ||||||
| 	0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x22, 0x83, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, | 	0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x22, 0x92, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, | ||||||
| 	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, | 	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, | ||||||
| 	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, | 	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, | ||||||
| 	0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, | 	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, | ||||||
| 	0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, | 	0x78, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, | ||||||
| 	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x04, | 	0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, | ||||||
| 	0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x6f, 0x6e, | 	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x04, 0x69, | ||||||
| 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, | 	0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x6f, 0x6e, 0x74, | ||||||
| 	0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, | 	0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, | ||||||
| 	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, | 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, | ||||||
| 	0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, | 	0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, | ||||||
| 	0x69, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, | 	0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, | ||||||
| 	0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, | 	0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, | ||||||
| 	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, | 	0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, | ||||||
| 	0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, | 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, | ||||||
| 	0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, | 	0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x37, | ||||||
| 	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, | 	0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, | ||||||
| 	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, | 	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||||
| 	0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, | 	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, | ||||||
| 	0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, | 	0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, | ||||||
| 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, | 	0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, | ||||||
| 	0x78, 0x74, 0x72, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, | 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x78, | ||||||
| 	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, | 	0x74, 0x72, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, | ||||||
| 	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, | 	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, | ||||||
| 	0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, | 	0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, | ||||||
| 	0x19, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, | 	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, 0x19, | ||||||
| 	0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, |  | ||||||
| 	0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, |  | ||||||
| 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, |  | ||||||
| 	0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, |  | ||||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb7, 0x04, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, |  | ||||||
| 	0x65, 0x12, 0x71, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x6f, |  | ||||||
| 	0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, |  | ||||||
| 	0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, |  | ||||||
| 	0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, |  | ||||||
| 	0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, |  | ||||||
| 	0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, |  | ||||||
| 	0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, |  | ||||||
| 	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x32, |  | ||||||
| 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, |  | ||||||
| 	0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, |  | ||||||
| 	0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, |  | ||||||
| 	0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, |  | ||||||
| 	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, |  | ||||||
| 	0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, |  | ||||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, |  | ||||||
| 	0x65, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, |  | ||||||
| 	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, |  | ||||||
| 	0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, |  | ||||||
| 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, |  | ||||||
| 	0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, |  | ||||||
| 	0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, |  | ||||||
| 	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x04, 0x4c, 0x69, |  | ||||||
| 	0x73, 0x74, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, |  | ||||||
| 	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, |  | ||||||
| 	0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, |  | ||||||
| 	0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, |  | ||||||
| 	0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, |  | ||||||
| 	0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, |  | ||||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x2f, |  | ||||||
| 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, |  | ||||||
| 	0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, |  | ||||||
| 	0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, |  | ||||||
| 	0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, |  | ||||||
| 	0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, |  | ||||||
| 	0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, |  | ||||||
| 	0x65, 0x32, 0xf6, 0x06, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, |  | ||||||
| 	0x12, 0x7b, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, |  | ||||||
| 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, |  | ||||||
| 	0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, |  | ||||||
| 	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, |  | ||||||
| 	0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, |  | ||||||
| 	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, |  | ||||||
| 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, |  | ||||||
| 	0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, |  | ||||||
| 	0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, |  | ||||||
| 	0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, |  | ||||||
| 	0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, |  | ||||||
| 	0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, |  | ||||||
| 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, |  | ||||||
| 	0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, |  | ||||||
| 	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, |  | ||||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, |  | ||||||
| 	0x66, 0x6f, 0x72, 0x6d, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, |  | ||||||
| 	0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, |  | ||||||
| 	0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, |  | ||||||
| 	0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, |  | ||||||
| 	0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, |  | ||||||
| 	0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, |  | ||||||
| 	0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, |  | ||||||
| 	0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x04, 0x53, |  | ||||||
| 	0x74, 0x6f, 0x70, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, |  | ||||||
| 	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, |  | ||||||
| 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, |  | ||||||
| 	0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, |  | ||||||
| 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, |  | ||||||
| 	0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, |  | ||||||
| 	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, |  | ||||||
| 	0x73, 0x65, 0x12, 0x75, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, |  | ||||||
| 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, |  | ||||||
| 	0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, |  | ||||||
| 	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, |  | ||||||
| 	0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, |  | ||||||
| 	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, |  | ||||||
| 	0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, |  | ||||||
| 	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x06, 0x53, 0x74, 0x61, |  | ||||||
| 	0x74, 0x75, 0x73, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, |  | ||||||
| 	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, |  | ||||||
| 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, |  | ||||||
| 	0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, |  | ||||||
| 	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, |  | ||||||
| 	0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, |  | ||||||
| 	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, |  | ||||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, |  | ||||||
| 	0x6f, 0x77, 0x6e, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, |  | ||||||
| 	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, |  | ||||||
| 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, |  | ||||||
| 	0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, |  | ||||||
| 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, |  | ||||||
| 	0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, |  | ||||||
| 	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, | 	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, | ||||||
| 	0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, | 	0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, | ||||||
| 	0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, | 	0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, | ||||||
| 	0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, | 	0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x74, | ||||||
| 	0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, | 	0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, | ||||||
| 	0x62, 0x6f, 0x78, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x62, 0x06, | 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb7, 0x04, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, | ||||||
| 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | 	0x12, 0x71, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, | ||||||
|  | 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, | ||||||
|  | 	0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, | ||||||
|  | 	0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, | ||||||
|  | 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, | ||||||
|  | 	0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, | ||||||
|  | 	0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, | ||||||
|  | 	0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, | ||||||
|  | 	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, | ||||||
|  | 	0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, | ||||||
|  | 	0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, | ||||||
|  | 	0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, | ||||||
|  | 	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, | ||||||
|  | 	0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, | ||||||
|  | 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, | ||||||
|  | 	0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, | ||||||
|  | 	0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, | ||||||
|  | 	0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, | ||||||
|  | 	0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, | ||||||
|  | 	0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, | ||||||
|  | 	0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, | ||||||
|  | 	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x04, 0x4c, 0x69, 0x73, | ||||||
|  | 	0x74, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, | ||||||
|  | 	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, | ||||||
|  | 	0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, | ||||||
|  | 	0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, | ||||||
|  | 	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, | ||||||
|  | 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, | ||||||
|  | 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x2f, 0x2e, | ||||||
|  | 	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, | ||||||
|  | 	0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, | ||||||
|  | 	0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, | ||||||
|  | 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, | ||||||
|  | 	0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, | ||||||
|  | 	0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | ||||||
|  | 	0x32, 0xf6, 0x06, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, | ||||||
|  | 	0x7b, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, | ||||||
|  | 	0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, | ||||||
|  | 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, | ||||||
|  | 	0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, | ||||||
|  | 	0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, | ||||||
|  | 	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
|  | 	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x72, | ||||||
|  | 	0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x05, | ||||||
|  | 	0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, | ||||||
|  | 	0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, | ||||||
|  | 	0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, | ||||||
|  | 	0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, | ||||||
|  | 	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, | ||||||
|  | 	0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, | ||||||
|  | 	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, | ||||||
|  | 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, | ||||||
|  | 	0x6f, 0x72, 0x6d, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, | ||||||
|  | 	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, | ||||||
|  | 	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, | ||||||
|  | 	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, | ||||||
|  | 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, | ||||||
|  | 	0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, | ||||||
|  | 	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, | ||||||
|  | 	0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x04, 0x53, 0x74, | ||||||
|  | 	0x6f, 0x70, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, | ||||||
|  | 	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
|  | 	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, | ||||||
|  | 	0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, | ||||||
|  | 	0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, | ||||||
|  | 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, | ||||||
|  | 	0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, | ||||||
|  | 	0x65, 0x12, 0x75, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, | ||||||
|  | 	0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, | ||||||
|  | 	0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, | ||||||
|  | 	0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||||
|  | 	0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, | ||||||
|  | 	0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, | ||||||
|  | 	0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, | ||||||
|  | 	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, | ||||||
|  | 	0x75, 0x73, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, | ||||||
|  | 	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
|  | 	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, | ||||||
|  | 	0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, | ||||||
|  | 	0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, | ||||||
|  | 	0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, | ||||||
|  | 	0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, | ||||||
|  | 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, | ||||||
|  | 	0x77, 0x6e, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, | ||||||
|  | 	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, | ||||||
|  | 	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, | ||||||
|  | 	0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, | ||||||
|  | 	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, | ||||||
|  | 	0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, | ||||||
|  | 	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, | ||||||
|  | 	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, | ||||||
|  | 	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, | ||||||
|  | 	0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, | ||||||
|  | 	0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, | ||||||
|  | 	0x6f, 0x78, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x62, 0x06, 0x70, | ||||||
|  | 	0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||||
| } | } | ||||||
|  |  | ||||||
| var ( | var ( | ||||||
|   | |||||||
| @@ -146,7 +146,7 @@ message ControllerStatusRequest { | |||||||
| } | } | ||||||
|  |  | ||||||
| message ControllerStatusResponse { | message ControllerStatusResponse { | ||||||
| 	string id = 1; | 	string sandbox_id = 1; | ||||||
| 	uint32 pid = 2; | 	uint32 pid = 2; | ||||||
| 	string state = 3; | 	string state = 3; | ||||||
| 	map<string, string> info = 4; | 	map<string, string> info = 4; | ||||||
|   | |||||||
| @@ -67,14 +67,14 @@ func (c *criService) CreateContainer(ctx context.Context, r *runtime.CreateConta | |||||||
| 		return nil, fmt.Errorf("failed to get sandbox controller: %w", err) | 		return nil, fmt.Errorf("failed to get sandbox controller: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	statusResponse, err := controller.Status(ctx, sandbox.ID, false) | 	cstatus, err := controller.Status(ctx, sandbox.ID, false) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to get controller status: %w", err) | 		return nil, fmt.Errorf("failed to get controller status: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	var ( | 	var ( | ||||||
| 		sandboxID  = statusResponse.GetID() | 		sandboxID  = cstatus.SandboxID | ||||||
| 		sandboxPid = statusResponse.GetPid() | 		sandboxPid = cstatus.Pid | ||||||
| 	) | 	) | ||||||
|  |  | ||||||
| 	// Generate unique id and name for the container and reserve the name. | 	// Generate unique id and name for the container and reserve the name. | ||||||
|   | |||||||
| @@ -26,7 +26,6 @@ import ( | |||||||
|  |  | ||||||
| 	"github.com/containerd/containerd" | 	"github.com/containerd/containerd" | ||||||
| 	eventtypes "github.com/containerd/containerd/api/events" | 	eventtypes "github.com/containerd/containerd/api/events" | ||||||
| 	api "github.com/containerd/containerd/api/services/sandbox/v1" |  | ||||||
| 	"github.com/containerd/containerd/errdefs" | 	"github.com/containerd/containerd/errdefs" | ||||||
| 	"github.com/containerd/containerd/oci" | 	"github.com/containerd/containerd/oci" | ||||||
| 	criconfig "github.com/containerd/containerd/pkg/cri/config" | 	criconfig "github.com/containerd/containerd/pkg/cri/config" | ||||||
| @@ -94,17 +93,17 @@ func (c *Controller) Platform(_ctx context.Context, _sandboxID string) (platform | |||||||
| 	return platforms.DefaultSpec(), nil | 	return platforms.DefaultSpec(), nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (c *Controller) Wait(ctx context.Context, sandboxID string) (*api.ControllerWaitResponse, error) { | func (c *Controller) Wait(ctx context.Context, sandboxID string) (sandbox.ExitStatus, error) { | ||||||
| 	status := c.store.Get(sandboxID) | 	status := c.store.Get(sandboxID) | ||||||
| 	if status == nil { | 	if status == nil { | ||||||
| 		return nil, fmt.Errorf("failed to get exit channel. %q", sandboxID) | 		return sandbox.ExitStatus{}, fmt.Errorf("failed to get exit channel. %q", sandboxID) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	exitStatus, exitedAt, err := c.waitSandboxExit(ctx, sandboxID, status.Waiter) | 	exitStatus, exitedAt, err := c.waitSandboxExit(ctx, sandboxID, status.Waiter) | ||||||
|  |  | ||||||
| 	return &api.ControllerWaitResponse{ | 	return sandbox.ExitStatus{ | ||||||
| 		ExitStatus: exitStatus, | 		ExitStatus: exitStatus, | ||||||
| 		ExitedAt:   protobuf.ToTimestamp(exitedAt), | 		ExitedAt:   exitedAt, | ||||||
| 	}, err | 	}, err | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,7 +25,6 @@ import ( | |||||||
| 	"github.com/containerd/containerd/pkg/cri/store/label" | 	"github.com/containerd/containerd/pkg/cri/store/label" | ||||||
| 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | ||||||
| 	ostesting "github.com/containerd/containerd/pkg/os/testing" | 	ostesting "github.com/containerd/containerd/pkg/os/testing" | ||||||
| 	"github.com/containerd/containerd/protobuf" |  | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -83,6 +82,6 @@ func Test_Status(t *testing.T) { | |||||||
| 		t.Fatal(err) | 		t.Fatal(err) | ||||||
| 	} | 	} | ||||||
| 	assert.Equal(t, s.Pid, pid) | 	assert.Equal(t, s.Pid, pid) | ||||||
| 	assert.Equal(t, s.ExitedAt, protobuf.ToTimestamp(exitedAt)) | 	assert.Equal(t, s.ExitedAt, exitedAt) | ||||||
| 	assert.Equal(t, s.State, sandboxstore.StateReady.String()) | 	assert.Equal(t, s.State, sandboxstore.StateReady.String()) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -23,30 +23,29 @@ import ( | |||||||
| 	runtime "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtime "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  |  | ||||||
| 	"github.com/containerd/containerd" | 	"github.com/containerd/containerd" | ||||||
| 	api "github.com/containerd/containerd/api/services/sandbox/v1" |  | ||||||
| 	"github.com/containerd/containerd/errdefs" | 	"github.com/containerd/containerd/errdefs" | ||||||
| 	"github.com/containerd/containerd/log" | 	"github.com/containerd/containerd/log" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func (c *Controller) Shutdown(ctx context.Context, sandboxID string) (*api.ControllerShutdownResponse, error) { | func (c *Controller) Shutdown(ctx context.Context, sandboxID string) error { | ||||||
| 	sandbox, err := c.sandboxStore.Get(sandboxID) | 	sandbox, err := c.sandboxStore.Get(sandboxID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if !errdefs.IsNotFound(err) { | 		if !errdefs.IsNotFound(err) { | ||||||
| 			return nil, fmt.Errorf("an error occurred when try to find sandbox %q: %w", sandboxID, err) | 			return fmt.Errorf("an error occurred when try to find sandbox %q: %w", sandboxID, err) | ||||||
| 		} | 		} | ||||||
| 		// Do not return error if the id doesn't exist. | 		// Do not return error if the id doesn't exist. | ||||||
| 		log.G(ctx).Tracef("Sandbox controller Delete called for sandbox %q that does not exist", sandboxID) | 		log.G(ctx).Tracef("Sandbox controller Delete called for sandbox %q that does not exist", sandboxID) | ||||||
| 		return &api.ControllerShutdownResponse{}, nil | 		return nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Cleanup the sandbox root directories. | 	// Cleanup the sandbox root directories. | ||||||
| 	sandboxRootDir := c.getSandboxRootDir(sandboxID) | 	sandboxRootDir := c.getSandboxRootDir(sandboxID) | ||||||
| 	if err := ensureRemoveAll(ctx, sandboxRootDir); err != nil { | 	if err := ensureRemoveAll(ctx, sandboxRootDir); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to remove sandbox root directory %q: %w", sandboxRootDir, err) | 		return fmt.Errorf("failed to remove sandbox root directory %q: %w", sandboxRootDir, err) | ||||||
| 	} | 	} | ||||||
| 	volatileSandboxRootDir := c.getVolatileSandboxRootDir(sandboxID) | 	volatileSandboxRootDir := c.getVolatileSandboxRootDir(sandboxID) | ||||||
| 	if err := ensureRemoveAll(ctx, volatileSandboxRootDir); err != nil { | 	if err := ensureRemoveAll(ctx, volatileSandboxRootDir); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to remove volatile sandbox root directory %q: %w", | 		return fmt.Errorf("failed to remove volatile sandbox root directory %q: %w", | ||||||
| 			volatileSandboxRootDir, err) | 			volatileSandboxRootDir, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -54,7 +53,7 @@ func (c *Controller) Shutdown(ctx context.Context, sandboxID string) (*api.Contr | |||||||
| 	if sandbox.Container != nil { | 	if sandbox.Container != nil { | ||||||
| 		if err := sandbox.Container.Delete(ctx, containerd.WithSnapshotCleanup); err != nil { | 		if err := sandbox.Container.Delete(ctx, containerd.WithSnapshotCleanup); err != nil { | ||||||
| 			if !errdefs.IsNotFound(err) { | 			if !errdefs.IsNotFound(err) { | ||||||
| 				return nil, fmt.Errorf("failed to delete sandbox container %q: %w", sandboxID, err) | 				return fmt.Errorf("failed to delete sandbox container %q: %w", sandboxID, err) | ||||||
| 			} | 			} | ||||||
| 			log.G(ctx).Tracef("Sandbox controller Delete called for sandbox container %q that does not exist", sandboxID) | 			log.G(ctx).Tracef("Sandbox controller Delete called for sandbox container %q that does not exist", sandboxID) | ||||||
| 		} | 		} | ||||||
| @@ -65,5 +64,5 @@ func (c *Controller) Shutdown(ctx context.Context, sandboxID string) (*api.Contr | |||||||
| 	// Send CONTAINER_DELETED event with ContainerId equal to SandboxId. | 	// Send CONTAINER_DELETED event with ContainerId equal to SandboxId. | ||||||
| 	c.cri.GenerateAndSendContainerEvent(ctx, sandboxID, sandboxID, runtime.ContainerEventType_CONTAINER_DELETED_EVENT) | 	c.cri.GenerateAndSendContainerEvent(ctx, sandboxID, sandboxID, runtime.ContainerEventType_CONTAINER_DELETED_EVENT) | ||||||
|  |  | ||||||
| 	return &api.ControllerShutdownResponse{}, nil | 	return nil | ||||||
| } | } | ||||||
|   | |||||||
| @@ -29,7 +29,6 @@ import ( | |||||||
| 	runtime "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtime "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  |  | ||||||
| 	"github.com/containerd/containerd" | 	"github.com/containerd/containerd" | ||||||
| 	api "github.com/containerd/containerd/api/services/sandbox/v1" |  | ||||||
| 	containerdio "github.com/containerd/containerd/cio" | 	containerdio "github.com/containerd/containerd/cio" | ||||||
| 	"github.com/containerd/containerd/errdefs" | 	"github.com/containerd/containerd/errdefs" | ||||||
| 	"github.com/containerd/containerd/log" | 	"github.com/containerd/containerd/log" | ||||||
| @@ -38,7 +37,7 @@ import ( | |||||||
| 	customopts "github.com/containerd/containerd/pkg/cri/opts" | 	customopts "github.com/containerd/containerd/pkg/cri/opts" | ||||||
| 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | ||||||
| 	ctrdutil "github.com/containerd/containerd/pkg/cri/util" | 	ctrdutil "github.com/containerd/containerd/pkg/cri/util" | ||||||
| 	"github.com/containerd/containerd/protobuf" | 	"github.com/containerd/containerd/sandbox" | ||||||
| 	"github.com/containerd/containerd/snapshots" | 	"github.com/containerd/containerd/snapshots" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -51,23 +50,22 @@ func init() { | |||||||
| // down the created resources.  If an error occurs while tearing down resources, a zero-valued response is returned | // down the created resources.  If an error occurs while tearing down resources, a zero-valued response is returned | ||||||
| // alongside the error.  If the teardown was successful, a nil response is returned with the error. | // alongside the error.  If the teardown was successful, a nil response is returned with the error. | ||||||
| // TODO(samuelkarp) Determine whether this error indication is reasonable to retain once controller.Delete is implemented. | // TODO(samuelkarp) Determine whether this error indication is reasonable to retain once controller.Delete is implemented. | ||||||
| func (c *Controller) Start(ctx context.Context, id string) (resp *api.ControllerStartResponse, retErr error) { | func (c *Controller) Start(ctx context.Context, id string) (cin sandbox.ControllerInstance, retErr error) { | ||||||
| 	var cleanupErr error | 	var cleanupErr error | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if retErr != nil && cleanupErr != nil { | 		if retErr != nil && cleanupErr != nil { | ||||||
| 			log.G(ctx).WithField("id", id).WithError(cleanupErr).Errorf("failed to fully teardown sandbox resources after earlier error: %s", retErr) | 			log.G(ctx).WithField("id", id).WithError(cleanupErr).Errorf("failed to fully teardown sandbox resources after earlier error: %s", retErr) | ||||||
| 			resp = &api.ControllerStartResponse{} |  | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
|  |  | ||||||
| 	sandboxInfo, err := c.client.SandboxStore().Get(ctx, id) | 	sandboxInfo, err := c.client.SandboxStore().Get(ctx, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("unable to find sandbox with id %q: %w", id, err) | 		return cin, fmt.Errorf("unable to find sandbox with id %q: %w", id, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	var metadata sandboxstore.Metadata | 	var metadata sandboxstore.Metadata | ||||||
| 	if err := sandboxInfo.GetExtension(MetadataKey, &metadata); err != nil { | 	if err := sandboxInfo.GetExtension(MetadataKey, &metadata); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to get sandbox %q metadata: %w", id, err) | 		return cin, fmt.Errorf("failed to get sandbox %q metadata: %w", id, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	var ( | 	var ( | ||||||
| @@ -78,17 +76,17 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 	// Ensure sandbox container image snapshot. | 	// Ensure sandbox container image snapshot. | ||||||
| 	image, err := c.cri.EnsureImageExists(ctx, c.config.SandboxImage, config) | 	image, err := c.cri.EnsureImageExists(ctx, c.config.SandboxImage, config) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to get sandbox image %q: %w", c.config.SandboxImage, err) | 		return cin, fmt.Errorf("failed to get sandbox image %q: %w", c.config.SandboxImage, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	containerdImage, err := c.toContainerdImage(ctx, *image) | 	containerdImage, err := c.toContainerdImage(ctx, *image) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to get image from containerd %q: %w", image.ID, err) | 		return cin, fmt.Errorf("failed to get image from containerd %q: %w", image.ID, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ociRuntime, err := c.getSandboxRuntime(config, metadata.RuntimeHandler) | 	ociRuntime, err := c.getSandboxRuntime(config, metadata.RuntimeHandler) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to get sandbox runtime: %w", err) | 		return cin, fmt.Errorf("failed to get sandbox runtime: %w", err) | ||||||
| 	} | 	} | ||||||
| 	log.G(ctx).WithField("podsandboxid", id).Debugf("use OCI runtime %+v", ociRuntime) | 	log.G(ctx).WithField("podsandboxid", id).Debugf("use OCI runtime %+v", ociRuntime) | ||||||
|  |  | ||||||
| @@ -100,7 +98,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 	// it safely. | 	// it safely. | ||||||
| 	spec, err := c.sandboxContainerSpec(id, config, &image.ImageSpec.Config, metadata.NetNSPath, ociRuntime.PodAnnotations) | 	spec, err := c.sandboxContainerSpec(id, config, &image.ImageSpec.Config, metadata.NetNSPath, ociRuntime.PodAnnotations) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to generate sandbox container spec: %w", err) | 		return cin, fmt.Errorf("failed to generate sandbox container spec: %w", err) | ||||||
| 	} | 	} | ||||||
| 	log.G(ctx).WithField("podsandboxid", id).Debugf("sandbox container spec: %#+v", spew.NewFormatter(spec)) | 	log.G(ctx).WithField("podsandboxid", id).Debugf("sandbox container spec: %#+v", spew.NewFormatter(spec)) | ||||||
|  |  | ||||||
| @@ -114,7 +112,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
|  |  | ||||||
| 	// handle any KVM based runtime | 	// handle any KVM based runtime | ||||||
| 	if err := modifyProcessLabel(ociRuntime.Type, spec); err != nil { | 	if err := modifyProcessLabel(ociRuntime.Type, spec); err != nil { | ||||||
| 		return nil, err | 		return cin, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if config.GetLinux().GetSecurityContext().GetPrivileged() { | 	if config.GetLinux().GetSecurityContext().GetPrivileged() { | ||||||
| @@ -126,7 +124,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 	// Generate spec options that will be applied to the spec later. | 	// Generate spec options that will be applied to the spec later. | ||||||
| 	specOpts, err := c.sandboxContainerSpecOpts(config, &image.ImageSpec.Config) | 	specOpts, err := c.sandboxContainerSpecOpts(config, &image.ImageSpec.Config) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to generate sandbox container spec options: %w", err) | 		return cin, fmt.Errorf("failed to generate sandbox container spec options: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	sandboxLabels := buildLabels(config.Labels, image.ImageSpec.Config.Labels, containerKindSandbox) | 	sandboxLabels := buildLabels(config.Labels, image.ImageSpec.Config.Labels, containerKindSandbox) | ||||||
| @@ -143,7 +141,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
|  |  | ||||||
| 	container, err := c.client.NewContainer(ctx, id, opts...) | 	container, err := c.client.NewContainer(ctx, id, opts...) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to create containerd container: %w", err) | 		return cin, fmt.Errorf("failed to create containerd container: %w", err) | ||||||
| 	} | 	} | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if retErr != nil && cleanupErr == nil { | 		if retErr != nil && cleanupErr == nil { | ||||||
| @@ -163,7 +161,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 	// Create sandbox container root directories. | 	// Create sandbox container root directories. | ||||||
| 	sandboxRootDir := c.getSandboxRootDir(id) | 	sandboxRootDir := c.getSandboxRootDir(id) | ||||||
| 	if err := c.os.MkdirAll(sandboxRootDir, 0755); err != nil { | 	if err := c.os.MkdirAll(sandboxRootDir, 0755); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to create sandbox root directory %q: %w", | 		return cin, fmt.Errorf("failed to create sandbox root directory %q: %w", | ||||||
| 			sandboxRootDir, err) | 			sandboxRootDir, err) | ||||||
| 	} | 	} | ||||||
| 	defer func() { | 	defer func() { | ||||||
| @@ -178,7 +176,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
|  |  | ||||||
| 	volatileSandboxRootDir := c.getVolatileSandboxRootDir(id) | 	volatileSandboxRootDir := c.getVolatileSandboxRootDir(id) | ||||||
| 	if err := c.os.MkdirAll(volatileSandboxRootDir, 0755); err != nil { | 	if err := c.os.MkdirAll(volatileSandboxRootDir, 0755); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to create volatile sandbox root directory %q: %w", | 		return cin, fmt.Errorf("failed to create volatile sandbox root directory %q: %w", | ||||||
| 			volatileSandboxRootDir, err) | 			volatileSandboxRootDir, err) | ||||||
| 	} | 	} | ||||||
| 	defer func() { | 	defer func() { | ||||||
| @@ -193,7 +191,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
|  |  | ||||||
| 	// Setup files required for the sandbox. | 	// Setup files required for the sandbox. | ||||||
| 	if err = c.setupSandboxFiles(id, config); err != nil { | 	if err = c.setupSandboxFiles(id, config); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to setup sandbox files: %w", err) | 		return cin, fmt.Errorf("failed to setup sandbox files: %w", err) | ||||||
| 	} | 	} | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if retErr != nil && cleanupErr == nil { | 		if retErr != nil && cleanupErr == nil { | ||||||
| @@ -207,7 +205,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 	// Update sandbox created timestamp. | 	// Update sandbox created timestamp. | ||||||
| 	info, err := container.Info(ctx) | 	info, err := container.Info(ctx) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to get sandbox container info: %w", err) | 		return cin, fmt.Errorf("failed to get sandbox container info: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Create sandbox task in containerd. | 	// Create sandbox task in containerd. | ||||||
| @@ -221,7 +219,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 	// We don't need stdio for sandbox container. | 	// We don't need stdio for sandbox container. | ||||||
| 	task, err := container.NewTask(ctx, containerdio.NullIO, taskOpts...) | 	task, err := container.NewTask(ctx, containerdio.NullIO, taskOpts...) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to create containerd task: %w", err) | 		return cin, fmt.Errorf("failed to create containerd task: %w", err) | ||||||
| 	} | 	} | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if retErr != nil && cleanupErr == nil { | 		if retErr != nil && cleanupErr == nil { | ||||||
| @@ -238,13 +236,13 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 	// wait is a long running background request, no timeout needed. | 	// wait is a long running background request, no timeout needed. | ||||||
| 	exitCh, err := task.Wait(ctrdutil.NamespacedContext()) | 	exitCh, err := task.Wait(ctrdutil.NamespacedContext()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to wait for sandbox container task: %w", err) | 		return cin, fmt.Errorf("failed to wait for sandbox container task: %w", err) | ||||||
| 	} | 	} | ||||||
| 	c.store.Save(id, exitCh) | 	c.store.Save(id, exitCh) | ||||||
|  |  | ||||||
| 	nric, err := nri.New() | 	nric, err := nri.New() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("unable to create nri client: %w", err) | 		return cin, fmt.Errorf("unable to create nri client: %w", err) | ||||||
| 	} | 	} | ||||||
| 	if nric != nil { | 	if nric != nil { | ||||||
| 		nriSB := &nri.Sandbox{ | 		nriSB := &nri.Sandbox{ | ||||||
| @@ -252,25 +250,23 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller | |||||||
| 			Labels: config.Labels, | 			Labels: config.Labels, | ||||||
| 		} | 		} | ||||||
| 		if _, err := nric.InvokeWithSandbox(ctx, task, v1.Create, nriSB); err != nil { | 		if _, err := nric.InvokeWithSandbox(ctx, task, v1.Create, nriSB); err != nil { | ||||||
| 			return nil, fmt.Errorf("nri invoke: %w", err) | 			return cin, fmt.Errorf("nri invoke: %w", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := task.Start(ctx); err != nil { | 	if err := task.Start(ctx); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to start sandbox container task %q: %w", id, err) | 		return cin, fmt.Errorf("failed to start sandbox container task %q: %w", id, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Send CONTAINER_STARTED event with ContainerId equal to SandboxId. | 	// Send CONTAINER_STARTED event with ContainerId equal to SandboxId. | ||||||
| 	c.cri.GenerateAndSendContainerEvent(ctx, id, id, runtime.ContainerEventType_CONTAINER_STARTED_EVENT) | 	c.cri.GenerateAndSendContainerEvent(ctx, id, id, runtime.ContainerEventType_CONTAINER_STARTED_EVENT) | ||||||
|  |  | ||||||
| 	resp = &api.ControllerStartResponse{ | 	cin.SandboxID = id | ||||||
| 		SandboxID: id, | 	cin.Pid = task.Pid() | ||||||
| 		Pid:       task.Pid(), | 	cin.CreatedAt = info.CreatedAt | ||||||
| 		CreatedAt: protobuf.ToTimestamp(info.CreatedAt), | 	cin.Labels = labels | ||||||
| 		Labels:    labels, |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return resp, nil | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
| func (c *Controller) Create(ctx context.Context, _id string) error { | func (c *Controller) Create(ctx context.Context, _id string) error { | ||||||
|   | |||||||
| @@ -22,11 +22,10 @@ import ( | |||||||
| 	"fmt" | 	"fmt" | ||||||
|  |  | ||||||
| 	"github.com/containerd/containerd" | 	"github.com/containerd/containerd" | ||||||
| 	api "github.com/containerd/containerd/api/services/sandbox/v1" |  | ||||||
| 	"github.com/containerd/containerd/containers" | 	"github.com/containerd/containerd/containers" | ||||||
| 	"github.com/containerd/containerd/errdefs" | 	"github.com/containerd/containerd/errdefs" | ||||||
| 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | ||||||
| 	"github.com/containerd/containerd/protobuf" | 	"github.com/containerd/containerd/sandbox" | ||||||
| 	"github.com/containerd/go-cni" | 	"github.com/containerd/go-cni" | ||||||
| 	"github.com/containerd/typeurl" | 	"github.com/containerd/typeurl" | ||||||
| 	runtimespec "github.com/opencontainers/runtime-spec/specs-go" | 	runtimespec "github.com/opencontainers/runtime-spec/specs-go" | ||||||
| @@ -55,36 +54,36 @@ type SandboxInfo struct { | |||||||
| 	Metadata    *sandboxstore.Metadata `json:"sandboxMetadata"` | 	Metadata    *sandboxstore.Metadata `json:"sandboxMetadata"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func (c *Controller) Status(ctx context.Context, sandboxID string, verbose bool) (*api.ControllerStatusResponse, error) { | func (c *Controller) Status(ctx context.Context, sandboxID string, verbose bool) (sandbox.ControllerStatus, error) { | ||||||
| 	sandbox, err := c.sandboxStore.Get(sandboxID) | 	sb, err := c.sandboxStore.Get(sandboxID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("an error occurred while trying to find sandbox %q: %w", | 		return sandbox.ControllerStatus{}, fmt.Errorf("an error occurred while trying to find sandbox %q: %w", | ||||||
| 			sandboxID, err) | 			sandboxID, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	status := sandbox.Status.Get() | 	status := sb.Status.Get() | ||||||
| 	resp := &api.ControllerStatusResponse{ | 	cstatus := sandbox.ControllerStatus{ | ||||||
| 		ID:        sandboxID, | 		SandboxID: sandboxID, | ||||||
| 		Pid:       status.Pid, | 		Pid:       status.Pid, | ||||||
| 		State:     status.State.String(), | 		State:     status.State.String(), | ||||||
| 		CreatedAt: protobuf.ToTimestamp(status.CreatedAt), | 		CreatedAt: status.CreatedAt, | ||||||
| 		Extra:     nil, | 		Extra:     nil, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if !status.ExitedAt.IsZero() { | 	if !status.ExitedAt.IsZero() { | ||||||
| 		resp.ExitedAt = protobuf.ToTimestamp(status.ExitedAt) | 		cstatus.ExitedAt = status.ExitedAt | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if verbose { | 	if verbose { | ||||||
| 		info, err := toCRISandboxInfo(ctx, sandbox) | 		info, err := toCRISandboxInfo(ctx, sb) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return sandbox.ControllerStatus{}, err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		resp.Info = info | 		cstatus.Info = info | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return resp, nil | 	return cstatus, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| // toCRISandboxInfo converts internal container object information to CRI sandbox status response info map. | // toCRISandboxInfo converts internal container object information to CRI sandbox status response info map. | ||||||
|   | |||||||
| @@ -25,22 +25,21 @@ import ( | |||||||
| 	"github.com/sirupsen/logrus" | 	"github.com/sirupsen/logrus" | ||||||
|  |  | ||||||
| 	eventtypes "github.com/containerd/containerd/api/events" | 	eventtypes "github.com/containerd/containerd/api/events" | ||||||
| 	api "github.com/containerd/containerd/api/services/sandbox/v1" |  | ||||||
| 	"github.com/containerd/containerd/errdefs" | 	"github.com/containerd/containerd/errdefs" | ||||||
| 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | 	sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox" | ||||||
| 	ctrdutil "github.com/containerd/containerd/pkg/cri/util" | 	ctrdutil "github.com/containerd/containerd/pkg/cri/util" | ||||||
| 	"github.com/containerd/containerd/protobuf" | 	"github.com/containerd/containerd/protobuf" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func (c *Controller) Stop(ctx context.Context, sandboxID string) (*api.ControllerStopResponse, error) { | func (c *Controller) Stop(ctx context.Context, sandboxID string) error { | ||||||
| 	sandbox, err := c.sandboxStore.Get(sandboxID) | 	sandbox, err := c.sandboxStore.Get(sandboxID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("an error occurred when try to find sandbox %q: %w", | 		return fmt.Errorf("an error occurred when try to find sandbox %q: %w", | ||||||
| 			sandboxID, err) | 			sandboxID, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := c.cleanupSandboxFiles(sandboxID, sandbox.Config); err != nil { | 	if err := c.cleanupSandboxFiles(sandboxID, sandbox.Config); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to cleanup sandbox files: %w", err) | 		return fmt.Errorf("failed to cleanup sandbox files: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// TODO: The Controller maintains its own Status instead of CRI's sandboxStore. | 	// TODO: The Controller maintains its own Status instead of CRI's sandboxStore. | ||||||
| @@ -48,10 +47,10 @@ func (c *Controller) Stop(ctx context.Context, sandboxID string) (*api.Controlle | |||||||
| 	state := sandbox.Status.Get().State | 	state := sandbox.Status.Get().State | ||||||
| 	if (state == sandboxstore.StateReady || state == sandboxstore.StateUnknown) && sandbox.Container != nil { | 	if (state == sandboxstore.StateReady || state == sandboxstore.StateUnknown) && sandbox.Container != nil { | ||||||
| 		if err := c.stopSandboxContainer(ctx, sandbox); err != nil { | 		if err := c.stopSandboxContainer(ctx, sandbox); err != nil { | ||||||
| 			return nil, fmt.Errorf("failed to stop sandbox container %q in %q state: %w", sandboxID, state, err) | 			return fmt.Errorf("failed to stop sandbox container %q in %q state: %w", sandboxID, state, err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return &api.ControllerStopResponse{}, nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| // stopSandboxContainer kills the sandbox container. | // stopSandboxContainer kills the sandbox container. | ||||||
|   | |||||||
| @@ -86,7 +86,7 @@ func (c *criService) RemovePodSandbox(ctx context.Context, r *runtime.RemovePodS | |||||||
| 		return nil, fmt.Errorf("failed to get sandbox controller: %w", err) | 		return nil, fmt.Errorf("failed to get sandbox controller: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if _, err := controller.Shutdown(ctx, id); err != nil && !errdefs.IsNotFound(err) { | 	if err := controller.Shutdown(ctx, id); err != nil && !errdefs.IsNotFound(err) { | ||||||
| 		return nil, fmt.Errorf("failed to delete sandbox %q: %w", id, err) | 		return nil, fmt.Errorf("failed to delete sandbox %q: %w", id, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -41,7 +41,6 @@ import ( | |||||||
| 	"github.com/containerd/containerd/pkg/cri/util" | 	"github.com/containerd/containerd/pkg/cri/util" | ||||||
| 	ctrdutil "github.com/containerd/containerd/pkg/cri/util" | 	ctrdutil "github.com/containerd/containerd/pkg/cri/util" | ||||||
| 	"github.com/containerd/containerd/pkg/netns" | 	"github.com/containerd/containerd/pkg/netns" | ||||||
| 	"github.com/containerd/containerd/protobuf" |  | ||||||
| 	sb "github.com/containerd/containerd/sandbox" | 	sb "github.com/containerd/containerd/sandbox" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -230,10 +229,10 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox | |||||||
| 		return nil, fmt.Errorf("failed to create sandbox %q: %w", id, err) | 		return nil, fmt.Errorf("failed to create sandbox %q: %w", id, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	resp, err := controller.Start(ctx, id) | 	ctrl, err := controller.Start(ctx, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		sandbox.Container, _ = c.client.LoadContainer(ctx, id) | 		sandbox.Container, _ = c.client.LoadContainer(ctx, id) | ||||||
| 		if resp != nil && resp.SandboxID == "" && resp.Pid == 0 && resp.CreatedAt == nil && len(resp.Labels) == 0 { | 		if ctrl.SandboxID == "" && ctrl.Pid == 0 && ctrl.CreatedAt.IsZero() && len(ctrl.Labels) == 0 { | ||||||
| 			// if resp is a non-nil zero-value, an error occurred during cleanup | 			// if resp is a non-nil zero-value, an error occurred during cleanup | ||||||
| 			cleanupErr = fmt.Errorf("failed to cleanup sandbox") | 			cleanupErr = fmt.Errorf("failed to cleanup sandbox") | ||||||
| 		} | 		} | ||||||
| @@ -249,7 +248,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox | |||||||
| 		sandbox.Container = container | 		sandbox.Container = container | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	labels := resp.GetLabels() | 	labels := ctrl.Labels | ||||||
| 	if labels == nil { | 	if labels == nil { | ||||||
| 		labels = map[string]string{} | 		labels = map[string]string{} | ||||||
| 	} | 	} | ||||||
| @@ -258,9 +257,9 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox | |||||||
|  |  | ||||||
| 	if err := sandbox.Status.Update(func(status sandboxstore.Status) (sandboxstore.Status, error) { | 	if err := sandbox.Status.Update(func(status sandboxstore.Status) (sandboxstore.Status, error) { | ||||||
| 		// Set the pod sandbox as ready after successfully start sandbox container. | 		// Set the pod sandbox as ready after successfully start sandbox container. | ||||||
| 		status.Pid = resp.Pid | 		status.Pid = ctrl.Pid | ||||||
| 		status.State = sandboxstore.StateReady | 		status.State = sandboxstore.StateReady | ||||||
| 		status.CreatedAt = protobuf.FromTimestamp(resp.CreatedAt) | 		status.CreatedAt = ctrl.CreatedAt | ||||||
| 		return status, nil | 		return status, nil | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to update sandbox status: %w", err) | 		return nil, fmt.Errorf("failed to update sandbox status: %w", err) | ||||||
| @@ -284,7 +283,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox | |||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		exitCh <- *containerd.NewExitStatus(resp.ExitStatus, protobuf.FromTimestamp(resp.ExitedAt), nil) | 		exitCh <- *containerd.NewExitStatus(resp.ExitStatus, resp.ExitedAt, nil) | ||||||
| 	}() | 	}() | ||||||
|  |  | ||||||
| 	// start the monitor after adding sandbox into the store, this ensures | 	// start the monitor after adding sandbox into the store, this ensures | ||||||
| @@ -292,7 +291,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox | |||||||
| 	// | 	// | ||||||
| 	// TaskOOM from containerd may come before sandbox is added to store, | 	// TaskOOM from containerd may come before sandbox is added to store, | ||||||
| 	// but we don't care about sandbox TaskOOM right now, so it is fine. | 	// but we don't care about sandbox TaskOOM right now, so it is fine. | ||||||
| 	c.eventMonitor.startSandboxExitMonitor(context.Background(), id, resp.GetPid(), exitCh) | 	c.eventMonitor.startSandboxExitMonitor(context.Background(), id, ctrl.Pid, exitCh) | ||||||
|  |  | ||||||
| 	sandboxRuntimeCreateTimer.WithValues(labels["oci_runtime_type"]).UpdateSince(runtimeStart) | 	sandboxRuntimeCreateTimer.WithValues(labels["oci_runtime_type"]).UpdateSince(runtimeStart) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -42,12 +42,12 @@ func (c *criService) PodSandboxStatus(ctx context.Context, r *runtime.PodSandbox | |||||||
| 		return nil, fmt.Errorf("failed to get sandbox controller: %w", err) | 		return nil, fmt.Errorf("failed to get sandbox controller: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	statusResponse, err := controller.Status(ctx, sandbox.ID, r.GetVerbose()) | 	cstatus, err := controller.Status(ctx, sandbox.ID, r.GetVerbose()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to query controller status: %w", err) | 		return nil, fmt.Errorf("failed to query controller status: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	status := toCRISandboxStatus(sandbox.Metadata, statusResponse.State, statusResponse.GetCreatedAt().AsTime(), ip, additionalIPs) | 	status := toCRISandboxStatus(sandbox.Metadata, cstatus.State, cstatus.CreatedAt, ip, additionalIPs) | ||||||
| 	if status.GetCreatedAt() == 0 { | 	if status.GetCreatedAt() == 0 { | ||||||
| 		// CRI doesn't allow CreatedAt == 0. | 		// CRI doesn't allow CreatedAt == 0. | ||||||
| 		sandboxInfo, err := c.client.SandboxStore().Get(ctx, sandbox.ID) | 		sandboxInfo, err := c.client.SandboxStore().Get(ctx, sandbox.ID) | ||||||
| @@ -59,7 +59,7 @@ func (c *criService) PodSandboxStatus(ctx context.Context, r *runtime.PodSandbox | |||||||
|  |  | ||||||
| 	return &runtime.PodSandboxStatusResponse{ | 	return &runtime.PodSandboxStatusResponse{ | ||||||
| 		Status: status, | 		Status: status, | ||||||
| 		Info:   statusResponse.GetInfo(), | 		Info:   cstatus.Info, | ||||||
| 	}, nil | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -73,7 +73,7 @@ func (c *criService) stopPodSandbox(ctx context.Context, sandbox sandboxstore.Sa | |||||||
| 			return fmt.Errorf("failed to get sandbox controller: %w", err) | 			return fmt.Errorf("failed to get sandbox controller: %w", err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if _, err := controller.Stop(ctx, id); err != nil { | 		if err := controller.Stop(ctx, id); err != nil { | ||||||
| 			return fmt.Errorf("failed to stop sandbox %q: %w", id, err) | 			return fmt.Errorf("failed to stop sandbox %q: %w", id, err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								sandbox.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								sandbox.go
									
									
									
									
									
								
							| @@ -24,7 +24,6 @@ import ( | |||||||
|  |  | ||||||
| 	"github.com/containerd/containerd/containers" | 	"github.com/containerd/containerd/containers" | ||||||
| 	"github.com/containerd/containerd/oci" | 	"github.com/containerd/containerd/oci" | ||||||
| 	"github.com/containerd/containerd/protobuf" |  | ||||||
| 	"github.com/containerd/containerd/protobuf/types" | 	"github.com/containerd/containerd/protobuf/types" | ||||||
| 	api "github.com/containerd/containerd/sandbox" | 	api "github.com/containerd/containerd/sandbox" | ||||||
| 	"github.com/containerd/typeurl" | 	"github.com/containerd/typeurl" | ||||||
| @@ -96,7 +95,7 @@ func (s *sandboxClient) Wait(ctx context.Context) (<-chan ExitStatus, error) { | |||||||
| 	go func() { | 	go func() { | ||||||
| 		defer close(c) | 		defer close(c) | ||||||
|  |  | ||||||
| 		resp, err := s.client.SandboxController().Wait(ctx, s.ID()) | 		exitStatus, err := s.client.SandboxController().Wait(ctx, s.ID()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			c <- ExitStatus{ | 			c <- ExitStatus{ | ||||||
| 				code: UnknownExitStatus, | 				code: UnknownExitStatus, | ||||||
| @@ -106,8 +105,8 @@ func (s *sandboxClient) Wait(ctx context.Context) (<-chan ExitStatus, error) { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		c <- ExitStatus{ | 		c <- ExitStatus{ | ||||||
| 			code:     resp.ExitStatus, | 			code:     exitStatus.ExitStatus, | ||||||
| 			exitedAt: protobuf.FromTimestamp(resp.ExitedAt), | 			exitedAt: exitStatus.ExitedAt, | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
|  |  | ||||||
| @@ -115,14 +114,11 @@ func (s *sandboxClient) Wait(ctx context.Context) (<-chan ExitStatus, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (s *sandboxClient) Stop(ctx context.Context) error { | func (s *sandboxClient) Stop(ctx context.Context) error { | ||||||
| 	if _, err := s.client.SandboxController().Stop(ctx, s.ID()); err != nil { | 	return s.client.SandboxController().Stop(ctx, s.ID()) | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s *sandboxClient) Shutdown(ctx context.Context) error { | func (s *sandboxClient) Shutdown(ctx context.Context) error { | ||||||
| 	if _, err := s.client.SandboxController().Shutdown(ctx, s.ID()); err != nil { | 	if err := s.client.SandboxController().Shutdown(ctx, s.ID()); err != nil { | ||||||
| 		return fmt.Errorf("failed to shutdown sandbox: %w", err) | 		return fmt.Errorf("failed to shutdown sandbox: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,9 +18,10 @@ package sandbox | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/containerd/containerd/api/services/sandbox/v1" |  | ||||||
| 	"github.com/containerd/containerd/platforms" | 	"github.com/containerd/containerd/platforms" | ||||||
|  | 	"github.com/containerd/typeurl" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // Controller is an interface to manage sandboxes at runtime. | // Controller is an interface to manage sandboxes at runtime. | ||||||
| @@ -30,17 +31,39 @@ type Controller interface { | |||||||
| 	// Create is used to initialize sandbox environment. | 	// Create is used to initialize sandbox environment. | ||||||
| 	Create(ctx context.Context, sandboxID string) error | 	Create(ctx context.Context, sandboxID string) error | ||||||
| 	// Start will start previously created sandbox. | 	// Start will start previously created sandbox. | ||||||
| 	Start(ctx context.Context, sandboxID string) (*sandbox.ControllerStartResponse, error) | 	Start(ctx context.Context, sandboxID string) (ControllerInstance, error) | ||||||
| 	// Platform returns target sandbox OS that will be used by Controller. | 	// Platform returns target sandbox OS that will be used by Controller. | ||||||
| 	// containerd will rely on this to generate proper OCI spec. | 	// containerd will rely on this to generate proper OCI spec. | ||||||
| 	Platform(_ctx context.Context, _sandboxID string) (platforms.Platform, error) | 	Platform(_ctx context.Context, _sandboxID string) (platforms.Platform, error) | ||||||
| 	// Stop will stop sandbox instance | 	// Stop will stop sandbox instance | ||||||
| 	Stop(ctx context.Context, sandboxID string) (*sandbox.ControllerStopResponse, error) | 	Stop(ctx context.Context, sandboxID string) error | ||||||
| 	// Wait blocks until sandbox process exits. | 	// Wait blocks until sandbox process exits. | ||||||
| 	Wait(ctx context.Context, sandboxID string) (*sandbox.ControllerWaitResponse, error) | 	Wait(ctx context.Context, sandboxID string) (ExitStatus, error) | ||||||
| 	// Status will query sandbox process status. It is heavier than Ping call and must be used whenever you need to | 	// Status will query sandbox process status. It is heavier than Ping call and must be used whenever you need to | ||||||
| 	// gather metadata about current sandbox state (status, uptime, resource use, etc). | 	// gather metadata about current sandbox state (status, uptime, resource use, etc). | ||||||
| 	Status(ctx context.Context, sandboxID string, verbose bool) (*sandbox.ControllerStatusResponse, error) | 	Status(ctx context.Context, sandboxID string, verbose bool) (ControllerStatus, error) | ||||||
| 	// Shutdown deletes and cleans all tasks and sandbox instance. | 	// Shutdown deletes and cleans all tasks and sandbox instance. | ||||||
| 	Shutdown(ctx context.Context, sandboxID string) (*sandbox.ControllerShutdownResponse, error) | 	Shutdown(ctx context.Context, sandboxID string) error | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ControllerInstance struct { | ||||||
|  | 	SandboxID string | ||||||
|  | 	Pid       uint32 | ||||||
|  | 	CreatedAt time.Time | ||||||
|  | 	Labels    map[string]string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ExitStatus struct { | ||||||
|  | 	ExitStatus uint32 | ||||||
|  | 	ExitedAt   time.Time | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ControllerStatus struct { | ||||||
|  | 	SandboxID string | ||||||
|  | 	Pid       uint32 | ||||||
|  | 	State     string | ||||||
|  | 	Info      map[string]string | ||||||
|  | 	CreatedAt time.Time | ||||||
|  | 	ExitedAt  time.Time | ||||||
|  | 	Extra     typeurl.Any | ||||||
| } | } | ||||||
|   | |||||||
| @@ -46,13 +46,18 @@ func (s *remoteSandboxController) Create(ctx context.Context, sandboxID string) | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s *remoteSandboxController) Start(ctx context.Context, sandboxID string) (*api.ControllerStartResponse, error) { | func (s *remoteSandboxController) Start(ctx context.Context, sandboxID string) (sb.ControllerInstance, error) { | ||||||
| 	resp, err := s.client.Start(ctx, &api.ControllerStartRequest{SandboxID: sandboxID}) | 	resp, err := s.client.Start(ctx, &api.ControllerStartRequest{SandboxID: sandboxID}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, errdefs.FromGRPC(err) | 		return sb.ControllerInstance{}, errdefs.FromGRPC(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return resp, nil | 	return sb.ControllerInstance{ | ||||||
|  | 		SandboxID: sandboxID, | ||||||
|  | 		Pid:       resp.GetPid(), | ||||||
|  | 		CreatedAt: resp.GetCreatedAt().AsTime(), | ||||||
|  | 		Labels:    resp.GetLabels(), | ||||||
|  | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s *remoteSandboxController) Platform(ctx context.Context, sandboxID string) (platforms.Platform, error) { | func (s *remoteSandboxController) Platform(ctx context.Context, sandboxID string) (platforms.Platform, error) { | ||||||
| @@ -69,38 +74,48 @@ func (s *remoteSandboxController) Platform(ctx context.Context, sandboxID string | |||||||
| 	}, nil | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s *remoteSandboxController) Stop(ctx context.Context, sandboxID string) (*api.ControllerStopResponse, error) { | func (s *remoteSandboxController) Stop(ctx context.Context, sandboxID string) error { | ||||||
| 	resp, err := s.client.Stop(ctx, &api.ControllerStopRequest{SandboxID: sandboxID}) | 	_, err := s.client.Stop(ctx, &api.ControllerStopRequest{SandboxID: sandboxID}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, errdefs.FromGRPC(err) | 		return errdefs.FromGRPC(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return resp, nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s *remoteSandboxController) Shutdown(ctx context.Context, sandboxID string) (*api.ControllerShutdownResponse, error) { | func (s *remoteSandboxController) Shutdown(ctx context.Context, sandboxID string) error { | ||||||
| 	resp, err := s.client.Shutdown(ctx, &api.ControllerShutdownRequest{SandboxID: sandboxID}) | 	_, err := s.client.Shutdown(ctx, &api.ControllerShutdownRequest{SandboxID: sandboxID}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, errdefs.FromGRPC(err) | 		return errdefs.FromGRPC(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return resp, nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s *remoteSandboxController) Wait(ctx context.Context, sandboxID string) (*api.ControllerWaitResponse, error) { | func (s *remoteSandboxController) Wait(ctx context.Context, sandboxID string) (sb.ExitStatus, error) { | ||||||
| 	resp, err := s.client.Wait(ctx, &api.ControllerWaitRequest{SandboxID: sandboxID}) | 	resp, err := s.client.Wait(ctx, &api.ControllerWaitRequest{SandboxID: sandboxID}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, errdefs.FromGRPC(err) | 		return sb.ExitStatus{}, errdefs.FromGRPC(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return resp, nil | 	return sb.ExitStatus{ | ||||||
|  | 		ExitStatus: resp.GetExitStatus(), | ||||||
|  | 		ExitedAt:   resp.GetExitedAt().AsTime(), | ||||||
|  | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s *remoteSandboxController) Status(ctx context.Context, sandboxID string, verbose bool) (*api.ControllerStatusResponse, error) { | func (s *remoteSandboxController) Status(ctx context.Context, sandboxID string, verbose bool) (sb.ControllerStatus, error) { | ||||||
| 	resp, err := s.client.Status(ctx, &api.ControllerStatusRequest{SandboxID: sandboxID, Verbose: verbose}) | 	resp, err := s.client.Status(ctx, &api.ControllerStatusRequest{SandboxID: sandboxID, Verbose: verbose}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, errdefs.FromGRPC(err) | 		return sb.ControllerStatus{}, errdefs.FromGRPC(err) | ||||||
| 	} | 	} | ||||||
|  | 	return sb.ControllerStatus{ | ||||||
| 	return resp, nil | 		SandboxID: sandboxID, | ||||||
|  | 		Pid:       resp.GetPid(), | ||||||
|  | 		State:     resp.GetState(), | ||||||
|  | 		Info:      resp.GetInfo(), | ||||||
|  | 		CreatedAt: resp.GetCreatedAt().AsTime(), | ||||||
|  | 		ExitedAt:  resp.GetExitedAt().AsTime(), | ||||||
|  | 		Extra:     resp.GetExtra(), | ||||||
|  | 	}, nil | ||||||
| } | } | ||||||
|   | |||||||
| @@ -24,7 +24,6 @@ import ( | |||||||
| 	imagesapi "github.com/containerd/containerd/api/services/images/v1" | 	imagesapi "github.com/containerd/containerd/api/services/images/v1" | ||||||
| 	introspectionapi "github.com/containerd/containerd/api/services/introspection/v1" | 	introspectionapi "github.com/containerd/containerd/api/services/introspection/v1" | ||||||
| 	namespacesapi "github.com/containerd/containerd/api/services/namespaces/v1" | 	namespacesapi "github.com/containerd/containerd/api/services/namespaces/v1" | ||||||
| 	sandboxapi "github.com/containerd/containerd/api/services/sandbox/v1" |  | ||||||
| 	"github.com/containerd/containerd/api/services/tasks/v1" | 	"github.com/containerd/containerd/api/services/tasks/v1" | ||||||
| 	"github.com/containerd/containerd/containers" | 	"github.com/containerd/containerd/containers" | ||||||
| 	"github.com/containerd/containerd/content" | 	"github.com/containerd/containerd/content" | ||||||
| @@ -33,7 +32,6 @@ import ( | |||||||
| 	"github.com/containerd/containerd/namespaces" | 	"github.com/containerd/containerd/namespaces" | ||||||
| 	"github.com/containerd/containerd/plugin" | 	"github.com/containerd/containerd/plugin" | ||||||
| 	"github.com/containerd/containerd/sandbox" | 	"github.com/containerd/containerd/sandbox" | ||||||
| 	"github.com/containerd/containerd/sandbox/proxy" |  | ||||||
| 	srv "github.com/containerd/containerd/services" | 	srv "github.com/containerd/containerd/services" | ||||||
| 	"github.com/containerd/containerd/services/introspection" | 	"github.com/containerd/containerd/services/introspection" | ||||||
| 	"github.com/containerd/containerd/snapshots" | 	"github.com/containerd/containerd/snapshots" | ||||||
| @@ -173,9 +171,9 @@ func WithSandboxStore(client sandbox.Store) ServicesOpt { | |||||||
| } | } | ||||||
|  |  | ||||||
| // WithSandboxController sets the sandbox controller. | // WithSandboxController sets the sandbox controller. | ||||||
| func WithSandboxController(client sandboxapi.ControllerClient) ServicesOpt { | func WithSandboxController(client sandbox.Controller) ServicesOpt { | ||||||
| 	return func(s *services) { | 	return func(s *services) { | ||||||
| 		s.sandboxController = proxy.NewSandboxController(client) | 		s.sandboxController = client | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -232,7 +230,7 @@ func WithInMemoryServices(ic *plugin.InitContext) ClientOpt { | |||||||
| 				return WithIntrospectionClient(s.(introspectionapi.IntrospectionClient)) | 				return WithIntrospectionClient(s.(introspectionapi.IntrospectionClient)) | ||||||
| 			}, | 			}, | ||||||
| 			srv.SandboxControllerService: func(s interface{}) ServicesOpt { | 			srv.SandboxControllerService: func(s interface{}) ServicesOpt { | ||||||
| 				return WithSandboxController(s.(sandboxapi.ControllerClient)) | 				return WithSandboxController(s.(sandbox.Controller)) | ||||||
| 			}, | 			}, | ||||||
| 		} { | 		} { | ||||||
| 			p := plugins[s] | 			p := plugins[s] | ||||||
|   | |||||||
| @@ -217,11 +217,11 @@ func (c *controllerLocal) Status(ctx context.Context, in *api.ControllerStatusRe | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return &api.ControllerStatusResponse{ | 	return &api.ControllerStatusResponse{ | ||||||
| 		ID:       resp.ID, | 		SandboxID: resp.SandboxID, | ||||||
| 		Pid:      resp.Pid, | 		Pid:       resp.Pid, | ||||||
| 		State:    resp.State, | 		State:     resp.State, | ||||||
| 		ExitedAt: resp.ExitedAt, | 		ExitedAt:  resp.ExitedAt, | ||||||
| 		Extra:    resp.Extra, | 		Extra:     resp.Extra, | ||||||
| 	}, nil | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Derek McGowan
					Derek McGowan