Skip to content

Commit 19f11d0

Browse files
Catalin-Stratulat-Ericssonkushnaiduliamfallon
authored
Logging Improvements (#460)
* Add API start logs * fix comment * adding operation stage logging for each subcomponent * switching to k8sname where logical * Apply suggestions from code review Co-authored-by: Liam Fallon <35595825+liamfallon@users.noreply.github.com> * amending comments + only utilizing FromFullPathname function after OpenRepository function to avoid invalid memory address test failing on TestCreatePRWith2Tasks * fixing test case occuring in DeletePR operation due gitPR2Del asserting nil for key * adding unit tests for registry/packagerevision.go Get/Create/Delete functions * addressing comments * moving API operation start logs after validation of operation occurs + removing wasteful variable defenitions * fixed malformed k8s names * adding unit test for Get(pkgrevres) & Update(pkgcommon) * nitpick change to rerun tests --------- Co-authored-by: Kushal Harish Naidu <kushal.harish.naidu@ericsson.com> Co-authored-by: Liam Fallon <35595825+liamfallon@users.noreply.github.com>
1 parent 841f6e2 commit 19f11d0

11 files changed

Lines changed: 551 additions & 15 deletions

File tree

pkg/cache/crcache/repository.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ func (r *cachedRepository) Version(ctx context.Context) (string, error) {
112112
}
113113

114114
func (r *cachedRepository) ListPackageRevisions(ctx context.Context, filter repository.ListPackageRevisionFilter) ([]repository.PackageRevision, error) {
115+
klog.V(3).Infof("[CR Cache] Retrieving cached package revisions and enriching with PackageRev CR metadata from etcd for repository: %s", r.Key())
116+
defer func() {
117+
klog.V(3).Infof("[CR Cache] Completed retrieving and enriching package revisions with PackageRev CR metadata for repository: %s", r.Key())
118+
}()
119+
115120
packages, err := r.getPackageRevisions(ctx, filter, false)
116121
if err != nil {
117122
return nil, err
@@ -206,13 +211,28 @@ func (r *cachedRepository) getCachedPackages(ctx context.Context, forceRefresh b
206211
}
207212

208213
func (r *cachedRepository) CreatePackageRevisionDraft(ctx context.Context, obj *porchapi.PackageRevision) (repository.PackageRevisionDraft, error) {
214+
pkgRevKey := repository.PackageRevisionKey{
215+
PkgKey: repository.FromFullPathname(r.Key(), obj.Spec.PackageName),
216+
Revision: 0,
217+
WorkspaceName: obj.Spec.WorkspaceName,
218+
}
219+
klog.Infof("[CR Cache] Creating draft and preparing to save to Git for PackageRevision: %s", pkgRevKey.K8SName())
220+
defer func() {
221+
klog.V(3).Infof("[CR Cache] Draft created and saved to Git for PackageRevision: %s", pkgRevKey.K8SName())
222+
}()
223+
209224
return r.repo.CreatePackageRevisionDraft(ctx, obj)
210225
}
211226

212227
func (r *cachedRepository) ClosePackageRevisionDraft(ctx context.Context, prd repository.PackageRevisionDraft, version int) (repository.PackageRevision, error) {
213228
ctx, span := tracer.Start(ctx, "cachedRepository::ClosePackageRevisionDraft", trace.WithAttributes())
214229
defer span.End()
215230

231+
klog.Infof("[CR Cache] Closing draft and pushing lifecycle change to Git for PackageRevision: %s", prd.Key().K8SName())
232+
defer func() {
233+
klog.V(3).Infof("[CR Cache] Draft closed and lifecycle change pushed to Git for PackageRevision: %s", prd.Key().K8SName())
234+
}()
235+
216236
v, err := r.Version(ctx)
217237
if err != nil {
218238
return nil, err
@@ -279,6 +299,11 @@ func (r *cachedRepository) ClosePackageRevisionDraft(ctx context.Context, prd re
279299
}
280300

281301
func (r *cachedRepository) UpdatePackageRevision(ctx context.Context, old repository.PackageRevision) (repository.PackageRevisionDraft, error) {
302+
klog.Infof("[CR Cache] Loading draft for update from Git for PackageRevision: %s", old.Key().K8SName())
303+
defer func() {
304+
klog.V(3).Infof("[CR Cache] Draft loaded and ready for modifications for PackageRevision: %s", old.Key().K8SName())
305+
}()
306+
282307
// Unwrap
283308
unwrapped := old.(*cachedPackageRevision).PackageRevision
284309

@@ -396,6 +421,11 @@ func (r *cachedRepository) DeletePackageRevision(ctx context.Context, prToDelete
396421
// terminating state.
397422
// But we only delete the PackageRevision from the repo once all finalizers
398423
// have been removed.
424+
klog.Infof("[CR Cache] Deleting PackageRev CR from etcd and branch from Git for PackageRevision: %s", prToDelete.Key().K8SName())
425+
defer func() {
426+
klog.V(3).Infof("[CR Cache] PackageRev CR and Git branch deleted for PackageRevision: %s", prToDelete.Key().K8SName())
427+
}()
428+
399429
namespacedName := types.NamespacedName{
400430
Name: prToDelete.KubeObjectName(),
401431
Namespace: prToDelete.KubeObjectNamespace(),

pkg/cache/dbcache/dbpackagerevision.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,20 @@ func (pr *dbPackageRevision) UpdateLifecycle(ctx context.Context, newLifecycle p
128128
if pr.repo == nil {
129129
return fmt.Errorf("cannot update lifecycle for package revision %s: no associated repository", pr.KubeObjectName())
130130
}
131+
132+
// Only Approve (Proposed → Published) pushes to external repo
133+
// TODO should be replaced with flag when option for db-cache push to git regardless PR comes in
134+
if pr.lifecycle == porchapi.PackageRevisionLifecycleProposed && newLifecycle == porchapi.PackageRevisionLifecyclePublished {
135+
klog.Infof("[DB Cache] Updating lifecycle in database and pushing to external repo for PackageRevision: %s", pr.Key().K8SName())
136+
defer func() {
137+
klog.V(3).Infof("[DB Cache] Lifecycle updated in database and pushed to external repo for PackageRevision: %s", pr.Key().K8SName())
138+
}()
139+
} else {
140+
klog.Infof("[DB Cache] Updating lifecycle in database for PackageRevision: %s", pr.Key().K8SName())
141+
defer func() {
142+
klog.V(3).Infof("[DB Cache] Lifecycle updated in database for PackageRevision: %s", pr.Key().K8SName())
143+
}()
144+
}
131145

132146
if pr.lifecycle == porchapi.PackageRevisionLifecycleProposed && newLifecycle == porchapi.PackageRevisionLifecyclePublished {
133147
if err := pr.publishPR(ctx, newLifecycle); err != nil {
@@ -395,6 +409,11 @@ func (pr *dbPackageRevision) UpdateResources(ctx context.Context, new *porchapi.
395409
_, span := tracer.Start(ctx, "dbPackageRevision::UpdateResources", trace.WithAttributes())
396410
defer span.End()
397411

412+
klog.Infof("[DB Cache] Updating resources in memory for PackageRevision: %s", pr.Key().K8SName())
413+
defer func() {
414+
klog.V(3).Infof("[DB Cache] Resources updated in memory for PackageRevision: %s", pr.Key().K8SName())
415+
}()
416+
398417
pr.resources = new.Spec.Resources
399418

400419
if change != nil && porchapi.IsValidFirstTaskType(change.Type) {

pkg/cache/dbcache/dbrepository.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ func (r *dbRepository) ListPackageRevisions(ctx context.Context, filter reposito
137137
ctx, span := tracer.Start(ctx, "dbRepository::ListPackageRevisions", trace.WithAttributes())
138138
defer span.End()
139139

140+
klog.V(3).Infof("[DB Cache] Retrieving PackageRevisions from database for repository: %s", r.Key())
141+
defer func() {
142+
klog.V(3).Infof("[DB Cache] Completed retrieving PackageRevisions from database for repository: %s", r.Key())
143+
}()
144+
140145
klog.V(5).Infof("ListPackageRevisions: listing package revisions in repository %+v with filter %+v", r.Key(), filter)
141146

142147
filter.Key.PkgKey.RepoKey = r.Key()
@@ -170,6 +175,17 @@ func (r *dbRepository) CreatePackageRevisionDraft(ctx context.Context, newPR *po
170175
ctx, span := tracer.Start(ctx, "dbRepository::CreatePackageRevisionDraft", trace.WithAttributes())
171176
defer span.End()
172177

178+
pkgRevKey := repository.PackageRevisionKey{
179+
PkgKey: repository.FromFullPathname(r.Key(), newPR.Spec.PackageName),
180+
Revision: 0,
181+
WorkspaceName: newPR.Spec.WorkspaceName,
182+
}
183+
pkgKey := pkgRevKey.K8SName()
184+
klog.Infof("[DB Cache] Creating database entry for draft object for PackageRevision: %s", pkgKey)
185+
defer func() {
186+
klog.V(3).Infof("[DB Cache] Database entry for draft object created for PackageRevision: %s", pkgKey)
187+
}()
188+
173189
klog.V(5).Infof("dbRepository:CreatePackageRevisionDraft: creating draft for %+v on repo %+v", newPR, r.Key())
174190

175191
if newPR.CreationTimestamp.Time.IsZero() {
@@ -214,6 +230,20 @@ func (r *dbRepository) DeletePackageRevision(ctx context.Context, pr2Delete repo
214230
ctx, span := tracer.Start(ctx, "dbRepository::DeletePackageRevision", trace.WithAttributes())
215231
defer span.End()
216232

233+
// Only published packages are deleted from external repo
234+
// TODO should be replaced with flag when option for db-cache push to git regardless PR comes in
235+
if porchapi.LifecycleIsPublished(pr2Delete.Lifecycle(context.Background())) {
236+
klog.Infof("[DB Cache] Deleting PackageRevision from database and external repo for PackageRevision: %s", pr2Delete.Key().K8SName())
237+
defer func() {
238+
klog.V(3).Infof("[DB Cache] PackageRevision deleted from database and external repo for PackageRevision: %s", pr2Delete.Key().K8SName())
239+
}()
240+
} else {
241+
klog.Infof("[DB Cache] Deleting PackageRevision from database for PackageRevision: %s", pr2Delete.Key().K8SName())
242+
defer func() {
243+
klog.V(3).Infof("[DB Cache] PackageRevision deleted from database for PackageRevision: %s", pr2Delete.Key().K8SName())
244+
}()
245+
}
246+
217247
if len(pr2Delete.GetMeta().Finalizers) > 0 {
218248
klog.V(5).Infof("dbRepository:DeletePackageRevision: deletion ordered on package revision %+v on repo %+v, but finalizers %+v exist", pr2Delete.Key(), r.Key(), pr2Delete.GetMeta().Finalizers)
219249

@@ -270,6 +300,11 @@ func (r *dbRepository) UpdatePackageRevision(ctx context.Context, updatePR repos
270300
ctx, span := tracer.Start(ctx, "dbRepository::UpdatePackageRevision", trace.WithAttributes())
271301
defer span.End()
272302

303+
klog.Infof("[DB Cache] Loading draft from database for update for PackageRevision: %s", updatePR.Key().K8SName())
304+
defer func() {
305+
klog.V(3).Infof("[DB Cache] Draft loaded from database and ready for modifications for PackageRevision: %s", updatePR.Key().K8SName())
306+
}()
307+
273308
klog.V(5).Infof("dbRepository:UpdatePackageRevision: updating package revision %+v on repo %+v", updatePR.Key(), r.Key())
274309

275310
updatePkgRev, ok := updatePR.(*dbPackageRevision)
@@ -321,6 +356,12 @@ func (r *dbRepository) ClosePackageRevisionDraft(ctx context.Context, prd reposi
321356
_, span := tracer.Start(ctx, "dbRepository::ClosePackageRevisionDraft", trace.WithAttributes())
322357
defer span.End()
323358

359+
d := prd.(*dbPackageRevision)
360+
klog.Infof("[DB Cache] Saving PackageRevision to database for PackageRevision: %s", d.Key().K8SName())
361+
defer func() {
362+
klog.V(3).Infof("[DB Cache] PackageRevision saved to database for PackageRevision: %s", d.Key().K8SName())
363+
}()
364+
324365
pr, err := r.savePackageRevisionDraft(ctx, prd, version)
325366

326367
return repository.PackageRevision(pr), err

pkg/engine/engine.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ func (cad *cadEngine) ListPackageRevisions(ctx context.Context, repositorySpec *
9494
ctx, span := tracer.Start(ctx, "cadEngine::ListPackageRevisions", trace.WithAttributes())
9595
defer span.End()
9696

97+
klog.V(3).Infof("[CaD Engine] Opening cached repository for listing: %s", repositorySpec.Name)
98+
defer func() {
99+
klog.V(3).Infof("[CaD Engine] Completed listing from cached repository: %s", repositorySpec.Name)
100+
}()
101+
97102
repo, err := cad.cache.OpenRepository(ctx, repositorySpec)
98103
if err != nil {
99104
return nil, err
@@ -148,6 +153,11 @@ func (cad *cadEngine) CreatePackageRevision(ctx context.Context, repositoryObj *
148153
}
149154

150155
pkgKey := repository.FromFullPathname(repo.Key(), newPr.Spec.PackageName)
156+
klog.Infof("[CaD Engine] Validating and preparing package creation for PackageRevision: %s.%s", pkgKey.K8SName(), newPr.Spec.WorkspaceName)
157+
defer func() {
158+
klog.V(3).Infof("[CaD Engine] Package creation delegated to cache for PackageRevision: %s.%s", pkgKey.K8SName(), newPr.Spec.WorkspaceName)
159+
}()
160+
151161
if err := util.ValidPkgRevObjName(repositoryObj.Name, pkgKey.Path, pkgKey.Package, newPr.Spec.WorkspaceName); err != nil {
152162
return nil, fmt.Errorf("failed to create packagerevision: %w", err)
153163
}
@@ -298,6 +308,11 @@ func (cad *cadEngine) UpdatePackageRevision(ctx context.Context, version int, re
298308
return nil, err
299309
}
300310

311+
klog.Infof("[CaD Engine] Processing lifecycle change and preparing update for PackageRevision: %s", repoPr.Key().K8SName())
312+
defer func() {
313+
klog.V(3).Infof("[CaD Engine] Lifecycle change processed and delegated to cache for PackageRevision: %s", repoPr.Key().K8SName())
314+
}()
315+
301316
// Check if the PackageRevision is in the terminating state and
302317
// and this request removes the last finalizer.
303318
repoPkgRev := repoPr
@@ -402,6 +417,11 @@ func (cad *cadEngine) DeletePackageRevision(ctx context.Context, repositoryObj *
402417
ctx, span := tracer.Start(ctx, "cadEngine::DeletePackageRevision", trace.WithAttributes())
403418
defer span.End()
404419

420+
klog.Infof("[CaD Engine] Preparing to delete PackageRevision: %s", pr2Del.Key().K8SName())
421+
defer func() {
422+
klog.V(3).Infof("[CaD Engine] PackageRevision deletion delegated to cache: %s", pr2Del.Key().K8SName())
423+
}()
424+
405425
repo, err := cad.cache.OpenRepository(ctx, repositoryObj)
406426
if err != nil {
407427
return err
@@ -444,6 +464,12 @@ func (cad *cadEngine) UpdatePackageResources(ctx context.Context, repositoryObj
444464
ctx, span := tracer.Start(ctx, "cadEngine::UpdatePackageResources", trace.WithAttributes())
445465
defer span.End()
446466

467+
pkgKey := pr2Update.Key().K8SName()
468+
klog.Infof("[CaD Engine] Processing resource updates for PackageRevision: %s", pkgKey)
469+
defer func() {
470+
klog.V(3).Infof("[CaD Engine] Resource updates processed and delegated to cache for PackageRevision: %s", pkgKey)
471+
}()
472+
447473
rev, err := pr2Update.GetPackageRevision(ctx)
448474
if err != nil {
449475
return nil, nil, err

pkg/externalrepo/git/git.go

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,15 @@ func (r *gitRepository) CreatePackageRevisionDraft(ctx context.Context, obj *por
435435
_, span := tracer.Start(ctx, "gitRepository::CreatePackageRevisionDraft", trace.WithAttributes())
436436
defer span.End()
437437

438+
pkgKey := repository.FromFullPathname(r.Key(), obj.Spec.PackageName)
439+
if err := util.ValidPkgRevObjName(r.Key().Name, pkgKey.Path, pkgKey.Package, obj.Spec.WorkspaceName); err != nil {
440+
return nil, fmt.Errorf("failed to create packagerevision: %w", err)
441+
}
442+
klog.Infof("[Git] Creating in-memory draft object started for PackageRevision: %s", pkgKey.K8SName())
443+
defer func() {
444+
klog.V(3).Infof("[Git] Creating in-memory draft object completed for PackageRevision: %s", pkgKey.K8SName())
445+
}()
446+
438447
var base plumbing.Hash
439448
refName := r.branch.RefInLocal()
440449
err := r.sharedDir.WithRLock(func(repo *git.Repository) error {
@@ -453,11 +462,6 @@ func (r *gitRepository) CreatePackageRevisionDraft(ctx context.Context, obj *por
453462
return nil, err
454463
}
455464

456-
pkgKey := repository.FromFullPathname(r.Key(), obj.Spec.PackageName)
457-
if err := util.ValidPkgRevObjName(r.Key().Name, pkgKey.Path, pkgKey.Package, obj.Spec.WorkspaceName); err != nil {
458-
return nil, fmt.Errorf("failed to create packagerevision: %w", err)
459-
}
460-
461465
draftKey := repository.PackageRevisionKey{
462466
PkgKey: pkgKey,
463467
WorkspaceName: obj.Spec.WorkspaceName,
@@ -490,6 +494,11 @@ func (r *gitRepository) UpdatePackageRevision(ctx context.Context, old repositor
490494
return nil, fmt.Errorf("cannot update non-git package %T", old)
491495
}
492496

497+
klog.Infof("[Git] Loading draft for update started for PackageRevision: %s", old.Key().K8SName())
498+
defer func() {
499+
klog.V(3).Infof("[Git] Loading draft for update completed for PackageRevision: %s", old.Key().K8SName())
500+
}()
501+
493502
ref := oldGitPackage.ref
494503
if ref == nil {
495504
return nil, fmt.Errorf("cannot update final package")
@@ -546,6 +555,10 @@ func (r *gitRepository) DeletePackageRevision(ctx context.Context, pr2Delete rep
546555
referenceName = ""
547556
}
548557
}
558+
klog.Infof("[Git] Deleting branch from Git repository started for PackageRevision: %s", pr2Delete.Key().K8SName())
559+
defer func() {
560+
klog.V(3).Infof("[Git] Deleting branch from Git repository completed for PackageRevision: %s", pr2Delete.Key().K8SName())
561+
}()
549562

550563
if referenceName == "" {
551564
// This is an internal error. In some rare cases (see GetPackageRevision below) we create
@@ -1371,6 +1384,11 @@ func (r *gitRepository) pushAndCleanup(ctx context.Context, ph *pushRefSpecBuild
13711384
ctx, span := tracer.Start(ctx, "gitRepository::pushAndCleanup", trace.WithAttributes())
13721385
defer span.End()
13731386

1387+
klog.Infof("[Git] Pushing changes to remote Git repository %s started", r.key.Name)
1388+
defer func() {
1389+
klog.V(3).Infof("[Git] Pushing changes to remote Git repository %s completed", r.key.Name)
1390+
}()
1391+
13741392
maxRetries := r.repoOperationRetryAttempts
13751393
for attempt := 1; attempt <= maxRetries; attempt++ {
13761394
if err := r.doGitWithAuth(ctx, func(auth transport.AuthMethod) error {
@@ -1676,6 +1694,11 @@ func (r *gitRepository) UpdateLifecycle(ctx context.Context, pkgRev *gitPackageR
16761694
ctx, span := tracer.Start(ctx, "gitRepository::UpdateLifecycle", trace.WithAttributes())
16771695
defer span.End()
16781696

1697+
klog.Infof("[Git] Updating lifecycle from %s to %s started for PackageRevision: %s", pkgRev.Lifecycle(ctx), newLifecycle, pkgRev.Key().K8SName())
1698+
defer func() {
1699+
klog.V(3).Infof("[Git] Updating lifecycle from %s to %s completed for PackageRevision: %s", pkgRev.Lifecycle(ctx), newLifecycle, pkgRev.Key().K8SName())
1700+
}()
1701+
16791702
r.mutex.Lock()
16801703
old := r.getLifecycle(pkgRev)
16811704
if !porchapi.LifecycleIsPublished(old) {
@@ -1784,6 +1807,10 @@ func (r *gitRepository) ClosePackageRevisionDraft(ctx context.Context, prd repos
17841807
defer span.End()
17851808

17861809
d := prd.(*gitPackageRevisionDraft)
1810+
klog.Infof("[Git] Changing lifecycle to %s and pushing to Git started for PackageRevision: %s", d.lifecycle, d.Key().K8SName())
1811+
defer func() {
1812+
klog.V(3).Infof("[Git] Changing lifecycle to %s and pushing to Git completed for PackageRevision: %s", d.lifecycle, d.Key().K8SName())
1813+
}()
17871814

17881815
refSpecs := newPushRefSpecBuilder()
17891816
commitOps := NewCommitOperationBuilder()

pkg/registry/porch/packagecommon.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ func (r *packageCommon) updatePackageRevision(ctx context.Context, name string,
327327
defer span.End()
328328

329329
// TODO: Is this all boilerplate??
330+
klog.V(3).Infof("PackageRevision update validation started: %s", name)
330331

331332
namespace, namespaced := genericapirequest.NamespaceFrom(ctx)
332333
if !namespaced {
@@ -394,6 +395,15 @@ func (r *packageCommon) updatePackageRevision(ctx context.Context, name string,
394395
return nil, false, apierrors.NewBadRequest(fmt.Sprintf("expected PackageRevision object, got %T", newRuntimeObj))
395396
}
396397

398+
klog.V(3).Infof("PackageRevision update validation completed: %s", name)
399+
400+
if oldApiPkgRev != nil {
401+
action := getLifecycleTransition(oldApiPkgRev.(*porchapi.PackageRevision), newApiPkgRev)
402+
klog.Infof("[API] %s operation started for PackageRevision: %s", action, name)
403+
} else {
404+
klog.Infof("[API] Update operation started for PackageRevision: %s", name)
405+
}
406+
397407
prKey, err := repository.PkgRevK8sName2Key(namespace, name)
398408
if err != nil {
399409
return nil, false, err
@@ -448,7 +458,7 @@ func (r *packageCommon) updatePackageRevision(ctx context.Context, name string,
448458
}
449459

450460
if action := getLifecycleTransition(oldApiPkgRev.(*porchapi.PackageRevision), newApiPkgRev); action != "" {
451-
klog.Infof("%s operation completed for package revision: %s", action, name)
461+
klog.Infof("[API] %s operation completed for PackageRevision: %s", action, name)
452462
}
453463

454464
return updated, false, nil
@@ -478,7 +488,7 @@ func getLifecycleTransition(oldPkgRev, newPkgRev *porchapi.PackageRevision) stri
478488
newPkgRev.Spec.Lifecycle == porchapi.PackageRevisionLifecyclePublished {
479489
return "Approve"
480490
}
481-
// Approve or Reject Operation: Published -> Proposed
491+
// Approve or Reject Operation: DeletionProposed -> Published
482492
if oldPkgRev.Spec.Lifecycle == porchapi.PackageRevisionLifecycleDeletionProposed &&
483493
newPkgRev.Spec.Lifecycle == porchapi.PackageRevisionLifecyclePublished {
484494
return "Approve/Reject"

0 commit comments

Comments
 (0)