working commit
This commit is contained in:
+13
-7
@@ -100,6 +100,7 @@ type PatchUploadResult struct {
|
||||
Range string
|
||||
}
|
||||
|
||||
// TODO: partial uploading by range?
|
||||
func (oper *Operator) PatchUpload(ctx context.Context, params *PatchUploadParams) (*PatchUploadResult, int, error) {
|
||||
var err error
|
||||
res := &PatchUploadResult{}
|
||||
@@ -129,7 +130,9 @@ func (oper *Operator) PatchUpload(ctx context.Context, params *PatchUploadParams
|
||||
}
|
||||
var contentLength int64
|
||||
|
||||
// Unfortunately, podman & github.com/containers/image don't set Content-length header for docker transport
|
||||
// Unfortunately, podman and used github.com/containers/image don't sent
|
||||
// Content-length header for docker transport
|
||||
|
||||
if params.ContentLength != "" {
|
||||
contentLength, err = strconv.ParseInt(params.ContentLength, 10, 64)
|
||||
if err != nil {
|
||||
@@ -265,6 +268,11 @@ type DeleteBlobParams struct {
|
||||
}
|
||||
type DeleteBlobResult struct{}
|
||||
|
||||
// Removing an individual layer is very probably to compromise data integrity.
|
||||
// - If the data layers are to be reused, this is like shooting yourself in the foot.
|
||||
// - It also prevents the manifest from being issued, as one
|
||||
// of the layers is missing.
|
||||
|
||||
func (oper *Operator) DeleteBlob(ctx context.Context, params *DeleteBlobParams) (*DeleteBlobResult, int, error) {
|
||||
var err error
|
||||
res := &DeleteBlobResult{}
|
||||
@@ -282,25 +290,23 @@ func (oper *Operator) DeleteBlob(ctx context.Context, params *DeleteBlobParams)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
oper.logg.Debugf("Blob %s:%s descr exists %v", params.Name, params.Digest, descrExists)
|
||||
|
||||
if !descrExists {
|
||||
return res, http.StatusNotFound, err
|
||||
}
|
||||
|
||||
// Deleting blob record
|
||||
oper.logg.Warningf("Deleting blob record %s:%s", params.Name, params.Digest)
|
||||
err = oper.mdb.DeleteBlobByNameDigest(ctx, params.Name, params.Digest)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
// Removing blob file if usage == 0
|
||||
// Removing the blob binary if usage == 0
|
||||
blobUsage, err := oper.mdb.GetBlobUsage(ctx, params.Digest)
|
||||
|
||||
oper.logg.Debugf("Blob %s have usage %d", params.Digest, blobUsage)
|
||||
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
if blobUsage == 0 {
|
||||
oper.logg.Warningf("Deleting useless blob binary %s", params.Digest)
|
||||
oper.store.DeleteBlob(params.Digest)
|
||||
}
|
||||
return res, http.StatusOK, err
|
||||
|
||||
@@ -261,6 +261,7 @@ func (oper *Operator) GetManifest(ctx context.Context, params *GetManifestParams
|
||||
|
||||
manifestDescr := descr.Manifest{}
|
||||
var exists bool
|
||||
// TODO: checking layers?
|
||||
if stringLikeSHADigest(params.Reference) {
|
||||
digest := normalizeSHADigest(params.Reference)
|
||||
exists, manifestDescr, err = oper.mdb.GetManifestByDigest(ctx, params.Name, digest)
|
||||
|
||||
@@ -23,6 +23,6 @@ func NewOperator(params *OperatorParams) (*Operator, error) {
|
||||
mdb: params.MainDB,
|
||||
store: params.Store,
|
||||
}
|
||||
oper.logg = logger.NewLogger("operator")
|
||||
oper.logg = logger.NewLoggerWithSubject("operator")
|
||||
return oper, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user