Hello Igniters

The version of Ignite that we are using is 2.7.0. I'm adding the events
that I want to hear via the IgniteConfiguration using the
`setIncludeEventTypes`
Then using ignite.event().localListen(listenerPredicate, eventTypes);

EVT_CACHE_REBALANCE_STARTED,
EVT_CACHE_REBALANCE_STOPPED,
EVT_CACHE_REBALANCE_PART_LOADED,
EVT_CACHE_REBALANCE_PART_UNLOADED,
EVT_CACHE_REBALANCE_PART_DATA_LOST

Once I listen any of the events above, I used
`ignite.affinity(cacheName.name())`  to retrieve the Affinity function in
which I'm calling the `primaryPartitions` method or `allPartitions` using
the ClusterNode instance that represents `this` node.

Once I hear the rebalance process stop event I created a thread in charge
of checking the partition assignment as follows.

new Thread(() -> {
    for (int attempt = 0; attempt <= attempts; attempt++) {
        log.info("event=partitionAssignmentRetryLogic attempt={},
before={}, now={}", attempt, assignedPartitions,
            affinity.primaryPartitions(clusterNode));

        try {
            if (affinity.primaryPartitions(clusterNode).length != 0) {
                log.info("event=partitionAssignmentRetryLogicSuccess");
            }
            TimeUnit.SECONDS.sleep(delay);
        } catch (Exception e) {
            log.error("event=ErrorOnTimerWait message={}", e.getMessage(), e);
        }
    }
}).start();


After a couple of attempts (some seconds), the `primaryPartitions` is
returning the correct set of partitions assigned to a node.  I will check
the AffinityAssignment for trying to do this in a cleaner way as you
suggest.


On Fri, Mar 15, 2019 at 12:11 PM Павлухин Иван <[email protected]> wrote:

> Hi,
>
> What Ignite version do you use?
> How do you register your listener?
> On what object do you call primaryPartitions/allPartitions?
>
> It is true that Ignite uses late affinitly assignment. And it means
> that for each topology change (node enter or node leave) parttion
> assigment changes twice. First time temporay backups are created which
> should be rebalanced from other nodes (EVT_CACHE_REBALANCE_STARTED
> takes place here). Second time redundant partition replicas should be
> marked as unusable (and unloaded after that)
> (EVT_CACHE_REBALANCE_STOPPED). And it is useful to understand that
> Affinity interface calculates partition distribution using affinity
> function and such distribution might differ from real partitoin
> assignment. And it differes when rebalance is in progress. See
> AffinityAssignment interface.
>
> ср, 13 мар. 2019 г. в 21:59, Koitoer <[email protected]>:
> >
> > Hi All.
> >
> > I'm trying to follow the rebalance events of my ignite cluster so I'm
> able to track which partitions are assigned to each node at any point in
> time. I am listening to the `EVT_CACHE_REBALANCE_STARTED` and
> `EVT_CACHE_REBALANCE_STOPPED`
> > events from Ignite and that is working well, except in the case one node
> crash and another take its place.
> >
> > My cluster is 5 nodes.
> > Ex. Node 1 has let's say 100 partitions, after I kill this node the
> partitions that were assigned to it, got rebalance across the entire
> cluster, I'm able to track that done with the STOPPED event and checking
> the affinity function in each one of them using the `primaryPartitions`
> method gives me that, if I add all those numbers I get 1024 partitions,
> which is why I was expected.
> >
> > However when a new node replaces the previous one, I see a rebalance
> process occurs and now I'm getting that some of the partitions `disappear`
> from the already existing nodes (which is expected as well as new node will
> take some partitions from them) but when the STOPPED event is listened by
> this new node if I call the `primaryPartitions` that one returns an empty
> list, but if I used the  `allPartitions` method that one give me a list (I
> think at this point is primary + backups).
> >
> > If I let pass some time and I execute the `primaryPartitions` method
> again I am able to retrieve the partitions that I was expecting to see
> after the STOPPED event comes. I read here
> https://cwiki.apache.org/confluence/display/IGNITE/%28Partition+Map%29+Exchange+-+under+the+hood#id-(PartitionMap)Exchange-under
> the hood-LateAffinityAssignment that it could be a late assignment, that
> after the cache rebalance the new node needs to bring all the entries to
> fill-out the cache and after that, the `primaryPartitions` will return
> something.
> > Will be great to know if this actually what is happening.
> >
> > My question is if there is any kind of event that I should listen so I
> can be aware that this process (if this is what is happening) already
> finish. I would like to said, "After you bring this node into the cluster
> the partitions assigned to that node are the following: XXX, XXX".
> >
> > Also, I'm aware of the event `EVT_CACHE_REBALANCE_PART_LOADED` but I'm
> seeing a ton of them and at this point, I would be able to know when the
> last one arrives and say that are now my primary partitions.
> >
> > Thanks in advance.
>
>
>
> --
> Best regards,
> Ivan Pavlukhin
>


-- 
koitoer ....

Reply via email to