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]

Reply via email to