satellite/accounting/tally: calculate pending object count

Change-Id: I4ee6072f4c60fafd809e8184ada9c1abf7edd8aa
This commit is contained in:
Michal Niewrzal 2023-05-23 15:58:14 +02:00
parent c559df6a1b
commit aea3baf6a9
4 changed files with 24 additions and 13 deletions

View File

@ -11,9 +11,10 @@ import (
type BucketTally struct {
metabase.BucketLocation
ObjectCount int64
TotalSegments int64
TotalBytes int64
ObjectCount int64
PendingObjectCount int64
TotalSegments int64
TotalBytes int64
MetadataSize int64
}
@ -21,6 +22,7 @@ type BucketTally struct {
// Combine aggregates all the tallies.
func (s *BucketTally) Combine(o *BucketTally) {
s.ObjectCount += o.ObjectCount
s.PendingObjectCount += o.PendingObjectCount
s.TotalSegments += o.TotalSegments
s.TotalBytes += o.TotalBytes
}

View File

@ -232,6 +232,7 @@ func (service *Service) Tally(ctx context.Context) (err error) {
monAccounting.IntVal("total_objects").Observe(total.ObjectCount) //mon:locked
monAccounting.IntVal("total_segments").Observe(total.Segments()) //mon:locked
monAccounting.IntVal("total_bytes").Observe(total.Bytes()) //mon:locked
monAccounting.IntVal("total_pending_objects").Observe(total.PendingObjectCount)
}
// return errors if something went wrong.
@ -319,6 +320,7 @@ func (observer *BucketTallyCollector) fillBucketTallies(ctx context.Context, sta
bucket.TotalBytes = tally.TotalBytes
bucket.MetadataSize = tally.MetadataSize
bucket.ObjectCount = tally.ObjectCount
bucket.PendingObjectCount = tally.PendingObjectCount
}
lastBucketLocation = bucketLocations[len(bucketLocations)-1]

View File

@ -411,7 +411,8 @@ func (it *loopSegmentIterator) scanItem(ctx context.Context, item *LoopSegmentEn
type BucketTally struct {
BucketLocation
ObjectCount int64
ObjectCount int64
PendingObjectCount int64
TotalSegments int64
TotalBytes int64
@ -452,7 +453,10 @@ func (db *DB) CollectBucketTallies(ctx context.Context, opts CollectBucketTallie
}
err = withRows(db.db.QueryContext(ctx, `
SELECT project_id, bucket_name, SUM(total_encrypted_size), SUM(segment_count), COALESCE(SUM(length(encrypted_metadata)), 0), count(*)
SELECT
project_id, bucket_name,
SUM(total_encrypted_size), SUM(segment_count), COALESCE(SUM(length(encrypted_metadata)), 0),
count(*), count(*) FILTER (WHERE status = 1)
FROM objects
`+db.asOfTime(opts.AsOfSystemTime, opts.AsOfSystemInterval)+`
WHERE (project_id, bucket_name) BETWEEN ($1, $2) AND ($3, $4) AND
@ -467,6 +471,7 @@ func (db *DB) CollectBucketTallies(ctx context.Context, opts CollectBucketTallie
&bucketTally.ProjectID, &bucketTally.BucketName,
&bucketTally.TotalBytes, &bucketTally.TotalSegments,
&bucketTally.MetadataSize, &bucketTally.ObjectCount,
&bucketTally.PendingObjectCount,
); err != nil {
return Error.New("unable to query bucket tally: %w", err)
}

View File

@ -850,20 +850,22 @@ func TestCollectBucketTallies(t *testing.T) {
ProjectID: pending.ProjectID,
BucketName: pending.BucketName,
},
ObjectCount: 1,
TotalSegments: 0,
TotalBytes: 0,
MetadataSize: 1024,
ObjectCount: 1,
PendingObjectCount: 1,
TotalSegments: 0,
TotalBytes: 0,
MetadataSize: 1024,
},
{
BucketLocation: metabase.BucketLocation{
ProjectID: committed.ProjectID,
BucketName: committed.BucketName,
},
ObjectCount: 1,
TotalSegments: 1,
TotalBytes: 1024,
MetadataSize: 0,
ObjectCount: 1,
PendingObjectCount: 0,
TotalSegments: 1,
TotalBytes: 1024,
MetadataSize: 0,
},
}