Add support for specifying a checkpoint directory. (#245)

Signed-off-by: Ross Boucher <rboucher@gmail.com>
This commit is contained in:
Ross Boucher 2016-05-25 20:42:37 -04:00 committed by Michael Crosby
parent 76dd6710dc
commit e756ae42d1
10 changed files with 291 additions and 228 deletions

View file

@ -56,6 +56,7 @@ func (s *apiServer) CreateContainer(ctx context.Context, c *types.CreateContaine
e.RuntimeArgs = c.RuntimeArgs
e.StartResponse = make(chan supervisor.StartResponse, 1)
if c.Checkpoint != "" {
e.CheckpointDir = c.CheckpointDir
e.Checkpoint = &runtime.Checkpoint{
Name: c.Checkpoint,
}
@ -77,6 +78,7 @@ func (s *apiServer) CreateContainer(ctx context.Context, c *types.CreateContaine
func (s *apiServer) CreateCheckpoint(ctx context.Context, r *types.CreateCheckpointRequest) (*types.CreateCheckpointResponse, error) {
e := &supervisor.CreateCheckpointTask{}
e.ID = r.Id
e.CheckpointDir = r.CheckpointDir
e.Checkpoint = &runtime.Checkpoint{
Name: r.Checkpoint.Name,
Exit: r.Checkpoint.Exit,
@ -84,6 +86,7 @@ func (s *apiServer) CreateCheckpoint(ctx context.Context, r *types.CreateCheckpo
UnixSockets: r.Checkpoint.UnixSockets,
Shell: r.Checkpoint.Shell,
}
s.sv.SendTask(e)
if err := <-e.ErrorCh(); err != nil {
return nil, err
@ -97,6 +100,7 @@ func (s *apiServer) DeleteCheckpoint(ctx context.Context, r *types.DeleteCheckpo
}
e := &supervisor.DeleteCheckpointTask{}
e.ID = r.Id
e.CheckpointDir = r.CheckpointDir
e.Checkpoint = &runtime.Checkpoint{
Name: r.Name,
}
@ -124,7 +128,7 @@ func (s *apiServer) ListCheckpoint(ctx context.Context, r *types.ListCheckpointR
return nil, grpc.Errorf(codes.NotFound, "no such containers")
}
var out []*types.Checkpoint
checkpoints, err := container.Checkpoints()
checkpoints, err := container.Checkpoints(r.CheckpointDir)
if err != nil {
return nil, err
}

View file

@ -71,7 +71,10 @@ var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
const _ = proto.ProtoPackageIsVersion1
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
// FIXME: I can't seeem to get this to work.
const _ = proto.ProtoPackageIsVersion1 // please upgrade the proto package
type GetServerVersionRequest struct {
}
@ -115,16 +118,17 @@ func (*UpdateProcessResponse) ProtoMessage() {}
func (*UpdateProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
type CreateContainerRequest struct {
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
BundlePath string `protobuf:"bytes,2,opt,name=bundlePath" json:"bundlePath,omitempty"`
Checkpoint string `protobuf:"bytes,3,opt,name=checkpoint" json:"checkpoint,omitempty"`
Stdin string `protobuf:"bytes,4,opt,name=stdin" json:"stdin,omitempty"`
Stdout string `protobuf:"bytes,5,opt,name=stdout" json:"stdout,omitempty"`
Stderr string `protobuf:"bytes,6,opt,name=stderr" json:"stderr,omitempty"`
Labels []string `protobuf:"bytes,7,rep,name=labels" json:"labels,omitempty"`
NoPivotRoot bool `protobuf:"varint,8,opt,name=noPivotRoot" json:"noPivotRoot,omitempty"`
Runtime string `protobuf:"bytes,9,opt,name=runtime" json:"runtime,omitempty"`
RuntimeArgs []string `protobuf:"bytes,10,rep,name=runtimeArgs" json:"runtimeArgs,omitempty"`
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
BundlePath string `protobuf:"bytes,2,opt,name=bundlePath" json:"bundlePath,omitempty"`
Checkpoint string `protobuf:"bytes,3,opt,name=checkpoint" json:"checkpoint,omitempty"`
Stdin string `protobuf:"bytes,4,opt,name=stdin" json:"stdin,omitempty"`
Stdout string `protobuf:"bytes,5,opt,name=stdout" json:"stdout,omitempty"`
Stderr string `protobuf:"bytes,6,opt,name=stderr" json:"stderr,omitempty"`
Labels []string `protobuf:"bytes,7,rep,name=labels" json:"labels,omitempty"`
NoPivotRoot bool `protobuf:"varint,8,opt,name=noPivotRoot" json:"noPivotRoot,omitempty"`
Runtime string `protobuf:"bytes,9,opt,name=runtime" json:"runtime,omitempty"`
RuntimeArgs []string `protobuf:"bytes,10,rep,name=runtimeArgs" json:"runtimeArgs,omitempty"`
CheckpointDir string `protobuf:"bytes,11,opt,name=checkpointDir" json:"checkpointDir,omitempty"`
}
func (m *CreateContainerRequest) Reset() { *m = CreateContainerRequest{} }
@ -235,8 +239,9 @@ func (*AddProcessResponse) ProtoMessage() {}
func (*AddProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
type CreateCheckpointRequest struct {
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
Checkpoint *Checkpoint `protobuf:"bytes,2,opt,name=checkpoint" json:"checkpoint,omitempty"`
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
Checkpoint *Checkpoint `protobuf:"bytes,2,opt,name=checkpoint" json:"checkpoint,omitempty"`
CheckpointDir string `protobuf:"bytes,3,opt,name=checkpointDir" json:"checkpointDir,omitempty"`
}
func (m *CreateCheckpointRequest) Reset() { *m = CreateCheckpointRequest{} }
@ -260,8 +265,9 @@ func (*CreateCheckpointResponse) ProtoMessage() {}
func (*CreateCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
type DeleteCheckpointRequest struct {
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
CheckpointDir string `protobuf:"bytes,3,opt,name=checkpointDir" json:"checkpointDir,omitempty"`
}
func (m *DeleteCheckpointRequest) Reset() { *m = DeleteCheckpointRequest{} }
@ -278,7 +284,8 @@ func (*DeleteCheckpointResponse) ProtoMessage() {}
func (*DeleteCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
type ListCheckpointRequest struct {
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
CheckpointDir string `protobuf:"bytes,2,opt,name=checkpointDir" json:"checkpointDir,omitempty"`
}
func (m *ListCheckpointRequest) Reset() { *m = ListCheckpointRequest{} }
@ -1310,150 +1317,152 @@ var _API_serviceDesc = grpc.ServiceDesc{
}
var fileDescriptor0 = []byte{
// 2307 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x73, 0x1b, 0x49,
0x15, 0x8f, 0xa4, 0x91, 0x6c, 0x3d, 0x7d, 0xd8, 0x9e, 0xf8, 0x43, 0xd1, 0x6e, 0xb2, 0x61, 0x0a,
0xd8, 0x00, 0x8b, 0x09, 0xce, 0x6e, 0x91, 0x82, 0x82, 0xaa, 0xc4, 0x09, 0x4b, 0xd8, 0x78, 0x71,
0xc6, 0x36, 0x7b, 0xa1, 0x4a, 0x35, 0x9e, 0xe9, 0x48, 0x83, 0xa5, 0x99, 0xd9, 0x99, 0x96, 0x2d,
0x5f, 0x38, 0xc2, 0x8d, 0x7f, 0x80, 0x2a, 0x2e, 0x70, 0xe2, 0xce, 0x81, 0xbf, 0x80, 0xff, 0x84,
0xe2, 0xc2, 0x9d, 0x23, 0xaf, 0xbb, 0xdf, 0xf4, 0xf4, 0xe8, 0xc3, 0x0e, 0x07, 0x8a, 0xcb, 0x5e,
0x54, 0xfd, 0x7e, 0xfd, 0xfa, 0xbd, 0xd7, 0xef, 0xab, 0x7b, 0x5a, 0xd0, 0xf4, 0x92, 0x70, 0x3f,
0x49, 0x63, 0x1e, 0xdb, 0x75, 0x7e, 0x9d, 0xb0, 0xcc, 0xb9, 0x07, 0x7b, 0x9f, 0x32, 0x7e, 0xc2,
0xd2, 0x4b, 0x96, 0xfe, 0x92, 0xa5, 0x59, 0x18, 0x47, 0x2e, 0xfb, 0x72, 0xca, 0x32, 0xee, 0xcc,
0xa0, 0xb7, 0x38, 0x95, 0x25, 0x71, 0x94, 0x31, 0x7b, 0x1b, 0xea, 0x13, 0xef, 0xd7, 0x71, 0xda,
0xab, 0x3c, 0xac, 0x3c, 0xea, 0xb8, 0x8a, 0x90, 0x68, 0x18, 0x21, 0x5a, 0x25, 0x54, 0x10, 0x02,
0x4d, 0x3c, 0xee, 0x8f, 0x7a, 0x35, 0x85, 0x4a, 0xc2, 0xee, 0xc3, 0x7a, 0xca, 0x2e, 0x43, 0x21,
0xb5, 0x67, 0xe1, 0x44, 0xd3, 0xd5, 0xb4, 0xf3, 0xdb, 0x0a, 0x6c, 0x9f, 0x25, 0x81, 0xc7, 0xd9,
0x71, 0x1a, 0xfb, 0x2c, 0xcb, 0xc8, 0x24, 0xbb, 0x0b, 0xd5, 0x30, 0x90, 0x3a, 0x9b, 0x2e, 0x8e,
0xec, 0x4d, 0xa8, 0x25, 0x08, 0x54, 0x25, 0x20, 0x86, 0xf6, 0x03, 0x00, 0x7f, 0x1c, 0x67, 0xec,
0x84, 0x07, 0x61, 0x24, 0x35, 0xae, 0xbb, 0x06, 0x22, 0x8c, 0xb9, 0x0a, 0x03, 0x3e, 0x92, 0x3a,
0xd1, 0x18, 0x49, 0xd8, 0xbb, 0xd0, 0x18, 0xb1, 0x70, 0x38, 0xe2, 0xbd, 0xba, 0x84, 0x89, 0x72,
0xf6, 0x60, 0x67, 0xce, 0x0e, 0xb5, 0x7f, 0xe7, 0xcf, 0x55, 0xd8, 0x3d, 0x4c, 0x19, 0xce, 0x1c,
0xc6, 0x11, 0xf7, 0xc2, 0x88, 0xa5, 0xab, 0x6c, 0x44, 0x8b, 0xce, 0xa7, 0x51, 0x30, 0x66, 0xc7,
0x1e, 0xaa, 0x55, 0xa6, 0x1a, 0x88, 0xb4, 0x78, 0xc4, 0xfc, 0x8b, 0x24, 0x0e, 0x23, 0x2e, 0x2d,
0xc6, 0xf9, 0x02, 0x11, 0x16, 0x67, 0x72, 0x33, 0xca, 0x4b, 0x8a, 0x10, 0x16, 0xe3, 0x20, 0x9e,
0x2a, 0x8b, 0x9b, 0x2e, 0x51, 0x84, 0xb3, 0x34, 0xed, 0x35, 0x34, 0x8e, 0x94, 0xc0, 0xc7, 0xde,
0x39, 0x1b, 0x67, 0xbd, 0xb5, 0x87, 0x35, 0x81, 0x2b, 0xca, 0x7e, 0x08, 0xad, 0x28, 0x3e, 0x0e,
0x2f, 0x63, 0xee, 0xc6, 0x31, 0xef, 0xad, 0x4b, 0x87, 0x99, 0x90, 0xdd, 0x83, 0xb5, 0x74, 0x1a,
0xf1, 0x70, 0xc2, 0x7a, 0x4d, 0x29, 0x32, 0x27, 0xc5, 0x5a, 0x1a, 0x3e, 0x4b, 0x87, 0x59, 0x0f,
0xa4, 0x60, 0x13, 0x72, 0x5e, 0xc1, 0xde, 0x82, 0x97, 0x28, 0x83, 0xf6, 0xa1, 0xe9, 0xe7, 0xa0,
0xf4, 0x56, 0xeb, 0x60, 0x73, 0x5f, 0xe6, 0xe4, 0x7e, 0xc1, 0x5c, 0xb0, 0xa0, 0xa8, 0xce, 0x49,
0x38, 0x8c, 0xbc, 0xf1, 0xbb, 0xe7, 0x82, 0xf0, 0x85, 0x5c, 0x42, 0x99, 0x47, 0x94, 0xb3, 0x09,
0xdd, 0x5c, 0x14, 0x85, 0xf3, 0xaf, 0x35, 0xd8, 0x7a, 0x16, 0x04, 0xb7, 0x64, 0x1b, 0xa6, 0x2c,
0x67, 0x29, 0x26, 0x35, 0x4a, 0xac, 0x4a, 0x47, 0x69, 0xda, 0xfe, 0x00, 0xac, 0x69, 0x86, 0x3b,
0xa9, 0xc9, 0x9d, 0xb4, 0x68, 0x27, 0x67, 0x08, 0xb9, 0x72, 0xc2, 0xb6, 0xc1, 0xf2, 0x84, 0x97,
0x2c, 0xe9, 0x25, 0x39, 0x16, 0x26, 0xb3, 0xe8, 0x12, 0x23, 0x28, 0x20, 0x31, 0x14, 0x88, 0x7f,
0x15, 0x50, 0xec, 0xc4, 0x30, 0xdf, 0xd6, 0x5a, 0xb1, 0x2d, 0x9d, 0x10, 0xeb, 0xcb, 0x13, 0xa2,
0xb9, 0x22, 0x21, 0xa0, 0x94, 0x10, 0x0e, 0xb4, 0x7d, 0x2f, 0xf1, 0xce, 0xc3, 0x71, 0xc8, 0x43,
0x96, 0xf5, 0x5a, 0xd2, 0x88, 0x12, 0x66, 0x3f, 0x82, 0x0d, 0x2f, 0x49, 0xbc, 0x74, 0x12, 0xa7,
0xe8, 0x9a, 0xb7, 0xe1, 0x98, 0xf5, 0xda, 0x52, 0xc8, 0x3c, 0x2c, 0xa4, 0x65, 0x6c, 0x1c, 0x46,
0xd3, 0xd9, 0x6b, 0x91, 0x57, 0xbd, 0x8e, 0x64, 0x2b, 0x61, 0x42, 0x5a, 0x14, 0x7f, 0xce, 0xae,
0x8e, 0xd3, 0xf0, 0x12, 0xd7, 0x0c, 0x51, 0x69, 0x57, 0x7a, 0x71, 0x1e, 0xb6, 0x3f, 0xc4, 0x94,
0x1b, 0x87, 0x93, 0x90, 0x67, 0xbd, 0x0d, 0x34, 0xab, 0x75, 0xd0, 0x21, 0x7f, 0xba, 0x12, 0x75,
0xf3, 0x59, 0xe7, 0x05, 0x34, 0x14, 0x24, 0xdc, 0x2b, 0x58, 0x28, 0x5a, 0x72, 0x2c, 0xb0, 0x2c,
0x7e, 0xcb, 0x65, 0xac, 0x2c, 0x57, 0x8e, 0x05, 0x36, 0xf2, 0xd2, 0x40, 0xc6, 0x09, 0x31, 0x31,
0x76, 0x5c, 0xb0, 0x44, 0xa0, 0x84, 0xab, 0xa7, 0x14, 0xf0, 0x8e, 0x2b, 0x86, 0x02, 0x19, 0x52,
0x4e, 0x21, 0x82, 0x43, 0xfb, 0x9b, 0xd0, 0xf5, 0x82, 0x00, 0xdd, 0x13, 0x63, 0xd4, 0x3f, 0x0d,
0x83, 0x0c, 0x25, 0xd5, 0x70, 0x72, 0x0e, 0x75, 0xb6, 0xc1, 0x36, 0x13, 0x8a, 0xf2, 0xec, 0x57,
0xba, 0x1e, 0x74, 0x7d, 0xaf, 0x4a, 0xb6, 0xef, 0x97, 0xda, 0x42, 0x55, 0xa6, 0xd5, 0x56, 0x5e,
0x20, 0xc5, 0x6a, 0x83, 0xc9, 0xe9, 0x43, 0x6f, 0x51, 0x3a, 0x69, 0xfe, 0x31, 0xec, 0xbd, 0x60,
0x63, 0xf6, 0x2e, 0x9a, 0xd1, 0x45, 0x91, 0x87, 0xd5, 0xae, 0x2a, 0x49, 0x8e, 0x85, 0xe8, 0xc5,
0xe5, 0x24, 0xfa, 0x43, 0xd8, 0x79, 0x1d, 0x66, 0xfc, 0x56, 0xc1, 0xce, 0x6f, 0x00, 0x0a, 0x26,
0xad, 0xa6, 0x52, 0xa8, 0x11, 0x18, 0x9b, 0x85, 0x9c, 0xaa, 0x4b, 0x8e, 0x45, 0x0c, 0xb8, 0x9f,
0x50, 0x2b, 0x17, 0x43, 0xd1, 0x77, 0xa6, 0x51, 0x38, 0x3b, 0x89, 0xfd, 0x0b, 0xc6, 0x33, 0xd9,
0x17, 0xb1, 0x67, 0x19, 0x90, 0x2c, 0x91, 0x11, 0x1b, 0x8f, 0x65, 0x73, 0x5c, 0x77, 0x15, 0xe1,
0x1c, 0xc1, 0xee, 0xbc, 0xa1, 0xd4, 0x8c, 0x9e, 0x40, 0xab, 0xf0, 0x63, 0x86, 0x26, 0xd5, 0x96,
0x7b, 0xdb, 0xe4, 0x72, 0x1e, 0x40, 0xfb, 0x84, 0xa3, 0xb7, 0x57, 0x6d, 0xf7, 0x11, 0x74, 0x75,
0x27, 0x93, 0x8c, 0xaa, 0x16, 0x3d, 0x3e, 0xcd, 0x88, 0x8b, 0x28, 0xe7, 0x6f, 0x35, 0x58, 0xa3,
0x54, 0xc9, 0xeb, 0xbd, 0x52, 0xd4, 0xfb, 0xff, 0xa5, 0xed, 0xbc, 0x0f, 0xcd, 0xec, 0x3a, 0xe3,
0x6c, 0x72, 0x4c, 0xcd, 0xa7, 0xe3, 0x16, 0xc0, 0x57, 0x2d, 0xa8, 0x68, 0x41, 0x7f, 0xaf, 0x40,
0x53, 0x87, 0xf9, 0xbf, 0x3e, 0xfc, 0x3f, 0x82, 0x66, 0xa2, 0x02, 0xcf, 0x54, 0x27, 0x69, 0x1d,
0x74, 0x49, 0x51, 0xde, 0x3b, 0x0a, 0x06, 0x23, 0x7f, 0x2c, 0x33, 0x7f, 0x8c, 0xc3, 0xbd, 0x5e,
0x3a, 0xdc, 0x31, 0xf8, 0x89, 0x68, 0x51, 0x0d, 0xd9, 0xa2, 0xe4, 0xd8, 0x3c, 0xce, 0xd7, 0x4a,
0xc7, 0xb9, 0xf3, 0x09, 0xac, 0x1d, 0x79, 0xfe, 0x08, 0xf7, 0x21, 0x16, 0xfa, 0x09, 0xa5, 0x29,
0x2e, 0x14, 0x63, 0xa1, 0x64, 0xc2, 0xd0, 0xdf, 0xd7, 0xd4, 0x4f, 0x89, 0x72, 0x2e, 0xf0, 0x60,
0x56, 0x65, 0x40, 0xc5, 0xf4, 0x18, 0x3b, 0x57, 0xee, 0x90, 0xbc, 0x96, 0x16, 0x8f, 0x76, 0x83,
0x07, 0xc3, 0xb2, 0x36, 0x51, 0x9a, 0xa9, 0xd1, 0xe5, 0x3e, 0x20, 0x7b, 0xdc, 0x7c, 0xda, 0xf9,
0x5d, 0x05, 0x76, 0xd5, 0x8d, 0xec, 0xd6, 0x7b, 0xd7, 0xf2, 0xfb, 0x80, 0x72, 0x5f, 0xad, 0xe4,
0xbe, 0x27, 0xd0, 0x4c, 0x59, 0x16, 0x4f, 0x53, 0x74, 0xb3, 0xf4, 0x6c, 0xeb, 0x60, 0x27, 0xaf,
0x24, 0xa9, 0xcb, 0xa5, 0x59, 0xb7, 0xe0, 0x73, 0xfe, 0x59, 0x85, 0x6e, 0x79, 0x56, 0xf4, 0xa5,
0xf3, 0xf1, 0x45, 0x18, 0x7f, 0xa1, 0xae, 0x92, 0xca, 0x79, 0x26, 0x24, 0xaa, 0x0a, 0x7d, 0x79,
0x82, 0xa7, 0x0e, 0x6a, 0x52, 0xa7, 0x4a, 0x01, 0xd0, 0xec, 0x31, 0x4b, 0xc3, 0x38, 0xa0, 0x2b,
0x4b, 0x01, 0x88, 0x36, 0x80, 0xc4, 0x9b, 0x69, 0xcc, 0x3d, 0xba, 0xbc, 0x6a, 0x5a, 0xde, 0x21,
0x31, 0x46, 0x8c, 0x1f, 0x8a, 0xa8, 0xd5, 0xe9, 0x0e, 0xa9, 0x91, 0x62, 0xfe, 0x88, 0x4d, 0x32,
0x2a, 0x73, 0x03, 0x11, 0x96, 0xab, 0x68, 0xbe, 0x16, 0x49, 0x4d, 0xf5, 0x6e, 0x42, 0x42, 0x82,
0x22, 0x4f, 0xae, 0xbc, 0x44, 0x96, 0x7d, 0xc7, 0x35, 0x10, 0x4c, 0xe4, 0x2d, 0x45, 0xa1, 0x37,
0xf0, 0x8b, 0xc1, 0x13, 0x47, 0xa1, 0x6c, 0x03, 0x1d, 0x77, 0x71, 0x42, 0x70, 0x5f, 0xb0, 0x34,
0x62, 0xe3, 0x23, 0x43, 0x2b, 0x28, 0xee, 0x85, 0x09, 0xf1, 0x8d, 0xb2, 0x10, 0x73, 0x3a, 0x7b,
0xbe, 0x0b, 0x9d, 0x97, 0x97, 0x0c, 0xbb, 0x71, 0x9e, 0x05, 0xe8, 0x43, 0x91, 0xcc, 0x18, 0xd9,
0x49, 0x22, 0x23, 0x60, 0xb9, 0x05, 0xe0, 0x64, 0x50, 0x97, 0xec, 0x4b, 0xaf, 0x0b, 0x2a, 0x81,
0xaa, 0x3a, 0x81, 0xca, 0xe9, 0xd2, 0xd1, 0xe9, 0x42, 0x89, 0x65, 0x15, 0x89, 0x55, 0x52, 0x5a,
0x9f, 0x57, 0xfa, 0xfb, 0x2a, 0xb4, 0x3f, 0x67, 0xfc, 0x2a, 0x4e, 0x2f, 0x44, 0xa1, 0x64, 0x4b,
0x4f, 0xbe, 0x7b, 0xf8, 0x39, 0x34, 0x1b, 0x9c, 0x5f, 0x73, 0x4a, 0x0c, 0x0b, 0xeb, 0x72, 0xf6,
0x5c, 0x90, 0xf6, 0x7d, 0x00, 0x9c, 0x3a, 0xf6, 0xd4, 0x69, 0xa7, 0x2e, 0x2e, 0xcd, 0x74, 0x46,
0x80, 0xfd, 0x1e, 0x34, 0xdd, 0xd9, 0x00, 0xfb, 0x69, 0x9c, 0xaa, 0xec, 0xb5, 0xf0, 0x4b, 0x6a,
0xf6, 0x52, 0xd2, 0x62, 0x2d, 0x4e, 0x06, 0x69, 0x9c, 0x24, 0x2c, 0xc8, 0x4d, 0x4b, 0x67, 0x2f,
0x14, 0x20, 0xb4, 0x9e, 0xe6, 0x5a, 0x1b, 0x4a, 0x2b, 0x2f, 0xb4, 0xe2, 0x54, 0x42, 0x5a, 0xd7,
0x68, 0x53, 0xa6, 0xd6, 0x53, 0xad, 0x75, 0x5d, 0x69, 0xe5, 0x86, 0xd6, 0xd3, 0x42, 0x6b, 0x33,
0x5f, 0x4b, 0x5a, 0x9d, 0xbf, 0x54, 0x60, 0x1d, 0xd3, 0xf2, 0x2c, 0xf3, 0x86, 0x0c, 0x4f, 0xb0,
0x16, 0xc7, 0x14, 0x1e, 0x0f, 0xa6, 0x82, 0xa4, 0x90, 0x81, 0x84, 0x14, 0xc3, 0xd7, 0xa0, 0x9d,
0xb0, 0x14, 0x93, 0x95, 0x38, 0xaa, 0xd8, 0x50, 0x2c, 0xb7, 0xa5, 0x30, 0xc5, 0xb2, 0x0f, 0x77,
0xe5, 0xdc, 0x20, 0x8c, 0x06, 0x2a, 0x7d, 0x26, 0x71, 0xc0, 0xc8, 0x55, 0x5b, 0x72, 0xea, 0x55,
0xf4, 0x99, 0x9e, 0xb0, 0xbf, 0x0d, 0x5b, 0x9a, 0x5f, 0x9c, 0x92, 0x92, 0x5b, 0xb9, 0x6e, 0x83,
0xb8, 0xcf, 0x08, 0xc6, 0x4b, 0x4b, 0xf7, 0x74, 0x84, 0x5f, 0xcc, 0x1c, 0x8f, 0x91, 0xe1, 0x0b,
0x0f, 0x8b, 0x0d, 0x3b, 0x68, 0x22, 0x4b, 0x32, 0x23, 0x6b, 0x73, 0xd2, 0xfe, 0x0e, 0x6c, 0x71,
0xc5, 0xcb, 0x82, 0x41, 0xce, 0xa3, 0xa2, 0xb9, 0xa9, 0x27, 0x8e, 0x89, 0xf9, 0x1b, 0xd0, 0x2d,
0x98, 0x65, 0x3f, 0x56, 0xf6, 0x76, 0x34, 0x7a, 0x2a, 0xba, 0xf2, 0x1f, 0x94, 0xb3, 0x54, 0xe6,
0x7c, 0x24, 0x3b, 0x84, 0xe1, 0xaa, 0xd6, 0xc1, 0x46, 0xde, 0x59, 0xc9, 0x19, 0xb2, 0x2b, 0x28,
0xb7, 0xfc, 0x04, 0x36, 0xb8, 0x36, 0x7d, 0x80, 0x05, 0xe4, 0x51, 0x7b, 0xcd, 0xbb, 0x5b, 0x79,
0x63, 0x6e, 0x97, 0x97, 0x37, 0x8a, 0x9e, 0x57, 0x47, 0x3e, 0x29, 0x54, 0xf6, 0xb5, 0x14, 0x26,
0x55, 0x38, 0x3f, 0x82, 0x26, 0xde, 0x07, 0x32, 0x65, 0x1d, 0x3a, 0xc6, 0x9f, 0xa6, 0x29, 0xd6,
0x57, 0xee, 0x18, 0x22, 0xc5, 0x7d, 0x41, 0x1e, 0x97, 0xe4, 0x0c, 0x45, 0x38, 0x31, 0x80, 0x2a,
0x73, 0xa9, 0x0d, 0x79, 0xcc, 0x14, 0x50, 0x84, 0xc8, 0xb3, 0x89, 0x37, 0xd3, 0xa1, 0x97, 0x79,
0x86, 0x80, 0xda, 0x20, 0x2a, 0x7c, 0xeb, 0x85, 0x63, 0x9f, 0xbe, 0x9b, 0x51, 0x21, 0x91, 0x85,
0x42, 0xcb, 0x54, 0xf8, 0xa7, 0x2a, 0xb4, 0x94, 0x46, 0x65, 0x30, 0x72, 0xf9, 0x78, 0xb0, 0x68,
0x95, 0x92, 0xc0, 0xa3, 0xbf, 0x5e, 0xa8, 0x2b, 0xae, 0x81, 0x85, 0xa9, 0xb9, 0x6d, 0x78, 0xd0,
0x65, 0xd8, 0xfb, 0x0c, 0xef, 0x2c, 0xe5, 0x6e, 0x0a, 0x26, 0x65, 0xf0, 0xc7, 0xd0, 0x56, 0xf9,
0x49, 0x6b, 0xac, 0x55, 0x6b, 0x5a, 0x8a, 0x4d, 0xad, 0x7a, 0x22, 0x6e, 0x5b, 0x68, 0xaf, 0x3c,
0xdd, 0x5b, 0x07, 0xf7, 0x4b, 0xec, 0x72, 0x27, 0xfb, 0xf2, 0xf7, 0x65, 0xc4, 0xb1, 0xcd, 0x2a,
0xde, 0xfe, 0x53, 0x80, 0x02, 0x14, 0x3d, 0xeb, 0x82, 0x5d, 0xe7, 0xb7, 0x4a, 0x1c, 0x8a, 0xbd,
0x5f, 0x7a, 0xe3, 0x69, 0xee, 0x54, 0x45, 0xfc, 0xb0, 0xfa, 0xb4, 0xe2, 0xf8, 0xb0, 0xf1, 0x5c,
0x9c, 0x59, 0xc6, 0xf2, 0xd2, 0x73, 0x8f, 0xb5, 0xf4, 0xb9, 0xc7, 0xca, 0x9f, 0x7b, 0xb0, 0x8d,
0xc6, 0x09, 0x9d, 0xb0, 0x38, 0x2a, 0x14, 0x59, 0x86, 0x22, 0xe7, 0x1f, 0x16, 0x40, 0xa1, 0xc5,
0x3e, 0x81, 0x7e, 0x18, 0x0f, 0xc4, 0x01, 0x11, 0xfa, 0x4c, 0x35, 0xa4, 0x41, 0xca, 0x30, 0x7d,
0xb2, 0xf0, 0x92, 0xd1, 0x1d, 0x62, 0x97, 0xf6, 0x3d, 0x67, 0x9c, 0xbb, 0x87, 0x94, 0x5a, 0x28,
0x3b, 0x97, 0x9b, 0x2f, 0xb3, 0x7f, 0x0e, 0x3b, 0x85, 0xd0, 0xc0, 0x90, 0x57, 0xbd, 0x51, 0xde,
0x5d, 0x2d, 0x2f, 0x28, 0x64, 0xfd, 0x14, 0x10, 0x1e, 0xe0, 0x19, 0x33, 0x2d, 0x49, 0xaa, 0xdd,
0x28, 0x69, 0x2b, 0x8c, 0xdf, 0xc8, 0x15, 0x85, 0x9c, 0x37, 0x70, 0xcf, 0xd8, 0xa8, 0x28, 0x7b,
0x43, 0x9a, 0x75, 0xa3, 0xb4, 0x5d, 0x6d, 0x97, 0x68, 0x0c, 0x85, 0xc8, 0xcf, 0x00, 0x67, 0x06,
0x57, 0x5e, 0xc8, 0xe7, 0xe5, 0xd5, 0x6f, 0xdb, 0xe7, 0x17, 0xb8, 0xa8, 0x2c, 0x4c, 0xed, 0x73,
0xc2, 0xd2, 0x61, 0x69, 0x9f, 0x8d, 0xdb, 0xf6, 0x79, 0x24, 0x57, 0x14, 0x72, 0x9e, 0x03, 0x82,
0xf3, 0xf6, 0xac, 0xdd, 0x28, 0x65, 0x23, 0x8c, 0xcb, 0xb6, 0x1c, 0xc2, 0x56, 0xc6, 0x7c, 0x8e,
0x27, 0x8a, 0x21, 0x63, 0xfd, 0x46, 0x19, 0x9b, 0xb4, 0x40, 0x0b, 0x71, 0xbe, 0x84, 0xf6, 0xcf,
0xa6, 0x43, 0xc6, 0xc7, 0xe7, 0xba, 0xe6, 0xff, 0xd7, 0x6d, 0xe6, 0xdf, 0xd8, 0x66, 0x0e, 0x87,
0x69, 0x3c, 0x4d, 0x4a, 0x5d, 0x5b, 0xd5, 0xf0, 0x42, 0xd7, 0x96, 0x3c, 0xb2, 0x6b, 0x2b, 0xee,
0x4f, 0xa0, 0xad, 0x2e, 0x4c, 0xb4, 0x40, 0x75, 0x21, 0x7b, 0xb1, 0xe8, 0xf3, 0x0b, 0x9a, 0x5a,
0x76, 0x40, 0x97, 0x4f, 0x5a, 0x55, 0xee, 0x46, 0x85, 0x9b, 0xf0, 0xeb, 0xa3, 0xa8, 0xba, 0x57,
0xd0, 0x19, 0x29, 0xdf, 0xd0, 0x2a, 0x95, 0x80, 0x5f, 0xcf, 0x8d, 0x2b, 0xf6, 0xb0, 0x6f, 0xfa,
0x50, 0xb9, 0xba, 0x3d, 0x32, 0xdd, 0xfa, 0x3d, 0x00, 0xf1, 0x79, 0x31, 0xc8, 0x1b, 0x95, 0xf9,
0x9e, 0xa7, 0x4f, 0x08, 0xfc, 0x96, 0xc9, 0x87, 0xfd, 0x53, 0xd8, 0x5a, 0x90, 0xb9, 0xa4, 0x4d,
0x7d, 0xcb, 0x6c, 0x53, 0xad, 0x83, 0xbb, 0x24, 0xd2, 0x5c, 0x6a, 0xf6, 0xae, 0x3f, 0x56, 0xd4,
0xd7, 0x88, 0x7e, 0x72, 0xb1, 0x9f, 0x42, 0x27, 0x52, 0x97, 0x2f, 0x1d, 0x80, 0x9a, 0x21, 0xc8,
0xbc, 0x98, 0xb9, 0xed, 0xc8, 0xbc, 0xa6, 0x61, 0x20, 0x7c, 0xe9, 0x81, 0xa5, 0x81, 0x30, 0x9c,
0xe3, 0xb6, 0x7c, 0x23, 0xda, 0xa5, 0xcb, 0x60, 0x6d, 0xfe, 0x32, 0x48, 0x8f, 0x06, 0xab, 0xde,
0x18, 0x0f, 0xfe, 0xd5, 0x80, 0xda, 0xb3, 0xe3, 0x57, 0xf6, 0x19, 0x6c, 0xce, 0x3f, 0xbe, 0xdb,
0x0f, 0x48, 0xf5, 0x8a, 0x07, 0xfb, 0xfe, 0x07, 0x2b, 0xe7, 0xe9, 0xb6, 0x7c, 0xc7, 0x76, 0x61,
0x63, 0xee, 0x41, 0xd6, 0xce, 0x8f, 0x93, 0xe5, 0xcf, 0xd9, 0xfd, 0x07, 0xab, 0xa6, 0x4d, 0x99,
0x73, 0xd7, 0x73, 0x2d, 0x73, 0xf9, 0xa7, 0x9a, 0x96, 0xb9, 0xea, 0x56, 0x7f, 0xc7, 0xfe, 0x01,
0x34, 0xd4, 0x13, 0xad, 0xbd, 0x4d, 0xbc, 0xa5, 0xc7, 0xdf, 0xfe, 0xce, 0x1c, 0xaa, 0x17, 0xbe,
0x86, 0x4e, 0xe9, 0xc5, 0xde, 0x7e, 0xaf, 0xa4, 0xab, 0xfc, 0xc2, 0xdb, 0x7f, 0x7f, 0xf9, 0xa4,
0x96, 0x76, 0x08, 0x50, 0xbc, 0xe2, 0xd9, 0x3d, 0xe2, 0x5e, 0x78, 0x29, 0xee, 0xdf, 0x5b, 0x32,
0xa3, 0x85, 0x60, 0x28, 0xe7, 0x9f, 0xe5, 0xec, 0x39, 0xaf, 0xce, 0x3f, 0x9d, 0xe9, 0x50, 0xae,
0x7c, 0xcf, 0x93, 0x62, 0xe7, 0x9f, 0xe4, 0xb4, 0xd8, 0x15, 0x4f, 0x7d, 0x5a, 0xec, 0xca, 0xb7,
0xbc, 0x3b, 0xf6, 0x2f, 0xa0, 0x5b, 0x7e, 0x24, 0xb3, 0x73, 0x27, 0x2d, 0x7d, 0xe4, 0xeb, 0xdf,
0x5f, 0x31, 0xab, 0x05, 0x7e, 0x0c, 0x75, 0xf5, 0xfa, 0x95, 0x97, 0x9c, 0xf9, 0x68, 0xd6, 0xdf,
0x2e, 0x83, 0x7a, 0xd5, 0x63, 0x68, 0xa8, 0x0f, 0x3b, 0x9d, 0x00, 0xa5, 0xef, 0xbc, 0x7e, 0xdb,
0x44, 0x9d, 0x3b, 0x8f, 0x2b, 0xb9, 0x9e, 0xac, 0xa4, 0x27, 0x5b, 0xa6, 0xc7, 0x08, 0xce, 0x79,
0x43, 0xfe, 0x1b, 0xf6, 0xe4, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x82, 0xee, 0x31, 0x1a,
0x1b, 0x00, 0x00,
// 2337 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x72, 0x23, 0x49,
0x11, 0x1e, 0x49, 0x2d, 0xd9, 0x4a, 0xfd, 0xd8, 0xee, 0xf5, 0x8f, 0x46, 0xbb, 0x33, 0x3b, 0x74,
0x2c, 0x30, 0xc0, 0x62, 0x06, 0xcf, 0x6e, 0x30, 0x01, 0x11, 0x44, 0xcc, 0xd8, 0xc3, 0x32, 0xec,
0x78, 0xf1, 0xb4, 0x6d, 0xf6, 0xa8, 0x68, 0x77, 0xd7, 0x48, 0x8d, 0xa5, 0xee, 0xde, 0xee, 0x92,
0x2d, 0x5f, 0x38, 0x70, 0x80, 0x1b, 0x2f, 0x40, 0x04, 0x17, 0x6e, 0xdc, 0x39, 0xf0, 0x04, 0x44,
0xf0, 0x20, 0x04, 0x17, 0xee, 0x1c, 0xc9, 0xaa, 0xca, 0xae, 0xae, 0xd6, 0x8f, 0x3d, 0x1c, 0x08,
0x2e, 0x5c, 0x14, 0x95, 0x5f, 0x65, 0x65, 0x66, 0x65, 0x66, 0x65, 0x65, 0x97, 0xa0, 0xe9, 0x25,
0xe1, 0x7e, 0x92, 0xc6, 0x3c, 0xb6, 0xeb, 0xfc, 0x26, 0x61, 0x99, 0x73, 0x1f, 0xf6, 0x3e, 0x63,
0xfc, 0x94, 0xa5, 0x57, 0x2c, 0xfd, 0x05, 0x4b, 0xb3, 0x30, 0x8e, 0x5c, 0xf6, 0xd5, 0x94, 0x65,
0xdc, 0x99, 0x41, 0x6f, 0x71, 0x2a, 0x4b, 0xe2, 0x28, 0x63, 0xf6, 0x36, 0xd4, 0x27, 0xde, 0x2f,
0xe3, 0xb4, 0x57, 0x79, 0x54, 0x79, 0xdc, 0x71, 0x15, 0x21, 0xd1, 0x30, 0x42, 0xb4, 0x4a, 0xa8,
0x20, 0x04, 0x9a, 0x78, 0xdc, 0x1f, 0xf5, 0x6a, 0x0a, 0x95, 0x84, 0xdd, 0x87, 0xf5, 0x94, 0x5d,
0x85, 0x42, 0x6a, 0xcf, 0xc2, 0x89, 0xa6, 0xab, 0x69, 0xe7, 0x37, 0x15, 0xd8, 0x3e, 0x4f, 0x02,
0x8f, 0xb3, 0x93, 0x34, 0xf6, 0x59, 0x96, 0x91, 0x49, 0x76, 0x17, 0xaa, 0x61, 0x20, 0x75, 0x36,
0x5d, 0x1c, 0xd9, 0x9b, 0x50, 0x4b, 0x10, 0xa8, 0x4a, 0x40, 0x0c, 0xed, 0x87, 0x00, 0xfe, 0x38,
0xce, 0xd8, 0x29, 0x0f, 0xc2, 0x48, 0x6a, 0x5c, 0x77, 0x0d, 0x44, 0x18, 0x73, 0x1d, 0x06, 0x7c,
0x24, 0x75, 0xa2, 0x31, 0x92, 0xb0, 0x77, 0xa1, 0x31, 0x62, 0xe1, 0x70, 0xc4, 0x7b, 0x75, 0x09,
0x13, 0xe5, 0xec, 0xc1, 0xce, 0x9c, 0x1d, 0x6a, 0xff, 0xce, 0xdf, 0xaa, 0xb0, 0x7b, 0x98, 0x32,
0x9c, 0x39, 0x8c, 0x23, 0xee, 0x85, 0x11, 0x4b, 0x57, 0xd9, 0x88, 0x16, 0x5d, 0x4c, 0xa3, 0x60,
0xcc, 0x4e, 0x3c, 0x54, 0xab, 0x4c, 0x35, 0x10, 0x69, 0xf1, 0x88, 0xf9, 0x97, 0x49, 0x1c, 0x46,
0x5c, 0x5a, 0x8c, 0xf3, 0x05, 0x22, 0x2c, 0xce, 0xe4, 0x66, 0x94, 0x97, 0x14, 0x21, 0x2c, 0xc6,
0x41, 0x3c, 0x55, 0x16, 0x37, 0x5d, 0xa2, 0x08, 0x67, 0x69, 0xda, 0x6b, 0x68, 0x1c, 0x29, 0x81,
0x8f, 0xbd, 0x0b, 0x36, 0xce, 0x7a, 0x6b, 0x8f, 0x6a, 0x02, 0x57, 0x94, 0xfd, 0x08, 0x5a, 0x51,
0x7c, 0x12, 0x5e, 0xc5, 0xdc, 0x8d, 0x63, 0xde, 0x5b, 0x97, 0x0e, 0x33, 0x21, 0xbb, 0x07, 0x6b,
0xe9, 0x34, 0xe2, 0xe1, 0x84, 0xf5, 0x9a, 0x52, 0x64, 0x4e, 0x8a, 0xb5, 0x34, 0x7c, 0x9e, 0x0e,
0xb3, 0x1e, 0x48, 0xc1, 0x26, 0x64, 0x7f, 0x04, 0x9d, 0x62, 0x27, 0x47, 0x61, 0xda, 0x6b, 0x49,
0x09, 0x65, 0xd0, 0x79, 0x05, 0x7b, 0x0b, 0xbe, 0xa4, 0x3c, 0xdb, 0x87, 0xa6, 0x9f, 0x83, 0xd2,
0xa7, 0xad, 0x83, 0xcd, 0x7d, 0x99, 0xb9, 0xfb, 0x05, 0x73, 0xc1, 0x82, 0xa2, 0x3a, 0xa7, 0xe1,
0x30, 0xf2, 0xc6, 0xef, 0x9e, 0x31, 0xc2, 0x63, 0x72, 0x09, 0xe5, 0x27, 0x51, 0xce, 0x26, 0x74,
0x73, 0x51, 0x14, 0xf4, 0x3f, 0xd7, 0x60, 0xeb, 0x79, 0x10, 0xdc, 0x91, 0x93, 0x98, 0xd8, 0x9c,
0xa5, 0x98, 0xfa, 0x28, 0xb1, 0x2a, 0xdd, 0xa9, 0x69, 0xfb, 0x43, 0xb0, 0xa6, 0x19, 0xee, 0xa4,
0x26, 0x77, 0xd2, 0xa2, 0x9d, 0x9c, 0x23, 0xe4, 0xca, 0x09, 0xdb, 0x06, 0xcb, 0x13, 0xbe, 0xb4,
0xa4, 0x2f, 0xe5, 0x58, 0x98, 0xcc, 0xa2, 0x2b, 0x8c, 0xb3, 0x80, 0xc4, 0x50, 0x20, 0xfe, 0x75,
0x40, 0x11, 0x16, 0xc3, 0x7c, 0x5b, 0x6b, 0xc5, 0xb6, 0x74, 0xda, 0xac, 0x2f, 0x4f, 0x9b, 0xe6,
0x8a, 0xb4, 0x81, 0x52, 0xda, 0x38, 0xd0, 0xf6, 0xbd, 0xc4, 0xbb, 0x08, 0xc7, 0x21, 0x0f, 0x59,
0x86, 0xf1, 0x13, 0x46, 0x94, 0x30, 0xfb, 0x31, 0x6c, 0x78, 0x49, 0xe2, 0xa5, 0x93, 0x38, 0x45,
0xd7, 0xbc, 0x0d, 0xc7, 0xac, 0xd7, 0x96, 0x42, 0xe6, 0x61, 0x21, 0x2d, 0x63, 0xe3, 0x30, 0x9a,
0xce, 0x5e, 0x8b, 0xec, 0xeb, 0x75, 0x24, 0x5b, 0x09, 0x13, 0xd2, 0xa2, 0xf8, 0x0b, 0x76, 0x7d,
0x92, 0x86, 0x57, 0xb8, 0x66, 0x88, 0x4a, 0xbb, 0xd2, 0x8b, 0xf3, 0xb0, 0xfd, 0x4d, 0x4c, 0xcc,
0x71, 0x38, 0x09, 0x79, 0xd6, 0xdb, 0x40, 0xb3, 0x5a, 0x07, 0x1d, 0xf2, 0xa7, 0x2b, 0x51, 0x37,
0x9f, 0x75, 0x8e, 0xa0, 0xa1, 0x20, 0xe1, 0x5e, 0xc1, 0x42, 0xd1, 0x92, 0x63, 0x81, 0x65, 0xf1,
0x5b, 0x2e, 0x63, 0x65, 0xb9, 0x72, 0x2c, 0xb0, 0x91, 0x97, 0x06, 0x32, 0x4e, 0x88, 0x89, 0xb1,
0xe3, 0x82, 0x25, 0x02, 0x25, 0x5c, 0x3d, 0xa5, 0x80, 0x77, 0x5c, 0x31, 0x14, 0xc8, 0x90, 0x72,
0x0a, 0x11, 0x1c, 0xda, 0xdf, 0x80, 0xae, 0x17, 0x04, 0xe8, 0x9e, 0x18, 0xa3, 0xfe, 0x59, 0x18,
0x64, 0x28, 0xa9, 0x86, 0x93, 0x73, 0xa8, 0xb3, 0x0d, 0xb6, 0x99, 0x50, 0x94, 0x67, 0xbf, 0xae,
0xe8, 0x03, 0xa1, 0xcf, 0xc9, 0xaa, 0x6c, 0xfb, 0x7e, 0xa9, 0x7a, 0x54, 0x65, 0x5e, 0x6d, 0xe5,
0x27, 0xa4, 0x58, 0x6d, 0x16, 0x94, 0x85, 0x43, 0x59, 0x5b, 0x76, 0x28, 0xfb, 0xd0, 0x5b, 0xb4,
0x81, 0x0c, 0xf4, 0x61, 0xef, 0x88, 0x8d, 0xd9, 0xbb, 0xd8, 0x87, 0x9e, 0x8c, 0x3c, 0x2c, 0x1d,
0xea, 0xc0, 0xc9, 0xf1, 0xbb, 0x1b, 0xb0, 0xa8, 0x84, 0x0c, 0x38, 0x86, 0x9d, 0xd7, 0x61, 0xc6,
0xef, 0x56, 0xbf, 0xa0, 0xaa, 0xba, 0x4c, 0xd5, 0xaf, 0x00, 0x0a, 0x51, 0xda, 0xe4, 0x8a, 0x61,
0x32, 0x62, 0x6c, 0x16, 0x72, 0x3a, 0xd0, 0x72, 0x2c, 0xc2, 0xce, 0xfd, 0x84, 0xee, 0x18, 0x31,
0x14, 0x05, 0x71, 0x1a, 0x85, 0xb3, 0xd3, 0xd8, 0xbf, 0x64, 0x3c, 0x93, 0x05, 0x1b, 0x8b, 0xa9,
0x01, 0xc9, 0x53, 0x39, 0x62, 0xe3, 0xb1, 0xac, 0xda, 0xeb, 0xae, 0x22, 0x70, 0x3b, 0xbb, 0xf3,
0xdb, 0xa1, 0xfa, 0xf7, 0x14, 0x5a, 0x85, 0xa9, 0x19, 0x9a, 0x54, 0x5b, 0x1e, 0x5f, 0x93, 0xcb,
0x79, 0x08, 0xed, 0x53, 0x8e, 0x91, 0x5b, 0xe1, 0x14, 0xe7, 0x31, 0x74, 0x75, 0xf1, 0x94, 0x8c,
0xea, 0xf8, 0x7b, 0x7c, 0x9a, 0x11, 0x17, 0x51, 0xce, 0x5f, 0x6a, 0xb0, 0x46, 0xd9, 0x99, 0x97,
0x98, 0x4a, 0x51, 0x62, 0xfe, 0x27, 0x95, 0xee, 0x03, 0x68, 0x66, 0x37, 0x19, 0x67, 0x93, 0x13,
0xaa, 0x77, 0x1d, 0xb7, 0x00, 0xfe, 0x5f, 0xf5, 0x8a, 0xaa, 0xf7, 0xd7, 0x0a, 0x34, 0x75, 0x98,
0xff, 0xe3, 0xae, 0xe4, 0x63, 0x68, 0x26, 0x2a, 0xf0, 0x4c, 0x15, 0xaf, 0xd6, 0x41, 0x97, 0x14,
0xe5, 0xe5, 0xaa, 0x60, 0x30, 0xf2, 0xc7, 0x32, 0xf3, 0xc7, 0xe8, 0x3a, 0xea, 0xa5, 0xae, 0x03,
0x83, 0x9f, 0x88, 0xaa, 0xd8, 0x90, 0x55, 0x51, 0x8e, 0xcd, 0x3e, 0x63, 0xad, 0xd4, 0x67, 0x38,
0x9f, 0xc2, 0xda, 0xb1, 0xe7, 0x8f, 0x70, 0x1f, 0x62, 0xa1, 0x9f, 0x50, 0x9a, 0xe2, 0x42, 0x31,
0x16, 0x4a, 0x26, 0x0c, 0xfd, 0x7d, 0x43, 0x25, 0x9c, 0x28, 0xe7, 0x12, 0x7b, 0x01, 0x75, 0x0c,
0xe8, 0x30, 0x3d, 0xc1, 0x5a, 0x99, 0x3b, 0x24, 0x3f, 0x4b, 0x8b, 0xdd, 0x84, 0xc1, 0x83, 0x61,
0x59, 0x9b, 0x28, 0xcd, 0x54, 0x5a, 0x73, 0x1f, 0x90, 0x3d, 0x6e, 0x3e, 0xed, 0xfc, 0xb6, 0x02,
0xbb, 0xaa, 0x55, 0xbc, 0xb3, 0x21, 0x5c, 0xde, 0x82, 0x28, 0xf7, 0xd5, 0x4a, 0xee, 0x7b, 0x0a,
0xcd, 0x94, 0x65, 0xf1, 0x34, 0x45, 0x37, 0x4b, 0xcf, 0xb6, 0x0e, 0x76, 0xf2, 0x93, 0x24, 0x75,
0xb9, 0x34, 0xeb, 0x16, 0x7c, 0xce, 0x3f, 0xaa, 0xd0, 0x2d, 0xcf, 0x8a, 0xba, 0x74, 0x31, 0xbe,
0x0c, 0xe3, 0x2f, 0x55, 0x8f, 0xab, 0x9c, 0x67, 0x42, 0xe2, 0x54, 0xa1, 0x2f, 0x4f, 0xf1, 0xa2,
0x43, 0x4d, 0xea, 0x22, 0x2b, 0x00, 0x9a, 0x3d, 0x61, 0x69, 0x18, 0x07, 0xd4, 0x25, 0x15, 0x80,
0x28, 0x03, 0x48, 0xbc, 0x99, 0xc6, 0xdc, 0xa3, 0xae, 0x5a, 0xd3, 0xb2, 0xb9, 0xc5, 0x18, 0x31,
0x7e, 0x28, 0xa2, 0x56, 0xa7, 0xe6, 0x56, 0x23, 0xc5, 0xfc, 0x31, 0x9b, 0x64, 0x74, 0xcc, 0x0d,
0x44, 0x58, 0xae, 0xa2, 0xf9, 0x5a, 0x24, 0x35, 0x9d, 0x77, 0x13, 0x12, 0x12, 0x14, 0x79, 0x7a,
0xed, 0x25, 0xf2, 0xd8, 0x77, 0x5c, 0x03, 0xc1, 0x44, 0xde, 0x52, 0x14, 0x7a, 0x03, 0x3f, 0x65,
0x3c, 0x71, 0xfb, 0xca, 0x32, 0xd0, 0x71, 0x17, 0x27, 0x04, 0xf7, 0x25, 0x4b, 0x23, 0x36, 0x3e,
0x36, 0xb4, 0x82, 0xe2, 0x5e, 0x98, 0x10, 0x1f, 0x4f, 0x0b, 0x31, 0xa7, 0x1b, 0xea, 0xbb, 0xd0,
0x79, 0x79, 0xc5, 0xb0, 0x1a, 0xe7, 0x59, 0x80, 0x3e, 0x14, 0xc9, 0x8c, 0x91, 0x9d, 0x24, 0x32,
0x02, 0x96, 0x5b, 0x00, 0x4e, 0x06, 0x75, 0xc9, 0xbe, 0xb4, 0x43, 0x51, 0x09, 0x54, 0xd5, 0x09,
0x54, 0x4e, 0x97, 0x8e, 0x4e, 0x17, 0x4a, 0x2c, 0xab, 0x48, 0xac, 0x92, 0xd2, 0xfa, 0xbc, 0xd2,
0xdf, 0x55, 0xa1, 0xfd, 0x05, 0xe3, 0xd7, 0x71, 0x7a, 0x29, 0x0e, 0x4a, 0xb6, 0xf4, 0xe6, 0xbb,
0x8f, 0xdf, 0x69, 0xb3, 0xc1, 0xc5, 0x0d, 0xa7, 0xc4, 0xb0, 0xf0, 0x5c, 0xce, 0x5e, 0x08, 0xd2,
0x7e, 0x00, 0x80, 0x53, 0x27, 0x9e, 0xba, 0xed, 0x54, 0xaf, 0xd4, 0x4c, 0x67, 0x04, 0xd8, 0xef,
0x43, 0xd3, 0x9d, 0x0d, 0xb0, 0x9e, 0xc6, 0xa9, 0xca, 0x5e, 0x0b, 0x3f, 0xf1, 0x66, 0x2f, 0x25,
0x2d, 0xd6, 0xe2, 0x64, 0x90, 0xc6, 0x49, 0xc2, 0x82, 0xdc, 0xb4, 0x74, 0x76, 0xa4, 0x00, 0xa1,
0xf5, 0x2c, 0xd7, 0xda, 0x50, 0x5a, 0x79, 0xa1, 0x15, 0xa7, 0x12, 0xd2, 0xba, 0x46, 0x9b, 0x32,
0xb5, 0x9e, 0x69, 0xad, 0xeb, 0x4a, 0x2b, 0x37, 0xb4, 0x9e, 0x15, 0x5a, 0x9b, 0xf9, 0x5a, 0xd2,
0xea, 0xfc, 0xa9, 0x02, 0xeb, 0x98, 0x96, 0xe7, 0x99, 0x37, 0x64, 0x78, 0x83, 0xb5, 0x38, 0xa6,
0xf0, 0x78, 0x30, 0x15, 0x24, 0x85, 0x0c, 0x24, 0xa4, 0x18, 0xbe, 0x06, 0xed, 0x84, 0xa5, 0x98,
0xac, 0xc4, 0x51, 0xc5, 0x82, 0x62, 0xb9, 0x2d, 0x85, 0x29, 0x96, 0x7d, 0x78, 0x4f, 0xce, 0x0d,
0xc2, 0x68, 0xa0, 0xd2, 0x67, 0x12, 0x07, 0x8c, 0x5c, 0xb5, 0x25, 0xa7, 0x5e, 0x45, 0x9f, 0xeb,
0x09, 0xfb, 0xdb, 0xb0, 0xa5, 0xf9, 0xc5, 0x2d, 0x29, 0xb9, 0x95, 0xeb, 0x36, 0x88, 0xfb, 0x9c,
0x60, 0x6c, 0x5a, 0xba, 0x67, 0x23, 0xfc, 0x94, 0xe7, 0x78, 0x8d, 0x0c, 0x8f, 0x3c, 0x3c, 0x6c,
0x58, 0x41, 0x13, 0x79, 0x24, 0x33, 0xb2, 0x36, 0x27, 0xed, 0xef, 0xc0, 0x16, 0x57, 0xbc, 0x2c,
0x18, 0xe4, 0x3c, 0x2a, 0x9a, 0x9b, 0x7a, 0xe2, 0x84, 0x98, 0xbf, 0x0e, 0xdd, 0x82, 0x59, 0xd6,
0x63, 0x65, 0x6f, 0x47, 0xa3, 0x67, 0xa2, 0x2a, 0xff, 0x5e, 0x39, 0x4b, 0x65, 0xce, 0xc7, 0xb2,
0x42, 0x18, 0xae, 0x6a, 0x1d, 0x6c, 0xe4, 0x95, 0x95, 0x9c, 0x21, 0xab, 0x82, 0x72, 0xcb, 0x8f,
0x61, 0x83, 0x6b, 0xd3, 0x07, 0x78, 0x80, 0x3c, 0x2a, 0xaf, 0x79, 0x75, 0x2b, 0x6f, 0xcc, 0xed,
0xf2, 0xf2, 0x46, 0xd1, 0xf3, 0xea, 0xca, 0x27, 0x85, 0xca, 0xbe, 0x96, 0xc2, 0xa4, 0x0a, 0xe7,
0x47, 0xd0, 0xc4, 0x7e, 0x20, 0x53, 0xd6, 0xa1, 0x63, 0xfc, 0x69, 0x9a, 0xe2, 0xf9, 0xca, 0x1d,
0x43, 0xa4, 0xe8, 0x17, 0xe4, 0x75, 0x49, 0xce, 0x50, 0x84, 0x13, 0x03, 0xa8, 0x63, 0x2e, 0xb5,
0x21, 0x8f, 0x99, 0x02, 0x8a, 0x10, 0x79, 0x36, 0xf1, 0x66, 0x3a, 0xf4, 0x32, 0xcf, 0x10, 0x50,
0x1b, 0x44, 0x85, 0x6f, 0xbd, 0x70, 0xec, 0xd3, 0x07, 0x3d, 0x2a, 0x24, 0xb2, 0x50, 0x68, 0x99,
0x0a, 0xff, 0x58, 0x85, 0x96, 0xd2, 0xa8, 0x0c, 0x46, 0x2e, 0x1f, 0x2f, 0x16, 0xad, 0x52, 0x12,
0x78, 0xf5, 0xd7, 0x0b, 0x75, 0x45, 0x1b, 0x58, 0x98, 0x9a, 0xdb, 0x86, 0x17, 0x5d, 0x86, 0xb5,
0xcf, 0xf0, 0xce, 0x52, 0xee, 0xa6, 0x60, 0x52, 0x06, 0x7f, 0x02, 0x6d, 0x95, 0x9f, 0xb4, 0xc6,
0x5a, 0xb5, 0xa6, 0xa5, 0xd8, 0xd4, 0xaa, 0xa7, 0xa2, 0xdb, 0x42, 0x7b, 0xe5, 0xed, 0xde, 0x3a,
0x78, 0x50, 0x62, 0x97, 0x3b, 0xd9, 0x97, 0xbf, 0x2f, 0x23, 0x8e, 0x65, 0x56, 0xf1, 0xf6, 0x9f,
0x01, 0x14, 0xa0, 0xa8, 0x59, 0x97, 0xec, 0x26, 0xef, 0x2a, 0x71, 0x28, 0xf6, 0x7e, 0xe5, 0x8d,
0xa7, 0xb9, 0x53, 0x15, 0xf1, 0xc3, 0xea, 0xb3, 0x0a, 0x7e, 0x76, 0x6c, 0xbc, 0x10, 0x77, 0x96,
0xb1, 0xbc, 0xf4, 0x0e, 0x65, 0x2d, 0x7d, 0x87, 0xb2, 0xf2, 0x77, 0x28, 0x2c, 0xa3, 0x71, 0x42,
0x37, 0x2c, 0x8e, 0x0a, 0x45, 0x96, 0xa1, 0xc8, 0xf9, 0xbb, 0x05, 0x50, 0x68, 0xb1, 0x4f, 0xa1,
0x1f, 0xc6, 0x03, 0x71, 0x41, 0x84, 0x3e, 0x53, 0x05, 0x69, 0x90, 0x32, 0x4c, 0x9f, 0x2c, 0xbc,
0x62, 0xd4, 0x43, 0xec, 0xd2, 0xbe, 0xe7, 0x8c, 0x73, 0xf7, 0x90, 0x52, 0x0b, 0x65, 0xe5, 0x72,
0xf3, 0x65, 0xf6, 0xcf, 0x60, 0xa7, 0x10, 0x1a, 0x18, 0xf2, 0xaa, 0xb7, 0xca, 0x7b, 0x4f, 0xcb,
0x0b, 0x0a, 0x59, 0x3f, 0x01, 0x84, 0x07, 0x78, 0xc7, 0x4c, 0x4b, 0x92, 0x6a, 0xb7, 0x4a, 0xda,
0x0a, 0xe3, 0x37, 0x72, 0x45, 0x21, 0xe7, 0x0d, 0xdc, 0x37, 0x36, 0x2a, 0x8e, 0xbd, 0x21, 0xcd,
0xba, 0x55, 0xda, 0xae, 0xb6, 0x4b, 0x14, 0x86, 0x42, 0xe4, 0xe7, 0x80, 0x33, 0x83, 0x6b, 0x2f,
0xe4, 0xf3, 0xf2, 0xea, 0x77, 0xed, 0xf3, 0x4b, 0x5c, 0x54, 0x16, 0xa6, 0xf6, 0x39, 0x61, 0xe9,
0xb0, 0xb4, 0xcf, 0xc6, 0x5d, 0xfb, 0x3c, 0x96, 0x2b, 0x0a, 0x39, 0x2f, 0x00, 0xc1, 0x79, 0x7b,
0xd6, 0x6e, 0x95, 0xb2, 0x11, 0xc6, 0x65, 0x5b, 0x0e, 0x61, 0x2b, 0x63, 0x3e, 0xc7, 0x1b, 0xc5,
0x90, 0xb1, 0x7e, 0xab, 0x8c, 0x4d, 0x5a, 0xa0, 0x85, 0x38, 0x5f, 0x41, 0xfb, 0xa7, 0xd3, 0x21,
0xe3, 0xe3, 0x0b, 0x7d, 0xe6, 0xff, 0xdb, 0x65, 0xe6, 0x5f, 0x58, 0x66, 0x0e, 0x87, 0x69, 0x3c,
0x4d, 0x4a, 0x55, 0x5b, 0x9d, 0xe1, 0x85, 0xaa, 0x2d, 0x79, 0x64, 0xd5, 0x56, 0xdc, 0x9f, 0x42,
0x5b, 0x35, 0x4c, 0xb4, 0x40, 0x55, 0x21, 0x7b, 0xf1, 0xd0, 0xe7, 0x0d, 0x9a, 0x5a, 0x76, 0x40,
0xcd, 0x27, 0xad, 0x2a, 0x57, 0xa3, 0xc2, 0x4d, 0xf8, 0xf5, 0x51, 0x9c, 0xba, 0x57, 0xd0, 0x19,
0x29, 0xdf, 0xd0, 0x2a, 0x95, 0x80, 0x1f, 0xe5, 0xc6, 0x15, 0x7b, 0xd8, 0x37, 0x7d, 0xa8, 0x5c,
0xdd, 0x1e, 0x99, 0x6e, 0xfd, 0x1e, 0x80, 0xf8, 0xbc, 0x18, 0xe4, 0x85, 0xca, 0x7c, 0x42, 0xd4,
0x37, 0x04, 0x7e, 0xcb, 0xe4, 0xc3, 0xfe, 0x19, 0x6c, 0x2d, 0xc8, 0x5c, 0x52, 0xa6, 0xbe, 0x65,
0x96, 0xa9, 0xd6, 0xc1, 0x7b, 0x24, 0xd2, 0x5c, 0x6a, 0xd6, 0xae, 0x3f, 0x54, 0xd4, 0xd7, 0x88,
0x7e, 0xe5, 0xb1, 0x9f, 0x41, 0x27, 0x52, 0xcd, 0x97, 0x0e, 0x40, 0xcd, 0x10, 0x64, 0x36, 0x66,
0x6e, 0x3b, 0x32, 0xdb, 0x34, 0x0c, 0x84, 0x2f, 0x3d, 0xb0, 0x34, 0x10, 0x86, 0x73, 0xdc, 0x96,
0x6f, 0x44, 0xbb, 0xd4, 0x0c, 0xd6, 0xe6, 0x9b, 0x41, 0x7a, 0x34, 0x58, 0xf5, 0xac, 0x79, 0xf0,
0xcf, 0x06, 0xd4, 0x9e, 0x9f, 0xbc, 0xb2, 0xcf, 0x61, 0x73, 0xfe, 0x5f, 0x01, 0xfb, 0x21, 0xa9,
0x5e, 0xf1, 0x4f, 0x42, 0xff, 0xc3, 0x95, 0xf3, 0xd4, 0x2d, 0xdf, 0xb3, 0x5d, 0xd8, 0x98, 0x7b,
0x03, 0xb6, 0xf3, 0xeb, 0x64, 0xf9, 0x3b, 0x7b, 0xff, 0xe1, 0xaa, 0x69, 0x53, 0xe6, 0x5c, 0x7b,
0xae, 0x65, 0x2e, 0xff, 0x54, 0xd3, 0x32, 0x57, 0x75, 0xf5, 0xf7, 0xec, 0x1f, 0x40, 0x43, 0xbd,
0x0a, 0xdb, 0xdb, 0xc4, 0x5b, 0x7a, 0x6f, 0xee, 0xef, 0xcc, 0xa1, 0x7a, 0xe1, 0x6b, 0xe8, 0x94,
0xfe, 0x4a, 0xb0, 0xdf, 0x2f, 0xe9, 0x2a, 0x3f, 0x2a, 0xf7, 0x3f, 0x58, 0x3e, 0xa9, 0xa5, 0x1d,
0x02, 0x14, 0x0f, 0x87, 0x76, 0x8f, 0xb8, 0x17, 0x1e, 0xa7, 0xfb, 0xf7, 0x97, 0xcc, 0x68, 0x21,
0x18, 0xca, 0xf9, 0x27, 0x3e, 0x7b, 0xce, 0xab, 0xf3, 0x0f, 0x6c, 0x3a, 0x94, 0x2b, 0xdf, 0x06,
0xa5, 0xd8, 0xf9, 0x87, 0x3b, 0x2d, 0x76, 0xc5, 0xb3, 0xa1, 0x16, 0xbb, 0xf2, 0xc5, 0xef, 0x9e,
0xfd, 0x73, 0xe8, 0x96, 0x1f, 0xc9, 0xec, 0xdc, 0x49, 0x4b, 0x9f, 0x02, 0xfb, 0x0f, 0x56, 0xcc,
0x6a, 0x81, 0x9f, 0x40, 0x5d, 0xbd, 0x7e, 0xe5, 0x47, 0xce, 0x7c, 0x34, 0xeb, 0x6f, 0x97, 0x41,
0xbd, 0xea, 0x09, 0x34, 0xd4, 0x87, 0x9d, 0x4e, 0x80, 0xd2, 0x77, 0x5e, 0xbf, 0x6d, 0xa2, 0xce,
0xbd, 0x27, 0x95, 0x5c, 0x4f, 0x56, 0xd2, 0x93, 0x2d, 0xd3, 0x63, 0x04, 0xe7, 0xa2, 0x21, 0xff,
0xa6, 0x7b, 0xfa, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xce, 0x6c, 0xd6, 0xb3, 0x1b, 0x00,
0x00,
}

View file

@ -49,6 +49,7 @@ message CreateContainerRequest {
bool noPivotRoot = 8;
string runtime = 9;
repeated string runtimeArgs = 10;
string checkpointDir = 11; // Directory where checkpoints are stored
}
message CreateContainerResponse {
@ -100,6 +101,7 @@ message AddProcessResponse {
message CreateCheckpointRequest {
string id = 1; // ID of container
Checkpoint checkpoint = 2; // Checkpoint configuration
string checkpointDir = 3; // Directory where checkpoints are stored
}
message CreateCheckpointResponse {
@ -108,6 +110,7 @@ message CreateCheckpointResponse {
message DeleteCheckpointRequest {
string id = 1; // ID of container
string name = 2; // Name of checkpoint
string checkpointDir = 3; // Directory where checkpoints are stored
}
message DeleteCheckpointResponse {
@ -115,6 +118,7 @@ message DeleteCheckpointResponse {
message ListCheckpointRequest {
string id = 1; // ID of container
string checkpointDir = 2; // Directory where checkpoints are stored
}
message Checkpoint {

View file

@ -36,31 +36,32 @@ type checkpoint struct {
type processState struct {
specs.ProcessSpec
Exec bool `json:"exec"`
Stdin string `json:"containerdStdin"`
Stdout string `json:"containerdStdout"`
Stderr string `json:"containerdStderr"`
RuntimeArgs []string `json:"runtimeArgs"`
NoPivotRoot bool `json:"noPivotRoot"`
Checkpoint string `json:"checkpoint"`
RootUID int `json:"rootUID"`
RootGID int `json:"rootGID"`
Exec bool `json:"exec"`
Stdin string `json:"containerdStdin"`
Stdout string `json:"containerdStdout"`
Stderr string `json:"containerdStderr"`
RuntimeArgs []string `json:"runtimeArgs"`
NoPivotRoot bool `json:"noPivotRoot"`
CheckpointPath string `json:"checkpoint"`
RootUID int `json:"rootUID"`
RootGID int `json:"rootGID"`
}
type process struct {
sync.WaitGroup
id string
bundle string
stdio *stdio
exec bool
containerPid int
checkpoint *checkpoint
shimIO *IO
stdinCloser io.Closer
console *os.File
consolePath string
state *processState
runtime string
id string
bundle string
stdio *stdio
exec bool
containerPid int
checkpoint *checkpoint
checkpointPath string
shimIO *IO
stdinCloser io.Closer
console *os.File
consolePath string
state *processState
runtime string
}
func newProcess(id, bundle, runtimeName string) (*process, error) {
@ -74,12 +75,13 @@ func newProcess(id, bundle, runtimeName string) (*process, error) {
return nil, err
}
p.state = s
if s.Checkpoint != "" {
cpt, err := loadCheckpoint(bundle, s.Checkpoint)
if s.CheckpointPath != "" {
cpt, err := loadCheckpoint(s.CheckpointPath)
if err != nil {
return nil, err
}
p.checkpoint = cpt
p.checkpointPath = s.CheckpointPath
}
if err := p.openIO(); err != nil {
return nil, err
@ -100,8 +102,8 @@ func loadProcess() (*processState, error) {
return &s, nil
}
func loadCheckpoint(bundle, name string) (*checkpoint, error) {
f, err := os.Open(filepath.Join(bundle, "checkpoints", name, "config.json"))
func loadCheckpoint(checkpointPath string) (*checkpoint, error) {
f, err := os.Open(filepath.Join(checkpointPath, "config.json"))
if err != nil {
return nil, err
}
@ -130,7 +132,7 @@ func (p *process) start() error {
)
} else if p.checkpoint != nil {
args = append(args, "restore",
"--image-path", filepath.Join(p.bundle, "checkpoints", p.checkpoint.Name),
"--image-path", filepath.Join(p.checkpointPath),
)
add := func(flags ...string) {
args = append(args, flags...)

View file

@ -35,6 +35,13 @@ var listCheckpointCommand = cli.Command{
Name: "list",
Usage: "list all checkpoints for a container",
Action: listCheckpoints,
Flags: []cli.Flag{
cli.StringFlag{
Name: "checkpoint-dir",
Value: "",
Usage: "path to checkpoint directory",
},
},
}
func listCheckpoints(context *cli.Context) {
@ -47,6 +54,7 @@ func listCheckpoints(context *cli.Context) {
}
resp, err := c.ListCheckpoint(netcontext.Background(), &types.ListCheckpointRequest{
Id: id,
CheckpointDir: context.String("checkpoint-dir"),
})
if err != nil {
fatal(err.Error(), 1)
@ -81,6 +89,11 @@ var createCheckpointCommand = cli.Command{
Name: "shell",
Usage: "checkpoint shell jobs",
},
cli.StringFlag{
Name: "checkpoint-dir",
Value: "",
Usage: "directory to store checkpoints",
},
},
Action: func(context *cli.Context) {
var (
@ -96,6 +109,7 @@ var createCheckpointCommand = cli.Command{
c := getClient(context)
if _, err := c.CreateCheckpoint(netcontext.Background(), &types.CreateCheckpointRequest{
Id: containerID,
CheckpointDir: context.String("checkpoint-dir"),
Checkpoint: &types.Checkpoint{
Name: name,
Exit: context.Bool("exit"),
@ -112,6 +126,13 @@ var createCheckpointCommand = cli.Command{
var deleteCheckpointCommand = cli.Command{
Name: "delete",
Usage: "delete a container's checkpoint",
Flags: []cli.Flag{
cli.StringFlag{
Name: "checkpoint-dir",
Value: "",
Usage: "path to checkpoint directory",
},
},
Action: func(context *cli.Context) {
var (
containerID = context.Args().Get(0)
@ -125,8 +146,9 @@ var deleteCheckpointCommand = cli.Command{
}
c := getClient(context)
if _, err := c.DeleteCheckpoint(netcontext.Background(), &types.DeleteCheckpointRequest{
Id: containerID,
Name: name,
Id: containerID,
Name: name,
CheckpointDir: context.String("checkpoint-dir"),
}); err != nil {
fatal(err.Error(), 1)
}

View file

@ -134,6 +134,11 @@ var startCommand = cli.Command{
Value: "",
Usage: "checkpoint to start the container from",
},
cli.StringFlag{
Name: "checkpoint-dir",
Value: "",
Usage: "path to checkpoint directory",
},
cli.BoolFlag{
Name: "attach,a",
Usage: "connect to the stdio of the container",
@ -177,14 +182,15 @@ var startCommand = cli.Command{
tty bool
c = getClient(context)
r = &types.CreateContainerRequest{
Id: id,
BundlePath: bpath,
Checkpoint: context.String("checkpoint"),
Stdin: s.stdin,
Stdout: s.stdout,
Stderr: s.stderr,
Labels: context.StringSlice("label"),
NoPivotRoot: context.Bool("no-pivot"),
Id: id,
BundlePath: bpath,
Checkpoint: context.String("checkpoint"),
CheckpointDir: context.String("checkpoint-dir"),
Stdin: s.stdin,
Stdout: s.stdout,
Stderr: s.stderr,
Labels: context.StringSlice("label"),
NoPivotRoot: context.Bool("no-pivot"),
}
)
restoreAndCloseStdin = func() {

View file

@ -22,7 +22,7 @@ type Container interface {
// Path returns the path to the bundle
Path() string
// Start starts the init process of the container
Start(checkpoint string, s Stdio) (Process, error)
Start(checkpointPath string, s Stdio) (Process, error)
// Exec starts another process in an existing container
Exec(string, specs.ProcessSpec, Stdio) (Process, error)
// Delete removes the container's state and any resources
@ -38,11 +38,11 @@ type Container interface {
// RemoveProcess removes the specified process from the container
RemoveProcess(string) error
// Checkpoints returns all the checkpoints for a container
Checkpoints() ([]Checkpoint, error)
Checkpoints(checkpointDir string) ([]Checkpoint, error)
// Checkpoint creates a new checkpoint
Checkpoint(Checkpoint) error
Checkpoint(checkpoint Checkpoint, checkpointDir string) error
// DeleteCheckpoint deletes the checkpoint for the provided name
DeleteCheckpoint(name string) error
DeleteCheckpoint(name string, checkpointDir string) error
// Labels are user provided labels for the container
Labels() []string
// Pids returns all pids inside the container
@ -290,8 +290,12 @@ func (c *container) Resume() error {
return nil
}
func (c *container) Checkpoints() ([]Checkpoint, error) {
dirs, err := ioutil.ReadDir(filepath.Join(c.bundle, "checkpoints"))
func (c *container) Checkpoints(checkpointDir string) ([]Checkpoint, error) {
if checkpointDir == "" {
checkpointDir = filepath.Join(c.bundle, "checkpoints")
}
dirs, err := ioutil.ReadDir(checkpointDir)
if err != nil {
return nil, err
}
@ -300,7 +304,7 @@ func (c *container) Checkpoints() ([]Checkpoint, error) {
if !d.IsDir() {
continue
}
path := filepath.Join(c.bundle, "checkpoints", d.Name(), "config.json")
path := filepath.Join(checkpointDir, d.Name(), "config.json")
data, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
@ -314,11 +318,16 @@ func (c *container) Checkpoints() ([]Checkpoint, error) {
return out, nil
}
func (c *container) Checkpoint(cpt Checkpoint) error {
if err := os.MkdirAll(filepath.Join(c.bundle, "checkpoints"), 0755); err != nil {
func (c *container) Checkpoint(cpt Checkpoint, checkpointDir string) error {
if checkpointDir == "" {
checkpointDir = filepath.Join(c.bundle, "checkpoints")
}
if err := os.MkdirAll(checkpointDir, 0755); err != nil {
return err
}
path := filepath.Join(c.bundle, "checkpoints", cpt.Name)
path := filepath.Join(checkpointDir, cpt.Name)
if err := os.Mkdir(path, 0755); err != nil {
return err
}
@ -360,11 +369,14 @@ func (c *container) Checkpoint(cpt Checkpoint) error {
return err
}
func (c *container) DeleteCheckpoint(name string) error {
return os.RemoveAll(filepath.Join(c.bundle, "checkpoints", name))
func (c *container) DeleteCheckpoint(name string, checkpointDir string) error {
if checkpointDir == "" {
checkpointDir = filepath.Join(c.bundle, "checkpoints")
}
return os.RemoveAll(filepath.Join(checkpointDir, name))
}
func (c *container) Start(checkpoint string, s Stdio) (Process, error) {
func (c *container) Start(checkpointPath string, s Stdio) (Process, error) {
processRoot := filepath.Join(c.root, c.id, InitProcessID)
if err := os.Mkdir(processRoot, 0755); err != nil {
return nil, err
@ -381,7 +393,7 @@ func (c *container) Start(checkpoint string, s Stdio) (Process, error) {
return nil, err
}
config := &processConfig{
checkpoint: checkpoint,
checkpoint: checkpointPath,
root: processRoot,
id: InitProcessID,
c: c,

View file

@ -6,8 +6,9 @@ import "github.com/docker/containerd/runtime"
type CreateCheckpointTask struct {
baseTask
ID string
Checkpoint *runtime.Checkpoint
ID string
CheckpointDir string
Checkpoint *runtime.Checkpoint
}
func (s *Supervisor) createCheckpoint(t *CreateCheckpointTask) error {
@ -15,13 +16,14 @@ func (s *Supervisor) createCheckpoint(t *CreateCheckpointTask) error {
if !ok {
return ErrContainerNotFound
}
return i.container.Checkpoint(*t.Checkpoint)
return i.container.Checkpoint(*t.Checkpoint, t.CheckpointDir)
}
type DeleteCheckpointTask struct {
baseTask
ID string
Checkpoint *runtime.Checkpoint
ID string
CheckpointDir string
Checkpoint *runtime.Checkpoint
}
func (s *Supervisor) deleteCheckpoint(t *DeleteCheckpointTask) error {
@ -29,5 +31,5 @@ func (s *Supervisor) deleteCheckpoint(t *DeleteCheckpointTask) error {
if !ok {
return ErrContainerNotFound
}
return i.container.DeleteCheckpoint(t.Checkpoint.Name)
return i.container.DeleteCheckpoint(t.Checkpoint.Name, t.CheckpointDir)
}

View file

@ -1,6 +1,7 @@
package supervisor
import (
"path/filepath"
"time"
"github.com/docker/containerd/runtime"
@ -17,6 +18,7 @@ type StartTask struct {
Labels []string
NoPivotRoot bool
Checkpoint *runtime.Checkpoint
CheckpointDir string
Runtime string
RuntimeArgs []string
}
@ -56,7 +58,7 @@ func (s *Supervisor) start(t *StartTask) error {
Stderr: t.Stderr,
}
if t.Checkpoint != nil {
task.Checkpoint = t.Checkpoint.Name
task.CheckpointPath = filepath.Join(t.CheckpointDir, t.Checkpoint.Name)
}
s.startTasks <- task

View file

@ -13,13 +13,13 @@ type Worker interface {
}
type startTask struct {
Container runtime.Container
Checkpoint string
Stdin string
Stdout string
Stderr string
Err chan error
StartResponse chan StartResponse
Container runtime.Container
CheckpointPath string
Stdin string
Stdout string
Stderr string
Err chan error
StartResponse chan StartResponse
}
func NewWorker(s *Supervisor, wg *sync.WaitGroup) Worker {
@ -38,7 +38,7 @@ func (w *worker) Start() {
defer w.wg.Done()
for t := range w.s.startTasks {
started := time.Now()
process, err := t.Container.Start(t.Checkpoint, runtime.NewStdio(t.Stdin, t.Stdout, t.Stderr))
process, err := t.Container.Start(t.CheckpointPath, runtime.NewStdio(t.Stdin, t.Stdout, t.Stderr))
if err != nil {
logrus.WithFields(logrus.Fields{
"error": err,