Skip to content

Commit 0a6868a

Browse files
authored
Merge pull request #1469 from openmeterio/feat/get-expired-entitlements-for-multiple-namespaces
feat: fetch expired entitlements for multiple namespaces
2 parents 2506dab + f8fef0f commit 0a6868a

File tree

8 files changed

+25
-8
lines changed

8 files changed

+25
-8
lines changed

openmeter/ent/db/migrate/schema.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openmeter/ent/schema/entitlement.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ func (Entitlement) Indexes() []ent.Index {
5555
index.Fields("namespace", "id", "subject_key"),
5656
index.Fields("namespace", "feature_id", "id"),
5757
index.Fields("namespace", "current_usage_period_end"),
58+
// index for collecting all the entitlements with due resets
59+
index.Fields("current_usage_period_end", "deleted_at"),
5860
}
5961
}
6062

openmeter/entitlement/adapter/entitlement.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -409,15 +409,19 @@ func (a *entitlementDBAdapter) UpdateEntitlementUsagePeriod(ctx context.Context,
409409
return err
410410
}
411411

412-
func (a *entitlementDBAdapter) ListEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespace string, expiredBefore time.Time) ([]entitlement.Entitlement, error) {
413-
res, err := withLatestUsageReset(a.db.Entitlement.Query(), []string{namespace}).
412+
func (a *entitlementDBAdapter) ListEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespaces []string, expiredBefore time.Time) ([]entitlement.Entitlement, error) {
413+
query := withLatestUsageReset(a.db.Entitlement.Query(), namespaces).
414414
Where(
415-
db_entitlement.Namespace(namespace),
416415
db_entitlement.CurrentUsagePeriodEndNotNil(),
417416
db_entitlement.CurrentUsagePeriodEndLTE(expiredBefore),
418417
db_entitlement.Or(db_entitlement.DeletedAtIsNil(), db_entitlement.DeletedAtGT(clock.Now())),
419-
).
420-
All(ctx)
418+
)
419+
420+
if len(namespaces) > 0 {
421+
query = query.Where(db_entitlement.NamespaceIn(namespaces...))
422+
}
423+
424+
res, err := query.All(ctx)
421425
if err != nil {
422426
return nil, err
423427
}

openmeter/entitlement/metered/reset.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (e *connector) ResetEntitlementUsage(ctx context.Context, entitlementID mod
7373
}
7474

7575
func (c *connector) ResetEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespace string, highwatermark time.Time) ([]models.NamespacedID, error) {
76-
entitlements, err := c.entitlementRepo.ListEntitlementsWithExpiredUsagePeriod(ctx, namespace, highwatermark)
76+
entitlements, err := c.entitlementRepo.ListEntitlementsWithExpiredUsagePeriod(ctx, []string{namespace}, highwatermark)
7777
if err != nil {
7878
return nil, fmt.Errorf("failed to list entitlements with due reset: %w", err)
7979
}

openmeter/entitlement/repository.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ type EntitlementRepo interface {
3232
LockEntitlementForTx(ctx context.Context, entitlementID models.NamespacedID) error
3333

3434
UpdateEntitlementUsagePeriod(ctx context.Context, entitlementID models.NamespacedID, params UpdateEntitlementUsagePeriodParams) error
35-
ListEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespace string, highwatermark time.Time) ([]Entitlement, error)
35+
ListEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespaces []string, highwatermark time.Time) ([]Entitlement, error)
3636

3737
entutils.TxCreator
3838
entutils.TxUser[EntitlementRepo]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- reverse: create index "entitlement_current_usage_period_end_deleted_at" to table: "entitlements"
2+
DROP INDEX "entitlement_current_usage_period_end_deleted_at";
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- create index "entitlement_current_usage_period_end_deleted_at" to table: "entitlements"
2+
CREATE INDEX "entitlement_current_usage_period_end_deleted_at" ON "entitlements" ("current_usage_period_end", "deleted_at");

tools/migrate/migrations/atlas.sum

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1-
h1:EPap+DaNoXsLQC61DQvaBbCLBcYaGP1DHSglnzexChY=
1+
h1:jmrq8Fzq+/Ds0gmHmWUNruJ3jzKFhVVBYSDlbtordSA=
22
20240826120919_init.down.sql h1:AIbgwwngjkJEYa3yRZsIXQyBa2+qoZttwMXHxXEbHLI=
33
20240826120919_init.up.sql h1:/hYHWF3Z3dab8SMKnw99ixVktCuJe2bAw5wstCZIEN8=
4+
20240903155435_entitlement-expired-index.down.sql h1:np2xgYs3KQ2z7qPBcobtGNhqWQ3V8NwEP9E5U3TmpSA=
5+
20240903155435_entitlement-expired-index.up.sql h1:HegNgovI3MQxQMd/072kOchfm5B37SXzODZIteOwX78=

0 commit comments

Comments
 (0)