in cluster/cluster.go [215:240]
func NewCluster(segConfigs []SegConfig) *Cluster {
cluster := Cluster{}
cluster.Segments = segConfigs
cluster.ByContent = make(map[int][]*SegConfig, 0)
cluster.ByHost = make(map[string][]*SegConfig, 0)
cluster.Executor = &GPDBExecutor{}
for i := range cluster.Segments {
segment := &cluster.Segments[i]
cluster.ContentIDs = append(cluster.ContentIDs, segment.ContentID)
cluster.ByContent[segment.ContentID] = append(cluster.ByContent[segment.ContentID], segment)
segmentList := cluster.ByContent[segment.ContentID]
if len(segmentList) == 2 && segmentList[0].Role == "m" {
/*
* GetSegmentConfiguration always returns primaries before mirrors,
* but we can't guarantee the []SegConfig passed in was created by
* GetSegmentConfiguration, so if the mirror is first, swap them.
*/
segmentList[0], segmentList[1] = segmentList[1], segmentList[0]
}
cluster.ByHost[segment.Hostname] = append(cluster.ByHost[segment.Hostname], segment)
if len(cluster.ByHost[segment.Hostname]) == 1 { // Only add each hostname once
cluster.Hostnames = append(cluster.Hostnames, segment.Hostname)
}
}
return &cluster
}