Skip to content

Commit 6f02215

Browse files
authored
Fix advertise metrics on events (#1144)
2 parents af86a12 + 546f024 commit 6f02215

4 files changed

Lines changed: 24 additions & 21 deletions

File tree

pkg/metrics/metrics.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@ var (
2929
Name: "spegel_resolve_duration_seconds",
3030
Help: "The duration for router to resolve a peer.",
3131
}, []string{"router"})
32-
AdvertisedImages = prometheus.NewGaugeVec(prometheus.GaugeOpts{
33-
Name: "spegel_advertised_images",
34-
Help: "Number of images advertised to be available.",
35-
}, []string{"registry"})
3632
AdvertisedImageTags = prometheus.NewGaugeVec(prometheus.GaugeOpts{
3733
Name: "spegel_advertised_image_tags",
3834
Help: "Number of image tags advertised to be available.",
@@ -41,19 +37,18 @@ var (
4137
Name: "spegel_advertised_image_digests",
4238
Help: "Number of image digests advertised to be available.",
4339
}, []string{"registry"})
44-
AdvertisedKeys = prometheus.NewGaugeVec(prometheus.GaugeOpts{
45-
Name: "spegel_advertised_keys",
46-
Help: "Number of keys advertised to be available.",
40+
AdvertisedContentDigests = prometheus.NewGaugeVec(prometheus.GaugeOpts{
41+
Name: "spegel_advertised_content_digests",
42+
Help: "Number of content digests advertised to be available.",
4743
}, []string{"registry"})
4844
)
4945

5046
func Register() {
5147
DefaultRegisterer.MustRegister(MirrorRequestsTotal)
5248
DefaultRegisterer.MustRegister(MirrorLastSuccessTimestamp)
5349
DefaultRegisterer.MustRegister(ResolveDurHistogram)
54-
DefaultRegisterer.MustRegister(AdvertisedImages)
5550
DefaultRegisterer.MustRegister(AdvertisedImageTags)
5651
DefaultRegisterer.MustRegister(AdvertisedImageDigests)
57-
DefaultRegisterer.MustRegister(AdvertisedKeys)
52+
DefaultRegisterer.MustRegister(AdvertisedContentDigests)
5853
httpx.RegisterMetrics(DefaultRegisterer)
5954
}

pkg/oci/containerd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ func (c *Containerd) handleEvent(ctx context.Context, envelope events.Envelope,
455455
return fmt.Errorf("manifest with digest %s still exists", img.Digest.String())
456456
}, retryOpts...)
457457
if err != nil {
458-
logr.FromContextOrDiscard(ctx).Error(err, "image manifest has not been deleted")
458+
return nil, fmt.Errorf("image manifest has not been deleted: %w", err)
459459
}
460460
// Create delete events for contents that has been removed.
461461
events := []OCIEvent{}

pkg/state/state.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,8 @@ func Track(ctx context.Context, ociStore oci.Store, router routing.Router, opts
5353
if ok {
5454
keys = append(keys, tagName)
5555
metrics.AdvertisedImageTags.WithLabelValues(img.Registry).Inc()
56-
metrics.AdvertisedKeys.WithLabelValues(img.Registry).Inc()
5756
}
58-
metrics.AdvertisedImages.WithLabelValues(img.Registry).Inc()
5957
metrics.AdvertisedImageDigests.WithLabelValues(img.Registry).Inc()
60-
metrics.AdvertisedKeys.WithLabelValues(img.Registry).Inc()
6158
}
6259
contents, err := ociStore.ListContent(ctx)
6360
if err != nil {
@@ -69,7 +66,7 @@ func Track(ctx context.Context, ociStore oci.Store, router routing.Router, opts
6966
continue
7067
}
7168
for _, ref := range refs {
72-
metrics.AdvertisedKeys.WithLabelValues(ref.Registry).Inc()
69+
metrics.AdvertisedContentDigests.WithLabelValues(ref.Registry).Inc()
7370
}
7471
keys = append(keys, refs[0].Digest.String())
7572
}
@@ -79,8 +76,7 @@ func Track(ctx context.Context, ociStore oci.Store, router routing.Router, opts
7976
}
8077

8178
// Watch for OCI events.
82-
log := logr.FromContextOrDiscard(ctx)
83-
log.Info("waiting for store events")
79+
logr.FromContextOrDiscard(ctx).Info("waiting for store events")
8480
for {
8581
select {
8682
case <-ctx.Done():
@@ -89,25 +85,38 @@ func Track(ctx context.Context, ociStore oci.Store, router routing.Router, opts
8985
if !ok {
9086
return errors.New("event channel closed")
9187
}
92-
log.Info("OCI event", "ref", event.Reference.String(), "type", event.Type)
93-
err := handleEvent(ctx, router, event)
88+
err := handleEvent(ctx, router, event, cfg.Filters)
9489
if err != nil {
95-
log.Error(err, "could not handle event")
90+
logr.FromContextOrDiscard(ctx).Error(err, "could not handle event")
9691
continue
9792
}
9893
}
9994
}
10095
}
10196

102-
func handleEvent(ctx context.Context, router routing.Router, event oci.OCIEvent) error {
97+
func handleEvent(ctx context.Context, router routing.Router, event oci.OCIEvent, filters []oci.Filter) error {
98+
if oci.MatchesFilter(event.Reference, filters) {
99+
return nil
100+
}
101+
logr.FromContextOrDiscard(ctx).Info("OCI event", "ref", event.Reference.String(), "type", event.Type)
103102
switch event.Type {
104103
case oci.CreateEvent:
104+
if event.Reference.Tag != "" {
105+
metrics.AdvertisedImageTags.WithLabelValues(event.Reference.Registry).Inc()
106+
} else {
107+
metrics.AdvertisedContentDigests.WithLabelValues(event.Reference.Registry).Inc()
108+
}
105109
err := router.Advertise(ctx, []string{event.Reference.Identifier()})
106110
if err != nil {
107111
return err
108112
}
109113
return nil
110114
case oci.DeleteEvent:
115+
if event.Reference.Tag != "" {
116+
metrics.AdvertisedImageTags.WithLabelValues(event.Reference.Registry).Dec()
117+
} else {
118+
metrics.AdvertisedContentDigests.WithLabelValues(event.Reference.Registry).Dec()
119+
}
111120
err := router.Withdraw(ctx, []string{event.Reference.Identifier()})
112121
if err != nil {
113122
return err

test/integration/containerd/containerd_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ func TestContainerdPull(t *testing.T) {
157157
}
158158

159159
t.Log("Pulling image with CRI", benchmarkImg.String())
160-
fmt.Println(benchmarkImg.String())
161160
_, err = imageClient.PullImage(t.Context(), &runtimeapi.PullImageRequest{Image: &runtimeapi.ImageSpec{Image: benchmarkImg.String()}})
162161
require.NoError(t, err)
163162
ensureEvents(t, eventCh, expectedCreateEvents)

0 commit comments

Comments
 (0)