The ideal state will always remain empty. check the external view, it should reflect the ideal state you computed.
On Tue, Mar 10, 2020 at 8:01 AM Geoffroy Fouquier < [email protected]> wrote: > > 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 ! > > > > >
