Avoid growing slice when mapping points to shards
parent
d7c5dd0a3e
commit
8aeda47a8e
|
@ -98,13 +98,15 @@ func NewPointsWriter() *PointsWriter {
|
|||
|
||||
// ShardMapping contains a mapping of shards to points.
|
||||
type ShardMapping struct {
|
||||
n int
|
||||
Points map[uint64][]models.Point // The points associated with a shard ID
|
||||
Shards map[uint64]*meta.ShardInfo // The shards that have been mapped, keyed by shard ID
|
||||
}
|
||||
|
||||
// NewShardMapping creates an empty ShardMapping.
|
||||
func NewShardMapping() *ShardMapping {
|
||||
func NewShardMapping(n int) *ShardMapping {
|
||||
return &ShardMapping{
|
||||
n: n,
|
||||
Points: map[uint64][]models.Point{},
|
||||
Shards: map[uint64]*meta.ShardInfo{},
|
||||
}
|
||||
|
@ -112,6 +114,9 @@ func NewShardMapping() *ShardMapping {
|
|||
|
||||
// MapPoint adds the point to the ShardMapping, associated with the given shardInfo.
|
||||
func (s *ShardMapping) MapPoint(shardInfo *meta.ShardInfo, p models.Point) {
|
||||
if cap(s.Points[shardInfo.ID]) < s.n {
|
||||
s.Points[shardInfo.ID] = make([]models.Point, 0, s.n)
|
||||
}
|
||||
s.Points[shardInfo.ID] = append(s.Points[shardInfo.ID], p)
|
||||
s.Shards[shardInfo.ID] = shardInfo
|
||||
}
|
||||
|
@ -218,7 +223,7 @@ func (w *PointsWriter) MapShards(wp *WritePointsRequest) (*ShardMapping, error)
|
|||
list = list.Append(*sg)
|
||||
}
|
||||
|
||||
mapping := NewShardMapping()
|
||||
mapping := NewShardMapping(len(wp.Points))
|
||||
for _, p := range wp.Points {
|
||||
sg := list.ShardGroupAt(p.Time())
|
||||
if sg == nil {
|
||||
|
|
|
@ -286,7 +286,7 @@ func TestPointsWriter_WritePoints(t *testing.T) {
|
|||
|
||||
// copy to prevent data race
|
||||
theTest := test
|
||||
sm := coordinator.NewShardMapping()
|
||||
sm := coordinator.NewShardMapping(16)
|
||||
sm.MapPoint(
|
||||
&meta.ShardInfo{ID: uint64(1), Owners: []meta.ShardOwner{
|
||||
{NodeID: 1},
|
||||
|
|
Loading…
Reference in New Issue