class BaselineAutoAdjustExecutor {
    /** */
    private final IgniteLogger log;

    /** */
    private final IgniteClusterImpl cluster;

    /** Service for execute this task in async. */
    private final ExecutorService executorService;

    /** {@code true} if baseline auto-adjust enabled. */
    private final BooleanSupplier isBaselineAutoAdjustEnabled;

    /** This protect from execution more than one task at same moment. */
    private final Lock executionGuard = new ReentrantLock();

    /**
     * @param log Logger.
     * @param cluster Ignite cluster.
     * @param executorService Thread pool for changing baseline.
     * @param enabledSupplier Supplier return {@code true} if baseline auto-adjust enabled.
     */
    public BaselineAutoAdjustExecutor(IgniteLogger log, IgniteClusterImpl cluster, ExecutorService executorService,
        BooleanSupplier enabledSupplier) {
        this.log = log;
        this.cluster = cluster;
        this.executorService = executorService;
        isBaselineAutoAdjustEnabled = enabledSupplier;
    }

    /**
     * Try to set baseline if all conditions it allowed.
     *
     * @param data Data for operation.
     */
    public void execute(BaselineAutoAdjustData data) {<FILL_FUNCTION_BODY>}

    /**
     * @param data Baseline data for adjust.
     * @return {@code true} If baseline auto-adjust shouldn't be executed for given data.
     */
    public boolean isExecutionExpired(BaselineAutoAdjustData data) {
        return data.isInvalidated() || !isBaselineAutoAdjustEnabled.getAsBoolean();
    }
}

        executorService.submit(() -> {
                if (isExecutionExpired(data))
                    return;

                executionGuard.lock();
                try {
                    if (isExecutionExpired(data))
                        return;

                    cluster.triggerBaselineAutoAdjust(data.getTargetTopologyVersion());
                }
                catch (IgniteException e) {
                    log.error("Error during baseline changing", e);
                }
                finally {
                    data.onAdjust();

                    executionGuard.unlock();
                }
            }
        );
    
<no_super_class>