class FilterConverterRule extends AbstractIgniteConverterRule<LogicalFilter> {
    /** */
    public static final RelOptRule INSTANCE = new FilterConverterRule();

    /** */
    public FilterConverterRule() {
        super(LogicalFilter.class, "FilterConverterRule");
    }

    /** {@inheritDoc} */
    @Override protected PhysicalNode convert(RelOptPlanner planner, RelMetadataQuery mq, LogicalFilter rel) {<FILL_FUNCTION_BODY>}
}

        RelOptCluster cluster = rel.getCluster();

        RelTraitSet traits = cluster
            .traitSetOf(IgniteConvention.INSTANCE)
            .replace(IgniteDistributions.single());

        Set<CorrelationId> corrIds = RexUtils.extractCorrelationIds(rel.getCondition());

        if (!corrIds.isEmpty()) {
            traits = traits
                .replace(CorrelationTrait.correlations(corrIds))
                .replace(RewindabilityTrait.REWINDABLE);
        }

        return new IgniteFilter(
            cluster,
            traits,
            convert(rel.getInput(), traits.replace(CorrelationTrait.UNCORRELATED)),
            rel.getCondition()
        );
    
<methods>public final RelNode convert(RelNode) <variables>