'Embedded Ignite with spring never calls custom SegmentationResolver

I try to manage network segmentation in a Ignite cluster that is embedded in a tomcat webapp. I create a custom segmentationResolver that ping database server.

So I configure Ignite with spring context

<beans:bean id="segmentationResolver" class="my.cluster.JdbcPingSegmentationResolver"/>
<beans:bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <beans:property name="gridLogger">
        <beans:bean class="org.apache.ignite.logger.slf4j.Slf4jLogger"/>
    </beans:property>
    <beans:property name="workDirectory" value="#{systemProperties[igniteTmpDir]}"/>
    <beans:property name="segmentationResolvers" ref="segmentationResolver" />
    <beans:property name="segmentCheckFrequency" value="10000" />
    <beans:property name="segmentationPolicy" value="NOOP" />
    <beans:property name="waitForSegmentOnStart" value="true" />
    <beans:property name="communicationSpi">....

Constructor of my JdbcPingSegmentationResolver is call by spring but its method isValidSegment() is never calls. Even if I start / stop another Ignite node (it has to be called when cluster topology change).

 @Override
    public boolean isValidSegment() throws IgniteCheckedException {
        var reachable = false;
        try {
            Process exec = Runtime.getRuntime().exec("ping " + hostname);
            //0 - normal termination
            reachable = exec.waitFor(1, TimeUnit.SECONDS);
        } catch (IOException | InterruptedException e) {
            LOGGER.error("segmentation network : {}", e.getMessage(), e);
        }
        LOGGER.debug("check segmentation network status : {}", reachable);
        return reachable;
    }


Solution 1:[1]

Segmentation resolvers are called by a GridSegmentationProcessor. The default processor is org.apache.ignite.internal.processors.segmentation.os.GridOsSegmentationProcessor which is noop in fact. GridGain Enterprise Edition (it's a vendor-supported delivery of Apache Ignite) specifies a processor that handles resolvers properly.

I believe that the machinery that's being called on topology changes (node left, join etc) is topology validator.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Vladimir Pligin