Hello,

 I am trying to define a user-defined balancer following the tutorial on helix web-page. I defined a simple balancer (a modulo ; based on TestCustomizedIdealStateRebalancer.TestRebalancer) and configure the balancer with :

---8<---

IdealState idealState = helixAdmin.getResourceIdealState(clusterName, resourceName);
idealState.setRebalanceMode(IdealState.RebalanceMode.USER_DEFINED);
idealState.setRebalancerClassName(balancerClassName);
helixAdmin.setResourceIdealState(clusterName, resourceName, idealState);

---8<---

I have a controller running on a standalone cluster with 3 instances). Before the rebalance, resource looks like this :

IdealState for crawlDB:
{
  "id" : "crawlDB",
  "mapFields" : {
  },
  "listFields" : {
  },
  "simpleFields" : {
    "IDEAL_STATE_MODE" : "AUTO",
    "NUM_PARTITIONS" : "20",
    "REBALANCER_CLASS_NAME" : "com.exensa.wdl.controller.PerDiskBalancer",
    "REBALANCE_MODE" : "USER_DEFINED",
    "REBALANCE_STRATEGY" : "DEFAULT",
    "REPLICAS" : "0",
    "STATE_MODEL_DEF_REF" : "MasterSlave",
    "STATE_MODEL_FACTORY_NAME" : "DEFAULT"
  }
}

My custom rebalancer is called :

 - PerDiskBalancer / init
 - computeNewIdealState
 - nodes: [standalone-1.localhost, standalone-3.localhost, standalone-2.local host] partitions: [crawlDB_0, crawlDB_1, crawlDB_10, crawlDB_11, crawlDB_12, crawlDB_13, crawlDB_14, crawlDB_15, crawlDB_16, crawlDB_17, crawlDB_18, crawlDB_19, crawlDB_2, crawlDB_3, crawlDB_4, crawlDB_5, crawlDB_6, craw
lDB_7, crawlDB_8, crawlDB_9]
 - set partition preference list for crawlDB_0 to standalone-1.localhost
 - set instance state map for partition crawlDB_0 to standalone-1.localhost
 - set partition preference list for crawlDB_1 to standalone-3.localhost
[...]

 - set instance state map for partition crawlDB_8 to standalone-1.localhost
 - set partition preference list for crawlDB_9 to standalone-3.localhost
 - set instance state map for partition crawlDB_9 to standalone-3.localhost

but the resulting IdealState doesn't have any mapping :

IdealState for crawlDB:

{
  "id" : "crawlDB",
  "mapFields" : {
    "crawlDB_0" : {
    },
    "crawlDB_1" : {
    },
    "crawlDB_10" : {
    },
    "crawlDB_11" : {
    },
    "crawlDB_12" : {
    },
    "crawlDB_13" : {
    },
    "crawlDB_14" : {
    },
    "crawlDB_15" : {
    },
    "crawlDB_16" : {
    },
    "crawlDB_17" : {
    },
    "crawlDB_18" : {
    },
    "crawlDB_19" : {
    },
    "crawlDB_2" : {
    },
    "crawlDB_3" : {
    },
    "crawlDB_4" : {
    },
    "crawlDB_5" : {
    },
    "crawlDB_6" : {
    },
    "crawlDB_7" : {
    },
    "crawlDB_8" : {
    },
    "crawlDB_9" : {
    }
  },
  "listFields" : {
    "crawlDB_0" : [ ],
    "crawlDB_1" : [ ],
    "crawlDB_10" : [ ],
    "crawlDB_11" : [ ],
    "crawlDB_12" : [ ],
    "crawlDB_13" : [ ],
    "crawlDB_14" : [ ],
    "crawlDB_15" : [ ],
    "crawlDB_16" : [ ],
    "crawlDB_17" : [ ],
    "crawlDB_18" : [ ],
    "crawlDB_19" : [ ],
    "crawlDB_2" : [ ],
    "crawlDB_3" : [ ],
    "crawlDB_4" : [ ],
    "crawlDB_5" : [ ],
    "crawlDB_6" : [ ],
    "crawlDB_7" : [ ],
    "crawlDB_8" : [ ],
    "crawlDB_9" : [ ]
  },
  "simpleFields" : {
    "IDEAL_STATE_MODE" : "AUTO",
    "NUM_PARTITIONS" : "20",
    "REBALANCER_CLASS_NAME" : "com.exensa.wdl.controller.PerDiskBalancer",
    "REBALANCE_MODE" : "USER_DEFINED",
    "REBALANCE_STRATEGY" : "DEFAULT",
    "REPLICAS" : "1",
    "STATE_MODEL_DEF_REF" : "MasterSlave",
    "STATE_MODEL_FACTORY_NAME" : "DEFAULT"
  }
}

did I miss something ?

Thanks !




Reply via email to