Add DeleteProcess API for removing execs

We need a separate API for handing the exit status and deletion of
Exec'd processes to make sure they are properly cleaned up within the
shim and daemon.

Fixes #973

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby
2017-06-08 11:45:16 -07:00
parent 4e8548cd3f
commit ff598449d1
16 changed files with 646 additions and 225 deletions

View File

@@ -14,6 +14,7 @@
StartRequest
DeleteRequest
DeleteResponse
DeleteProcessRequest
ExecRequest
Rlimit
ExecResponse
@@ -102,7 +103,6 @@ func (*StartRequest) ProtoMessage() {}
func (*StartRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{2} }
type DeleteRequest struct {
Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"`
}
func (m *DeleteRequest) Reset() { *m = DeleteRequest{} }
@@ -118,6 +118,14 @@ func (m *DeleteResponse) Reset() { *m = DeleteResponse{} }
func (*DeleteResponse) ProtoMessage() {}
func (*DeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{4} }
type DeleteProcessRequest struct {
Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"`
}
func (m *DeleteProcessRequest) Reset() { *m = DeleteProcessRequest{} }
func (*DeleteProcessRequest) ProtoMessage() {}
func (*DeleteProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{5} }
type ExecRequest struct {
Terminal bool `protobuf:"varint,1,opt,name=terminal,proto3" json:"terminal,omitempty"`
Stdin string `protobuf:"bytes,2,opt,name=stdin,proto3" json:"stdin,omitempty"`
@@ -128,7 +136,7 @@ type ExecRequest struct {
func (m *ExecRequest) Reset() { *m = ExecRequest{} }
func (*ExecRequest) ProtoMessage() {}
func (*ExecRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{5} }
func (*ExecRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{6} }
type Rlimit struct {
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
@@ -138,7 +146,7 @@ type Rlimit struct {
func (m *Rlimit) Reset() { *m = Rlimit{} }
func (*Rlimit) ProtoMessage() {}
func (*Rlimit) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{6} }
func (*Rlimit) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{7} }
type ExecResponse struct {
Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"`
@@ -146,7 +154,7 @@ type ExecResponse struct {
func (m *ExecResponse) Reset() { *m = ExecResponse{} }
func (*ExecResponse) ProtoMessage() {}
func (*ExecResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{7} }
func (*ExecResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{8} }
type PtyRequest struct {
Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"`
@@ -156,21 +164,21 @@ type PtyRequest struct {
func (m *PtyRequest) Reset() { *m = PtyRequest{} }
func (*PtyRequest) ProtoMessage() {}
func (*PtyRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{8} }
func (*PtyRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{9} }
type EventsRequest struct {
}
func (m *EventsRequest) Reset() { *m = EventsRequest{} }
func (*EventsRequest) ProtoMessage() {}
func (*EventsRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{9} }
func (*EventsRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{10} }
type StateRequest struct {
}
func (m *StateRequest) Reset() { *m = StateRequest{} }
func (*StateRequest) ProtoMessage() {}
func (*StateRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{10} }
func (*StateRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{11} }
type StateResponse struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@@ -186,28 +194,28 @@ type StateResponse struct {
func (m *StateResponse) Reset() { *m = StateResponse{} }
func (*StateResponse) ProtoMessage() {}
func (*StateResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{11} }
func (*StateResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{12} }
type PauseRequest struct {
}
func (m *PauseRequest) Reset() { *m = PauseRequest{} }
func (*PauseRequest) ProtoMessage() {}
func (*PauseRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{12} }
func (*PauseRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{13} }
type ResumeRequest struct {
}
func (m *ResumeRequest) Reset() { *m = ResumeRequest{} }
func (*ResumeRequest) ProtoMessage() {}
func (*ResumeRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{13} }
func (*ResumeRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{14} }
type ExitRequest struct {
}
func (m *ExitRequest) Reset() { *m = ExitRequest{} }
func (*ExitRequest) ProtoMessage() {}
func (*ExitRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{14} }
func (*ExitRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{15} }
type KillRequest struct {
Signal uint32 `protobuf:"varint,1,opt,name=signal,proto3" json:"signal,omitempty"`
@@ -217,7 +225,7 @@ type KillRequest struct {
func (m *KillRequest) Reset() { *m = KillRequest{} }
func (*KillRequest) ProtoMessage() {}
func (*KillRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{15} }
func (*KillRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{16} }
type CloseStdinRequest struct {
Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"`
@@ -225,7 +233,7 @@ type CloseStdinRequest struct {
func (m *CloseStdinRequest) Reset() { *m = CloseStdinRequest{} }
func (*CloseStdinRequest) ProtoMessage() {}
func (*CloseStdinRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{16} }
func (*CloseStdinRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{17} }
type ProcessesRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@@ -233,7 +241,7 @@ type ProcessesRequest struct {
func (m *ProcessesRequest) Reset() { *m = ProcessesRequest{} }
func (*ProcessesRequest) ProtoMessage() {}
func (*ProcessesRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{17} }
func (*ProcessesRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{18} }
type ProcessesResponse struct {
Processes []*containerd_v1_types1.Process `protobuf:"bytes,1,rep,name=processes" json:"processes,omitempty"`
@@ -241,7 +249,7 @@ type ProcessesResponse struct {
func (m *ProcessesResponse) Reset() { *m = ProcessesResponse{} }
func (*ProcessesResponse) ProtoMessage() {}
func (*ProcessesResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{18} }
func (*ProcessesResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{19} }
type CheckpointRequest struct {
Exit bool `protobuf:"varint,1,opt,name=exit,proto3" json:"exit,omitempty"`
@@ -255,7 +263,7 @@ type CheckpointRequest struct {
func (m *CheckpointRequest) Reset() { *m = CheckpointRequest{} }
func (*CheckpointRequest) ProtoMessage() {}
func (*CheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{19} }
func (*CheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{20} }
func init() {
proto.RegisterType((*CreateRequest)(nil), "containerd.v1.services.shim.CreateRequest")
@@ -263,6 +271,7 @@ func init() {
proto.RegisterType((*StartRequest)(nil), "containerd.v1.services.shim.StartRequest")
proto.RegisterType((*DeleteRequest)(nil), "containerd.v1.services.shim.DeleteRequest")
proto.RegisterType((*DeleteResponse)(nil), "containerd.v1.services.shim.DeleteResponse")
proto.RegisterType((*DeleteProcessRequest)(nil), "containerd.v1.services.shim.DeleteProcessRequest")
proto.RegisterType((*ExecRequest)(nil), "containerd.v1.services.shim.ExecRequest")
proto.RegisterType((*Rlimit)(nil), "containerd.v1.services.shim.Rlimit")
proto.RegisterType((*ExecResponse)(nil), "containerd.v1.services.shim.ExecResponse")
@@ -294,6 +303,7 @@ type ShimClient interface {
Create(ctx context.Context, in *CreateRequest, opts ...grpc.CallOption) (*CreateResponse, error)
Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error)
Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error)
DeleteProcess(ctx context.Context, in *DeleteProcessRequest, opts ...grpc.CallOption) (*DeleteResponse, error)
State(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error)
Processes(ctx context.Context, in *ProcessesRequest, opts ...grpc.CallOption) (*ProcessesResponse, error)
Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error)
@@ -342,6 +352,15 @@ func (c *shimClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc
return out, nil
}
func (c *shimClient) DeleteProcess(ctx context.Context, in *DeleteProcessRequest, opts ...grpc.CallOption) (*DeleteResponse, error) {
out := new(DeleteResponse)
err := grpc.Invoke(ctx, "/containerd.v1.services.shim.Shim/DeleteProcess", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *shimClient) State(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error) {
out := new(StateResponse)
err := grpc.Invoke(ctx, "/containerd.v1.services.shim.Shim/State", in, out, c.cc, opts...)
@@ -470,6 +489,7 @@ type ShimServer interface {
Create(context.Context, *CreateRequest) (*CreateResponse, error)
Start(context.Context, *StartRequest) (*google_protobuf1.Empty, error)
Delete(context.Context, *DeleteRequest) (*DeleteResponse, error)
DeleteProcess(context.Context, *DeleteProcessRequest) (*DeleteResponse, error)
State(context.Context, *StateRequest) (*StateResponse, error)
Processes(context.Context, *ProcessesRequest) (*ProcessesResponse, error)
Pause(context.Context, *PauseRequest) (*google_protobuf1.Empty, error)
@@ -541,6 +561,24 @@ func _Shim_Delete_Handler(srv interface{}, ctx context.Context, dec func(interfa
return interceptor(ctx, in, info, handler)
}
func _Shim_DeleteProcess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteProcessRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ShimServer).DeleteProcess(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/containerd.v1.services.shim.Shim/DeleteProcess",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ShimServer).DeleteProcess(ctx, req.(*DeleteProcessRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Shim_State_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StateRequest)
if err := dec(in); err != nil {
@@ -758,6 +796,10 @@ var _Shim_serviceDesc = grpc.ServiceDesc{
MethodName: "Delete",
Handler: _Shim_Delete_Handler,
},
{
MethodName: "DeleteProcess",
Handler: _Shim_DeleteProcess_Handler,
},
{
MethodName: "State",
Handler: _Shim_State_Handler,
@@ -963,11 +1005,6 @@ func (m *DeleteRequest) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if m.Pid != 0 {
dAtA[i] = 0x8
i++
i = encodeVarintShim(dAtA, i, uint64(m.Pid))
}
return i, nil
}
@@ -1002,6 +1039,29 @@ func (m *DeleteResponse) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
func (m *DeleteProcessRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *DeleteProcessRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.Pid != 0 {
dAtA[i] = 0x8
i++
i = encodeVarintShim(dAtA, i, uint64(m.Pid))
}
return i, nil
}
func (m *ExecRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -1617,9 +1677,6 @@ func (m *StartRequest) Size() (n int) {
func (m *DeleteRequest) Size() (n int) {
var l int
_ = l
if m.Pid != 0 {
n += 1 + sovShim(uint64(m.Pid))
}
return n
}
@@ -1634,6 +1691,15 @@ func (m *DeleteResponse) Size() (n int) {
return n
}
func (m *DeleteProcessRequest) Size() (n int) {
var l int
_ = l
if m.Pid != 0 {
n += 1 + sovShim(uint64(m.Pid))
}
return n
}
func (m *ExecRequest) Size() (n int) {
var l int
_ = l
@@ -1904,7 +1970,6 @@ func (this *DeleteRequest) String() string {
return "nil"
}
s := strings.Join([]string{`&DeleteRequest{`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`}`,
}, "")
return s
@@ -1920,6 +1985,16 @@ func (this *DeleteResponse) String() string {
}, "")
return s
}
func (this *DeleteProcessRequest) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&DeleteProcessRequest{`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`}`,
}, "")
return s
}
func (this *ExecRequest) String() string {
if this == nil {
return "nil"
@@ -2598,25 +2673,6 @@ func (m *DeleteRequest) Unmarshal(dAtA []byte) error {
return fmt.Errorf("proto: DeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
}
m.Pid = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowShim
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Pid |= (uint32(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipShim(dAtA[iNdEx:])
@@ -2737,6 +2793,75 @@ func (m *DeleteResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *DeleteProcessRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowShim
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: DeleteProcessRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: DeleteProcessRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
}
m.Pid = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowShim
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Pid |= (uint32(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipShim(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthShim
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *ExecRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -4409,77 +4534,78 @@ func init() {
}
var fileDescriptorShim = []byte{
// 1149 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x4f, 0x6f, 0xe3, 0x44,
0x14, 0x5f, 0x27, 0x69, 0x36, 0x79, 0xd9, 0xa4, 0xed, 0xa8, 0xaa, 0xbc, 0x29, 0xa4, 0xc5, 0xd2,
0x6a, 0xd3, 0x2e, 0x38, 0xd0, 0xbd, 0xad, 0xe0, 0xd0, 0x7f, 0x88, 0x85, 0x02, 0xd1, 0xb4, 0x9c,
0x90, 0x88, 0x5c, 0x67, 0x9a, 0x0c, 0x75, 0x3c, 0xc6, 0x33, 0xe9, 0xb6, 0x37, 0x3e, 0x00, 0x07,
0xae, 0xdc, 0xf9, 0x0e, 0x7c, 0x85, 0x1e, 0xb9, 0xc1, 0x69, 0x61, 0xfb, 0x49, 0xd0, 0xfc, 0xb1,
0x9d, 0xb4, 0x75, 0xd2, 0x4a, 0x5c, 0xac, 0x99, 0x37, 0xbf, 0x79, 0xf3, 0xde, 0xfb, 0xbd, 0x3f,
0x86, 0xcf, 0x06, 0x54, 0x0c, 0xc7, 0x27, 0xae, 0xcf, 0x46, 0x1d, 0x9f, 0x85, 0xc2, 0xa3, 0x21,
0x89, 0xfb, 0x93, 0x4b, 0x2f, 0xa2, 0x1d, 0x4e, 0xe2, 0x73, 0xea, 0x13, 0xde, 0xe1, 0x43, 0x3a,
0x52, 0x1f, 0x37, 0x8a, 0x99, 0x60, 0x68, 0x2d, 0x03, 0xba, 0xe7, 0x9f, 0xb8, 0x09, 0xce, 0x95,
0x90, 0xe6, 0xd3, 0x01, 0x63, 0x83, 0x80, 0x74, 0x14, 0xf4, 0x64, 0x7c, 0xda, 0xf1, 0xc2, 0x4b,
0x7d, 0xaf, 0xb9, 0x76, 0xf3, 0x88, 0x8c, 0x22, 0x91, 0x1c, 0xae, 0x0c, 0xd8, 0x80, 0xa9, 0x65,
0x47, 0xae, 0x8c, 0xf4, 0xd3, 0x7b, 0x59, 0x2a, 0x2e, 0x23, 0xc2, 0x3b, 0x23, 0x36, 0x0e, 0x85,
0xfe, 0x9a, 0xdb, 0xaf, 0x1e, 0x70, 0x5b, 0x78, 0xfc, 0x4c, 0x7d, 0xcc, 0xdd, 0xf5, 0x9b, 0xc6,
0x0a, 0x3a, 0x22, 0x5c, 0x78, 0xa3, 0x48, 0x03, 0x9c, 0xbf, 0x0a, 0x50, 0xdf, 0x8b, 0x89, 0x27,
0x08, 0x26, 0x3f, 0x8d, 0x09, 0x17, 0x68, 0x15, 0x0a, 0xb4, 0x6f, 0x5b, 0x1b, 0x56, 0xbb, 0xba,
0x5b, 0xbe, 0x7e, 0xbb, 0x5e, 0x78, 0xbd, 0x8f, 0x0b, 0xb4, 0x8f, 0x56, 0xa1, 0x7c, 0x32, 0x0e,
0xfb, 0x01, 0xb1, 0x0b, 0xf2, 0x0c, 0x9b, 0x1d, 0xb2, 0xe1, 0x71, 0x3c, 0x0e, 0xa5, 0x5e, 0xbb,
0xa8, 0x0e, 0x92, 0x2d, 0x7a, 0x0a, 0x95, 0x90, 0xf5, 0x22, 0x7a, 0xce, 0x84, 0x5d, 0xda, 0xb0,
0xda, 0x15, 0xfc, 0x38, 0x64, 0x5d, 0xb9, 0x45, 0x4d, 0xa8, 0x08, 0x12, 0x8f, 0x68, 0xe8, 0x05,
0xf6, 0x82, 0x3a, 0x4a, 0xf7, 0x68, 0x05, 0x16, 0xb8, 0xe8, 0xd3, 0xd0, 0x2e, 0x2b, 0x75, 0x7a,
0x23, 0x9f, 0xe7, 0xa2, 0xcf, 0xc6, 0xc2, 0x7e, 0xac, 0x9f, 0xd7, 0x3b, 0x23, 0x27, 0x71, 0x6c,
0x57, 0x52, 0x39, 0x89, 0x63, 0xb4, 0x0d, 0xe5, 0x98, 0x31, 0x71, 0xca, 0xed, 0xea, 0x46, 0xb1,
0x5d, 0xdb, 0x6e, 0xba, 0xd3, 0x7c, 0xab, 0x78, 0xb9, 0x5f, 0xcb, 0x38, 0x63, 0x83, 0x44, 0x2d,
0x00, 0x7f, 0x48, 0xfc, 0xb3, 0x88, 0xd1, 0x50, 0xd8, 0xa0, 0xf4, 0x4d, 0x48, 0xd0, 0x0b, 0x58,
0x8e, 0xbc, 0x98, 0x84, 0xa2, 0x37, 0x01, 0xab, 0x29, 0xd8, 0x92, 0x3e, 0xd8, 0x4b, 0xe5, 0x8e,
0x03, 0x8d, 0x24, 0xb0, 0x3c, 0x62, 0x21, 0x27, 0x68, 0x09, 0x8a, 0x91, 0x09, 0x6d, 0x1d, 0xcb,
0xa5, 0xd3, 0x80, 0x27, 0x47, 0xc2, 0x8b, 0x85, 0x89, 0xbd, 0xf3, 0x01, 0xd4, 0xf7, 0x49, 0x40,
0x32, 0x32, 0x6e, 0x5f, 0x11, 0xd0, 0x48, 0x20, 0x46, 0xed, 0x3a, 0xd4, 0xc8, 0x05, 0x15, 0x3d,
0x2e, 0x3c, 0x31, 0xe6, 0x06, 0x0b, 0x52, 0x74, 0xa4, 0x24, 0x68, 0x07, 0xaa, 0x72, 0x47, 0xfa,
0x3d, 0x4f, 0x28, 0xf2, 0x64, 0x34, 0x74, 0x62, 0xb8, 0x49, 0x62, 0xb8, 0xc7, 0x49, 0x62, 0xec,
0x56, 0xae, 0xde, 0xae, 0x3f, 0xfa, 0xf5, 0x9f, 0x75, 0x0b, 0x57, 0xf4, 0xb5, 0x1d, 0xe1, 0xfc,
0x66, 0x41, 0xed, 0xe0, 0x82, 0xf8, 0x89, 0x5d, 0x93, 0xfc, 0x59, 0x79, 0xfc, 0x15, 0xee, 0xe6,
0xaf, 0x98, 0xc3, 0x5f, 0x69, 0x8a, 0xbf, 0x36, 0x94, 0x78, 0x44, 0x7c, 0x95, 0x1d, 0xb5, 0xed,
0x95, 0x5b, 0xf6, 0xee, 0x84, 0x97, 0x58, 0x21, 0x9c, 0x7d, 0x28, 0xe3, 0x80, 0x8e, 0xa8, 0x40,
0x08, 0x4a, 0x92, 0x56, 0x9d, 0xbc, 0x58, 0xad, 0xa5, 0x6c, 0xe8, 0xc5, 0x7d, 0x65, 0x4c, 0x09,
0xab, 0xb5, 0x94, 0x71, 0x76, 0xaa, 0x2d, 0x29, 0x61, 0xb5, 0x76, 0x36, 0xe0, 0x89, 0x76, 0x30,
0x97, 0xac, 0x43, 0x80, 0xae, 0xb8, 0xcc, 0x65, 0x46, 0xfa, 0xfd, 0x86, 0xf6, 0xc5, 0x50, 0x3d,
0x55, 0xc7, 0x7a, 0x23, 0xfd, 0x1b, 0x12, 0x3a, 0x18, 0xea, 0xd7, 0xea, 0xd8, 0xec, 0x9c, 0x45,
0xa8, 0x1f, 0x9c, 0x93, 0x50, 0xf0, 0x84, 0x7b, 0x9d, 0x0b, 0x29, 0xf5, 0xce, 0xef, 0x05, 0xa8,
0x1b, 0x81, 0x31, 0xe9, 0xa1, 0x95, 0x69, 0x4c, 0x2c, 0x66, 0x26, 0xbe, 0x94, 0xc1, 0x56, 0x59,
0x22, 0x83, 0xdd, 0xd8, 0x5e, 0xbb, 0xb3, 0x28, 0x74, 0xda, 0x60, 0x03, 0x45, 0xaf, 0xa0, 0x1a,
0xc5, 0xcc, 0x27, 0x9c, 0x13, 0x6e, 0x2f, 0xa8, 0x62, 0x7a, 0xef, 0xce, 0x7b, 0x5d, 0x8d, 0xc2,
0x19, 0xfc, 0x7f, 0xaa, 0xe5, 0xc9, 0x6c, 0xab, 0x4e, 0x67, 0x9b, 0x0c, 0x5b, 0xd7, 0x1b, 0xf3,
0x34, 0x6c, 0x8b, 0x50, 0xc7, 0x84, 0x8f, 0x47, 0xa9, 0xa0, 0x2e, 0x33, 0x97, 0xa6, 0x25, 0xf6,
0x1a, 0x6a, 0x5f, 0xd1, 0x20, 0xc8, 0xba, 0x5d, 0x99, 0xd3, 0x41, 0x92, 0xc6, 0x75, 0x6c, 0x76,
0x32, 0x76, 0x5e, 0x10, 0xa8, 0x80, 0x56, 0xb0, 0x5c, 0xde, 0x8e, 0xa6, 0xf3, 0x0c, 0x96, 0xf7,
0x02, 0xc6, 0xc9, 0x91, 0x74, 0x2a, 0xbf, 0x62, 0xb7, 0x60, 0xa9, 0x9b, 0x04, 0x64, 0x4e, 0x93,
0x75, 0xbe, 0x85, 0xe5, 0x09, 0xac, 0xe1, 0x7d, 0x8a, 0x00, 0xeb, 0x41, 0x04, 0x38, 0xbf, 0x14,
0x60, 0x39, 0x6b, 0x4a, 0xc9, 0xf3, 0x08, 0x4a, 0xb2, 0xb4, 0x4d, 0xe9, 0xaa, 0x35, 0x5a, 0x83,
0xaa, 0x17, 0x04, 0xec, 0x4d, 0x4f, 0xf8, 0x91, 0xf1, 0xbb, 0xa2, 0x04, 0xc7, 0x7e, 0x84, 0x3e,
0x04, 0xa4, 0x0f, 0xc7, 0x21, 0xbd, 0xe8, 0x71, 0xe6, 0x9f, 0x11, 0xc1, 0x55, 0x2c, 0x2a, 0x78,
0x49, 0x9d, 0x7c, 0x17, 0xd2, 0x8b, 0x23, 0x2d, 0x47, 0xcf, 0xa0, 0x61, 0x54, 0x25, 0xac, 0xe9,
0xf6, 0x5f, 0xd7, 0xfa, 0x92, 0x46, 0xf1, 0x3e, 0xc0, 0x29, 0x0d, 0x48, 0x2f, 0x60, 0xfe, 0x19,
0x37, 0x63, 0xa0, 0x2a, 0x25, 0x87, 0x52, 0x80, 0x36, 0x61, 0x49, 0x8d, 0xd6, 0x5e, 0xe8, 0x8d,
0x08, 0x8f, 0x3c, 0x9f, 0x70, 0xbb, 0xbc, 0x51, 0x6c, 0x57, 0xf1, 0xa2, 0x92, 0x7f, 0x93, 0x8a,
0xd1, 0x73, 0x58, 0xcc, 0x3a, 0x72, 0x2f, 0xf2, 0xc4, 0xd0, 0x64, 0x56, 0x23, 0x13, 0x77, 0x3d,
0x31, 0xdc, 0xfe, 0xa3, 0x0a, 0xa5, 0xa3, 0x21, 0x1d, 0x21, 0x0f, 0xca, 0xba, 0x3b, 0xa3, 0x2d,
0x77, 0xc6, 0x8f, 0x80, 0x3b, 0x35, 0x1b, 0x9b, 0x2f, 0xee, 0x85, 0x35, 0xb4, 0x7d, 0x09, 0x0b,
0xaa, 0xb9, 0xa3, 0xcd, 0x99, 0xb7, 0x26, 0x07, 0x40, 0x73, 0xf5, 0x56, 0x9f, 0x3b, 0x90, 0xae,
0x4a, 0x73, 0x75, 0xd7, 0x9f, 0x63, 0xee, 0xd4, 0xf4, 0x98, 0x63, 0xee, 0x8d, 0x31, 0xf2, 0x83,
0x32, 0x57, 0x90, 0xf9, 0xe6, 0x66, 0x0f, 0x6c, 0xdd, 0x07, 0x6a, 0xf4, 0xff, 0x08, 0xd5, 0x34,
0xb5, 0xd1, 0x47, 0x33, 0x2f, 0xde, 0x2c, 0x97, 0xa6, 0x7b, 0x5f, 0x78, 0x16, 0x7a, 0xd5, 0x14,
0xe6, 0xf8, 0x32, 0xd9, 0x38, 0x72, 0x43, 0x7f, 0x08, 0x65, 0xdd, 0x50, 0xe6, 0x84, 0x7e, 0xaa,
0xeb, 0xe4, 0x6a, 0x3b, 0x06, 0xc8, 0xca, 0x11, 0xcd, 0xf6, 0xeb, 0x56, 0xdd, 0xe6, 0x6a, 0xfd,
0x02, 0x4a, 0xb2, 0xc7, 0xa1, 0xf6, 0x4c, 0x7d, 0x13, 0x6d, 0x30, 0x57, 0x13, 0x86, 0xb2, 0x1e,
0x4b, 0x73, 0xbc, 0x9d, 0x9a, 0x5d, 0xcd, 0xbb, 0x7f, 0xae, 0x14, 0xe6, 0x63, 0x4b, 0x5a, 0x27,
0x5b, 0xee, 0x1c, 0xeb, 0x26, 0xba, 0x72, 0xae, 0x75, 0xdf, 0x4b, 0x3f, 0x89, 0x3f, 0xd7, 0xcf,
0xf4, 0x47, 0xa5, 0xb9, 0x79, 0x0f, 0xa4, 0x49, 0x9a, 0xcf, 0xa1, 0xd8, 0x15, 0x97, 0xe8, 0xf9,
0xec, 0x94, 0x49, 0xff, 0x00, 0x66, 0x52, 0x9c, 0x8e, 0x85, 0x79, 0x14, 0xdf, 0x9c, 0x1f, 0x79,
0x5a, 0x77, 0xed, 0xab, 0x77, 0xad, 0x47, 0x7f, 0xbf, 0x6b, 0x3d, 0xfa, 0xf9, 0xba, 0x65, 0x5d,
0x5d, 0xb7, 0xac, 0x3f, 0xaf, 0x5b, 0xd6, 0xbf, 0xd7, 0x2d, 0xeb, 0xa4, 0xac, 0x90, 0x2f, 0xff,
0x0b, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x64, 0xea, 0xc1, 0x10, 0x0d, 0x00, 0x00,
// 1168 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcd, 0x6e, 0x23, 0x45,
0x10, 0xce, 0xd8, 0x8e, 0x63, 0x97, 0xd7, 0x4e, 0xd2, 0x8a, 0xa2, 0x59, 0x07, 0x9c, 0x68, 0xa4,
0xd5, 0x3a, 0x59, 0x18, 0xb3, 0xd9, 0xdb, 0x0a, 0x0e, 0xf9, 0x43, 0x2c, 0x04, 0xb0, 0x26, 0xe1,
0x84, 0x84, 0x35, 0x19, 0x77, 0xec, 0x26, 0xe3, 0xe9, 0x61, 0xba, 0x9d, 0x4d, 0x6e, 0x3c, 0x00,
0x07, 0xae, 0xdc, 0x39, 0xf0, 0x28, 0x39, 0x72, 0x83, 0xd3, 0xc2, 0xe6, 0x49, 0x50, 0xff, 0xcc,
0x8f, 0x93, 0x8c, 0xed, 0x48, 0x5c, 0x46, 0xdd, 0xd5, 0xd5, 0xd5, 0x55, 0xf5, 0x7d, 0x55, 0x35,
0xf0, 0xd9, 0x80, 0xf0, 0xe1, 0xf8, 0xcc, 0xf6, 0xe8, 0xa8, 0xe3, 0xd1, 0x80, 0xbb, 0x24, 0xc0,
0x51, 0x3f, 0xbb, 0x74, 0x43, 0xd2, 0x61, 0x38, 0xba, 0x24, 0x1e, 0x66, 0x1d, 0x36, 0x24, 0x23,
0xf9, 0xb1, 0xc3, 0x88, 0x72, 0x8a, 0x36, 0x52, 0x45, 0xfb, 0xf2, 0xa5, 0x1d, 0xeb, 0xd9, 0x42,
0xa5, 0xf9, 0x74, 0x40, 0xe9, 0xc0, 0xc7, 0x1d, 0xa9, 0x7a, 0x36, 0x3e, 0xef, 0xb8, 0xc1, 0xb5,
0xba, 0xd7, 0xdc, 0xb8, 0x7b, 0x84, 0x47, 0x21, 0x8f, 0x0f, 0xd7, 0x06, 0x74, 0x40, 0xe5, 0xb2,
0x23, 0x56, 0x5a, 0xfa, 0xe9, 0x5c, 0x9e, 0xf2, 0xeb, 0x10, 0xb3, 0xce, 0x88, 0x8e, 0x03, 0xae,
0xbe, 0xfa, 0xf6, 0xeb, 0x47, 0xdc, 0xe6, 0x2e, 0xbb, 0x90, 0x1f, 0x7d, 0x77, 0xf3, 0xae, 0xb3,
0x9c, 0x8c, 0x30, 0xe3, 0xee, 0x28, 0x54, 0x0a, 0xd6, 0x5f, 0x05, 0xa8, 0x1f, 0x44, 0xd8, 0xe5,
0xd8, 0xc1, 0x3f, 0x8d, 0x31, 0xe3, 0x68, 0x1d, 0x0a, 0xa4, 0x6f, 0x1a, 0x5b, 0x46, 0xbb, 0xba,
0x5f, 0xbe, 0x7d, 0xb7, 0x59, 0x78, 0x73, 0xe8, 0x14, 0x48, 0x1f, 0xad, 0x43, 0xf9, 0x6c, 0x1c,
0xf4, 0x7d, 0x6c, 0x16, 0xc4, 0x99, 0xa3, 0x77, 0xc8, 0x84, 0xa5, 0x68, 0x1c, 0x08, 0xbb, 0x66,
0x51, 0x1e, 0xc4, 0x5b, 0xf4, 0x14, 0x2a, 0x01, 0xed, 0x85, 0xe4, 0x92, 0x72, 0xb3, 0xb4, 0x65,
0xb4, 0x2b, 0xce, 0x52, 0x40, 0xbb, 0x62, 0x8b, 0x9a, 0x50, 0xe1, 0x38, 0x1a, 0x91, 0xc0, 0xf5,
0xcd, 0x45, 0x79, 0x94, 0xec, 0xd1, 0x1a, 0x2c, 0x32, 0xde, 0x27, 0x81, 0x59, 0x96, 0xe6, 0xd4,
0x46, 0x3c, 0xcf, 0x78, 0x9f, 0x8e, 0xb9, 0xb9, 0xa4, 0x9e, 0x57, 0x3b, 0x2d, 0xc7, 0x51, 0x64,
0x56, 0x12, 0x39, 0x8e, 0x22, 0xb4, 0x0b, 0xe5, 0x88, 0x52, 0x7e, 0xce, 0xcc, 0xea, 0x56, 0xb1,
0x5d, 0xdb, 0x6d, 0xda, 0x93, 0x78, 0xcb, 0x7c, 0xd9, 0x5f, 0x8b, 0x3c, 0x3b, 0x5a, 0x13, 0xb5,
0x00, 0xbc, 0x21, 0xf6, 0x2e, 0x42, 0x4a, 0x02, 0x6e, 0x82, 0xb4, 0x97, 0x91, 0xa0, 0x17, 0xb0,
0x1a, 0xba, 0x11, 0x0e, 0x78, 0x2f, 0xa3, 0x56, 0x93, 0x6a, 0x2b, 0xea, 0xe0, 0x20, 0x91, 0x5b,
0x16, 0x34, 0xe2, 0xc4, 0xb2, 0x90, 0x06, 0x0c, 0xa3, 0x15, 0x28, 0x86, 0x3a, 0xb5, 0x75, 0x47,
0x2c, 0xad, 0x06, 0x3c, 0x39, 0xe1, 0x6e, 0xc4, 0x75, 0xee, 0xad, 0x65, 0xa8, 0x1f, 0x62, 0x1f,
0x27, 0x60, 0x58, 0x1c, 0x1a, 0xb1, 0x40, 0x1b, 0xd9, 0x84, 0x1a, 0xbe, 0x22, 0xbc, 0xc7, 0xb8,
0xcb, 0xc7, 0x4c, 0x1b, 0x03, 0x21, 0x3a, 0x91, 0x12, 0xb4, 0x07, 0x55, 0xb1, 0xc3, 0xfd, 0x9e,
0xcb, 0x25, 0x54, 0x22, 0x76, 0x45, 0x03, 0x3b, 0xa6, 0x81, 0x7d, 0x1a, 0xd3, 0x60, 0xbf, 0x72,
0xf3, 0x6e, 0x73, 0xe1, 0xd7, 0x7f, 0x36, 0x0d, 0xa7, 0xa2, 0xae, 0xed, 0x71, 0xab, 0x0d, 0x6b,
0xea, 0xd5, 0x6e, 0x44, 0x3d, 0xcc, 0x58, 0x4c, 0x8d, 0xfb, 0x01, 0xfc, 0x66, 0x40, 0xed, 0xe8,
0x0a, 0x7b, 0xb1, 0x46, 0x16, 0x57, 0x23, 0x0f, 0xd7, 0xc2, 0xc3, 0xb8, 0x16, 0x73, 0x70, 0x2d,
0x4d, 0xe0, 0xda, 0x86, 0x12, 0x0b, 0xb1, 0x27, 0x59, 0x53, 0xdb, 0x5d, 0xbb, 0x17, 0xd9, 0x5e,
0x70, 0xed, 0x48, 0x0d, 0xeb, 0x10, 0xca, 0x8e, 0x4f, 0x46, 0x84, 0x23, 0x04, 0x25, 0x01, 0xb7,
0x22, 0xb5, 0x23, 0xd7, 0x42, 0x36, 0x74, 0xa3, 0xbe, 0x74, 0xa6, 0xe4, 0xc8, 0xb5, 0x90, 0x31,
0x7a, 0xae, 0x3c, 0x29, 0x39, 0x72, 0x6d, 0x6d, 0xc1, 0x13, 0x15, 0x60, 0x2e, 0x88, 0xc7, 0x00,
0x5d, 0x7e, 0x9d, 0x9b, 0x23, 0x11, 0xf7, 0x5b, 0xd2, 0xe7, 0x43, 0xf9, 0x54, 0xdd, 0x51, 0x1b,
0x11, 0xdf, 0x10, 0x93, 0xc1, 0x50, 0xbd, 0x56, 0x77, 0xf4, 0x4e, 0x50, 0xe0, 0xe8, 0x12, 0x07,
0x3c, 0x4e, 0xba, 0xe6, 0x48, 0x4a, 0x89, 0xdf, 0x0b, 0x50, 0xd7, 0x02, 0xed, 0xd2, 0x63, 0x2b,
0x56, 0xbb, 0x58, 0x4c, 0x5d, 0x7c, 0x25, 0x92, 0x2d, 0xf9, 0x24, 0x92, 0xdd, 0xd8, 0xdd, 0x78,
0xb0, 0x58, 0x14, 0xc1, 0x1c, 0xad, 0x8a, 0x5e, 0x43, 0x35, 0x54, 0xfc, 0xc0, 0xcc, 0x5c, 0x94,
0x45, 0xf6, 0xc1, 0x83, 0xf7, 0x62, 0x16, 0xa5, 0xea, 0xff, 0x53, 0x8d, 0x67, 0xd9, 0x56, 0x9d,
0x64, 0x9b, 0x48, 0x5b, 0xd7, 0x1d, 0x33, 0x9c, 0x29, 0x2d, 0x07, 0xb3, 0xf1, 0x28, 0x11, 0xd4,
0x05, 0x73, 0x49, 0x52, 0x7a, 0x6f, 0xa0, 0xf6, 0x15, 0xf1, 0xfd, 0xb4, 0x0b, 0x96, 0x19, 0x19,
0xc4, 0x34, 0xae, 0x3b, 0x7a, 0x27, 0x72, 0xe7, 0xfa, 0xbe, 0x4c, 0x68, 0xc5, 0x11, 0xcb, 0xfb,
0xd9, 0xb4, 0x9e, 0xc1, 0xea, 0x81, 0x4f, 0x19, 0x3e, 0x11, 0x41, 0xe5, 0xd7, 0xce, 0x0e, 0xac,
0x74, 0xe3, 0x84, 0xcc, 0x68, 0xbe, 0xd6, 0xb7, 0xb0, 0x9a, 0xd1, 0xd5, 0xb8, 0x4f, 0x00, 0x60,
0x3c, 0x0a, 0x00, 0xeb, 0x97, 0x02, 0xac, 0xa6, 0xcd, 0x2a, 0x7e, 0x1e, 0x41, 0x49, 0x34, 0x01,
0x5d, 0xba, 0x72, 0x8d, 0x36, 0xa0, 0xea, 0xfa, 0x3e, 0x7d, 0xdb, 0xe3, 0x5e, 0xa8, 0xe3, 0xae,
0x48, 0xc1, 0xa9, 0x17, 0xa2, 0x8f, 0x00, 0xa9, 0xc3, 0x71, 0x40, 0xae, 0x7a, 0x8c, 0x7a, 0x17,
0x98, 0x33, 0x99, 0x8b, 0x8a, 0xb3, 0x22, 0x4f, 0xbe, 0x0b, 0xc8, 0xd5, 0x89, 0x92, 0xa3, 0x67,
0xd0, 0xd0, 0xa6, 0x62, 0xd4, 0xd4, 0x58, 0xa8, 0x2b, 0x7b, 0x71, 0xa3, 0xf8, 0x10, 0xe0, 0x9c,
0xf8, 0xb8, 0xe7, 0x53, 0xef, 0x82, 0xe9, 0xf1, 0x50, 0x15, 0x92, 0x63, 0x21, 0x40, 0xdb, 0xb0,
0x22, 0x47, 0x6e, 0x2f, 0x70, 0x47, 0x98, 0x85, 0xae, 0x87, 0x99, 0x59, 0xde, 0x2a, 0xb6, 0xab,
0xce, 0xb2, 0x94, 0x7f, 0x93, 0x88, 0xd1, 0x73, 0x58, 0x4e, 0x3b, 0x75, 0x2f, 0x74, 0xf9, 0x50,
0x33, 0xab, 0x91, 0x8a, 0xbb, 0x2e, 0x1f, 0xee, 0xfe, 0x01, 0x50, 0x3a, 0x19, 0x92, 0x11, 0x72,
0xa1, 0xac, 0xba, 0x36, 0xda, 0xb1, 0xa7, 0xfc, 0x20, 0xd8, 0x13, 0x33, 0xb3, 0xf9, 0x62, 0x2e,
0x5d, 0x0d, 0xdb, 0x97, 0xb0, 0x28, 0x9b, 0x3e, 0xda, 0x9e, 0x7a, 0x2b, 0x3b, 0x18, 0x9a, 0xeb,
0xf7, 0xfa, 0xdc, 0x91, 0x08, 0x55, 0xb8, 0xab, 0x3a, 0xf5, 0x0c, 0x77, 0x27, 0xa6, 0xca, 0x0c,
0x77, 0xef, 0x0c, 0x1c, 0x1a, 0xcf, 0x24, 0xcd, 0x22, 0xf4, 0x72, 0x8e, 0xdb, 0x93, 0x83, 0xe3,
0x71, 0x0f, 0xfe, 0x20, 0xf3, 0xc3, 0xf1, 0xec, 0xfc, 0xa4, 0x11, 0xed, 0xcc, 0xa3, 0xaa, 0xed,
0xff, 0x08, 0xd5, 0xa4, 0x96, 0xd0, 0xc7, 0x53, 0x2f, 0xde, 0xad, 0xcf, 0xa6, 0x3d, 0xaf, 0x7a,
0x8a, 0xb5, 0xec, 0x42, 0x33, 0x62, 0xc9, 0x76, 0xaa, 0x5c, 0xac, 0x8f, 0xa1, 0xac, 0x3a, 0xd8,
0x0c, 0xac, 0x27, 0xda, 0x5c, 0xae, 0xb5, 0x53, 0x80, 0xb4, 0xfe, 0xd1, 0xf4, 0xb8, 0xee, 0x35,
0x8a, 0x5c, 0xab, 0x5f, 0x40, 0x49, 0x34, 0x55, 0xd4, 0x9e, 0x6a, 0x2f, 0xd3, 0x77, 0x73, 0x2d,
0x39, 0x50, 0x56, 0x73, 0x70, 0x46, 0xb4, 0x13, 0xc3, 0xb2, 0xf9, 0xf0, 0x5f, 0x9e, 0xd4, 0xf9,
0xc4, 0x10, 0xde, 0x89, 0x1e, 0x3f, 0xc3, 0xbb, 0xcc, 0x18, 0xc8, 0xf5, 0xee, 0x7b, 0x11, 0x27,
0xf6, 0x66, 0xc6, 0x99, 0xfc, 0x19, 0x35, 0xb7, 0xe7, 0xd0, 0xd4, 0xa4, 0xf9, 0x1c, 0x8a, 0x5d,
0x7e, 0x8d, 0x9e, 0x4f, 0xa7, 0x4c, 0xf2, 0xcb, 0x31, 0x15, 0xe2, 0x64, 0x0e, 0xcd, 0x82, 0xf8,
0xee, 0xc0, 0xca, 0xb3, 0xba, 0x6f, 0xde, 0xbc, 0x6f, 0x2d, 0xfc, 0xfd, 0xbe, 0xb5, 0xf0, 0xf3,
0x6d, 0xcb, 0xb8, 0xb9, 0x6d, 0x19, 0x7f, 0xde, 0xb6, 0x8c, 0x7f, 0x6f, 0x5b, 0xc6, 0x59, 0x59,
0x6a, 0xbe, 0xfa, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xd9, 0x7f, 0x4d, 0x1e, 0x99, 0x0d, 0x00, 0x00,
}

View File

@@ -17,6 +17,7 @@ service Shim {
rpc Create(CreateRequest) returns (CreateResponse);
rpc Start(StartRequest) returns (google.protobuf.Empty);
rpc Delete(DeleteRequest) returns (DeleteResponse);
rpc DeleteProcess(DeleteProcessRequest) returns (DeleteResponse);
rpc State(StateRequest) returns (StateResponse);
rpc Processes(ProcessesRequest) returns (ProcessesResponse);
rpc Pause(PauseRequest) returns (google.protobuf.Empty);
@@ -53,7 +54,6 @@ message StartRequest {
}
message DeleteRequest {
uint32 pid = 1;
}
message DeleteResponse {
@@ -61,6 +61,10 @@ message DeleteResponse {
google.protobuf.Timestamp exited_at = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
}
message DeleteProcessRequest {
uint32 pid = 1;
}
message ExecRequest {
bool terminal = 1;
string stdin = 2;