add support to kill container process by pid

This adds support for signalling a container process by pid.

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>

make Ps more extensible

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>

ps: windows support

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
This commit is contained in:
Evan Hazlett 2017-05-09 15:50:02 -04:00
parent fae11b6673
commit ef158f8b5e
14 changed files with 1523 additions and 145 deletions

View File

@ -25,6 +25,9 @@
CloseStdinRequest CloseStdinRequest
PauseRequest PauseRequest
ResumeRequest ResumeRequest
PsRequest
Ps
PsResponse
*/ */
package execution package execution
@ -140,13 +143,121 @@ func (*ListResponse) Descriptor() ([]byte, []int) { return fileDescriptorExecuti
type KillRequest struct { type KillRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Signal uint32 `protobuf:"varint,2,opt,name=signal,proto3" json:"signal,omitempty"` Signal uint32 `protobuf:"varint,2,opt,name=signal,proto3" json:"signal,omitempty"`
All bool `protobuf:"varint,3,opt,name=all,proto3" json:"all,omitempty"` // Types that are valid to be assigned to PidOrAll:
// *KillRequest_All
// *KillRequest_Pid
PidOrAll isKillRequest_PidOrAll `protobuf_oneof:"pid_or_all"`
} }
func (m *KillRequest) Reset() { *m = KillRequest{} } func (m *KillRequest) Reset() { *m = KillRequest{} }
func (*KillRequest) ProtoMessage() {} func (*KillRequest) ProtoMessage() {}
func (*KillRequest) Descriptor() ([]byte, []int) { return fileDescriptorExecution, []int{8} } func (*KillRequest) Descriptor() ([]byte, []int) { return fileDescriptorExecution, []int{8} }
type isKillRequest_PidOrAll interface {
isKillRequest_PidOrAll()
MarshalTo([]byte) (int, error)
Size() int
}
type KillRequest_All struct {
All bool `protobuf:"varint,3,opt,name=all,proto3,oneof"`
}
type KillRequest_Pid struct {
Pid uint32 `protobuf:"varint,4,opt,name=pid,proto3,oneof"`
}
func (*KillRequest_All) isKillRequest_PidOrAll() {}
func (*KillRequest_Pid) isKillRequest_PidOrAll() {}
func (m *KillRequest) GetPidOrAll() isKillRequest_PidOrAll {
if m != nil {
return m.PidOrAll
}
return nil
}
func (m *KillRequest) GetAll() bool {
if x, ok := m.GetPidOrAll().(*KillRequest_All); ok {
return x.All
}
return false
}
func (m *KillRequest) GetPid() uint32 {
if x, ok := m.GetPidOrAll().(*KillRequest_Pid); ok {
return x.Pid
}
return 0
}
// XXX_OneofFuncs is for the internal use of the proto package.
func (*KillRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _KillRequest_OneofMarshaler, _KillRequest_OneofUnmarshaler, _KillRequest_OneofSizer, []interface{}{
(*KillRequest_All)(nil),
(*KillRequest_Pid)(nil),
}
}
func _KillRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
m := msg.(*KillRequest)
// pid_or_all
switch x := m.PidOrAll.(type) {
case *KillRequest_All:
t := uint64(0)
if x.All {
t = 1
}
_ = b.EncodeVarint(3<<3 | proto.WireVarint)
_ = b.EncodeVarint(t)
case *KillRequest_Pid:
_ = b.EncodeVarint(4<<3 | proto.WireVarint)
_ = b.EncodeVarint(uint64(x.Pid))
case nil:
default:
return fmt.Errorf("KillRequest.PidOrAll has unexpected type %T", x)
}
return nil
}
func _KillRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
m := msg.(*KillRequest)
switch tag {
case 3: // pid_or_all.all
if wire != proto.WireVarint {
return true, proto.ErrInternalBadWireType
}
x, err := b.DecodeVarint()
m.PidOrAll = &KillRequest_All{x != 0}
return true, err
case 4: // pid_or_all.pid
if wire != proto.WireVarint {
return true, proto.ErrInternalBadWireType
}
x, err := b.DecodeVarint()
m.PidOrAll = &KillRequest_Pid{uint32(x)}
return true, err
default:
return false, nil
}
}
func _KillRequest_OneofSizer(msg proto.Message) (n int) {
m := msg.(*KillRequest)
// pid_or_all
switch x := m.PidOrAll.(type) {
case *KillRequest_All:
n += proto.SizeVarint(3<<3 | proto.WireVarint)
n += 1
case *KillRequest_Pid:
n += proto.SizeVarint(4<<3 | proto.WireVarint)
n += proto.SizeVarint(uint64(x.Pid))
case nil:
default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
}
return n
}
type EventsRequest struct { type EventsRequest struct {
} }
@ -211,6 +322,31 @@ func (m *ResumeRequest) Reset() { *m = ResumeRequest{} }
func (*ResumeRequest) ProtoMessage() {} func (*ResumeRequest) ProtoMessage() {}
func (*ResumeRequest) Descriptor() ([]byte, []int) { return fileDescriptorExecution, []int{15} } func (*ResumeRequest) Descriptor() ([]byte, []int) { return fileDescriptorExecution, []int{15} }
type PsRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
func (m *PsRequest) Reset() { *m = PsRequest{} }
func (*PsRequest) ProtoMessage() {}
func (*PsRequest) Descriptor() ([]byte, []int) { return fileDescriptorExecution, []int{16} }
type Ps struct {
Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"`
RuntimeData *google_protobuf1.Any `protobuf:"bytes,2,opt,name=runtime_data,json=runtimeData" json:"runtime_data,omitempty"`
}
func (m *Ps) Reset() { *m = Ps{} }
func (*Ps) ProtoMessage() {}
func (*Ps) Descriptor() ([]byte, []int) { return fileDescriptorExecution, []int{17} }
type PsResponse struct {
Ps []*Ps `protobuf:"bytes,1,rep,name=ps" json:"ps,omitempty"`
}
func (m *PsResponse) Reset() { *m = PsResponse{} }
func (*PsResponse) ProtoMessage() {}
func (*PsResponse) Descriptor() ([]byte, []int) { return fileDescriptorExecution, []int{18} }
func init() { func init() {
proto.RegisterType((*CreateRequest)(nil), "containerd.v1.services.CreateRequest") proto.RegisterType((*CreateRequest)(nil), "containerd.v1.services.CreateRequest")
proto.RegisterType((*CreateResponse)(nil), "containerd.v1.services.CreateResponse") proto.RegisterType((*CreateResponse)(nil), "containerd.v1.services.CreateResponse")
@ -228,6 +364,9 @@ func init() {
proto.RegisterType((*CloseStdinRequest)(nil), "containerd.v1.services.CloseStdinRequest") proto.RegisterType((*CloseStdinRequest)(nil), "containerd.v1.services.CloseStdinRequest")
proto.RegisterType((*PauseRequest)(nil), "containerd.v1.services.PauseRequest") proto.RegisterType((*PauseRequest)(nil), "containerd.v1.services.PauseRequest")
proto.RegisterType((*ResumeRequest)(nil), "containerd.v1.services.ResumeRequest") proto.RegisterType((*ResumeRequest)(nil), "containerd.v1.services.ResumeRequest")
proto.RegisterType((*PsRequest)(nil), "containerd.v1.services.PsRequest")
proto.RegisterType((*Ps)(nil), "containerd.v1.services.Ps")
proto.RegisterType((*PsResponse)(nil), "containerd.v1.services.PsResponse")
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -253,6 +392,7 @@ type ContainerServiceClient interface {
CloseStdin(ctx context.Context, in *CloseStdinRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) CloseStdin(ctx context.Context, in *CloseStdinRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
Resume(ctx context.Context, in *ResumeRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) Resume(ctx context.Context, in *ResumeRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
Ps(ctx context.Context, in *PsRequest, opts ...grpc.CallOption) (*PsResponse, error)
} }
type containerServiceClient struct { type containerServiceClient struct {
@ -394,6 +534,15 @@ func (c *containerServiceClient) Resume(ctx context.Context, in *ResumeRequest,
return out, nil return out, nil
} }
func (c *containerServiceClient) Ps(ctx context.Context, in *PsRequest, opts ...grpc.CallOption) (*PsResponse, error) {
out := new(PsResponse)
err := grpc.Invoke(ctx, "/containerd.v1.services.ContainerService/Ps", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for ContainerService service // Server API for ContainerService service
type ContainerServiceServer interface { type ContainerServiceServer interface {
@ -409,6 +558,7 @@ type ContainerServiceServer interface {
CloseStdin(context.Context, *CloseStdinRequest) (*google_protobuf.Empty, error) CloseStdin(context.Context, *CloseStdinRequest) (*google_protobuf.Empty, error)
Pause(context.Context, *PauseRequest) (*google_protobuf.Empty, error) Pause(context.Context, *PauseRequest) (*google_protobuf.Empty, error)
Resume(context.Context, *ResumeRequest) (*google_protobuf.Empty, error) Resume(context.Context, *ResumeRequest) (*google_protobuf.Empty, error)
Ps(context.Context, *PsRequest) (*PsResponse, error)
} }
func RegisterContainerServiceServer(s *grpc.Server, srv ContainerServiceServer) { func RegisterContainerServiceServer(s *grpc.Server, srv ContainerServiceServer) {
@ -634,6 +784,24 @@ func _ContainerService_Resume_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _ContainerService_Ps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ContainerServiceServer).Ps(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/containerd.v1.services.ContainerService/Ps",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ContainerServiceServer).Ps(ctx, req.(*PsRequest))
}
return interceptor(ctx, in, info, handler)
}
var _ContainerService_serviceDesc = grpc.ServiceDesc{ var _ContainerService_serviceDesc = grpc.ServiceDesc{
ServiceName: "containerd.v1.services.ContainerService", ServiceName: "containerd.v1.services.ContainerService",
HandlerType: (*ContainerServiceServer)(nil), HandlerType: (*ContainerServiceServer)(nil),
@ -682,6 +850,10 @@ var _ContainerService_serviceDesc = grpc.ServiceDesc{
MethodName: "Resume", MethodName: "Resume",
Handler: _ContainerService_Resume_Handler, Handler: _ContainerService_Resume_Handler,
}, },
{
MethodName: "Ps",
Handler: _ContainerService_Ps_Handler,
},
}, },
Streams: []grpc.StreamDesc{ Streams: []grpc.StreamDesc{
{ {
@ -985,7 +1157,18 @@ func (m *KillRequest) MarshalTo(dAtA []byte) (int, error) {
i++ i++
i = encodeVarintExecution(dAtA, i, uint64(m.Signal)) i = encodeVarintExecution(dAtA, i, uint64(m.Signal))
} }
if m.All { if m.PidOrAll != nil {
nn3, err := m.PidOrAll.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += nn3
}
return i, nil
}
func (m *KillRequest_All) MarshalTo(dAtA []byte) (int, error) {
i := 0
dAtA[i] = 0x18 dAtA[i] = 0x18
i++ i++
if m.All { if m.All {
@ -994,10 +1177,15 @@ func (m *KillRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0 dAtA[i] = 0
} }
i++ i++
}
return i, nil return i, nil
} }
func (m *KillRequest_Pid) MarshalTo(dAtA []byte) (int, error) {
i := 0
dAtA[i] = 0x20
i++
i = encodeVarintExecution(dAtA, i, uint64(m.Pid))
return i, nil
}
func (m *EventsRequest) Marshal() (dAtA []byte, err error) { func (m *EventsRequest) Marshal() (dAtA []byte, err error) {
size := m.Size() size := m.Size()
dAtA = make([]byte, size) dAtA = make([]byte, size)
@ -1069,11 +1257,11 @@ func (m *ExecRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x32 dAtA[i] = 0x32
i++ i++
i = encodeVarintExecution(dAtA, i, uint64(m.Spec.Size())) i = encodeVarintExecution(dAtA, i, uint64(m.Spec.Size()))
n3, err := m.Spec.MarshalTo(dAtA[i:]) n4, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil { if err != nil {
return 0, err return 0, err
} }
i += n3 i += n4
} }
return i, nil return i, nil
} }
@ -1217,6 +1405,93 @@ func (m *ResumeRequest) MarshalTo(dAtA []byte) (int, error) {
return i, nil return i, nil
} }
func (m *PsRequest) 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 *PsRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.ID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintExecution(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
return i, nil
}
func (m *Ps) 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 *Ps) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.Pid != 0 {
dAtA[i] = 0x8
i++
i = encodeVarintExecution(dAtA, i, uint64(m.Pid))
}
if m.RuntimeData != nil {
dAtA[i] = 0x12
i++
i = encodeVarintExecution(dAtA, i, uint64(m.RuntimeData.Size()))
n5, err := m.RuntimeData.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n5
}
return i, nil
}
func (m *PsResponse) 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 *PsResponse) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.Ps) > 0 {
for _, msg := range m.Ps {
dAtA[i] = 0xa
i++
i = encodeVarintExecution(dAtA, i, uint64(msg.Size()))
n, err := msg.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n
}
}
return i, nil
}
func encodeFixed64Execution(dAtA []byte, offset int, v uint64) int { func encodeFixed64Execution(dAtA []byte, offset int, v uint64) int {
dAtA[offset] = uint8(v) dAtA[offset] = uint8(v)
dAtA[offset+1] = uint8(v >> 8) dAtA[offset+1] = uint8(v >> 8)
@ -1369,12 +1644,24 @@ func (m *KillRequest) Size() (n int) {
if m.Signal != 0 { if m.Signal != 0 {
n += 1 + sovExecution(uint64(m.Signal)) n += 1 + sovExecution(uint64(m.Signal))
} }
if m.All { if m.PidOrAll != nil {
n += 2 n += m.PidOrAll.Size()
} }
return n return n
} }
func (m *KillRequest_All) Size() (n int) {
var l int
_ = l
n += 2
return n
}
func (m *KillRequest_Pid) Size() (n int) {
var l int
_ = l
n += 1 + sovExecution(uint64(m.Pid))
return n
}
func (m *EventsRequest) Size() (n int) { func (m *EventsRequest) Size() (n int) {
var l int var l int
_ = l _ = l
@ -1471,6 +1758,41 @@ func (m *ResumeRequest) Size() (n int) {
return n return n
} }
func (m *PsRequest) Size() (n int) {
var l int
_ = l
l = len(m.ID)
if l > 0 {
n += 1 + l + sovExecution(uint64(l))
}
return n
}
func (m *Ps) Size() (n int) {
var l int
_ = l
if m.Pid != 0 {
n += 1 + sovExecution(uint64(m.Pid))
}
if m.RuntimeData != nil {
l = m.RuntimeData.Size()
n += 1 + l + sovExecution(uint64(l))
}
return n
}
func (m *PsResponse) Size() (n int) {
var l int
_ = l
if len(m.Ps) > 0 {
for _, e := range m.Ps {
l = e.Size()
n += 1 + l + sovExecution(uint64(l))
}
}
return n
}
func sovExecution(x uint64) (n int) { func sovExecution(x uint64) (n int) {
for { for {
n++ n++
@ -1580,11 +1902,31 @@ func (this *KillRequest) String() string {
s := strings.Join([]string{`&KillRequest{`, s := strings.Join([]string{`&KillRequest{`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`, `ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`Signal:` + fmt.Sprintf("%v", this.Signal) + `,`, `Signal:` + fmt.Sprintf("%v", this.Signal) + `,`,
`PidOrAll:` + fmt.Sprintf("%v", this.PidOrAll) + `,`,
`}`,
}, "")
return s
}
func (this *KillRequest_All) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&KillRequest_All{`,
`All:` + fmt.Sprintf("%v", this.All) + `,`, `All:` + fmt.Sprintf("%v", this.All) + `,`,
`}`, `}`,
}, "") }, "")
return s return s
} }
func (this *KillRequest_Pid) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&KillRequest_Pid{`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`}`,
}, "")
return s
}
func (this *EventsRequest) String() string { func (this *EventsRequest) String() string {
if this == nil { if this == nil {
return "nil" return "nil"
@ -1663,6 +2005,37 @@ func (this *ResumeRequest) String() string {
}, "") }, "")
return s return s
} }
func (this *PsRequest) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&PsRequest{`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`}`,
}, "")
return s
}
func (this *Ps) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&Ps{`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`RuntimeData:` + strings.Replace(fmt.Sprintf("%v", this.RuntimeData), "Any", "google_protobuf1.Any", 1) + `,`,
`}`,
}, "")
return s
}
func (this *PsResponse) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&PsResponse{`,
`Ps:` + strings.Replace(fmt.Sprintf("%v", this.Ps), "Ps", "Ps", 1) + `,`,
`}`,
}, "")
return s
}
func valueToStringExecution(v interface{}) string { func valueToStringExecution(v interface{}) string {
rv := reflect.ValueOf(v) rv := reflect.ValueOf(v)
if rv.IsNil() { if rv.IsNil() {
@ -2640,7 +3013,28 @@ func (m *KillRequest) Unmarshal(dAtA []byte) error {
break break
} }
} }
m.All = bool(v != 0) b := bool(v != 0)
m.PidOrAll = &KillRequest_All{b}
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
}
var v uint32
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecution
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint32(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.PidOrAll = &KillRequest_Pid{v}
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipExecution(dAtA[iNdEx:]) skippy, err := skipExecution(dAtA[iNdEx:])
@ -3392,6 +3786,268 @@ func (m *ResumeRequest) Unmarshal(dAtA []byte) error {
} }
return nil return nil
} }
func (m *PsRequest) 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 ErrIntOverflowExecution
}
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: PsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: PsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecution
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthExecution
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipExecution(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthExecution
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *Ps) 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 ErrIntOverflowExecution
}
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: Ps: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: Ps: 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 ErrIntOverflowExecution
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Pid |= (uint32(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field RuntimeData", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecution
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthExecution
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.RuntimeData == nil {
m.RuntimeData = &google_protobuf1.Any{}
}
if err := m.RuntimeData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipExecution(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthExecution
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *PsResponse) 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 ErrIntOverflowExecution
}
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: PsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: PsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Ps", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecution
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthExecution
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Ps = append(m.Ps, &Ps{})
if err := m.Ps[len(m.Ps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipExecution(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthExecution
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipExecution(dAtA []byte) (n int, err error) { func skipExecution(dAtA []byte) (n int, err error) {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0
@ -3502,59 +4158,64 @@ func init() {
} }
var fileDescriptorExecution = []byte{ var fileDescriptorExecution = []byte{
// 854 bytes of a gzipped FileDescriptorProto // 944 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x4f, 0x8f, 0xdb, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xcd, 0x8e, 0xe3, 0x44,
0x14, 0x5f, 0xe7, 0x8f, 0x37, 0x7d, 0xd9, 0x94, 0x32, 0x5a, 0xad, 0x8c, 0x91, 0x92, 0xc8, 0xb4, 0x10, 0x1e, 0x3b, 0x89, 0x37, 0x5b, 0x49, 0x96, 0xa5, 0x35, 0x1a, 0x19, 0x23, 0x25, 0xc1, 0xfb,
0x25, 0x5c, 0x1c, 0x58, 0x6e, 0x08, 0x90, 0xb2, 0xd9, 0xa8, 0xaa, 0x4a, 0xe9, 0xe2, 0x20, 0x71, 0x43, 0xe0, 0xe0, 0xc0, 0x70, 0x00, 0x21, 0x40, 0x9a, 0x9f, 0x68, 0x59, 0x0d, 0xcb, 0x06, 0x0f,
0xac, 0xbc, 0xf1, 0x6c, 0x32, 0x92, 0xe3, 0x31, 0x9e, 0xf1, 0xb2, 0xb9, 0xc1, 0x9d, 0x03, 0x5f, 0x12, 0xc7, 0xc8, 0x13, 0xf7, 0x64, 0x5a, 0x72, 0x6c, 0xe3, 0x6e, 0x0f, 0x93, 0x1b, 0x88, 0x2b,
0x85, 0x0b, 0x9f, 0x61, 0x8f, 0x1c, 0x39, 0x15, 0x9a, 0x4f, 0x82, 0x66, 0xc6, 0x4e, 0xec, 0x6c, 0x07, 0x5e, 0x85, 0xb7, 0x98, 0x23, 0x47, 0x4e, 0x0b, 0x9b, 0x27, 0x41, 0xfd, 0xe3, 0xc4, 0xc9,
0xa6, 0xee, 0x5e, 0xa2, 0x79, 0x2f, 0xef, 0xbd, 0xf9, 0xbd, 0x37, 0xbf, 0xdf, 0x33, 0x3c, 0x9b, 0x4c, 0x8f, 0x77, 0x2f, 0x51, 0x57, 0xa5, 0xaa, 0xfa, 0xab, 0xea, 0xaf, 0x3e, 0xc3, 0xb3, 0x19,
0x13, 0xbe, 0x48, 0x2f, 0xdd, 0x19, 0x5d, 0x0e, 0x67, 0x34, 0xe2, 0x3e, 0x89, 0x70, 0x12, 0x14, 0x61, 0x17, 0xf9, 0x99, 0x37, 0x4d, 0xe6, 0xc3, 0x69, 0x12, 0xb3, 0x80, 0xc4, 0x38, 0x0b, 0xcb,
0x8f, 0x7e, 0x4c, 0x86, 0x0c, 0x27, 0xd7, 0x64, 0x86, 0xd9, 0x10, 0xdf, 0xe0, 0x59, 0xca, 0x09, 0xc7, 0x20, 0x25, 0x43, 0x8a, 0xb3, 0x4b, 0x32, 0xc5, 0x74, 0x88, 0xaf, 0xf0, 0x34, 0x67, 0x24,
0x8d, 0xb6, 0x27, 0x37, 0x4e, 0x28, 0xa7, 0xe8, 0x64, 0x9b, 0xe2, 0x5e, 0x7f, 0xe1, 0xe6, 0x19, 0x89, 0xd7, 0x27, 0x2f, 0xcd, 0x12, 0x96, 0xa0, 0xbd, 0x75, 0x8a, 0x77, 0xf9, 0xa9, 0x57, 0x64,
0xf6, 0xc7, 0x73, 0x4a, 0xe7, 0x21, 0x1e, 0xca, 0xa8, 0xcb, 0xf4, 0x6a, 0x88, 0x97, 0x31, 0x5f, 0x38, 0xef, 0xcf, 0x92, 0x64, 0x16, 0xe1, 0xa1, 0x88, 0x3a, 0xcb, 0xcf, 0x87, 0x78, 0x9e, 0xb2,
0xa9, 0x24, 0xfb, 0xa3, 0xdd, 0x3f, 0xfd, 0x28, 0xff, 0xeb, 0x78, 0x4e, 0xe7, 0x54, 0x1e, 0x87, 0x85, 0x4c, 0x72, 0xde, 0xdb, 0xfe, 0x33, 0x88, 0x8b, 0xbf, 0x76, 0x67, 0xc9, 0x2c, 0x11, 0xc7,
0xe2, 0x94, 0x79, 0xbf, 0x7e, 0x2f, 0xb8, 0x7c, 0x15, 0x63, 0x36, 0x5c, 0xd2, 0x34, 0xe2, 0xea, 0x21, 0x3f, 0x29, 0xef, 0x57, 0x6f, 0x04, 0x97, 0x2d, 0x52, 0x4c, 0x87, 0xf3, 0x24, 0x8f, 0x99,
0x37, 0xcb, 0x3e, 0xbf, 0x47, 0xf6, 0xc6, 0xb9, 0x3d, 0x65, 0x55, 0x7a, 0xbb, 0xa0, 0x39, 0x59, 0xfc, 0x55, 0xd9, 0xc7, 0x6f, 0x91, 0xbd, 0x72, 0xae, 0x4f, 0xaa, 0x4a, 0x6f, 0x1b, 0x34, 0x23,
0x62, 0xc6, 0xfd, 0x65, 0xac, 0x02, 0x9c, 0xdf, 0x6a, 0xd0, 0x19, 0x27, 0xd8, 0xe7, 0xd8, 0xc3, 0x73, 0x4c, 0x59, 0x30, 0x4f, 0x65, 0x80, 0xfb, 0x9b, 0x09, 0x9d, 0xa3, 0x0c, 0x07, 0x0c, 0xfb,
0x3f, 0xa7, 0x98, 0x71, 0x74, 0x02, 0x35, 0x12, 0x58, 0x46, 0xdf, 0x18, 0x3c, 0x38, 0x33, 0xd7, 0xf8, 0xe7, 0x1c, 0x53, 0x86, 0xf6, 0xc0, 0x24, 0xa1, 0x6d, 0xf4, 0x8d, 0xc1, 0xfd, 0x43, 0x6b,
0x6f, 0x7a, 0xb5, 0xe7, 0xe7, 0x5e, 0x8d, 0x04, 0x68, 0x00, 0x0d, 0x16, 0xe3, 0x99, 0x55, 0xeb, 0xf9, 0xaa, 0x67, 0x3e, 0x3f, 0xf6, 0x4d, 0x12, 0xa2, 0x01, 0xd4, 0x69, 0x8a, 0xa7, 0xb6, 0xd9,
0x1b, 0x83, 0xf6, 0xe9, 0xb1, 0xab, 0x2a, 0xbb, 0x79, 0x65, 0x77, 0x14, 0xad, 0x3c, 0x19, 0x81, 0x37, 0x06, 0xad, 0xfd, 0x5d, 0x4f, 0x56, 0xf6, 0x8a, 0xca, 0xde, 0x41, 0xbc, 0xf0, 0x45, 0x04,
0x4e, 0xc1, 0x4c, 0x28, 0xe5, 0x57, 0xcc, 0xaa, 0xf7, 0xeb, 0x83, 0xf6, 0xa9, 0xed, 0x96, 0xe7, 0xda, 0x07, 0x2b, 0x4b, 0x12, 0x76, 0x4e, 0xed, 0x5a, 0xbf, 0x36, 0x68, 0xed, 0x3b, 0xde, 0xe6,
0x2d, 0x41, 0xbb, 0x2f, 0x45, 0xb3, 0x5e, 0x16, 0x89, 0x2c, 0x38, 0x4c, 0xd2, 0x48, 0xa0, 0xb3, 0xbc, 0x05, 0x68, 0xef, 0x05, 0x6f, 0xd6, 0x57, 0x91, 0xc8, 0x86, 0x7b, 0x59, 0x1e, 0x73, 0x74,
0x1a, 0xe2, 0x6a, 0x2f, 0x37, 0xd1, 0x31, 0x34, 0x19, 0x0f, 0x48, 0x64, 0x35, 0xa5, 0x5f, 0x19, 0x76, 0x9d, 0x5f, 0xed, 0x17, 0x26, 0xda, 0x85, 0x06, 0x65, 0x21, 0x89, 0xed, 0x86, 0xf0, 0x4b,
0xe8, 0x04, 0x4c, 0xc6, 0x03, 0x9a, 0x72, 0xcb, 0x94, 0xee, 0xcc, 0xca, 0xfc, 0x38, 0x49, 0xac, 0x03, 0xed, 0x81, 0x45, 0x59, 0x98, 0xe4, 0xcc, 0xb6, 0x84, 0x5b, 0x59, 0xca, 0x8f, 0xb3, 0xcc,
0xc3, 0x8d, 0x1f, 0x27, 0x09, 0xb2, 0xa1, 0xc5, 0x71, 0xb2, 0x24, 0x91, 0x1f, 0x5a, 0xad, 0xbe, 0xbe, 0xb7, 0xf2, 0xe3, 0x2c, 0x43, 0x0e, 0x34, 0x19, 0xce, 0xe6, 0x24, 0x0e, 0x22, 0xbb, 0xd9,
0x31, 0x68, 0x79, 0x1b, 0xdb, 0xf9, 0x0a, 0x1e, 0xe6, 0x23, 0x60, 0x31, 0x8d, 0x18, 0xd6, 0xce, 0x37, 0x06, 0x4d, 0x7f, 0x65, 0xbb, 0x5f, 0xc2, 0x83, 0x62, 0x04, 0x34, 0x4d, 0x62, 0x8a, 0xb5,
0xe0, 0x11, 0xd4, 0x63, 0x12, 0xc8, 0x11, 0x74, 0x3c, 0x71, 0x74, 0x9e, 0xc2, 0xd1, 0x94, 0xfb, 0x33, 0x78, 0x08, 0xb5, 0x94, 0x84, 0x62, 0x04, 0x1d, 0x9f, 0x1f, 0xdd, 0xa7, 0xd0, 0x3e, 0x65,
0x09, 0xaf, 0x98, 0x9e, 0xf3, 0x29, 0x74, 0xce, 0x71, 0x88, 0x2b, 0xc7, 0xec, 0xfc, 0x6e, 0xc0, 0x41, 0xc6, 0x2a, 0xa6, 0xe7, 0x7e, 0x08, 0x9d, 0x63, 0x1c, 0xe1, 0xca, 0x31, 0xbb, 0x7f, 0x18,
0xc3, 0x3c, 0xb2, 0x02, 0x4d, 0x0f, 0xda, 0xf8, 0x86, 0xf0, 0xd7, 0x8c, 0xfb, 0x3c, 0x65, 0x19, 0xf0, 0xa0, 0x88, 0xac, 0x40, 0xd3, 0x83, 0x16, 0xbe, 0x22, 0x6c, 0x42, 0x59, 0xc0, 0x72, 0xaa,
0x2a, 0x10, 0xae, 0xa9, 0xf4, 0xa0, 0x11, 0x3c, 0x10, 0x16, 0x0e, 0x5e, 0xfb, 0xdc, 0xaa, 0xcb, 0x50, 0x01, 0x77, 0x9d, 0x0a, 0x0f, 0x3a, 0x80, 0xfb, 0xdc, 0xc2, 0xe1, 0x24, 0x60, 0x76, 0x4d,
0x77, 0xb3, 0xef, 0xbc, 0xdb, 0x8f, 0x39, 0x23, 0xce, 0x5a, 0xb7, 0x6f, 0x7a, 0x07, 0x7f, 0xfc, 0xbc, 0x9b, 0x73, 0xe3, 0xdd, 0x7e, 0x2c, 0x18, 0x71, 0xd8, 0xbc, 0x7e, 0xd5, 0xdb, 0xf9, 0xf3,
0xdb, 0x33, 0xbc, 0x96, 0x4a, 0x1b, 0x71, 0xe7, 0x09, 0xb4, 0x9f, 0x47, 0x57, 0xb4, 0x0a, 0x75, 0xdf, 0x9e, 0xe1, 0x37, 0x65, 0xda, 0x01, 0x73, 0x9f, 0x40, 0xeb, 0x79, 0x7c, 0x9e, 0x54, 0xa1,
0x07, 0xda, 0xdf, 0x11, 0x96, 0x4f, 0xc1, 0xf9, 0x1e, 0x8e, 0x94, 0x99, 0x75, 0xf0, 0x2d, 0xc0, 0xee, 0x40, 0xeb, 0x3b, 0x42, 0x8b, 0x29, 0xb8, 0xdf, 0x43, 0x5b, 0x9a, 0xaa, 0x83, 0x6f, 0x00,
0x86, 0x02, 0xcc, 0x32, 0x24, 0x2b, 0xba, 0x7b, 0x59, 0x31, 0xce, 0x7d, 0x5e, 0x21, 0xc3, 0x79, 0x56, 0x14, 0xa0, 0xb6, 0x21, 0x58, 0xd1, 0xbd, 0x95, 0x15, 0x47, 0x85, 0xcf, 0x2f, 0x65, 0xb8,
0x05, 0xed, 0x17, 0x24, 0x0c, 0xab, 0x28, 0x2a, 0x1e, 0x9f, 0xcc, 0xc5, 0x13, 0xab, 0x59, 0x64, 0x14, 0x5a, 0x27, 0x24, 0x8a, 0xaa, 0x28, 0xca, 0x1f, 0x9f, 0xcc, 0xf8, 0x13, 0xcb, 0x59, 0x28,
0x96, 0x78, 0x36, 0x3f, 0x0c, 0xe5, 0x04, 0x5a, 0x9e, 0x38, 0x3a, 0x1f, 0x40, 0x67, 0x72, 0x8d, 0x0b, 0x21, 0xa8, 0x05, 0x51, 0x24, 0x26, 0xd0, 0xfc, 0x76, 0xc7, 0xe7, 0x06, 0xf7, 0xf1, 0xa7,
0x23, 0xce, 0x72, 0xc4, 0x7f, 0x1a, 0xd0, 0x9e, 0xdc, 0xe0, 0x59, 0xd5, 0x15, 0x45, 0x1e, 0xd5, 0xe4, 0x64, 0xeb, 0x70, 0x5f, 0x4a, 0xc2, 0xc3, 0x36, 0x40, 0x4a, 0xc2, 0x49, 0x92, 0x4d, 0x82,
0xca, 0x3c, 0xda, 0x32, 0xb5, 0xbe, 0x9f, 0xa9, 0x0d, 0x0d, 0x53, 0x9b, 0x25, 0xa6, 0xe6, 0x3a, 0x28, 0x72, 0xdf, 0x81, 0xce, 0xe8, 0x12, 0xc7, 0x8c, 0x16, 0x5d, 0xfd, 0x65, 0x40, 0x6b, 0x74,
0x33, 0xab, 0x74, 0xe6, 0xf4, 0xe1, 0x48, 0x41, 0xce, 0xa6, 0x9c, 0xb1, 0xd3, 0xd8, 0xb2, 0x33, 0x85, 0xa7, 0x55, 0x30, 0xca, 0x5c, 0x33, 0x37, 0xb9, 0xb6, 0x66, 0x73, 0xed, 0x76, 0x36, 0xd7,
0x00, 0xb8, 0xe0, 0xab, 0xaa, 0x9e, 0xee, 0xb0, 0x5a, 0x74, 0xf2, 0x0b, 0x09, 0xf8, 0x42, 0x76, 0x35, 0x6c, 0x6e, 0x6c, 0xb0, 0xb9, 0xd8, 0x45, 0xab, 0x6a, 0x17, 0xdd, 0x3e, 0xb4, 0x25, 0x64,
0xd2, 0xf1, 0x94, 0x21, 0x10, 0x2f, 0x30, 0x99, 0x2f, 0x54, 0x27, 0x1d, 0x2f, 0xb3, 0x9c, 0x6f, 0xf5, 0x12, 0x8a, 0xc1, 0xc6, 0x9a, 0xc1, 0x21, 0xc0, 0x98, 0x2d, 0xaa, 0x7a, 0xba, 0xc1, 0x7c,
0xe0, 0xc3, 0x71, 0x48, 0x19, 0x9e, 0x8a, 0x7e, 0xef, 0x7d, 0x99, 0x90, 0xd0, 0x85, 0x9f, 0x32, 0xde, 0xc9, 0x2f, 0x24, 0x64, 0x17, 0xa2, 0x93, 0x8e, 0x2f, 0x0d, 0x8e, 0xf8, 0x02, 0x93, 0xd9,
0xfc, 0x1e, 0x12, 0xf2, 0x30, 0x4b, 0x97, 0x55, 0x81, 0xa7, 0x7f, 0x1d, 0xc2, 0xa3, 0x0d, 0x8f, 0x85, 0xec, 0xa4, 0xe3, 0x2b, 0xcb, 0xfd, 0x1a, 0xde, 0x3d, 0x8a, 0x12, 0x8a, 0x4f, 0x79, 0xbf,
0xa6, 0x6a, 0xb9, 0xa3, 0x9f, 0xc0, 0x54, 0x22, 0x47, 0x4f, 0xdc, 0xfd, 0xeb, 0xdf, 0x2d, 0xed, 0x6f, 0x7d, 0x19, 0x5f, 0xb3, 0x71, 0x90, 0x53, 0xfc, 0x06, 0x6b, 0xe6, 0x63, 0x9a, 0xcf, 0x2b,
0x41, 0xfb, 0x69, 0x55, 0x58, 0x36, 0xf5, 0x09, 0x34, 0xe5, 0x06, 0x40, 0x8f, 0x75, 0x09, 0xc5, 0x03, 0x1f, 0xc1, 0xfd, 0x31, 0xad, 0x0a, 0x7a, 0x09, 0xe6, 0x98, 0xde, 0x1c, 0x19, 0xfa, 0x1c,
0x05, 0x61, 0x9f, 0xdc, 0x79, 0xd0, 0x89, 0xf8, 0xc8, 0x08, 0x7c, 0x4a, 0xf6, 0x7a, 0x7c, 0xa5, 0xda, 0x4a, 0x9d, 0x26, 0x61, 0xc0, 0x82, 0x3b, 0x25, 0xb1, 0xa5, 0x22, 0x8f, 0x03, 0x16, 0xb8,
0x05, 0xa2, 0xc7, 0xb7, 0xb3, 0x3d, 0x5e, 0x40, 0x43, 0x28, 0x18, 0x7d, 0xa2, 0x8b, 0x2f, 0xe8, 0x5f, 0x00, 0xf0, 0x5b, 0xd5, 0x5b, 0x7c, 0x0c, 0x66, 0x5a, 0x6c, 0xc3, 0xb6, 0x46, 0x16, 0xdf,
0xdb, 0xae, 0x10, 0x25, 0xfa, 0x01, 0x1a, 0x42, 0xd8, 0xfa, 0x62, 0x85, 0x2d, 0x60, 0x3f, 0x7e, 0x24, 0x6f, 0x4c, 0x7d, 0x33, 0xa5, 0xfb, 0xbf, 0x37, 0xe1, 0xe1, 0x6a, 0x37, 0x4e, 0xe5, 0x9f,
0x77, 0x50, 0x86, 0x6f, 0x0c, 0x0d, 0xa1, 0x6d, 0x7d, 0xc9, 0x82, 0xf2, 0xb5, 0xd3, 0x7b, 0x09, 0xe8, 0x27, 0xb0, 0xa4, 0x70, 0xa1, 0x27, 0xba, 0xf4, 0x0d, 0x6d, 0x77, 0x9e, 0x56, 0x85, 0x29,
0xa6, 0xd2, 0xb3, 0x7e, 0x7a, 0x25, 0xbd, 0xdb, 0xfb, 0xbf, 0x49, 0x32, 0xe6, 0x73, 0x43, 0xb4, 0x64, 0x23, 0x68, 0x08, 0x55, 0x43, 0x8f, 0x75, 0x09, 0x65, 0xd1, 0x73, 0xf6, 0x6e, 0x74, 0x3e,
0x29, 0x94, 0xa5, 0xc7, 0x54, 0x58, 0x15, 0xfa, 0x36, 0x4b, 0xe2, 0x1c, 0x41, 0xfd, 0x82, 0xaf, 0xe2, 0x1f, 0x4e, 0x8e, 0x4f, 0x4a, 0x99, 0x1e, 0xdf, 0x86, 0x28, 0xea, 0xf1, 0x6d, 0x29, 0xe2,
0x90, 0xa3, 0x0b, 0xde, 0xea, 0x54, 0xdb, 0xe4, 0x2b, 0x80, 0xad, 0xce, 0xd0, 0x67, 0x5a, 0x7e, 0x09, 0xd4, 0xb9, 0x2a, 0xa1, 0x47, 0xba, 0xf8, 0x92, 0x66, 0x39, 0x15, 0x42, 0x83, 0x7e, 0x80,
0xee, 0x6a, 0x51, 0x5b, 0x70, 0x02, 0x4d, 0xa9, 0x3c, 0x3d, 0x75, 0x8b, 0xc2, 0xd4, 0x96, 0x79, 0x3a, 0x17, 0x2b, 0x7d, 0xb1, 0x92, 0xb2, 0x39, 0x8f, 0xef, 0x0e, 0x52, 0xf8, 0x8e, 0xa0, 0xce,
0x06, 0xa6, 0x12, 0xa6, 0x7e, 0xf8, 0x25, 0xe1, 0xea, 0x0a, 0x9d, 0x59, 0xb7, 0x6f, 0xbb, 0x07, 0xf5, 0x4a, 0x5f, 0xb2, 0xa4, 0x66, 0xda, 0xe9, 0xbd, 0x00, 0x4b, 0xea, 0x8f, 0x7e, 0x7a, 0x1b,
0xff, 0xbc, 0xed, 0x1e, 0xfc, 0xba, 0xee, 0x1a, 0xb7, 0xeb, 0xae, 0xf1, 0xf7, 0xba, 0x6b, 0xfc, 0xfa, 0xe4, 0xdc, 0xfe, 0x9d, 0x15, 0x31, 0x9f, 0x18, 0xbc, 0x4d, 0xae, 0x04, 0x7a, 0x4c, 0x25,
0xb7, 0xee, 0x1a, 0x97, 0xa6, 0x8c, 0xfc, 0xf2, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x67, 0xba, 0x69, 0xd3, 0xb7, 0xb9, 0x21, 0x26, 0x07, 0x50, 0x1b, 0xb3, 0x05, 0x72, 0xb5, 0xdc, 0x5d, 0xe9,
0xdb, 0xdc, 0x03, 0x0a, 0x00, 0x00, 0x8a, 0xb6, 0xc9, 0x97, 0x00, 0x6b, 0x5d, 0x40, 0x1f, 0x69, 0xf9, 0xb9, 0xad, 0x1d, 0xda, 0x82,
0x23, 0x68, 0x08, 0xa5, 0xd0, 0x53, 0xb7, 0x2c, 0x24, 0xda, 0x32, 0xcf, 0xc0, 0x92, 0x42, 0xa2,
0x1f, 0xfe, 0x86, 0xd0, 0x68, 0x0b, 0x9d, 0x08, 0x0d, 0xf9, 0xe0, 0x8e, 0xf5, 0x56, 0x05, 0xdc,
0xbb, 0x42, 0xe4, 0xc0, 0x0f, 0xed, 0xeb, 0xd7, 0xdd, 0x9d, 0x7f, 0x5e, 0x77, 0x77, 0x7e, 0x5d,
0x76, 0x8d, 0xeb, 0x65, 0xd7, 0xf8, 0x7b, 0xd9, 0x35, 0xfe, 0x5b, 0x76, 0x8d, 0x33, 0x4b, 0x5c,
0xfb, 0xd9, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x87, 0x9e, 0x96, 0x24, 0x0b, 0x00, 0x00,
} }

View File

@ -22,6 +22,7 @@ service ContainerService {
rpc CloseStdin(CloseStdinRequest) returns (google.protobuf.Empty); rpc CloseStdin(CloseStdinRequest) returns (google.protobuf.Empty);
rpc Pause(PauseRequest) returns (google.protobuf.Empty); rpc Pause(PauseRequest) returns (google.protobuf.Empty);
rpc Resume(ResumeRequest) returns (google.protobuf.Empty); rpc Resume(ResumeRequest) returns (google.protobuf.Empty);
rpc Ps(PsRequest) returns (PsResponse);
} }
message CreateRequest { message CreateRequest {
@ -68,7 +69,10 @@ message ListResponse {
message KillRequest { message KillRequest {
string id = 1 [(gogoproto.customname) = "ID"]; string id = 1 [(gogoproto.customname) = "ID"];
uint32 signal = 2; uint32 signal = 2;
oneof pid_or_all {
bool all = 3; bool all = 3;
uint32 pid = 4;
}
} }
message EventsRequest { message EventsRequest {
@ -106,3 +110,16 @@ message PauseRequest {
message ResumeRequest { message ResumeRequest {
string id = 1 [(gogoproto.customname) = "ID"]; string id = 1 [(gogoproto.customname) = "ID"];
} }
message PsRequest {
string id = 1 [(gogoproto.customname) = "ID"];
}
message Ps {
uint32 pid = 1;
google.protobuf.Any runtime_data = 2;
}
message PsResponse{
repeated Ps ps = 1;
}

View File

@ -26,6 +26,9 @@
ExitRequest ExitRequest
KillRequest KillRequest
CloseStdinRequest CloseStdinRequest
PsRequest
Ps
PsResponse
*/ */
package shim package shim
@ -218,6 +221,31 @@ func (m *CloseStdinRequest) Reset() { *m = CloseStdinRequest{
func (*CloseStdinRequest) ProtoMessage() {} func (*CloseStdinRequest) ProtoMessage() {}
func (*CloseStdinRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{16} } func (*CloseStdinRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{16} }
type PsRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
func (m *PsRequest) Reset() { *m = PsRequest{} }
func (*PsRequest) ProtoMessage() {}
func (*PsRequest) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{17} }
type Ps struct {
Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"`
RuntimeData *google_protobuf.Any `protobuf:"bytes,2,opt,name=runtime_data,json=runtimeData" json:"runtime_data,omitempty"`
}
func (m *Ps) Reset() { *m = Ps{} }
func (*Ps) ProtoMessage() {}
func (*Ps) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{18} }
type PsResponse struct {
Ps []*Ps `protobuf:"bytes,1,rep,name=ps" json:"ps,omitempty"`
}
func (m *PsResponse) Reset() { *m = PsResponse{} }
func (*PsResponse) ProtoMessage() {}
func (*PsResponse) Descriptor() ([]byte, []int) { return fileDescriptorShim, []int{19} }
func init() { func init() {
proto.RegisterType((*CreateRequest)(nil), "containerd.v1.services.shim.CreateRequest") proto.RegisterType((*CreateRequest)(nil), "containerd.v1.services.shim.CreateRequest")
proto.RegisterType((*CreateResponse)(nil), "containerd.v1.services.shim.CreateResponse") proto.RegisterType((*CreateResponse)(nil), "containerd.v1.services.shim.CreateResponse")
@ -236,6 +264,9 @@ func init() {
proto.RegisterType((*ExitRequest)(nil), "containerd.v1.services.shim.ExitRequest") proto.RegisterType((*ExitRequest)(nil), "containerd.v1.services.shim.ExitRequest")
proto.RegisterType((*KillRequest)(nil), "containerd.v1.services.shim.KillRequest") proto.RegisterType((*KillRequest)(nil), "containerd.v1.services.shim.KillRequest")
proto.RegisterType((*CloseStdinRequest)(nil), "containerd.v1.services.shim.CloseStdinRequest") proto.RegisterType((*CloseStdinRequest)(nil), "containerd.v1.services.shim.CloseStdinRequest")
proto.RegisterType((*PsRequest)(nil), "containerd.v1.services.shim.PsRequest")
proto.RegisterType((*Ps)(nil), "containerd.v1.services.shim.Ps")
proto.RegisterType((*PsResponse)(nil), "containerd.v1.services.shim.PsResponse")
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -253,6 +284,7 @@ type ShimClient interface {
Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, 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) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error)
State(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error) State(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error)
Ps(ctx context.Context, in *PsRequest, opts ...grpc.CallOption) (*PsResponse, error)
Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error)
Resume(ctx context.Context, in *ResumeRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) Resume(ctx context.Context, in *ResumeRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error)
Exit(ctx context.Context, in *ExitRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) Exit(ctx context.Context, in *ExitRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error)
@ -307,6 +339,15 @@ func (c *shimClient) State(ctx context.Context, in *StateRequest, opts ...grpc.C
return out, nil return out, nil
} }
func (c *shimClient) Ps(ctx context.Context, in *PsRequest, opts ...grpc.CallOption) (*PsResponse, error) {
out := new(PsResponse)
err := grpc.Invoke(ctx, "/containerd.v1.services.shim.Shim/Ps", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *shimClient) Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { func (c *shimClient) Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) {
out := new(google_protobuf1.Empty) out := new(google_protobuf1.Empty)
err := grpc.Invoke(ctx, "/containerd.v1.services.shim.Shim/Pause", in, out, c.cc, opts...) err := grpc.Invoke(ctx, "/containerd.v1.services.shim.Shim/Pause", in, out, c.cc, opts...)
@ -409,6 +450,7 @@ type ShimServer interface {
Start(context.Context, *StartRequest) (*google_protobuf1.Empty, error) Start(context.Context, *StartRequest) (*google_protobuf1.Empty, error)
Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) Delete(context.Context, *DeleteRequest) (*DeleteResponse, error)
State(context.Context, *StateRequest) (*StateResponse, error) State(context.Context, *StateRequest) (*StateResponse, error)
Ps(context.Context, *PsRequest) (*PsResponse, error)
Pause(context.Context, *PauseRequest) (*google_protobuf1.Empty, error) Pause(context.Context, *PauseRequest) (*google_protobuf1.Empty, error)
Resume(context.Context, *ResumeRequest) (*google_protobuf1.Empty, error) Resume(context.Context, *ResumeRequest) (*google_protobuf1.Empty, error)
Exit(context.Context, *ExitRequest) (*google_protobuf1.Empty, error) Exit(context.Context, *ExitRequest) (*google_protobuf1.Empty, error)
@ -495,6 +537,24 @@ func _Shim_State_Handler(srv interface{}, ctx context.Context, dec func(interfac
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Shim_Ps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ShimServer).Ps(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/containerd.v1.services.shim.Shim/Ps",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ShimServer).Ps(ctx, req.(*PsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Shim_Pause_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Shim_Pause_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PauseRequest) in := new(PauseRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -662,6 +722,10 @@ var _Shim_serviceDesc = grpc.ServiceDesc{
MethodName: "State", MethodName: "State",
Handler: _Shim_State_Handler, Handler: _Shim_State_Handler,
}, },
{
MethodName: "Ps",
Handler: _Shim_Ps_Handler,
},
{ {
MethodName: "Pause", MethodName: "Pause",
Handler: _Shim_Pause_Handler, Handler: _Shim_Pause_Handler,
@ -1231,6 +1295,93 @@ func (m *CloseStdinRequest) MarshalTo(dAtA []byte) (int, error) {
return i, nil return i, nil
} }
func (m *PsRequest) 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 *PsRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.ID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintShim(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
return i, nil
}
func (m *Ps) 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 *Ps) 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))
}
if m.RuntimeData != nil {
dAtA[i] = 0x12
i++
i = encodeVarintShim(dAtA, i, uint64(m.RuntimeData.Size()))
n3, err := m.RuntimeData.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n3
}
return i, nil
}
func (m *PsResponse) 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 *PsResponse) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.Ps) > 0 {
for _, msg := range m.Ps {
dAtA[i] = 0xa
i++
i = encodeVarintShim(dAtA, i, uint64(msg.Size()))
n, err := msg.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n
}
}
return i, nil
}
func encodeFixed64Shim(dAtA []byte, offset int, v uint64) int { func encodeFixed64Shim(dAtA []byte, offset int, v uint64) int {
dAtA[offset] = uint8(v) dAtA[offset] = uint8(v)
dAtA[offset+1] = uint8(v >> 8) dAtA[offset+1] = uint8(v >> 8)
@ -1480,6 +1631,41 @@ func (m *CloseStdinRequest) Size() (n int) {
return n return n
} }
func (m *PsRequest) Size() (n int) {
var l int
_ = l
l = len(m.ID)
if l > 0 {
n += 1 + l + sovShim(uint64(l))
}
return n
}
func (m *Ps) Size() (n int) {
var l int
_ = l
if m.Pid != 0 {
n += 1 + sovShim(uint64(m.Pid))
}
if m.RuntimeData != nil {
l = m.RuntimeData.Size()
n += 1 + l + sovShim(uint64(l))
}
return n
}
func (m *PsResponse) Size() (n int) {
var l int
_ = l
if len(m.Ps) > 0 {
for _, e := range m.Ps {
l = e.Size()
n += 1 + l + sovShim(uint64(l))
}
}
return n
}
func sovShim(x uint64) (n int) { func sovShim(x uint64) (n int) {
for { for {
n++ n++
@ -1680,6 +1866,37 @@ func (this *CloseStdinRequest) String() string {
}, "") }, "")
return s return s
} }
func (this *PsRequest) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&PsRequest{`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`}`,
}, "")
return s
}
func (this *Ps) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&Ps{`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`RuntimeData:` + strings.Replace(fmt.Sprintf("%v", this.RuntimeData), "Any", "google_protobuf.Any", 1) + `,`,
`}`,
}, "")
return s
}
func (this *PsResponse) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&PsResponse{`,
`Ps:` + strings.Replace(fmt.Sprintf("%v", this.Ps), "Ps", "Ps", 1) + `,`,
`}`,
}, "")
return s
}
func valueToStringShim(v interface{}) string { func valueToStringShim(v interface{}) string {
rv := reflect.ValueOf(v) rv := reflect.ValueOf(v)
if rv.IsNil() { if rv.IsNil() {
@ -3357,6 +3574,268 @@ func (m *CloseStdinRequest) Unmarshal(dAtA []byte) error {
} }
return nil return nil
} }
func (m *PsRequest) 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: PsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: PsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowShim
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthShim
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
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 *Ps) 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: Ps: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: Ps: 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
}
}
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field RuntimeData", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowShim
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthShim
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.RuntimeData == nil {
m.RuntimeData = &google_protobuf.Any{}
}
if err := m.RuntimeData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
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 *PsResponse) 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: PsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: PsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Ps", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowShim
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthShim
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Ps = append(m.Ps, &Ps{})
if err := m.Ps[len(m.Ps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
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 skipShim(dAtA []byte) (n int, err error) { func skipShim(dAtA []byte) (n int, err error) {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0
@ -3467,63 +3946,67 @@ func init() {
} }
var fileDescriptorShim = []byte{ var fileDescriptorShim = []byte{
// 913 bytes of a gzipped FileDescriptorProto // 983 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x4f, 0x6f, 0xe3, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xcd, 0x6f, 0xe3, 0x44,
0x14, 0xaf, 0x93, 0xd4, 0x4d, 0x5f, 0xd6, 0x5d, 0x18, 0x55, 0x95, 0x37, 0x45, 0x49, 0xb1, 0x84, 0x14, 0xaf, 0x93, 0xd4, 0x4d, 0x5f, 0xea, 0x2e, 0x8c, 0xaa, 0xca, 0x9b, 0xa2, 0xa4, 0x18, 0x01,
0xc8, 0x2e, 0x92, 0x03, 0xd9, 0x1b, 0x82, 0x43, 0xbb, 0x2d, 0x62, 0x61, 0x91, 0xa2, 0xe9, 0xde, 0xdd, 0x45, 0x72, 0xa0, 0x7b, 0x40, 0x42, 0xec, 0xa1, 0xdd, 0x14, 0xb1, 0xb0, 0x88, 0x68, 0xba,
0x90, 0xa8, 0xdc, 0x78, 0x9a, 0x8c, 0x64, 0x7b, 0x8c, 0x67, 0x5c, 0x36, 0x37, 0xce, 0x9c, 0xb8, 0x9c, 0x90, 0xa8, 0xdc, 0x78, 0x9a, 0x8c, 0x64, 0x7b, 0x8c, 0x67, 0x5c, 0x36, 0x37, 0xce, 0x9c,
0xf2, 0x75, 0x38, 0xf5, 0xc8, 0x91, 0xd3, 0xc2, 0xe6, 0x3b, 0x70, 0x47, 0xf3, 0xc7, 0x76, 0xd2, 0xb8, 0xf2, 0xef, 0x70, 0xea, 0x81, 0x03, 0x47, 0x4e, 0x0b, 0x9b, 0xbf, 0x04, 0xcd, 0x87, 0xf3,
0xd6, 0x49, 0xf7, 0x62, 0xbd, 0xf7, 0xe6, 0xcd, 0x9b, 0xdf, 0xfb, 0xbd, 0x3f, 0x86, 0xaf, 0xa7, 0xd1, 0xc6, 0x71, 0xf7, 0x62, 0xcd, 0x3c, 0xff, 0xe6, 0xcd, 0xef, 0xfd, 0xde, 0xc7, 0xc0, 0xd3,
0x54, 0xcc, 0xf2, 0x4b, 0x7f, 0xc2, 0xe2, 0xe1, 0x84, 0x25, 0x22, 0xa0, 0x09, 0xc9, 0xc2, 0x65, 0x11, 0x15, 0xe3, 0xfc, 0xd2, 0x1f, 0xb2, 0xb8, 0x37, 0x64, 0x89, 0x08, 0x68, 0x42, 0xb2, 0x70,
0x31, 0x48, 0xe9, 0x90, 0x93, 0xec, 0x9a, 0x4e, 0x08, 0x1f, 0xf2, 0x19, 0x8d, 0xd5, 0xc7, 0x4f, 0x71, 0x19, 0xa4, 0xb4, 0xc7, 0x49, 0x76, 0x4d, 0x87, 0x84, 0xf7, 0xf8, 0x98, 0xc6, 0xea, 0xe3,
0x33, 0x26, 0x18, 0x3a, 0xac, 0x1c, 0xfd, 0xeb, 0x2f, 0xfc, 0xc2, 0xcf, 0x97, 0x2e, 0xdd, 0x27, 0xa7, 0x19, 0x13, 0x0c, 0x1d, 0xcc, 0x81, 0xfe, 0xf5, 0x67, 0x7e, 0x81, 0xf3, 0x25, 0xa4, 0xfd,
0x53, 0xc6, 0xa6, 0x11, 0x19, 0x2a, 0xd7, 0xcb, 0xfc, 0x6a, 0x18, 0x24, 0x73, 0x7d, 0xaf, 0x7b, 0x70, 0xc4, 0xd8, 0x28, 0x22, 0x3d, 0x05, 0xbd, 0xcc, 0xaf, 0x7a, 0x41, 0x32, 0xd1, 0xe7, 0xda,
0x78, 0xfb, 0x88, 0xc4, 0xa9, 0x28, 0x0e, 0xf7, 0xa7, 0x6c, 0xca, 0x94, 0x38, 0x94, 0x92, 0xb1, 0x07, 0xb7, 0x7f, 0x91, 0x38, 0x15, 0xc5, 0xcf, 0xbd, 0x11, 0x1b, 0x31, 0xb5, 0xec, 0xc9, 0x95,
0x7e, 0xf5, 0x20, 0xa4, 0x62, 0x9e, 0x12, 0x3e, 0x8c, 0x59, 0x9e, 0x08, 0xfd, 0x35, 0xb7, 0x4f, 0xb1, 0x7e, 0x79, 0x2f, 0xa6, 0x62, 0x92, 0x12, 0xde, 0x8b, 0x59, 0x9e, 0x08, 0xfd, 0x35, 0xa7,
0xdf, 0xe3, 0x76, 0x69, 0xac, 0x24, 0x13, 0xa5, 0x7f, 0x1b, 0xb6, 0xa0, 0x31, 0xe1, 0x22, 0x88, 0xfb, 0x6f, 0x71, 0x7a, 0x66, 0x9c, 0xaf, 0x8c, 0x97, 0xee, 0x6d, 0xda, 0x82, 0xc6, 0x84, 0x8b,
0x53, 0xed, 0xe0, 0xfd, 0xd6, 0x00, 0xe7, 0x45, 0x46, 0x02, 0x41, 0x30, 0xf9, 0x39, 0x27, 0x5c, 0x20, 0x4e, 0x35, 0xc0, 0xfb, 0xad, 0x06, 0xce, 0xb3, 0x8c, 0x04, 0x82, 0x60, 0xf2, 0x73, 0x4e,
0xa0, 0x03, 0x68, 0xd0, 0xd0, 0xb5, 0x8e, 0xac, 0xc1, 0xee, 0x89, 0xbd, 0x78, 0xdb, 0x6f, 0xbc, 0xb8, 0x40, 0xfb, 0x50, 0xa3, 0xa1, 0x6b, 0x1d, 0x5a, 0x47, 0xdb, 0xa7, 0xf6, 0xf4, 0x75, 0xb7,
0x3c, 0xc5, 0x0d, 0x1a, 0xa2, 0x03, 0xb0, 0x2f, 0xf3, 0x24, 0x8c, 0x88, 0xdb, 0x90, 0x67, 0xd8, 0xf6, 0xbc, 0x8f, 0x6b, 0x34, 0x44, 0xfb, 0x60, 0x5f, 0xe6, 0x49, 0x18, 0x11, 0xb7, 0x26, 0xff,
0x68, 0xc8, 0x85, 0x9d, 0x2c, 0x4f, 0x64, 0x5c, 0xb7, 0xa9, 0x0e, 0x0a, 0x15, 0x3d, 0x81, 0x76, 0x61, 0xb3, 0x43, 0x2e, 0x6c, 0x65, 0x79, 0x22, 0xfd, 0xba, 0x75, 0xf5, 0xa3, 0xd8, 0xa2, 0x87,
0xc2, 0x2e, 0x52, 0x7a, 0xcd, 0x84, 0xdb, 0x3a, 0xb2, 0x06, 0x6d, 0xbc, 0x93, 0xb0, 0xb1, 0x54, 0xd0, 0x4c, 0xd8, 0x45, 0x4a, 0xaf, 0x99, 0x70, 0x1b, 0x87, 0xd6, 0x51, 0x13, 0x6f, 0x25, 0x6c,
0x51, 0x17, 0xda, 0x82, 0x64, 0x31, 0x4d, 0x82, 0xc8, 0xdd, 0x56, 0x47, 0xa5, 0x8e, 0xf6, 0x61, 0x20, 0xb7, 0xa8, 0x0d, 0x4d, 0x41, 0xb2, 0x98, 0x26, 0x41, 0xe4, 0x6e, 0xaa, 0x5f, 0xb3, 0x3d,
0x9b, 0x8b, 0x90, 0x26, 0xae, 0xad, 0xc2, 0x69, 0x45, 0x3e, 0xcf, 0x45, 0xc8, 0x72, 0xe1, 0xee, 0xda, 0x83, 0x4d, 0x2e, 0x42, 0x9a, 0xb8, 0xb6, 0x72, 0xa7, 0x37, 0xf2, 0x7a, 0x2e, 0x42, 0x96,
0xe8, 0xe7, 0xb5, 0x66, 0xec, 0x24, 0xcb, 0xdc, 0x76, 0x69, 0x27, 0x59, 0x86, 0x46, 0x60, 0x67, 0x0b, 0x77, 0x4b, 0x5f, 0xaf, 0x77, 0xc6, 0x4e, 0xb2, 0xcc, 0x6d, 0xce, 0xec, 0x24, 0xcb, 0xd0,
0x8c, 0x89, 0x2b, 0xee, 0xee, 0x1e, 0x35, 0x07, 0x9d, 0x51, 0xd7, 0x5f, 0xad, 0xbc, 0x62, 0xce, 0x31, 0xd8, 0x19, 0x63, 0xe2, 0x8a, 0xbb, 0xdb, 0x87, 0xf5, 0xa3, 0xd6, 0x71, 0xdb, 0x5f, 0xce,
0xff, 0x41, 0x32, 0x8e, 0x8d, 0xa7, 0xe7, 0xc1, 0x5e, 0xc1, 0x05, 0x4f, 0x59, 0xc2, 0x09, 0xfa, 0xbc, 0x52, 0xce, 0xff, 0x4e, 0x2a, 0x8e, 0x0d, 0xd2, 0xf3, 0x60, 0xb7, 0xd0, 0x82, 0xa7, 0x2c,
0x00, 0x9a, 0xa9, 0x61, 0xc3, 0xc1, 0x52, 0xf4, 0xf6, 0xe0, 0xd1, 0xb9, 0x08, 0x32, 0x61, 0xe8, 0xe1, 0x04, 0xbd, 0x03, 0xf5, 0xd4, 0xa8, 0xe1, 0x60, 0xb9, 0xf4, 0x76, 0x61, 0xe7, 0x5c, 0x04,
0xf2, 0x3e, 0x06, 0xe7, 0x94, 0x44, 0xa4, 0xe2, 0xef, 0xee, 0x15, 0x01, 0x7b, 0x85, 0x8b, 0x09, 0x99, 0x30, 0x72, 0x79, 0xef, 0x83, 0xd3, 0x27, 0x11, 0x99, 0xeb, 0x77, 0xf7, 0x88, 0x80, 0xdd,
0xdb, 0x87, 0x0e, 0x79, 0x43, 0xc5, 0x05, 0x17, 0x81, 0xc8, 0xb9, 0xf1, 0x05, 0x69, 0x3a, 0x57, 0x02, 0x62, 0xdc, 0x76, 0xa1, 0x45, 0x5e, 0x51, 0x71, 0xc1, 0x45, 0x20, 0x72, 0x6e, 0xb0, 0x20,
0x16, 0x74, 0x0c, 0xbb, 0x52, 0x23, 0xe1, 0x45, 0x20, 0x14, 0xdf, 0x32, 0x01, 0x5d, 0x4b, 0xbf, 0x4d, 0xe7, 0xca, 0x82, 0x4e, 0x60, 0x5b, 0xee, 0x48, 0x78, 0x11, 0x08, 0xa5, 0xb7, 0x0c, 0x40,
0xa8, 0xa5, 0xff, 0xba, 0xa8, 0xe5, 0x49, 0xfb, 0xe6, 0x6d, 0x7f, 0xeb, 0xf7, 0x7f, 0xfa, 0x16, 0xe7, 0xd2, 0x2f, 0x72, 0xe9, 0xbf, 0x2c, 0x72, 0x79, 0xda, 0xbc, 0x79, 0xdd, 0xdd, 0xf8, 0xfd,
0x6e, 0xeb, 0x6b, 0xc7, 0xc2, 0xfb, 0xc3, 0x82, 0xce, 0xd9, 0x1b, 0x32, 0x29, 0x70, 0x2d, 0x53, 0xdf, 0xae, 0x85, 0x9b, 0xfa, 0xd8, 0x89, 0xf0, 0xfe, 0xb0, 0xa0, 0x75, 0xf6, 0x8a, 0x0c, 0x0b,
0x6e, 0xd5, 0x51, 0xde, 0xb8, 0x9f, 0xf2, 0x66, 0x0d, 0xe5, 0xad, 0x15, 0xca, 0x07, 0xd0, 0xe2, 0x5e, 0x8b, 0x92, 0x5b, 0x65, 0x92, 0xd7, 0x56, 0x4b, 0x5e, 0x2f, 0x91, 0xbc, 0xb1, 0x24, 0xf9,
0x29, 0x99, 0xa8, 0x82, 0x76, 0x46, 0xfb, 0x77, 0xf0, 0x1e, 0x27, 0x73, 0xac, 0x3c, 0xbc, 0x53, 0x11, 0x34, 0x78, 0x4a, 0x86, 0x2a, 0xa1, 0xad, 0xe3, 0xbd, 0x3b, 0x7c, 0x4f, 0x92, 0x09, 0x56,
0xb0, 0x71, 0x44, 0x63, 0x2a, 0x10, 0x82, 0x96, 0xac, 0x84, 0xee, 0x37, 0xac, 0x64, 0x69, 0x9b, 0x08, 0xaf, 0x0f, 0x36, 0x8e, 0x68, 0x4c, 0x05, 0x42, 0xd0, 0x90, 0x99, 0xd0, 0xf5, 0x86, 0xd5,
0x05, 0x59, 0xa8, 0xc0, 0xb4, 0xb0, 0x92, 0xa5, 0x8d, 0xb3, 0x2b, 0x8d, 0xa4, 0x85, 0x95, 0xec, 0x5a, 0xda, 0xc6, 0x41, 0x16, 0x2a, 0x32, 0x0d, 0xac, 0xd6, 0xd2, 0xc6, 0xd9, 0x95, 0x66, 0xd2,
0x1d, 0xc1, 0x23, 0x9d, 0x60, 0x6d, 0xb1, 0x5e, 0x01, 0x8c, 0xc5, 0xbc, 0xb6, 0x32, 0x32, 0xef, 0xc0, 0x6a, 0xed, 0x1d, 0xc2, 0x8e, 0x0e, 0xb0, 0x34, 0x59, 0x2f, 0x00, 0x06, 0x62, 0x52, 0x9a,
0x5f, 0x68, 0x28, 0x66, 0xea, 0x29, 0x07, 0x6b, 0x45, 0xe6, 0x37, 0x23, 0x74, 0x3a, 0xd3, 0xaf, 0x19, 0x19, 0xf7, 0x2f, 0x34, 0x14, 0x63, 0x75, 0x95, 0x83, 0xf5, 0x46, 0xc6, 0x37, 0x26, 0x74,
0x39, 0xd8, 0x68, 0xde, 0x63, 0x70, 0xce, 0xae, 0x49, 0x22, 0x78, 0x51, 0x7b, 0xdd, 0x0b, 0x65, 0x34, 0xd6, 0xb7, 0x39, 0xd8, 0xec, 0xbc, 0x07, 0xe0, 0x9c, 0x5d, 0x93, 0x44, 0xf0, 0x22, 0xf7,
0xe9, 0xbd, 0x3f, 0x2d, 0x70, 0x8c, 0xc1, 0x40, 0x7a, 0xdf, 0x61, 0x32, 0x10, 0x9b, 0x15, 0xc4, 0xba, 0x16, 0x66, 0xa9, 0xf7, 0xfe, 0xb4, 0xc0, 0x31, 0x06, 0x43, 0xe9, 0x6d, 0x9b, 0xc9, 0x50,
0xe7, 0x92, 0x6c, 0xd5, 0x25, 0x92, 0xec, 0xbd, 0xd1, 0xe1, 0xbd, 0x7d, 0xac, 0xdb, 0x06, 0x1b, 0xac, 0xcf, 0x29, 0x3e, 0x91, 0x62, 0xab, 0x2a, 0x91, 0x62, 0xef, 0x1e, 0x1f, 0xac, 0xac, 0x63,
0x57, 0xf4, 0x25, 0xec, 0xa6, 0x19, 0x9b, 0x10, 0xce, 0x09, 0x77, 0xb7, 0x55, 0xff, 0x7f, 0x74, 0x5d, 0x36, 0xd8, 0x40, 0xd1, 0x17, 0xb0, 0x9d, 0x66, 0x6c, 0x48, 0x38, 0x27, 0xdc, 0xdd, 0x54,
0xef, 0xbd, 0xb1, 0xf6, 0xc2, 0x95, 0xbb, 0x4c, 0x6a, 0x1c, 0xe4, 0xbc, 0x4c, 0xea, 0x31, 0x38, 0xf5, 0xff, 0xde, 0xca, 0x73, 0x03, 0x8d, 0xc2, 0x73, 0xb8, 0x0c, 0x6a, 0x10, 0xe4, 0x7c, 0x16,
0x98, 0xf0, 0x3c, 0x2e, 0x0d, 0x8e, 0xec, 0x2b, 0x5a, 0x0e, 0xc0, 0x4b, 0xe8, 0x7c, 0x4f, 0xa3, 0xd4, 0x03, 0x70, 0x30, 0xe1, 0x79, 0x3c, 0x33, 0x38, 0xb2, 0xae, 0xe8, 0xac, 0x01, 0x9e, 0x43,
0xa8, 0x5a, 0x1f, 0x36, 0xa7, 0xd3, 0xa2, 0xc9, 0x1c, 0x6c, 0x34, 0x99, 0x59, 0x10, 0x45, 0x2a, 0xeb, 0x5b, 0x1a, 0x45, 0xf3, 0xf1, 0x61, 0x73, 0x3a, 0x2a, 0x8a, 0xcc, 0xc1, 0x66, 0x27, 0x23,
0xdd, 0x36, 0x96, 0xe2, 0xdd, 0x5c, 0xbd, 0x4f, 0xe0, 0xc3, 0x17, 0x11, 0xe3, 0xe4, 0x5c, 0xb6, 0x0b, 0xa2, 0x48, 0x85, 0xdb, 0xc4, 0x72, 0x79, 0x37, 0x56, 0xef, 0x43, 0x78, 0xf7, 0x59, 0xc4,
0x5f, 0x6d, 0xd5, 0x46, 0xff, 0xed, 0x40, 0xeb, 0x7c, 0x46, 0x63, 0x14, 0x80, 0xad, 0xe7, 0x15, 0x38, 0x39, 0x97, 0xe5, 0x57, 0xde, 0x4f, 0x1f, 0xc0, 0xf6, 0x80, 0x57, 0x8c, 0x2b, 0xef, 0x7b,
0x3d, 0xf3, 0xd7, 0xec, 0x75, 0x7f, 0x65, 0xc1, 0x75, 0x3f, 0x7b, 0x90, 0xaf, 0x29, 0xe0, 0x77, 0xa8, 0x0d, 0xf8, 0x8a, 0x94, 0x7f, 0x0e, 0x3b, 0x66, 0x3e, 0x5d, 0x84, 0x81, 0x08, 0x4c, 0x73,
0xb0, 0xad, 0xc6, 0x1d, 0x3d, 0x5d, 0x7b, 0x6b, 0x79, 0x25, 0x74, 0x0f, 0xee, 0x74, 0xfe, 0x99, 0xad, 0x2e, 0xd6, 0x96, 0x41, 0xf6, 0x03, 0x11, 0x78, 0x4f, 0x01, 0xe4, 0xad, 0x26, 0xb1, 0x3d,
0xfc, 0x59, 0x48, 0xb8, 0x7a, 0x0f, 0x6c, 0x80, 0xbb, 0xb2, 0x4f, 0x36, 0xc0, 0xbd, 0xb5, 0x58, 0xa8, 0xa5, 0xb2, 0x71, 0xa5, 0xb4, 0x5d, 0x7f, 0xcd, 0xa3, 0xe2, 0x0f, 0x38, 0xae, 0xa5, 0xfc,
0x7e, 0x52, 0x70, 0x05, 0xd9, 0x0c, 0xb7, 0x7a, 0xe0, 0xd9, 0x43, 0x5c, 0x2b, 0x3a, 0x54, 0x73, 0xf8, 0xaf, 0x26, 0x34, 0xce, 0xc7, 0x34, 0x46, 0x01, 0xd8, 0x7a, 0xc8, 0xa0, 0xc7, 0x6b, 0xcf,
0x6c, 0x88, 0xbf, 0xdc, 0x40, 0xb5, 0x74, 0xbc, 0x02, 0x5b, 0x37, 0xd6, 0x06, 0x3a, 0x56, 0xba, 0x2d, 0x4d, 0xe5, 0xf6, 0x27, 0xf7, 0xc2, 0x1a, 0x72, 0xdf, 0xc0, 0xa6, 0x9a, 0x51, 0xe8, 0xd1,
0xaf, 0x36, 0xda, 0xb7, 0xd0, 0x92, 0x5d, 0x89, 0x06, 0x6b, 0x63, 0x2d, 0x35, 0x6e, 0x6d, 0x24, 0xda, 0x53, 0x8b, 0x73, 0xac, 0xbd, 0x7f, 0x47, 0x81, 0x33, 0xf9, 0xc2, 0x49, 0xba, 0x7a, 0x78,
0x0c, 0xb6, 0x1e, 0xf3, 0x0d, 0xb8, 0x56, 0x76, 0x41, 0xf7, 0xfe, 0xff, 0x8b, 0xf2, 0xf9, 0xdc, 0x55, 0xd0, 0x5d, 0x1a, 0x82, 0x15, 0x74, 0x6f, 0x4d, 0xc3, 0x9f, 0x14, 0x5d, 0x41, 0xaa, 0xe9,
0x92, 0xe8, 0xe4, 0x90, 0x6c, 0x40, 0xb7, 0x34, 0x47, 0xb5, 0xe8, 0x7e, 0x94, 0x79, 0x92, 0xc9, 0xce, 0x2f, 0x78, 0x7c, 0x1f, 0xa8, 0xf1, 0xff, 0x83, 0x2a, 0x85, 0x8f, 0xaa, 0xb2, 0x64, 0x3c,
0xc6, 0x3c, 0xcb, 0xc5, 0xdf, 0x7d, 0xfa, 0x00, 0x4f, 0x53, 0xde, 0x6f, 0xa0, 0x39, 0x16, 0x73, 0x7f, 0x5c, 0x89, 0x9b, 0xab, 0xac, 0x1a, 0xa5, 0x82, 0xf6, 0x62, 0x33, 0x95, 0xaa, 0xfc, 0x02,
0xf4, 0xe9, 0xfa, 0xe2, 0x96, 0x1b, 0xb5, 0x16, 0xe4, 0x6b, 0x80, 0x6a, 0x90, 0x91, 0xbf, 0x7e, 0x6c, 0xdd, 0x64, 0x15, 0x2a, 0x2f, 0x75, 0x62, 0xa9, 0xb7, 0xaf, 0xa1, 0x21, 0x3b, 0x14, 0x1d,
0xe0, 0x6e, 0x4f, 0x7c, 0x5d, 0xd4, 0x13, 0xf7, 0xe6, 0x5d, 0x6f, 0xeb, 0xef, 0x77, 0xbd, 0xad, 0xad, 0xf5, 0xb5, 0xd0, 0xc4, 0xa5, 0x9e, 0x30, 0xd8, 0x7a, 0xe4, 0x55, 0xf0, 0x5a, 0x9a, 0x8b,
0x5f, 0x17, 0x3d, 0xeb, 0x66, 0xd1, 0xb3, 0xfe, 0x5a, 0xf4, 0xac, 0x7f, 0x17, 0x3d, 0xeb, 0xd2, 0xed, 0xd5, 0x6f, 0xad, 0xc2, 0x7c, 0x6a, 0x49, 0x76, 0x72, 0x60, 0x54, 0xb0, 0x5b, 0x98, 0x29,
0x56, 0x9e, 0xcf, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x79, 0x60, 0xe3, 0x1d, 0x0a, 0x00, 0xa5, 0xec, 0x7e, 0x94, 0x71, 0x92, 0x61, 0x65, 0x9c, 0xb3, 0x47, 0xb0, 0xfd, 0xe8, 0x1e, 0x48,
0x00, 0x93, 0xde, 0xaf, 0xa0, 0x3e, 0x10, 0x13, 0x54, 0x51, 0x0e, 0xb3, 0xd7, 0xa5, 0x94, 0xe4, 0x4b,
0x80, 0xf9, 0x50, 0x43, 0xfe, 0xfa, 0x3e, 0xbe, 0x3d, 0xfd, 0xca, 0xbc, 0x9e, 0xba, 0x37, 0x6f,
0x3a, 0x1b, 0xff, 0xbc, 0xe9, 0x6c, 0xfc, 0x3a, 0xed, 0x58, 0x37, 0xd3, 0x8e, 0xf5, 0xf7, 0xb4,
0x63, 0xfd, 0x37, 0xed, 0x58, 0x97, 0xb6, 0x42, 0x3e, 0xf9, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x7a,
0x10, 0xcb, 0x24, 0x29, 0x0b, 0x00, 0x00,
} }

View File

@ -18,6 +18,7 @@ service Shim {
rpc Start(StartRequest) returns (google.protobuf.Empty); rpc Start(StartRequest) returns (google.protobuf.Empty);
rpc Delete(DeleteRequest) returns (DeleteResponse); rpc Delete(DeleteRequest) returns (DeleteResponse);
rpc State(StateRequest) returns (StateResponse); rpc State(StateRequest) returns (StateResponse);
rpc Ps(PsRequest) returns (PsResponse);
rpc Pause(PauseRequest) returns (google.protobuf.Empty); rpc Pause(PauseRequest) returns (google.protobuf.Empty);
rpc Resume(ResumeRequest) returns (google.protobuf.Empty); rpc Resume(ResumeRequest) returns (google.protobuf.Empty);
@ -113,3 +114,16 @@ message KillRequest {
message CloseStdinRequest { message CloseStdinRequest {
uint32 pid = 1; uint32 pid = 1;
} }
message PsRequest {
string id = 1 [(gogoproto.customname) = "ID"];
}
message Ps {
uint32 pid = 1;
google.protobuf.Any runtime_data = 2;
}
message PsResponse{
repeated Ps ps = 1;
}

View File

@ -16,6 +16,11 @@ var killCommand = cli.Command{
Name: "id", Name: "id",
Usage: "id of the container", Usage: "id of the container",
}, },
cli.IntFlag{
Name: "pid",
Usage: "pid to kill",
Value: 0,
},
cli.BoolFlag{ cli.BoolFlag{
Name: "all, a", Name: "all, a",
Usage: "send signal to all processes inside the container", Usage: "send signal to all processes inside the container",
@ -37,14 +42,29 @@ var killCommand = cli.Command{
return err return err
} }
containers, err := getExecutionService(context) pid := context.Int("pid")
if err != nil { all := context.Bool("all")
return err if pid > 0 && all {
return errors.New("enter a pid or all; not both")
} }
killRequest := &execution.KillRequest{ killRequest := &execution.KillRequest{
ID: id, ID: id,
Signal: uint32(signal), Signal: uint32(signal),
All: context.Bool("all"), PidOrAll: &execution.KillRequest_Pid{
Pid: uint32(pid),
},
}
if all {
killRequest.PidOrAll = &execution.KillRequest_All{
All: true,
}
}
containers, err := getExecutionService(context)
if err != nil {
return err
} }
_, err = containers.Kill(gocontext.Background(), killRequest) _, err = containers.Kill(gocontext.Background(), killRequest)
if err != nil { if err != nil {

View File

@ -63,6 +63,7 @@ containerd client
resumeCommand, resumeCommand,
snapshotCommand, snapshotCommand,
versionCommand, versionCommand,
psCommand,
} }
app.Commands = append(app.Commands, extraCmds...) app.Commands = append(app.Commands, extraCmds...)
app.Before = func(context *cli.Context) error { app.Before = func(context *cli.Context) error {

58
cmd/ctr/ps.go Normal file
View File

@ -0,0 +1,58 @@
package main
import (
gocontext "context"
"fmt"
"os"
"text/tabwriter"
"github.com/containerd/containerd/api/services/execution"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
var psCommand = cli.Command{
Name: "ps",
Usage: "list processes for container",
Flags: []cli.Flag{
cli.StringFlag{
Name: "id",
Usage: "id of the container",
},
},
Action: func(context *cli.Context) error {
id := context.String("id")
if id == "" {
return errors.New("container id must be provided")
}
psRequest := &execution.PsRequest{
ID: id,
}
containers, err := getExecutionService(context)
if err != nil {
return err
}
resp, err := containers.Ps(gocontext.Background(), psRequest)
if err != nil {
return err
}
w := tabwriter.NewWriter(os.Stdout, 10, 1, 3, ' ', 0)
fmt.Fprintln(w, "PID")
for _, ps := range resp.Ps {
if _, err := fmt.Fprintf(w, "%d\n",
ps.Pid,
); err != nil {
return err
}
if err := w.Flush(); err != nil {
return err
}
}
return nil
},
}

View File

@ -117,7 +117,9 @@ func forwardAllSignals(containers execution.ContainerServiceClient, id string) c
killRequest := &execution.KillRequest{ killRequest := &execution.KillRequest{
ID: id, ID: id,
Signal: uint32(s.(syscall.Signal)), Signal: uint32(s.(syscall.Signal)),
PidOrAll: &execution.KillRequest_All{
All: false, All: false,
},
} }
_, err := containers.Kill(gocontext.Background(), killRequest) _, err := containers.Kill(gocontext.Background(), killRequest)
if err != nil { if err != nil {

View File

@ -83,9 +83,10 @@ func (c *Container) Resume(ctx context.Context) error {
return err return err
} }
func (c *Container) Kill(ctx context.Context, signal uint32, all bool) error { func (c *Container) Kill(ctx context.Context, signal uint32, pid uint32, all bool) error {
_, err := c.shim.Kill(ctx, &shim.KillRequest{ _, err := c.shim.Kill(ctx, &shim.KillRequest{
Signal: signal, Signal: signal,
Pid: pid,
All: all, All: all,
}) })
return err return err
@ -105,12 +106,32 @@ func (c *Container) Exec(ctx context.Context, opts plugin.ExecOpts) (plugin.Proc
resp, err := c.shim.Exec(ctx, request) resp, err := c.shim.Exec(ctx, request)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &Process{ return &Process{
pid: int(resp.Pid), pid: int(resp.Pid),
c: c, c: c,
}, nil }, nil
} }
func (c *Container) Ps(ctx context.Context) ([]uint32, error) {
resp, err := c.shim.Ps(ctx, &shim.PsRequest{
ID: c.id,
})
if err != nil {
return nil, err
}
pids := make([]uint32, 0, len(resp.Ps))
for _, ps := range resp.Ps {
pids = append(pids, ps.Pid)
}
return pids, nil
}
func (c *Container) Pty(ctx context.Context, pid uint32, size plugin.ConsoleSize) error { func (c *Container) Pty(ctx context.Context, pid uint32, size plugin.ConsoleSize) error {
_, err := c.shim.Pty(ctx, &shim.PtyRequest{ _, err := c.shim.Pty(ctx, &shim.PtyRequest{
Pid: pid, Pid: pid,

View File

@ -82,6 +82,10 @@ func (c *client) Kill(ctx context.Context, in *shimapi.KillRequest, opts ...grpc
return c.s.Kill(ctx, in) return c.s.Kill(ctx, in)
} }
func (c *client) Ps(ctx context.Context, in *shimapi.PsRequest, opts ...grpc.CallOption) (*shimapi.PsResponse, error) {
return c.s.Ps(ctx, in)
}
func (c *client) Exit(ctx context.Context, in *shimapi.ExitRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) { func (c *client) Exit(ctx context.Context, in *shimapi.ExitRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
// don't exit the calling process for the client // don't exit the calling process for the client
// but make sure we unmount the containers rootfs for this client // but make sure we unmount the containers rootfs for this client

View File

@ -225,16 +225,51 @@ func (s *Service) Kill(ctx context.Context, r *shimapi.KillRequest) (*google_pro
} }
return empty, nil return empty, nil
} }
proc, ok := s.processes[int(r.Pid)]
if !ok { pids, err := s.getContainerPids(ctx, s.initProcess.id)
return nil, fmt.Errorf("process does not exist %d", r.Pid) if err != nil {
}
if err := proc.Signal(int(r.Signal)); err != nil {
return nil, err return nil, err
} }
valid := false
for _, p := range pids {
if r.Pid == p {
valid = true
break
}
}
if !valid {
return nil, errors.Errorf("process %d does not exist in container", r.Pid)
}
if err := unix.Kill(int(r.Pid), syscall.Signal(r.Signal)); err != nil {
return nil, err
}
return empty, nil return empty, nil
} }
func (s *Service) Ps(ctx context.Context, r *shimapi.PsRequest) (*shimapi.PsResponse, error) {
pids, err := s.getContainerPids(ctx, r.ID)
if err != nil {
return nil, err
}
ps := []*shimapi.Ps{}
for _, pid := range pids {
ps = append(ps, &shimapi.Ps{
Pid: pid,
})
}
resp := &shimapi.PsResponse{
Ps: ps,
}
return resp, nil
}
func (s *Service) CloseStdin(ctx context.Context, r *shimapi.CloseStdinRequest) (*google_protobuf.Empty, error) { func (s *Service) CloseStdin(ctx context.Context, r *shimapi.CloseStdinRequest) (*google_protobuf.Empty, error) {
p, ok := s.processes[int(r.Pid)] p, ok := s.processes[int(r.Pid)]
if !ok { if !ok {
@ -257,3 +292,17 @@ func (s *Service) waitExit(p process, pid int, cmd *reaper.Cmd) {
ExitedAt: p.ExitedAt(), ExitedAt: p.ExitedAt(),
} }
} }
func (s *Service) getContainerPids(ctx context.Context, id string) ([]uint32, error) {
p, err := s.initProcess.runc.Ps(ctx, id)
if err != nil {
return nil, err
}
pids := make([]uint32, 0, len(p))
for _, pid := range p {
pids = append(pids, uint32(pid))
}
return pids, nil
}

View File

@ -19,9 +19,11 @@ type Container interface {
// Resume unpauses the container process // Resume unpauses the container process
Resume(context.Context) error Resume(context.Context) error
// Kill signals a container // Kill signals a container
Kill(context.Context, uint32, bool) error Kill(context.Context, uint32, uint32, bool) error
// Exec adds a process into the container // Exec adds a process into the container
Exec(context.Context, ExecOpts) (Process, error) Exec(context.Context, ExecOpts) (Process, error)
// Ps returns all pids for the container
Ps(context.Context) ([]uint32, error)
// Pty resizes the processes pty/console // Pty resizes the processes pty/console
Pty(context.Context, uint32, ConsoleSize) error Pty(context.Context, uint32, ConsoleSize) error
// CloseStdin closes the processes stdin // CloseStdin closes the processes stdin

View File

@ -1,6 +1,7 @@
package execution package execution
import ( import (
"fmt"
"sync" "sync"
"github.com/containerd/containerd" "github.com/containerd/containerd"
@ -217,12 +218,47 @@ func (s *Service) Kill(ctx context.Context, r *api.KillRequest) (*google_protobu
if err != nil { if err != nil {
return nil, err return nil, err
} }
if err := c.Kill(ctx, r.Signal, r.All); err != nil {
switch v := r.PidOrAll.(type) {
case *api.KillRequest_All:
if err := c.Kill(ctx, r.Signal, 0, true); err != nil {
return nil, err return nil, err
} }
case *api.KillRequest_Pid:
if err := c.Kill(ctx, r.Signal, v.Pid, false); err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("invalid option specified; expected pid or all")
}
return empty, nil return empty, nil
} }
func (s *Service) Ps(ctx context.Context, r *api.PsRequest) (*api.PsResponse, error) {
c, err := s.getContainer(r.ID)
if err != nil {
return nil, err
}
pids, err := c.Ps(ctx)
if err != nil {
return nil, err
}
ps := []*api.Ps{}
for _, pid := range pids {
ps = append(ps, &api.Ps{
Pid: pid,
})
}
resp := &api.PsResponse{
Ps: ps,
}
return resp, nil
}
func (s *Service) Events(r *api.EventsRequest, server api.ContainerService_EventsServer) error { func (s *Service) Events(r *api.EventsRequest, server api.ContainerService_EventsServer) error {
w := &grpcEventWriter{ w := &grpcEventWriter{
server: server, server: server,

View File

@ -120,7 +120,7 @@ func (c *container) State(ctx context.Context) (plugin.State, error) {
return c, nil return c, nil
} }
func (c *container) Kill(ctx context.Context, signal uint32, all bool) error { func (c *container) Kill(ctx context.Context, signal uint32, pid uint32, all bool) error {
if winsys.Signal(signal) == winsys.SIGKILL { if winsys.Signal(signal) == winsys.SIGKILL {
return c.ctr.Kill(ctx) return c.ctr.Kill(ctx)
} }
@ -174,6 +174,16 @@ func (c *container) Pid() uint32 {
return c.ctr.Pid() return c.ctr.Pid()
} }
func (c *container) Ps(ctx context.Context) ([]uint32, error) {
// TODO (ehazlett): support finding all processes in windows container
p, err := c.ctr.ProcessList()
if err != nil {
return nil, err
}
log.G(ctx).Debug(p)
return []uint32{c.ctr.Pid()}, nil
}
func (c *container) setStatus(status plugin.Status) { func (c *container) setStatus(status plugin.Status) {
c.Lock() c.Lock()
c.status = status c.status = status