AdheipSingh commented on code in PR #17:
URL: https://github.com/apache/druid-operator/pull/17#discussion_r3184302537
##########
controllers/druid/ordering.go:
##########
@@ -18,36 +18,85 @@ under the License.
*/
package druid
-import "github.com/apache/druid-operator/apis/druid/v1alpha1"
+import (
+ "sort"
+
+ "github.com/apache/druid-operator/apis/druid/v1alpha1"
+)
var (
- druidServicesOrder = []string{historical, overlord, middleManager,
indexer, broker, coordinator, router}
+ defaultDruidServicesOrder = []string{historical, overlord,
middleManager, indexer, broker, coordinator, router}
)
type ServiceGroup struct {
- key string
- spec v1alpha1.DruidNodeSpec
+ key string
+ nodeType string
+ tier string
+ spec v1alpha1.DruidNodeSpec
}
-// getNodeSpecsByOrder returns all NodeSpecs f a given Druid object.
-// Recommended order is described at
http://druid.io/docs/latest/operations/rolling-updates.html
func getNodeSpecsByOrder(m *v1alpha1.Druid) []*ServiceGroup {
+ nodeTypeOrder := defaultDruidServicesOrder
+ if len(m.Spec.OrderOfUpgrade) > 0 {
+ nodeTypeOrder = m.Spec.OrderOfUpgrade
+ }
- scaledServiceSpecsByNodeType := map[string][]*ServiceGroup{}
- for _, t := range druidServicesOrder {
- scaledServiceSpecsByNodeType[t] = []*ServiceGroup{}
+ groupsByNodeType := map[string][]*ServiceGroup{}
+ for _, t := range nodeTypeOrder {
+ groupsByNodeType[t] = []*ServiceGroup{}
}
for key, nodeSpec := range m.Spec.Nodes {
- scaledServiceSpec :=
scaledServiceSpecsByNodeType[nodeSpec.NodeType]
- scaledServiceSpecsByNodeType[nodeSpec.NodeType] =
append(scaledServiceSpec, &ServiceGroup{key: key, spec: nodeSpec})
+ sg := &ServiceGroup{
+ key: key,
+ nodeType: nodeSpec.NodeType,
+ tier: nodeSpec.Tier,
+ spec: nodeSpec,
+ }
+ groupsByNodeType[nodeSpec.NodeType] =
append(groupsByNodeType[nodeSpec.NodeType], sg)
}
- allScaledServiceSpecs := make([]*ServiceGroup, 0, len(m.Spec.Nodes))
+ for nodeType, groups := range groupsByNodeType {
+ tierOrder := m.Spec.OrderOfUpgradeOfTiers[nodeType]
+ sortServiceGroups(groups, tierOrder)
+ groupsByNodeType[nodeType] = groups
+ }
- for _, t := range druidServicesOrder {
- allScaledServiceSpecs = append(allScaledServiceSpecs,
scaledServiceSpecsByNodeType[t]...)
+ result := make([]*ServiceGroup, 0, len(m.Spec.Nodes))
+ for _, t := range nodeTypeOrder {
+ result = append(result, groupsByNodeType[t]...)
}
- return allScaledServiceSpecs
+ return result
+}
+
+func sortServiceGroups(groups []*ServiceGroup, tierOrder []string) {
Review Comment:
sortServiceGroups sorts nodes of the same node type to determine their
rollout order.
tierRank map
will convert the tier order slice ["hot", "cold", "glacier"] into a lookup:
{"hot": 0, "cold": 1, "glacier": 2}.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]