You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
71 lines
2.2 KiB
5 years ago
|
package shardingconfig
|
||
|
|
||
|
import "github.com/harmony-one/harmony/internal/ctxerror"
|
||
|
|
||
|
type instance struct {
|
||
|
numShards uint32
|
||
|
numNodesPerShard int
|
||
|
numHarmonyOperatedNodesPerShard int
|
||
|
}
|
||
|
|
||
|
// NewInstance creates and validates a new sharding configuration based
|
||
|
// upon given parameters.
|
||
|
func NewInstance(
|
||
|
numShards uint32, numNodesPerShard, numHarmonyOperatedNodesPerShard int,
|
||
|
) (Instance, error) {
|
||
|
if numShards < 1 {
|
||
|
return nil, ctxerror.New("sharding config must have at least one shard",
|
||
|
"numShards", numShards)
|
||
|
}
|
||
|
if numNodesPerShard < 1 {
|
||
|
return nil, ctxerror.New("each shard must have at least one node",
|
||
|
"numNodesPerShard", numNodesPerShard)
|
||
|
}
|
||
|
if numHarmonyOperatedNodesPerShard < 0 {
|
||
|
return nil, ctxerror.New("Harmony-operated nodes cannot be negative",
|
||
|
"numHarmonyOperatedNodesPerShard", numHarmonyOperatedNodesPerShard)
|
||
|
}
|
||
|
if numHarmonyOperatedNodesPerShard > numNodesPerShard {
|
||
|
return nil, ctxerror.New(""+
|
||
|
"number of Harmony-operated nodes cannot exceed "+
|
||
|
"overall number of nodes per shard",
|
||
|
"numHarmonyOperatedNodesPerShard", numHarmonyOperatedNodesPerShard,
|
||
|
"numNodesPerShard", numNodesPerShard)
|
||
|
}
|
||
|
return instance{
|
||
|
numShards: numShards,
|
||
|
numNodesPerShard: numNodesPerShard,
|
||
|
numHarmonyOperatedNodesPerShard: numHarmonyOperatedNodesPerShard,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
// MustNewInstance creates a new sharding configuration based upon
|
||
|
// given parameters. It panics if parameter validation fails.
|
||
|
// It is intended to be used for static initialization.
|
||
|
func MustNewInstance(
|
||
|
numShards uint32, numNodesPerShard, numHarmonyOperatedNodesPerShard int,
|
||
|
) Instance {
|
||
|
sc, err := NewInstance(
|
||
|
numShards, numNodesPerShard, numHarmonyOperatedNodesPerShard)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
return sc
|
||
|
}
|
||
|
|
||
|
// NumShards returns the number of shards in the network.
|
||
|
func (sc instance) NumShards() uint32 {
|
||
|
return sc.numShards
|
||
|
}
|
||
|
|
||
|
// NumNodesPerShard returns number of nodes in each shard.
|
||
|
func (sc instance) NumNodesPerShard() int {
|
||
|
return sc.numNodesPerShard
|
||
|
}
|
||
|
|
||
|
// NumHarmonyOperatedNodesPerShard returns number of nodes in each shard
|
||
|
// that are operated by Harmony.
|
||
|
func (sc instance) NumHarmonyOperatedNodesPerShard() int {
|
||
|
return sc.numHarmonyOperatedNodesPerShard
|
||
|
}
|