cache: add more metadata values to snapshots
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>docker-18.09
parent
24eeb9d2ee
commit
38ac00090c
|
@ -29,8 +29,8 @@ import math "math"
|
|||
import _ "github.com/gogo/protobuf/gogoproto"
|
||||
import _ "github.com/golang/protobuf/ptypes/timestamp"
|
||||
|
||||
import github_com_opencontainers_go_digest "github.com/opencontainers/go-digest"
|
||||
import time "time"
|
||||
import github_com_opencontainers_go_digest "github.com/opencontainers/go-digest"
|
||||
|
||||
import (
|
||||
context "golang.org/x/net/context"
|
||||
|
@ -54,6 +54,7 @@ var _ = time.Kitchen
|
|||
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
|
||||
|
||||
type DiskUsageRequest struct {
|
||||
Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
|
||||
}
|
||||
|
||||
func (m *DiskUsageRequest) Reset() { *m = DiskUsageRequest{} }
|
||||
|
@ -61,6 +62,13 @@ func (m *DiskUsageRequest) String() string { return proto.CompactText
|
|||
func (*DiskUsageRequest) ProtoMessage() {}
|
||||
func (*DiskUsageRequest) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{0} }
|
||||
|
||||
func (m *DiskUsageRequest) GetFilter() string {
|
||||
if m != nil {
|
||||
return m.Filter
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type DiskUsageResponse struct {
|
||||
Record []*UsageRecord `protobuf:"bytes,1,rep,name=record" json:"record,omitempty"`
|
||||
}
|
||||
|
@ -82,6 +90,11 @@ type UsageRecord struct {
|
|||
Mutable bool `protobuf:"varint,2,opt,name=Mutable,proto3" json:"Mutable,omitempty"`
|
||||
InUse bool `protobuf:"varint,3,opt,name=InUse,proto3" json:"InUse,omitempty"`
|
||||
Size_ int64 `protobuf:"varint,4,opt,name=Size,proto3" json:"Size,omitempty"`
|
||||
Parent string `protobuf:"bytes,5,opt,name=Parent,proto3" json:"Parent,omitempty"`
|
||||
CreatedAt time.Time `protobuf:"bytes,6,opt,name=CreatedAt,stdtime" json:"CreatedAt"`
|
||||
LastUsedAt *time.Time `protobuf:"bytes,7,opt,name=LastUsedAt,stdtime" json:"LastUsedAt,omitempty"`
|
||||
UsageCount int64 `protobuf:"varint,8,opt,name=UsageCount,proto3" json:"UsageCount,omitempty"`
|
||||
Description string `protobuf:"bytes,9,opt,name=Description,proto3" json:"Description,omitempty"`
|
||||
}
|
||||
|
||||
func (m *UsageRecord) Reset() { *m = UsageRecord{} }
|
||||
|
@ -117,6 +130,41 @@ func (m *UsageRecord) GetSize_() int64 {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (m *UsageRecord) GetParent() string {
|
||||
if m != nil {
|
||||
return m.Parent
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *UsageRecord) GetCreatedAt() time.Time {
|
||||
if m != nil {
|
||||
return m.CreatedAt
|
||||
}
|
||||
return time.Time{}
|
||||
}
|
||||
|
||||
func (m *UsageRecord) GetLastUsedAt() *time.Time {
|
||||
if m != nil {
|
||||
return m.LastUsedAt
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *UsageRecord) GetUsageCount() int64 {
|
||||
if m != nil {
|
||||
return m.UsageCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *UsageRecord) GetDescription() string {
|
||||
if m != nil {
|
||||
return m.Description
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type SolveRequest struct {
|
||||
Ref string `protobuf:"bytes,1,opt,name=Ref,proto3" json:"Ref,omitempty"`
|
||||
Definition [][]byte `protobuf:"bytes,2,rep,name=Definition" json:"Definition,omitempty"`
|
||||
|
@ -655,6 +703,12 @@ func (m *DiskUsageRequest) MarshalTo(dAtA []byte) (int, error) {
|
|||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Filter) > 0 {
|
||||
dAtA[i] = 0xa
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(len(m.Filter)))
|
||||
i += copy(dAtA[i:], m.Filter)
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
|
@ -734,6 +788,41 @@ func (m *UsageRecord) MarshalTo(dAtA []byte) (int, error) {
|
|||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(m.Size_))
|
||||
}
|
||||
if len(m.Parent) > 0 {
|
||||
dAtA[i] = 0x2a
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(len(m.Parent)))
|
||||
i += copy(dAtA[i:], m.Parent)
|
||||
}
|
||||
dAtA[i] = 0x32
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt)))
|
||||
n1, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n1
|
||||
if m.LastUsedAt != nil {
|
||||
dAtA[i] = 0x3a
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastUsedAt)))
|
||||
n2, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastUsedAt, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n2
|
||||
}
|
||||
if m.UsageCount != 0 {
|
||||
dAtA[i] = 0x40
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(m.UsageCount))
|
||||
}
|
||||
if len(m.Description) > 0 {
|
||||
dAtA[i] = 0x4a
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(len(m.Description)))
|
||||
i += copy(dAtA[i:], m.Description)
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
|
@ -962,21 +1051,21 @@ func (m *Vertex) MarshalTo(dAtA []byte) (int, error) {
|
|||
dAtA[i] = 0x2a
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Started)))
|
||||
n1, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Started, dAtA[i:])
|
||||
n3, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Started, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n1
|
||||
i += n3
|
||||
}
|
||||
if m.Completed != nil {
|
||||
dAtA[i] = 0x32
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Completed)))
|
||||
n2, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i:])
|
||||
n4, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n2
|
||||
i += n4
|
||||
}
|
||||
if len(m.Error) > 0 {
|
||||
dAtA[i] = 0x3a
|
||||
|
@ -1039,30 +1128,30 @@ func (m *VertexStatus) MarshalTo(dAtA []byte) (int, error) {
|
|||
dAtA[i] = 0x32
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp)))
|
||||
n3, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:])
|
||||
n5, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n3
|
||||
i += n5
|
||||
if m.Started != nil {
|
||||
dAtA[i] = 0x3a
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Started)))
|
||||
n4, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Started, dAtA[i:])
|
||||
n6, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Started, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n4
|
||||
i += n6
|
||||
}
|
||||
if m.Completed != nil {
|
||||
dAtA[i] = 0x42
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Completed)))
|
||||
n5, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i:])
|
||||
n7, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n5
|
||||
i += n7
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
@ -1091,11 +1180,11 @@ func (m *VertexLog) MarshalTo(dAtA []byte) (int, error) {
|
|||
dAtA[i] = 0x12
|
||||
i++
|
||||
i = encodeVarintControl(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp)))
|
||||
n6, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:])
|
||||
n8, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n6
|
||||
i += n8
|
||||
if m.Stream != 0 {
|
||||
dAtA[i] = 0x18
|
||||
i++
|
||||
|
@ -1164,6 +1253,10 @@ func encodeVarintControl(dAtA []byte, offset int, v uint64) int {
|
|||
func (m *DiskUsageRequest) Size() (n int) {
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.Filter)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovControl(uint64(l))
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
|
@ -1195,6 +1288,23 @@ func (m *UsageRecord) Size() (n int) {
|
|||
if m.Size_ != 0 {
|
||||
n += 1 + sovControl(uint64(m.Size_))
|
||||
}
|
||||
l = len(m.Parent)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovControl(uint64(l))
|
||||
}
|
||||
l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt)
|
||||
n += 1 + l + sovControl(uint64(l))
|
||||
if m.LastUsedAt != nil {
|
||||
l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastUsedAt)
|
||||
n += 1 + l + sovControl(uint64(l))
|
||||
}
|
||||
if m.UsageCount != 0 {
|
||||
n += 1 + sovControl(uint64(m.UsageCount))
|
||||
}
|
||||
l = len(m.Description)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovControl(uint64(l))
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
|
@ -1420,6 +1530,35 @@ func (m *DiskUsageRequest) Unmarshal(dAtA []byte) error {
|
|||
return fmt.Errorf("proto: DiskUsageRequest: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowControl
|
||||
}
|
||||
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 ErrInvalidLengthControl
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Filter = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipControl(dAtA[iNdEx:])
|
||||
|
@ -1639,6 +1778,146 @@ func (m *UsageRecord) Unmarshal(dAtA []byte) error {
|
|||
break
|
||||
}
|
||||
}
|
||||
case 5:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Parent", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowControl
|
||||
}
|
||||
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 ErrInvalidLengthControl
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Parent = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 6:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowControl
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthControl
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 7:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field LastUsedAt", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowControl
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthControl
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.LastUsedAt == nil {
|
||||
m.LastUsedAt = new(time.Time)
|
||||
}
|
||||
if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.LastUsedAt, dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 8:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field UsageCount", wireType)
|
||||
}
|
||||
m.UsageCount = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowControl
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.UsageCount |= (int64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 9:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowControl
|
||||
}
|
||||
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 ErrInvalidLengthControl
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Description = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipControl(dAtA[iNdEx:])
|
||||
|
@ -3145,58 +3424,64 @@ var (
|
|||
func init() { proto.RegisterFile("control.proto", fileDescriptorControl) }
|
||||
|
||||
var fileDescriptorControl = []byte{
|
||||
// 844 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x55, 0xdd, 0x8e, 0xdb, 0x44,
|
||||
0x14, 0x66, 0xec, 0xac, 0x93, 0x9c, 0xcd, 0x56, 0xcb, 0x08, 0x55, 0x96, 0x11, 0x49, 0x30, 0x37,
|
||||
0x51, 0xa5, 0x7a, 0xdb, 0x00, 0x12, 0x5a, 0x24, 0x04, 0x21, 0x95, 0xd8, 0x15, 0x7b, 0x33, 0xdb,
|
||||
0xc2, 0xb5, 0x93, 0x9c, 0x75, 0xad, 0x75, 0x3c, 0x61, 0x66, 0x1c, 0x6d, 0x78, 0x0a, 0x78, 0x0d,
|
||||
0x6e, 0x79, 0x06, 0x44, 0x2f, 0xb9, 0xe6, 0xa2, 0xa0, 0x7d, 0x00, 0x9e, 0x01, 0xcd, 0x8c, 0x9d,
|
||||
0x7a, 0x9b, 0x4d, 0x7f, 0xd2, 0x2b, 0xcf, 0x19, 0x7f, 0xe7, 0xef, 0x3b, 0x3f, 0x03, 0x07, 0x53,
|
||||
0x9e, 0x2b, 0xc1, 0xb3, 0x68, 0x21, 0xb8, 0xe2, 0xf4, 0x70, 0xce, 0x27, 0xab, 0x68, 0x52, 0xa4,
|
||||
0xd9, 0xec, 0x32, 0x55, 0xd1, 0xf2, 0x61, 0x70, 0x3f, 0x49, 0xd5, 0xd3, 0x62, 0x12, 0x4d, 0xf9,
|
||||
0xfc, 0x28, 0xe1, 0x09, 0x3f, 0x32, 0xc0, 0x49, 0x71, 0x61, 0x24, 0x23, 0x98, 0x93, 0x35, 0x10,
|
||||
0xf4, 0x12, 0xce, 0x93, 0x0c, 0x5f, 0xa0, 0x54, 0x3a, 0x47, 0xa9, 0xe2, 0xf9, 0xc2, 0x02, 0x42,
|
||||
0x0a, 0x87, 0xe3, 0x54, 0x5e, 0x3e, 0x91, 0x71, 0x82, 0x0c, 0x7f, 0x2a, 0x50, 0xaa, 0xf0, 0x14,
|
||||
0xde, 0xaf, 0xdd, 0xc9, 0x05, 0xcf, 0x25, 0xd2, 0xcf, 0xc1, 0x13, 0x38, 0xe5, 0x62, 0xe6, 0x93,
|
||||
0xbe, 0x3b, 0xd8, 0x1f, 0x7e, 0x14, 0xbd, 0x1c, 0x5b, 0x54, 0x2a, 0x68, 0x10, 0x2b, 0xc1, 0x61,
|
||||
0x0c, 0xfb, 0xb5, 0x6b, 0x7a, 0x07, 0x9c, 0x93, 0xb1, 0x4f, 0xfa, 0x64, 0xd0, 0x66, 0xce, 0xc9,
|
||||
0x98, 0xfa, 0xd0, 0x3c, 0x2b, 0x54, 0x3c, 0xc9, 0xd0, 0x77, 0xfa, 0x64, 0xd0, 0x62, 0x95, 0x48,
|
||||
0x3f, 0x80, 0xbd, 0x93, 0xfc, 0x89, 0x44, 0xdf, 0x35, 0xf7, 0x56, 0xa0, 0x14, 0x1a, 0xe7, 0xe9,
|
||||
0xcf, 0xe8, 0x37, 0xfa, 0x64, 0xe0, 0x32, 0x73, 0x0e, 0x7f, 0x75, 0xa0, 0x73, 0xce, 0xb3, 0x65,
|
||||
0x15, 0x3f, 0x3d, 0x04, 0x97, 0xe1, 0x45, 0xe9, 0x45, 0x1f, 0x69, 0x17, 0x60, 0x8c, 0x17, 0x69,
|
||||
0x9e, 0xaa, 0x94, 0xe7, 0xbe, 0xd3, 0x77, 0x07, 0x1d, 0x56, 0xbb, 0xa1, 0x01, 0xb4, 0x1e, 0x5d,
|
||||
0x2d, 0xb8, 0x50, 0x28, 0x8c, 0xbf, 0x36, 0x5b, 0xcb, 0xf4, 0x47, 0x38, 0xa8, 0xce, 0xdf, 0x28,
|
||||
0x25, 0xa4, 0xdf, 0x30, 0xf9, 0x3f, 0xdc, 0xcc, 0xbf, 0x1e, 0x44, 0x74, 0x43, 0xe7, 0x51, 0xae,
|
||||
0xc4, 0x8a, 0xdd, 0xb4, 0xa3, 0x73, 0x3f, 0x47, 0x29, 0x75, 0x44, 0x7b, 0xc6, 0x67, 0x25, 0x06,
|
||||
0x5f, 0x03, 0xdd, 0x54, 0xd7, 0x69, 0x5d, 0xe2, 0xaa, 0x4a, 0xeb, 0x12, 0x57, 0x9a, 0xa3, 0x65,
|
||||
0x9c, 0x15, 0x96, 0xbb, 0x36, 0xb3, 0xc2, 0xb1, 0xf3, 0x05, 0x09, 0xbf, 0x84, 0x83, 0x32, 0x9a,
|
||||
0xb2, 0x7c, 0xf7, 0xc0, 0x5d, 0xaa, 0xab, 0xb2, 0x76, 0xfe, 0x66, 0xec, 0x3f, 0xa0, 0x50, 0x78,
|
||||
0xc5, 0x34, 0x28, 0xfc, 0x18, 0x0e, 0xce, 0x55, 0xac, 0x0a, 0xb9, 0x95, 0xd0, 0xf0, 0x77, 0x02,
|
||||
0x77, 0x2a, 0x4c, 0xe9, 0xe1, 0x33, 0x68, 0x2d, 0x8d, 0x11, 0x94, 0xaf, 0x75, 0xb3, 0x46, 0xd2,
|
||||
0x63, 0x68, 0x49, 0x63, 0x07, 0xa5, 0xa9, 0xcb, 0xfe, 0xb0, 0xbb, 0x4d, 0xab, 0xf4, 0xb7, 0xc6,
|
||||
0xd3, 0x23, 0x68, 0x64, 0x3c, 0x91, 0xbe, 0x6b, 0xf4, 0x3e, 0xdc, 0xa6, 0xf7, 0x3d, 0x4f, 0x98,
|
||||
0x01, 0x86, 0xbf, 0xb9, 0xe0, 0xd9, 0x3b, 0x7a, 0x0a, 0xde, 0x2c, 0x4d, 0x50, 0x2a, 0x9b, 0xd5,
|
||||
0x68, 0xf8, 0xec, 0x79, 0xef, 0xbd, 0xbf, 0x9f, 0xf7, 0xee, 0xd5, 0xe6, 0x8b, 0x2f, 0x30, 0xd7,
|
||||
0xf3, 0x18, 0xa7, 0x39, 0x0a, 0x79, 0x94, 0xf0, 0xfb, 0x56, 0x25, 0x1a, 0x9b, 0x0f, 0x2b, 0x2d,
|
||||
0x68, 0x5b, 0x69, 0xbe, 0x28, 0x94, 0xcd, 0x60, 0x47, 0x5b, 0xd6, 0x82, 0x6e, 0xf0, 0x3c, 0x9e,
|
||||
0x63, 0xd9, 0x85, 0xe6, 0x4c, 0xef, 0x82, 0x37, 0x8d, 0xa7, 0x4f, 0x71, 0x66, 0xda, 0xbe, 0xc5,
|
||||
0x4a, 0x89, 0x1e, 0x43, 0x53, 0xaa, 0x58, 0x28, 0x9c, 0x99, 0x06, 0xda, 0x1f, 0x06, 0x91, 0x1d,
|
||||
0xf7, 0xa8, 0x1a, 0xf7, 0xe8, 0x71, 0x35, 0xee, 0xa3, 0xc6, 0x2f, 0xff, 0xf4, 0x08, 0xab, 0x14,
|
||||
0xe8, 0x57, 0xd0, 0x9e, 0xf2, 0xf9, 0x22, 0x43, 0xad, 0xed, 0xbd, 0xa1, 0xf6, 0x0b, 0x15, 0xdd,
|
||||
0x7a, 0x28, 0x04, 0x17, 0x7e, 0xd3, 0xb6, 0x9e, 0x11, 0x34, 0x13, 0x8b, 0x58, 0x60, 0xae, 0xfc,
|
||||
0xd6, 0xee, 0xac, 0x5a, 0x0b, 0xe1, 0x7f, 0x0e, 0x74, 0xea, 0x85, 0xdf, 0xd8, 0x1d, 0xa7, 0xe0,
|
||||
0xd9, 0x36, 0xb2, 0xed, 0xbf, 0x9b, 0x33, 0x6b, 0xe1, 0x56, 0xda, 0x7d, 0x68, 0x4e, 0x0b, 0x61,
|
||||
0xb2, 0xb1, 0xeb, 0xa6, 0x12, 0x75, 0xf2, 0x8a, 0xab, 0x38, 0x33, 0xb4, 0xbb, 0xcc, 0x0a, 0x74,
|
||||
0x04, 0xed, 0xf5, 0x76, 0x7d, 0x03, 0x4a, 0x5b, 0x3a, 0x5c, 0x4b, 0xeb, 0x5a, 0xad, 0x5e, 0xd2,
|
||||
0xe6, 0x3b, 0x95, 0xb4, 0xf5, 0xd6, 0x25, 0x0d, 0xff, 0x20, 0xd0, 0x5e, 0x4f, 0x4c, 0x8d, 0x5d,
|
||||
0xf2, 0xce, 0xec, 0xde, 0x60, 0xc6, 0xd9, 0x8d, 0x99, 0xbb, 0xe0, 0x49, 0x25, 0x30, 0x9e, 0x9b,
|
||||
0x1a, 0xb9, 0xac, 0x94, 0xf4, 0x6e, 0x9a, 0xcb, 0xc4, 0x54, 0xa8, 0xc3, 0xf4, 0x31, 0x0c, 0xa1,
|
||||
0x33, 0x5a, 0x29, 0x94, 0x67, 0x28, 0xf5, 0xcb, 0xa3, 0x6b, 0x3b, 0x8b, 0x55, 0x6c, 0xf2, 0xe8,
|
||||
0x30, 0x73, 0x1e, 0xfe, 0xe9, 0x40, 0xf3, 0x5b, 0xfb, 0xd4, 0xd2, 0xc7, 0xd0, 0x5e, 0x3f, 0x77,
|
||||
0x34, 0xdc, 0xdc, 0x22, 0x2f, 0xbf, 0x8f, 0xc1, 0x27, 0xaf, 0xc4, 0x94, 0xeb, 0xf0, 0x3b, 0xd8,
|
||||
0x33, 0x1b, 0x98, 0x76, 0x5f, 0xfd, 0x50, 0x04, 0xbd, 0xad, 0xff, 0x4b, 0x4b, 0x67, 0xe0, 0x95,
|
||||
0x13, 0x70, 0x1b, 0xb4, 0xbe, 0xa8, 0x83, 0xfe, 0x76, 0x80, 0x35, 0xf6, 0x80, 0xd0, 0xb3, 0xf5,
|
||||
0xb3, 0x73, 0x5b, 0x68, 0x75, 0xe6, 0x82, 0xd7, 0xfc, 0x1f, 0x90, 0x07, 0x64, 0xd4, 0x79, 0x76,
|
||||
0xdd, 0x25, 0x7f, 0x5d, 0x77, 0xc9, 0xbf, 0xd7, 0x5d, 0x32, 0xf1, 0x4c, 0x39, 0x3f, 0xfd, 0x3f,
|
||||
0x00, 0x00, 0xff, 0xff, 0x03, 0x3d, 0x42, 0x9c, 0xc8, 0x08, 0x00, 0x00,
|
||||
// 929 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x56, 0xc1, 0x6e, 0xdb, 0x46,
|
||||
0x10, 0x2d, 0x49, 0x99, 0x92, 0x46, 0x72, 0xe0, 0x2e, 0x8a, 0x80, 0x50, 0x51, 0x49, 0x65, 0x2f,
|
||||
0x82, 0x81, 0xd0, 0x89, 0xda, 0x02, 0x85, 0x0b, 0x14, 0x89, 0xac, 0x00, 0xb5, 0x11, 0x03, 0xc5,
|
||||
0x3a, 0x6e, 0xcf, 0x94, 0x34, 0x66, 0x08, 0x53, 0x5c, 0x75, 0x77, 0x29, 0x58, 0xfd, 0x8a, 0xf6,
|
||||
0x37, 0x7a, 0xed, 0x17, 0xf4, 0x50, 0x34, 0xc7, 0x9e, 0x7b, 0x48, 0x0b, 0x7f, 0x40, 0xbf, 0xa1,
|
||||
0xd8, 0x5d, 0x92, 0xa6, 0x23, 0x2b, 0x4e, 0x9c, 0x93, 0x76, 0x56, 0x33, 0x6f, 0x77, 0xde, 0x9b,
|
||||
0x99, 0x25, 0x6c, 0x4f, 0x59, 0x2a, 0x39, 0x4b, 0x82, 0x05, 0x67, 0x92, 0x91, 0x9d, 0x39, 0x9b,
|
||||
0xac, 0x82, 0x49, 0x16, 0x27, 0xb3, 0xf3, 0x58, 0x06, 0xcb, 0x47, 0x9d, 0x07, 0x51, 0x2c, 0x5f,
|
||||
0x64, 0x93, 0x60, 0xca, 0xe6, 0x7b, 0x11, 0x8b, 0xd8, 0x9e, 0x76, 0x9c, 0x64, 0x67, 0xda, 0xd2,
|
||||
0x86, 0x5e, 0x19, 0x80, 0x4e, 0x2f, 0x62, 0x2c, 0x4a, 0xf0, 0xca, 0x4b, 0xc6, 0x73, 0x14, 0x32,
|
||||
0x9c, 0x2f, 0x8c, 0x83, 0xbf, 0x0b, 0x3b, 0xe3, 0x58, 0x9c, 0x9f, 0x8a, 0x30, 0x42, 0x8a, 0x3f,
|
||||
0x66, 0x28, 0x24, 0xb9, 0x0f, 0xee, 0x59, 0x9c, 0x48, 0xe4, 0x9e, 0xd5, 0xb7, 0x06, 0x4d, 0x9a,
|
||||
0x5b, 0xfe, 0x11, 0x7c, 0x58, 0xf1, 0x15, 0x0b, 0x96, 0x0a, 0x24, 0x5f, 0x82, 0xcb, 0x71, 0xca,
|
||||
0xf8, 0xcc, 0xb3, 0xfa, 0xce, 0xa0, 0x35, 0xfc, 0x24, 0x78, 0xfd, 0xce, 0x41, 0x1e, 0xa0, 0x9c,
|
||||
0x68, 0xee, 0xec, 0xff, 0x6e, 0x43, 0xab, 0xb2, 0x4f, 0xee, 0x81, 0x7d, 0x38, 0xce, 0xcf, 0xb3,
|
||||
0x0f, 0xc7, 0xc4, 0x83, 0xfa, 0x71, 0x26, 0xc3, 0x49, 0x82, 0x9e, 0xdd, 0xb7, 0x06, 0x0d, 0x5a,
|
||||
0x98, 0xe4, 0x23, 0xd8, 0x3a, 0x4c, 0x4f, 0x05, 0x7a, 0x8e, 0xde, 0x37, 0x06, 0x21, 0x50, 0x3b,
|
||||
0x89, 0x7f, 0x42, 0xaf, 0xd6, 0xb7, 0x06, 0x0e, 0xd5, 0x6b, 0x95, 0xc7, 0x77, 0x21, 0xc7, 0x54,
|
||||
0x7a, 0x5b, 0x26, 0x0f, 0x63, 0x91, 0x11, 0x34, 0x0f, 0x38, 0x86, 0x12, 0x67, 0x4f, 0xa4, 0xe7,
|
||||
0xf6, 0xad, 0x41, 0x6b, 0xd8, 0x09, 0x0c, 0x51, 0x41, 0x41, 0x54, 0xf0, 0xbc, 0x20, 0x6a, 0xd4,
|
||||
0x78, 0xf9, 0xaa, 0xf7, 0xc1, 0xcf, 0xff, 0xf4, 0x2c, 0x7a, 0x15, 0x46, 0x1e, 0x03, 0x3c, 0x0b,
|
||||
0x85, 0x3c, 0x15, 0x1a, 0xa4, 0x7e, 0x2b, 0x48, 0x4d, 0x03, 0x54, 0x62, 0x48, 0x17, 0x40, 0x13,
|
||||
0x70, 0xc0, 0xb2, 0x54, 0x7a, 0x0d, 0x7d, 0xef, 0xca, 0x0e, 0xe9, 0x43, 0x6b, 0x8c, 0x62, 0xca,
|
||||
0xe3, 0x85, 0x8c, 0x59, 0xea, 0x35, 0x75, 0x0a, 0xd5, 0x2d, 0xff, 0x17, 0x1b, 0xda, 0x27, 0x2c,
|
||||
0x59, 0x96, 0xc2, 0xed, 0x80, 0x43, 0xf1, 0x2c, 0x67, 0x51, 0x2d, 0xd5, 0x21, 0x63, 0x3c, 0x8b,
|
||||
0xd3, 0x58, 0x63, 0xd8, 0x7d, 0x67, 0xd0, 0xa6, 0x95, 0x1d, 0xd2, 0x81, 0xc6, 0xd3, 0x8b, 0x05,
|
||||
0xe3, 0x4a, 0x6c, 0x47, 0x87, 0x95, 0x36, 0xf9, 0x01, 0xb6, 0x8b, 0xf5, 0x13, 0x29, 0xb9, 0xf0,
|
||||
0x6a, 0x5a, 0xe0, 0x47, 0xeb, 0x02, 0x57, 0x2f, 0x11, 0x5c, 0x8b, 0x79, 0x9a, 0x4a, 0xbe, 0xa2,
|
||||
0xd7, 0x71, 0x94, 0xb6, 0x27, 0x28, 0x84, 0xba, 0x91, 0x11, 0xa6, 0x30, 0x3b, 0x8f, 0x81, 0xac,
|
||||
0x87, 0xab, 0xb4, 0xce, 0x71, 0x55, 0xa4, 0x75, 0x8e, 0x2b, 0x55, 0x03, 0xcb, 0x30, 0xc9, 0x4c,
|
||||
0x6d, 0x34, 0xa9, 0x31, 0xf6, 0xed, 0xaf, 0x2c, 0xff, 0x6b, 0xd8, 0xce, 0x6f, 0x93, 0xd7, 0xe7,
|
||||
0x2e, 0x38, 0x4b, 0x79, 0x91, 0x17, 0xa7, 0xb7, 0x7e, 0xf7, 0xef, 0x91, 0x4b, 0xbc, 0xa0, 0xca,
|
||||
0xc9, 0xff, 0x14, 0xb6, 0x4f, 0x64, 0x28, 0x33, 0xb1, 0x91, 0x50, 0xff, 0x37, 0x0b, 0xee, 0x15,
|
||||
0x3e, 0xf9, 0x09, 0x5f, 0x40, 0x63, 0xa9, 0x41, 0x50, 0xdc, 0x7a, 0x4c, 0xe9, 0x49, 0xf6, 0xa1,
|
||||
0x21, 0x34, 0x0e, 0x0a, 0xad, 0x4b, 0x6b, 0xd8, 0xdd, 0x14, 0x95, 0x9f, 0x57, 0xfa, 0x93, 0x3d,
|
||||
0xa8, 0x25, 0x2c, 0x12, 0x9e, 0xa3, 0xe3, 0x3e, 0xde, 0x14, 0xf7, 0x8c, 0x45, 0x54, 0x3b, 0xfa,
|
||||
0xbf, 0x3a, 0xe0, 0x9a, 0x3d, 0x72, 0x04, 0xee, 0x2c, 0x8e, 0x50, 0x48, 0x93, 0xd5, 0x68, 0xa8,
|
||||
0xaa, 0xfb, 0xef, 0x57, 0xbd, 0xdd, 0xca, 0x60, 0x61, 0x0b, 0x4c, 0xd5, 0x20, 0x0a, 0xe3, 0x14,
|
||||
0xb9, 0xd8, 0x8b, 0xd8, 0x03, 0x13, 0x12, 0x8c, 0xf5, 0x0f, 0xcd, 0x11, 0x14, 0x56, 0x9c, 0x2e,
|
||||
0x32, 0x69, 0x32, 0xb8, 0x23, 0x96, 0x41, 0x50, 0x0d, 0x9c, 0x86, 0x73, 0xcc, 0xab, 0x50, 0xaf,
|
||||
0x55, 0x03, 0x4f, 0xc3, 0xe9, 0x0b, 0x9c, 0xe9, 0xb6, 0x6e, 0xd0, 0xdc, 0x22, 0xfb, 0x50, 0x17,
|
||||
0x32, 0xe4, 0x12, 0x67, 0xba, 0x80, 0xde, 0xa6, 0xf3, 0x8a, 0x00, 0xf2, 0x0d, 0x34, 0xa7, 0x6c,
|
||||
0xbe, 0x48, 0x50, 0x45, 0xbb, 0x6f, 0x19, 0x7d, 0x15, 0xa2, 0x4a, 0x0f, 0x39, 0x67, 0x5c, 0xf7,
|
||||
0x7c, 0x93, 0x1a, 0x43, 0x31, 0xb1, 0x30, 0xa3, 0xa6, 0x71, 0x77, 0x56, 0x0d, 0x82, 0xff, 0x9f,
|
||||
0x0d, 0xed, 0xaa, 0xf0, 0x6b, 0xb3, 0xf1, 0x08, 0x5c, 0x53, 0x46, 0xa6, 0xfc, 0xef, 0x76, 0x98,
|
||||
0x41, 0xb8, 0x91, 0x76, 0x0f, 0xea, 0xd3, 0x8c, 0xeb, 0x6c, 0xcc, 0x38, 0x2d, 0x4c, 0x95, 0xbc,
|
||||
0x64, 0x32, 0x4c, 0x34, 0xed, 0x0e, 0x35, 0x86, 0x9a, 0xa7, 0xe5, 0xb3, 0xf2, 0x6e, 0xf3, 0xb4,
|
||||
0x0c, 0xab, 0x4a, 0x5a, 0x7f, 0x2f, 0x49, 0x1b, 0xef, 0x2c, 0xa9, 0xff, 0x87, 0x05, 0xcd, 0xb2,
|
||||
0x63, 0x2a, 0xec, 0x5a, 0xef, 0xcd, 0xee, 0x35, 0x66, 0xec, 0xbb, 0x31, 0x73, 0x1f, 0x5c, 0x21,
|
||||
0x39, 0x86, 0x73, 0xad, 0x91, 0x43, 0x73, 0x4b, 0xcd, 0xa6, 0xb9, 0x88, 0xb4, 0x42, 0x6d, 0xaa,
|
||||
0x96, 0xbe, 0x0f, 0xed, 0xd1, 0x4a, 0xa2, 0x38, 0x46, 0xa1, 0x9e, 0x11, 0xa5, 0xed, 0x2c, 0x94,
|
||||
0xa1, 0xce, 0xa3, 0x4d, 0xf5, 0x7a, 0xf8, 0xa7, 0x0d, 0xf5, 0x03, 0xf3, 0x8d, 0x41, 0x9e, 0x43,
|
||||
0xb3, 0x7c, 0xcf, 0x89, 0xbf, 0x3e, 0x45, 0x5e, 0xff, 0x30, 0xe8, 0x7c, 0xf6, 0x46, 0x9f, 0x7c,
|
||||
0x1c, 0x7e, 0x0b, 0x5b, 0x7a, 0x02, 0x93, 0xee, 0x9b, 0x1f, 0x8a, 0x4e, 0x6f, 0xe3, 0xff, 0x39,
|
||||
0xd2, 0x31, 0xb8, 0x79, 0x07, 0xdc, 0xe4, 0x5a, 0x1d, 0xd4, 0x9d, 0xfe, 0x66, 0x07, 0x03, 0xf6,
|
||||
0xd0, 0x22, 0xc7, 0xe5, 0xb3, 0x73, 0xd3, 0xd5, 0xaa, 0xcc, 0x75, 0x6e, 0xf9, 0x7f, 0x60, 0x3d,
|
||||
0xb4, 0x46, 0xed, 0x97, 0x97, 0x5d, 0xeb, 0xaf, 0xcb, 0xae, 0xf5, 0xef, 0x65, 0xd7, 0x9a, 0xb8,
|
||||
0x5a, 0xce, 0xcf, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xae, 0x93, 0xb8, 0x49, 0xc1, 0x09, 0x00,
|
||||
0x00,
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ service Control {
|
|||
}
|
||||
|
||||
message DiskUsageRequest {
|
||||
string filter = 1;
|
||||
}
|
||||
|
||||
message DiskUsageResponse {
|
||||
|
@ -28,6 +29,11 @@ message UsageRecord {
|
|||
bool Mutable = 2;
|
||||
bool InUse = 3;
|
||||
int64 Size = 4;
|
||||
string Parent = 5;
|
||||
google.protobuf.Timestamp CreatedAt = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
|
||||
google.protobuf.Timestamp LastUsedAt = 7 [(gogoproto.stdtime) = true];
|
||||
int64 UsageCount = 8;
|
||||
string Description = 9;
|
||||
}
|
||||
|
||||
message SolveRequest {
|
||||
|
|
|
@ -3,6 +3,7 @@ package cache
|
|||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
cdsnapshot "github.com/containerd/containerd/snapshot"
|
||||
|
@ -27,8 +28,8 @@ type ManagerOpt struct {
|
|||
}
|
||||
|
||||
type Accessor interface {
|
||||
Get(ctx context.Context, id string) (ImmutableRef, error)
|
||||
New(ctx context.Context, s ImmutableRef, opt ...RefOption) (MutableRef, error)
|
||||
Get(ctx context.Context, id string, opts ...RefOption) (ImmutableRef, error)
|
||||
New(ctx context.Context, s ImmutableRef, opts ...RefOption) (MutableRef, error)
|
||||
GetMutable(ctx context.Context, id string) (MutableRef, error) // Rebase?
|
||||
}
|
||||
|
||||
|
@ -87,14 +88,14 @@ func (cm *cacheManager) Close() error {
|
|||
return cm.md.Close()
|
||||
}
|
||||
|
||||
func (cm *cacheManager) Get(ctx context.Context, id string) (ImmutableRef, error) {
|
||||
func (cm *cacheManager) Get(ctx context.Context, id string, opts ...RefOption) (ImmutableRef, error) {
|
||||
cm.mu.Lock()
|
||||
defer cm.mu.Unlock()
|
||||
return cm.get(ctx, id)
|
||||
return cm.get(ctx, id, opts...)
|
||||
}
|
||||
|
||||
func (cm *cacheManager) get(ctx context.Context, id string) (ImmutableRef, error) {
|
||||
rec, err := cm.load(ctx, id)
|
||||
func (cm *cacheManager) get(ctx context.Context, id string, opts ...RefOption) (ImmutableRef, error) {
|
||||
rec, err := cm.load(ctx, id, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -114,7 +115,7 @@ func (cm *cacheManager) get(ctx context.Context, id string) (ImmutableRef, error
|
|||
return rec.ref(), nil
|
||||
}
|
||||
|
||||
func (cm *cacheManager) load(ctx context.Context, id string) (*cacheRecord, error) {
|
||||
func (cm *cacheManager) load(ctx context.Context, id string, opts ...RefOption) (*cacheRecord, error) {
|
||||
if rec, ok := cm.records[id]; ok {
|
||||
return rec, nil
|
||||
}
|
||||
|
@ -144,7 +145,7 @@ func (cm *cacheManager) load(ctx context.Context, id string) (*cacheRecord, erro
|
|||
|
||||
var parent ImmutableRef
|
||||
if info.Parent != "" {
|
||||
parent, err = cm.get(ctx, info.Parent)
|
||||
parent, err = cm.get(ctx, info.Parent, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -157,6 +158,14 @@ func (cm *cacheManager) load(ctx context.Context, id string) (*cacheRecord, erro
|
|||
parent: parent,
|
||||
md: &md,
|
||||
}
|
||||
|
||||
if err := initializeMetadata(rec, opts...); err != nil {
|
||||
if parent != nil {
|
||||
parent.Release(ctx)
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cm.records[id] = rec
|
||||
return rec, nil
|
||||
}
|
||||
|
@ -195,14 +204,12 @@ func (cm *cacheManager) New(ctx context.Context, s ImmutableRef, opts ...RefOpti
|
|||
md: &md,
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
if err := opt(rec); err != nil {
|
||||
if err := initializeMetadata(rec, opts...); err != nil {
|
||||
if parent != nil {
|
||||
parent.Release(ctx)
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
cm.mu.Lock()
|
||||
defer cm.mu.Unlock()
|
||||
|
@ -252,6 +259,10 @@ func (cm *cacheManager) DiskUsage(ctx context.Context) ([]*client.UsageInfo, err
|
|||
parent string
|
||||
size int64
|
||||
mutable bool
|
||||
createdAt time.Time
|
||||
usageCount int
|
||||
lastUsedAt *time.Time
|
||||
description string
|
||||
}
|
||||
|
||||
m := make(map[string]*cacheUsageInfo, len(cm.records))
|
||||
|
@ -264,10 +275,15 @@ func (cm *cacheManager) DiskUsage(ctx context.Context) ([]*client.UsageInfo, err
|
|||
cr.mu.Unlock()
|
||||
continue
|
||||
}
|
||||
usageCount, lastUsedAt := getLastUsed(cr.md)
|
||||
c := &cacheUsageInfo{
|
||||
refs: len(cr.refs),
|
||||
mutable: cr.mutable,
|
||||
size: getSize(cr.md),
|
||||
createdAt: getCreatedAt(cr.md),
|
||||
usageCount: usageCount,
|
||||
lastUsedAt: lastUsedAt,
|
||||
description: getDescription(cr.md),
|
||||
}
|
||||
if cr.parent != nil {
|
||||
c.parent = cr.parent.ID()
|
||||
|
@ -302,6 +318,11 @@ func (cm *cacheManager) DiskUsage(ctx context.Context) ([]*client.UsageInfo, err
|
|||
Mutable: cr.mutable,
|
||||
InUse: cr.refs > 0,
|
||||
Size: cr.size,
|
||||
Parent: cr.parent,
|
||||
CreatedAt: cr.createdAt,
|
||||
Description: cr.description,
|
||||
LastUsedAt: cr.lastUsedAt,
|
||||
UsageCount: cr.usageCount,
|
||||
}
|
||||
du = append(du, c)
|
||||
}
|
||||
|
@ -353,5 +374,33 @@ type withMetadata interface {
|
|||
}
|
||||
|
||||
func CachePolicyRetain(m withMetadata) error {
|
||||
return setCachePolicy(m.Metadata(), cachePolicyRetain)
|
||||
return queueCachePolicy(m.Metadata(), cachePolicyRetain)
|
||||
}
|
||||
|
||||
func WithDescription(descr string) RefOption {
|
||||
return func(m withMetadata) error {
|
||||
return queueDescription(m.Metadata(), descr)
|
||||
}
|
||||
}
|
||||
|
||||
func initializeMetadata(m withMetadata, opts ...RefOption) error {
|
||||
md := m.Metadata()
|
||||
if tm := getCreatedAt(md); !tm.IsZero() {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
if err := opt(m); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := queueCreatedAt(md); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := md.Commit(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package cache
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/boltdb/bolt"
|
||||
"github.com/moby/buildkit/cache/metadata"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -18,6 +20,10 @@ const keySize = "snapshot.size"
|
|||
const keyEqualMutable = "cache.equalMutable"
|
||||
const keyEqualImmutable = "cache.equalImmutable"
|
||||
const keyCachePolicy = "cache.cachePolicy"
|
||||
const keyDescription = "cache.description"
|
||||
const keyCreatedAt = "cache.createdAt"
|
||||
const keyLastUsedAt = "cache.lastUsedAt"
|
||||
const keyUsageCount = "cache.usageCount"
|
||||
|
||||
func setSize(si *metadata.StorageItem, s int64) error {
|
||||
v, err := metadata.NewValue(s)
|
||||
|
@ -72,14 +78,15 @@ func clearEqualMutable(si *metadata.StorageItem) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func setCachePolicy(si *metadata.StorageItem, p cachePolicy) error {
|
||||
func queueCachePolicy(si *metadata.StorageItem, p cachePolicy) error {
|
||||
v, err := metadata.NewValue(p)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to create size value")
|
||||
return errors.Wrap(err, "failed to create cachePolicy value")
|
||||
}
|
||||
return si.Update(func(b *bolt.Bucket) error {
|
||||
si.Queue(func(b *bolt.Bucket) error {
|
||||
return si.SetValue(b, keyCachePolicy, v)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func getCachePolicy(si *metadata.StorageItem) cachePolicy {
|
||||
|
@ -93,3 +100,90 @@ func getCachePolicy(si *metadata.StorageItem) cachePolicy {
|
|||
}
|
||||
return p
|
||||
}
|
||||
|
||||
func queueDescription(si *metadata.StorageItem, descr string) error {
|
||||
v, err := metadata.NewValue(descr)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to create description value")
|
||||
}
|
||||
si.Queue(func(b *bolt.Bucket) error {
|
||||
return si.SetValue(b, keyDescription, v)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func getDescription(si *metadata.StorageItem) string {
|
||||
v := si.Get(keyDescription)
|
||||
if v == nil {
|
||||
return ""
|
||||
}
|
||||
var str string
|
||||
if err := v.Unmarshal(&str); err != nil {
|
||||
return ""
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
func queueCreatedAt(si *metadata.StorageItem) error {
|
||||
v, err := metadata.NewValue(time.Now().UnixNano())
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to create createdAt value")
|
||||
}
|
||||
si.Queue(func(b *bolt.Bucket) error {
|
||||
return si.SetValue(b, keyCreatedAt, v)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func getCreatedAt(si *metadata.StorageItem) time.Time {
|
||||
v := si.Get(keyCreatedAt)
|
||||
if v == nil {
|
||||
return time.Time{}
|
||||
}
|
||||
var tm int64
|
||||
if err := v.Unmarshal(&tm); err != nil {
|
||||
return time.Time{}
|
||||
}
|
||||
return time.Unix(tm/1e9, tm%1e9)
|
||||
}
|
||||
|
||||
func getLastUsed(si *metadata.StorageItem) (int, *time.Time) {
|
||||
v := si.Get(keyUsageCount)
|
||||
if v == nil {
|
||||
return 0, nil
|
||||
}
|
||||
var usageCount int
|
||||
if err := v.Unmarshal(&usageCount); err != nil {
|
||||
return 0, nil
|
||||
}
|
||||
v = si.Get(keyLastUsedAt)
|
||||
if v == nil {
|
||||
return usageCount, nil
|
||||
}
|
||||
var lastUsedTs int64
|
||||
if err := v.Unmarshal(&lastUsedTs); err != nil || lastUsedTs == 0 {
|
||||
return usageCount, nil
|
||||
}
|
||||
tm := time.Unix(lastUsedTs/1e9, lastUsedTs%1e9)
|
||||
return usageCount, &tm
|
||||
}
|
||||
|
||||
func updateLastUsed(si *metadata.StorageItem) error {
|
||||
count, _ := getLastUsed(si)
|
||||
count++
|
||||
|
||||
v, err := metadata.NewValue(count)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to create usageCount value")
|
||||
}
|
||||
v2, err := metadata.NewValue(time.Now().UnixNano())
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to create lastUsedAt value")
|
||||
}
|
||||
return si.Update(func(b *bolt.Bucket) error {
|
||||
if err := si.SetValue(b, keyUsageCount, v); err != nil {
|
||||
return err
|
||||
}
|
||||
return si.SetValue(b, keyLastUsedAt, v2)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -184,6 +184,8 @@ func (sr *immutableRef) release(ctx context.Context) error {
|
|||
sr.viewMount = nil
|
||||
}
|
||||
|
||||
updateLastUsed(sr.md)
|
||||
|
||||
delete(sr.refs, sr)
|
||||
|
||||
if len(sr.refs) == 0 {
|
||||
|
@ -240,6 +242,16 @@ func (sr *mutableRef) commit(ctx context.Context) (ImmutableRef, error) {
|
|||
md: &md,
|
||||
}
|
||||
|
||||
if descr := getDescription(sr.md); descr != "" {
|
||||
if err := queueDescription(&md, descr); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if err := initializeMetadata(rec); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sr.cm.records[id] = rec
|
||||
|
||||
if err := sr.md.Commit(); err != nil {
|
||||
|
@ -279,6 +291,7 @@ func (sr *mutableRef) Release(ctx context.Context) error {
|
|||
|
||||
func (sr *mutableRef) release(ctx context.Context) error {
|
||||
delete(sr.refs, sr)
|
||||
updateLastUsed(sr.md)
|
||||
if getCachePolicy(sr.md) != cachePolicyRetain {
|
||||
if sr.equalImmutable != nil {
|
||||
if getCachePolicy(sr.equalImmutable.md) == cachePolicyRetain {
|
||||
|
|
|
@ -3,6 +3,7 @@ package client
|
|||
import (
|
||||
"context"
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
controlapi "github.com/moby/buildkit/api/services/control"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -13,8 +14,12 @@ type UsageInfo struct {
|
|||
Mutable bool
|
||||
InUse bool
|
||||
Size int64
|
||||
// Meta string
|
||||
// LastUsed time.Time
|
||||
|
||||
CreatedAt time.Time
|
||||
LastUsedAt *time.Time
|
||||
UsageCount int
|
||||
Parent string
|
||||
Description string
|
||||
}
|
||||
|
||||
func (c *Client) DiskUsage(ctx context.Context) ([]*UsageInfo, error) {
|
||||
|
@ -31,6 +36,11 @@ func (c *Client) DiskUsage(ctx context.Context) ([]*UsageInfo, error) {
|
|||
Mutable: d.Mutable,
|
||||
InUse: d.InUse,
|
||||
Size: d.Size_,
|
||||
Parent: d.Parent,
|
||||
CreatedAt: d.CreatedAt,
|
||||
Description: d.Description,
|
||||
UsageCount: int(d.UsageCount),
|
||||
LastUsedAt: d.LastUsedAt,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -3,10 +3,12 @@ package main
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"text/tabwriter"
|
||||
|
||||
units "github.com/docker/go-units"
|
||||
"github.com/moby/buildkit/client"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
|
@ -14,6 +16,12 @@ var diskUsageCommand = cli.Command{
|
|||
Name: "du",
|
||||
Usage: "disk usage",
|
||||
Action: diskUsage,
|
||||
Flags: []cli.Flag{
|
||||
cli.BoolFlag{
|
||||
Name: "verbose, v",
|
||||
Usage: "Verbose output",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
func diskUsage(clicontext *cli.Context) error {
|
||||
|
@ -29,10 +37,47 @@ func diskUsage(clicontext *cli.Context) error {
|
|||
|
||||
tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, '\t', 0)
|
||||
|
||||
fmt.Fprintln(tw, "ID\tRECLAIMABLE\tSIZE\tLAST ACCESSED")
|
||||
if clicontext.Bool("verbose") {
|
||||
printVerbose(tw, du)
|
||||
} else {
|
||||
printTable(tw, du)
|
||||
}
|
||||
|
||||
total := int64(0)
|
||||
reclaimable := int64(0)
|
||||
printSummary(tw, du)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func printKV(w io.Writer, k string, v interface{}) {
|
||||
fmt.Fprintf(w, "%s:\t%v\n", k, v)
|
||||
}
|
||||
|
||||
func printVerbose(tw *tabwriter.Writer, du []*client.UsageInfo) {
|
||||
for _, di := range du {
|
||||
printKV(tw, "ID", di.ID)
|
||||
if di.Parent != "" {
|
||||
printKV(tw, "Parent", di.Parent)
|
||||
}
|
||||
printKV(tw, "Created at", di.CreatedAt)
|
||||
printKV(tw, "Mutable", di.Mutable)
|
||||
printKV(tw, "Reclaimable", !di.InUse)
|
||||
printKV(tw, "Size", units.HumanSize(float64(di.Size)))
|
||||
if di.Description != "" {
|
||||
printKV(tw, "Description", di.Description)
|
||||
}
|
||||
printKV(tw, "Usage count", di.UsageCount)
|
||||
if di.LastUsedAt != nil {
|
||||
printKV(tw, "Last used", di.LastUsedAt)
|
||||
}
|
||||
|
||||
fmt.Fprintf(tw, "\n")
|
||||
}
|
||||
|
||||
tw.Flush()
|
||||
}
|
||||
|
||||
func printTable(tw *tabwriter.Writer, du []*client.UsageInfo) {
|
||||
fmt.Fprintln(tw, "ID\tRECLAIMABLE\tSIZE\tLAST ACCESSED")
|
||||
|
||||
for _, di := range du {
|
||||
id := di.ID
|
||||
|
@ -40,6 +85,17 @@ func diskUsage(clicontext *cli.Context) error {
|
|||
id += "*"
|
||||
}
|
||||
fmt.Fprintf(tw, "%s\t%v\t%s\t\n", id, !di.InUse, units.HumanSize(float64(di.Size)))
|
||||
|
||||
}
|
||||
|
||||
tw.Flush()
|
||||
}
|
||||
|
||||
func printSummary(tw *tabwriter.Writer, du []*client.UsageInfo) {
|
||||
total := int64(0)
|
||||
reclaimable := int64(0)
|
||||
|
||||
for _, di := range du {
|
||||
if di.Size > 0 {
|
||||
total += di.Size
|
||||
if !di.InUse {
|
||||
|
@ -48,12 +104,8 @@ func diskUsage(clicontext *cli.Context) error {
|
|||
}
|
||||
}
|
||||
|
||||
tw.Flush()
|
||||
|
||||
tw = tabwriter.NewWriter(os.Stdout, 1, 8, 1, '\t', 0)
|
||||
fmt.Fprintf(tw, "Reclaimable:\t%s\n", units.HumanSize(float64(reclaimable)))
|
||||
fmt.Fprintf(tw, "Total:\t%s\n", units.HumanSize(float64(total)))
|
||||
tw.Flush()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -64,6 +64,11 @@ func (c *Controller) DiskUsage(ctx context.Context, _ *controlapi.DiskUsageReque
|
|||
Mutable: r.Mutable,
|
||||
InUse: r.InUse,
|
||||
Size_: r.Size,
|
||||
Parent: r.Parent,
|
||||
UsageCount: int64(r.UsageCount),
|
||||
Description: r.Description,
|
||||
CreatedAt: r.CreatedAt,
|
||||
LastUsedAt: r.LastUsedAt,
|
||||
})
|
||||
}
|
||||
return resp, nil
|
||||
|
|
|
@ -2,7 +2,9 @@ package solver
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/moby/buildkit/cache"
|
||||
"github.com/moby/buildkit/solver/pb"
|
||||
|
@ -80,7 +82,7 @@ func (e *execOp) Run(ctx context.Context, inputs []Reference) ([]Reference, erro
|
|||
if m.Readonly && ref != nil {
|
||||
outputs = append(outputs, newSharedRef(ref).Clone())
|
||||
} else {
|
||||
active, err := e.cm.New(ctx, ref) // TODO: should be method
|
||||
active, err := e.cm.New(ctx, ref, cache.WithDescription(fmt.Sprintf("mount %s from exec %s", m.Dest, strings.Join(e.op.Meta.Args, " ")))) // TODO: should be method
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package containerimage
|
|||
import (
|
||||
gocontext "context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
|
@ -149,7 +150,7 @@ func (p *puller) Snapshot(ctx context.Context) (cache.ImmutableRef, error) {
|
|||
}
|
||||
unpackProgressDone(nil)
|
||||
|
||||
return p.is.CacheAccessor.Get(ctx, chainid)
|
||||
return p.is.CacheAccessor.Get(ctx, chainid, cache.WithDescription(fmt.Sprintf("pulled from %s", p.ref)))
|
||||
}
|
||||
|
||||
func (is *imageSource) unpack(ctx context.Context, desc ocispec.Descriptor) (string, error) {
|
||||
|
|
|
@ -2,6 +2,7 @@ package git
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
@ -78,7 +79,7 @@ func (gs *gitSource) mountRemote(ctx context.Context, remote string) (target str
|
|||
|
||||
initializeRepo := false
|
||||
if remoteRef == nil {
|
||||
remoteRef, err = gs.cache.New(ctx, nil, cache.CachePolicyRetain)
|
||||
remoteRef, err = gs.cache.New(ctx, nil, cache.CachePolicyRetain, cache.WithDescription(fmt.Sprintf("shared git repo for %s", remote)))
|
||||
if err != nil {
|
||||
return "", nil, errors.Wrapf(err, "failed to create new mutable for %s", remote)
|
||||
}
|
||||
|
@ -262,7 +263,7 @@ func (gs *gitSourceHandler) Snapshot(ctx context.Context) (out cache.ImmutableRe
|
|||
}
|
||||
}
|
||||
|
||||
checkoutRef, err := gs.cache.New(ctx, nil)
|
||||
checkoutRef, err := gs.cache.New(ctx, nil, cache.WithDescription(fmt.Sprintf("git snapshot for %s#%s", gs.src.Remote, ref)))
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to create new mutable for %s", gs.src.Remote)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package local
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
|
@ -106,7 +107,7 @@ func (ls *localSourceHandler) Snapshot(ctx context.Context) (out cache.Immutable
|
|||
}
|
||||
|
||||
if mutable == nil {
|
||||
m, err := ls.cm.New(ctx, nil, cache.CachePolicyRetain)
|
||||
m, err := ls.cm.New(ctx, nil, cache.CachePolicyRetain, cache.WithDescription(fmt.Sprintf("local source for %s", ls.src.Name)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue