@@ -77,24 +77,33 @@ func processManifest(ctx context.Context, mci *manifestCreationInfo, buf *packag
7777	return  "" , errManifestInvalid 
7878}
7979
80- func  processOciImageManifest (ctx  context.Context , mci  * manifestCreationInfo , buf  * packages_module.HashedBuffer ) (string , error ) {
81- 	manifestDigest  :=  "" 
80+ type  processManifestTxRet  struct  {
81+ 	pv       * packages_model.PackageVersion 
82+ 	pb       * packages_model.PackageBlob 
83+ 	created  bool 
84+ 	digest   string 
85+ }
8286
83- 	 err   :=   func ()  error  {
84- 		 manifest , configDescriptor , metadata , err  :=  container_service .ParseManifestMetadata (ctx , buf , mci .Owner .ID , mci .Image )
85- 		 if  err  !=  nil  {
86- 			 return  err 
87- 		 }
88- 		 if  _ , err  =  buf .Seek (0 , io .SeekStart ); err  !=  nil  {
89- 			 return  err 
90- 		 }
87+ func   processOciImageManifest ( ctx  context. Context ,  mci   * manifestCreationInfo ,  buf   * packages_module. HashedBuffer ) ( manifestDigest   string ,  errRet   error )  {
88+ 	manifest , configDescriptor , metadata , err  :=  container_service .ParseManifestMetadata (ctx , buf , mci .Owner .ID , mci .Image )
89+ 	if  err  !=  nil  {
90+ 		return   "" ,  err 
91+ 	}
92+ 	if  _ , err  =  buf .Seek (0 , io .SeekStart ); err  !=  nil  {
93+ 		return   "" ,  err 
94+ 	}
9195
92- 		ctx , committer , err  :=  db .TxContext (ctx )
93- 		if  err  !=  nil  {
94- 			return  err 
96+ 	var  txRet  processManifestTxRet 
97+ 	defer  func () {
98+ 		if  errRet  !=  nil  &&  txRet .created  &&  txRet .pb  !=  nil  {
99+ 			contentStore  :=  packages_module .NewContentStore ()
100+ 			if  err  :=  contentStore .Delete (packages_module .BlobHash256Key (txRet .pb .HashSHA256 )); err  !=  nil  {
101+ 				log .Error ("Error deleting package blob from content store: %v" , err )
102+ 			}
95103		}
96- 		 defer   committer . Close ()
104+ 	} ()
97105
106+ 	err  =  db .WithTx (ctx , func (ctx  context.Context ) (err  error ) {
98107		blobReferences  :=  make ([]* blobReference , 0 , 1 + len (manifest .Layers ))
99108		blobReferences  =  append (blobReferences , & blobReference {
100109			Digest :       manifest .Config .Digest ,
@@ -120,14 +129,13 @@ func processOciImageManifest(ctx context.Context, mci *manifestCreationInfo, buf
120129				ExpectedSize : layer .Size ,
121130			})
122131		}
123- 
124132		pv , err  :=  createPackageAndVersion (ctx , mci , metadata )
125133		if  err  !=  nil  {
126134			return  err 
127135		}
128136
129137		uploadVersion , err  :=  packages_model .GetInternalVersionByNameAndVersion (ctx , mci .Owner .ID , packages_model .TypeContainer , mci .Image , container_module .UploadVersion )
130- 		if  err  !=  nil  &&  err   !=   packages_model .ErrPackageNotExist  {
138+ 		if  err  !=  nil  &&  ! errors . Is ( err ,  packages_model .ErrPackageNotExist )  {
131139			return  err 
132140		}
133141
@@ -136,61 +144,38 @@ func processOciImageManifest(ctx context.Context, mci *manifestCreationInfo, buf
136144				return  err 
137145			}
138146		}
147+ 		txRet .pb , txRet .created , txRet .digest , err  =  createManifestBlob (ctx , mci , pv , buf )
148+ 		return  err 
149+ 	})
139150
140- 		pb , created , digest , err  :=  createManifestBlob (ctx , mci , pv , buf )
141- 		removeBlob  :=  false 
142- 		defer  func () {
143- 			if  removeBlob  {
144- 				contentStore  :=  packages_module .NewContentStore ()
145- 				if  err  :=  contentStore .Delete (packages_module .BlobHash256Key (pb .HashSHA256 )); err  !=  nil  {
146- 					log .Error ("Error deleting package blob from content store: %v" , err )
147- 				}
148- 			}
149- 		}()
150- 		if  err  !=  nil  {
151- 			removeBlob  =  created 
152- 			return  err 
153- 		}
154- 
155- 		if  err  :=  committer .Commit (); err  !=  nil  {
156- 			removeBlob  =  created 
157- 			return  err 
158- 		}
159- 
160- 		if  err  :=  notifyPackageCreate (ctx , mci .Creator , pv ); err  !=  nil  {
161- 			return  err 
162- 		}
163- 
164- 		manifestDigest  =  digest 
165- 
166- 		return  nil 
167- 	}()
168151	if  err  !=  nil  {
169152		return  "" , err 
170153	}
171154
172- 	return  manifestDigest , nil 
155+ 	notifyPackageCreate (ctx , mci .Creator , txRet .pv )
156+ 	return  txRet .digest , nil 
173157}
174158
175- func  processOciImageIndex (ctx  context.Context , mci  * manifestCreationInfo , buf  * packages_module.HashedBuffer ) (string , error ) {
176- 	manifestDigest  :=  "" 
177- 
178- 	err  :=  func () error  {
179- 		var  index  oci.Index 
180- 		if  err  :=  json .NewDecoder (buf ).Decode (& index ); err  !=  nil  {
181- 			return  err 
182- 		}
183- 
184- 		if  _ , err  :=  buf .Seek (0 , io .SeekStart ); err  !=  nil  {
185- 			return  err 
186- 		}
159+ func  processOciImageIndex (ctx  context.Context , mci  * manifestCreationInfo , buf  * packages_module.HashedBuffer ) (manifestDigest  string , errRet  error ) {
160+ 	var  index  oci.Index 
161+ 	if  err  :=  json .NewDecoder (buf ).Decode (& index ); err  !=  nil  {
162+ 		return  "" , err 
163+ 	}
164+ 	if  _ , err  :=  buf .Seek (0 , io .SeekStart ); err  !=  nil  {
165+ 		return  "" , err 
166+ 	}
187167
188- 		ctx , committer , err  :=  db .TxContext (ctx )
189- 		if  err  !=  nil  {
190- 			return  err 
168+ 	var  txRet  processManifestTxRet 
169+ 	defer  func () {
170+ 		if  errRet  !=  nil  &&  txRet .created  &&  txRet .pb  !=  nil  {
171+ 			contentStore  :=  packages_module .NewContentStore ()
172+ 			if  err  :=  contentStore .Delete (packages_module .BlobHash256Key (txRet .pb .HashSHA256 )); err  !=  nil  {
173+ 				log .Error ("Error deleting package blob from content store: %v" , err )
174+ 			}
191175		}
192- 		 defer   committer . Close ()
176+ 	} ()
193177
178+ 	err  :=  db .WithTx (ctx , func (ctx  context.Context ) (err  error ) {
194179		metadata  :=  & container_module.Metadata {
195180			Type :      container_module .TypeOCI ,
196181			Manifests : make ([]* container_module.Manifest , 0 , len (index .Manifests )),
@@ -241,50 +226,24 @@ func processOciImageIndex(ctx context.Context, mci *manifestCreationInfo, buf *p
241226			return  err 
242227		}
243228
244- 		pb , created , digest , err  :=  createManifestBlob (ctx , mci , pv , buf )
245- 		removeBlob  :=  false 
246- 		defer  func () {
247- 			if  removeBlob  {
248- 				contentStore  :=  packages_module .NewContentStore ()
249- 				if  err  :=  contentStore .Delete (packages_module .BlobHash256Key (pb .HashSHA256 )); err  !=  nil  {
250- 					log .Error ("Error deleting package blob from content store: %v" , err )
251- 				}
252- 			}
253- 		}()
254- 		if  err  !=  nil  {
255- 			removeBlob  =  created 
256- 			return  err 
257- 		}
258- 
259- 		if  err  :=  committer .Commit (); err  !=  nil  {
260- 			removeBlob  =  created 
261- 			return  err 
262- 		}
263- 
264- 		if  err  :=  notifyPackageCreate (ctx , mci .Creator , pv ); err  !=  nil  {
265- 			return  err 
266- 		}
267- 
268- 		manifestDigest  =  digest 
269- 
270- 		return  nil 
271- 	}()
229+ 		txRet .pb , txRet .created , txRet .digest , err  =  createManifestBlob (ctx , mci , pv , buf )
230+ 		return  err 
231+ 	})
272232	if  err  !=  nil  {
273233		return  "" , err 
274234	}
275235
276- 	return  manifestDigest , nil 
236+ 	notifyPackageCreate (ctx , mci .Creator , txRet .pv )
237+ 	return  txRet .digest , nil 
277238}
278239
279- func  notifyPackageCreate (ctx  context.Context , doer  * user_model.User , pv  * packages_model.PackageVersion ) error   {
240+ func  notifyPackageCreate (ctx  context.Context , doer  * user_model.User , pv  * packages_model.PackageVersion ) {
280241	pd , err  :=  packages_model .GetPackageDescriptor (ctx , pv )
281242	if  err  !=  nil  {
282- 		return  err 
243+ 		log .Error ("Error getting package descriptor: %v" , err )
244+ 		return 
283245	}
284- 
285246	notify_service .PackageCreate (ctx , doer , pd )
286- 
287- 	return  nil 
288247}
289248
290249func  createPackageAndVersion (ctx  context.Context , mci  * manifestCreationInfo , metadata  * container_module.Metadata ) (* packages_model.PackageVersion , error ) {
@@ -437,7 +396,7 @@ func createFileFromBlobReference(ctx context.Context, pv, uploadVersion *package
437396	return  pf , nil 
438397}
439398
440- func  createManifestBlob (ctx  context.Context , mci  * manifestCreationInfo , pv  * packages_model.PackageVersion , buf  * packages_module.HashedBuffer ) (* packages_model.PackageBlob , bool , string , error ) {
399+ func  createManifestBlob (ctx  context.Context , mci  * manifestCreationInfo , pv  * packages_model.PackageVersion , buf  * packages_module.HashedBuffer ) (_   * packages_model.PackageBlob , created   bool , manifestDigest   string ,  _  error ) {
441400	pb , exists , err  :=  packages_model .GetOrInsertBlob (ctx , packages_service .NewPackageBlob (buf ))
442401	if  err  !=  nil  {
443402		log .Error ("Error inserting package blob: %v" , err )
@@ -460,7 +419,7 @@ func createManifestBlob(ctx context.Context, mci *manifestCreationInfo, pv *pack
460419		}
461420	}
462421
463- 	manifestDigest  : =  digestFromHashSummer (buf )
422+ 	manifestDigest  =  digestFromHashSummer (buf )
464423	pf , err  :=  createFileFromBlobReference (ctx , pv , nil , & blobReference {
465424		Digest :       digest .Digest (manifestDigest ),
466425		MediaType :    mci .MediaType ,
0 commit comments