working commit

This commit is contained in:
2026-02-06 10:48:29 +02:00
parent 88bfe00d61
commit 97c58bb283
11 changed files with 50 additions and 105 deletions
+13 -7
View File
@@ -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
+1
View File
@@ -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)
+1 -1
View File
@@ -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
}