Skip to content

Commit

Permalink
database: Remove PartitionKeys container
Browse files Browse the repository at this point in the history
azcosmos v1.3.0 partially supports cross-partition queries [1],
well enough for our purpose anyway.

The PartitionKeys container hack is no longer needed.

[1] https://github.com/Azure/azure-sdk-for-go/releases/tag/sdk/data/azcosmos/v1.3.0
  • Loading branch information
Matthew Barnes committed Feb 27, 2025
1 parent 8e370a2 commit b9f9402
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 140 deletions.
3 changes: 0 additions & 3 deletions dev-infrastructure/modules/rp-cosmos.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ var containers = [
name: 'Resources'
defaultTtl: -1 // enable ttl on items
}
{
name: 'PartitionKeys'
}
{
name: 'Billing'
}
Expand Down
44 changes: 23 additions & 21 deletions internal/database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,9 @@ import (
)

const (
billingContainer = "Billing"
locksContainer = "Locks"
resourcesContainer = "Resources"
partitionKeysContainer = "PartitionKeys"
billingContainer = "Billing"
locksContainer = "Locks"
resourcesContainer = "Resources"

operationTimeToLive = 604800 // 7 days
)
Expand Down Expand Up @@ -150,10 +149,9 @@ var _ DBClient = &cosmosDBClient{}

// cosmosDBClient defines the needed values to perform CRUD operations against Cosmos DB.
type cosmosDBClient struct {
database *azcosmos.DatabaseClient
resources *azcosmos.ContainerClient
partitionKeys *azcosmos.ContainerClient
lockClient *LockClient
database *azcosmos.DatabaseClient
resources *azcosmos.ContainerClient
lockClient *LockClient
}

// NewDBClient instantiates a DBClient from a Cosmos DatabaseClient instance
Expand All @@ -162,7 +160,6 @@ func NewDBClient(ctx context.Context, database *azcosmos.DatabaseClient) (DBClie
// NewContainer only fails if the container ID argument is
// empty, so we can safely disregard the error return value.
resources, _ := database.NewContainer(resourcesContainer)
partitionKeys, _ := database.NewContainer(partitionKeysContainer)
locks, _ := database.NewContainer(locksContainer)

lockClient, err := NewLockClient(ctx, locks)
Expand All @@ -171,10 +168,9 @@ func NewDBClient(ctx context.Context, database *azcosmos.DatabaseClient) (DBClie
}

return &cosmosDBClient{
database: database,
resources: resources,
partitionKeys: partitionKeys,
lockClient: lockClient,
database: database,
resources: resources,
lockClient: lockClient,
}, nil
}

Expand Down Expand Up @@ -501,13 +497,6 @@ func (d *cosmosDBClient) CreateSubscriptionDoc(ctx context.Context, subscription
return fmt.Errorf("failed to create Subscriptions container item for '%s': %w", subscriptionID, err)
}

// Add an item to the PartitionKeys container, which serves
// as a partition key index for the Resources container.
err = upsertPartitionKey(ctx, d.partitionKeys, subscriptionID)
if err != nil {
return fmt.Errorf("failed to upsert partition keys index for '%s': %w", subscriptionID, err)
}

return nil
}

Expand Down Expand Up @@ -552,7 +541,20 @@ func (d *cosmosDBClient) UpdateSubscriptionDoc(ctx context.Context, subscription
}

func (d *cosmosDBClient) ListAllSubscriptionDocs() DBClientIterator[arm.Subscription] {
return listPartitionKeys(d.partitionKeys, d)
query := "SELECT * FROM c WHERE STRINGEQUALS(c.resourceType, @resourceType, true)"
opt := azcosmos.QueryOptions{
QueryParameters: []azcosmos.QueryParameter{
{
Name: "@resourceType",
Value: azcorearm.SubscriptionResourceType.String(),
},
},
}

// Empty partition key triggers a cross-partition query.
pager := d.resources.NewQueryItemsPager(query, azcosmos.NewPartitionKey(), &opt)

return newQueryItemsIterator[arm.Subscription](pager)
}

// NewCosmosDatabaseClient instantiates a generic Cosmos database client.
Expand Down
116 changes: 0 additions & 116 deletions internal/database/partitionkeys.go

This file was deleted.

0 comments on commit b9f9402

Please sign in to comment.