5bc4c254d4
This has been a cause of some confusion, even though the fields are labeled as being copies of config values. Having them be under a field explicitly named "Config" makes this clearer, plus, allows the values to be passed in simply as a copy of the Config struct from the satellite, rather than copying the fields individually (which can be error-prone, particularly as the AuditCount field in UpdateRequest is apparently not the same thing as the AuditCount field in reputation.Config). Refs: https://github.com/storj/storj/issues/4601 Change-Id: I386953347b71068596618616934aa28e3245cdc1
93 lines
2.2 KiB
Go
93 lines
2.2 KiB
Go
// Copyright (C) 2021 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package reputation_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"storj.io/common/storj"
|
|
"storj.io/common/testrand"
|
|
"storj.io/storj/satellite"
|
|
"storj.io/storj/satellite/reputation"
|
|
"storj.io/storj/satellite/satellitedb/satellitedbtest"
|
|
)
|
|
|
|
func BenchmarkReputation(b *testing.B) {
|
|
satellitedbtest.Bench(b, func(b *testing.B, db satellite.DB) {
|
|
const (
|
|
TotalNodeCount = 211
|
|
OfflineCount = 10
|
|
)
|
|
|
|
reputationdb := db.Reputation()
|
|
ctx := context.Background()
|
|
|
|
var all []storj.NodeID
|
|
for i := 0; i < TotalNodeCount; i++ {
|
|
id := testrand.NodeID()
|
|
all = append(all, id)
|
|
}
|
|
|
|
b.Run("UpdateStatsSuccess", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
id := all[i%len(all)]
|
|
_, err := reputationdb.Update(ctx, reputation.UpdateRequest{
|
|
NodeID: id,
|
|
AuditOutcome: reputation.AuditSuccess,
|
|
Config: reputation.Config{
|
|
AuditHistory: testAuditHistoryConfig(),
|
|
},
|
|
}, time.Now())
|
|
require.NoError(b, err)
|
|
}
|
|
})
|
|
|
|
b.Run("UpdateStatsFailure", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
id := all[i%len(all)]
|
|
_, err := reputationdb.Update(ctx, reputation.UpdateRequest{
|
|
NodeID: id,
|
|
AuditOutcome: reputation.AuditFailure,
|
|
Config: reputation.Config{
|
|
AuditHistory: testAuditHistoryConfig(),
|
|
},
|
|
}, time.Now())
|
|
require.NoError(b, err)
|
|
}
|
|
})
|
|
|
|
b.Run("UpdateStatsUnknown", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
id := all[i%len(all)]
|
|
_, err := reputationdb.Update(ctx, reputation.UpdateRequest{
|
|
NodeID: id,
|
|
AuditOutcome: reputation.AuditUnknown,
|
|
Config: reputation.Config{
|
|
AuditHistory: testAuditHistoryConfig(),
|
|
},
|
|
}, time.Now())
|
|
require.NoError(b, err)
|
|
}
|
|
})
|
|
|
|
b.Run("UpdateStatsOffline", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
id := all[i%len(all)]
|
|
_, err := reputationdb.Update(ctx, reputation.UpdateRequest{
|
|
NodeID: id,
|
|
AuditOutcome: reputation.AuditOffline,
|
|
Config: reputation.Config{
|
|
AuditHistory: testAuditHistoryConfig(),
|
|
},
|
|
}, time.Now())
|
|
require.NoError(b, err)
|
|
}
|
|
})
|
|
})
|
|
}
|