Hello,

after updating clickhouse from 21.2.3.15-2 to 21.3.2.5-2 I see those warnings :

 `<Warning> default.osb4_reverse.DirectoryMonitor: Structure does not match (remote: Path LowCardinality(String) ColumnLowCardinality(size = 0, UInt8(size = 0), ColumnUnique(size = 1, String(size = 1))), Value Float64 Float64(size = 0), Time UInt32 UInt32(size = 0), Date Date UInt16(size = 0), Timestamp UInt32 UInt32(size = 0), local: Path LowCardinality(String) ColumnLowCardinality(size = 0, UInt16(size = 0), ColumnUnique(size = 1, String(size = 1))), Value Float64 Float64(size = 0), Time UInt32 UInt32(size = 0), Date Date UInt16(size = 0), Timestamp UInt32 UInt32(size = 0)), implicit conversion will be done`

I think this is related to https://github.com/ClickHouse/ClickHouse/pull/19947

The only difference between remote and local I found inside this log is :

ColumnLowCardinality(size = 0, UInt8(size = 0) to
ColumnLowCardinality(size = 0, UInt16(size = 0)

But I don't see the difference between the tables.

```
SHOW CREATE TABLE default.osb4_reverse

CREATE TABLE default.osb4_reverse
(
    `Path` LowCardinality(String) CODEC(ZSTD(15)),
    `Value` Float64 CODEC(Gorilla, ZSTD(22)),
    `Time` UInt32 CODEC(DoubleDelta, ZSTD(15)),
    `Date` Date CODEC(Delta(2), ZSTD(22)),
    `Timestamp` UInt32 CODEC(ZSTD(15))
)
ENGINE = Distributed('osb4_hpc_metrics', '', 'osb4_reverse', rand())


CREATE TABLE osb4_metrics_r0.osb4_reverse
(
    `Path` LowCardinality(String) CODEC(ZSTD(15)),
    `Value` Float64 CODEC(Gorilla, ZSTD(22)),
    `Time` UInt32 CODEC(DoubleDelta, ZSTD(15)),
    `Date` Date CODEC(Delta(2), ZSTD(22)),
    `Timestamp` UInt32 CODEC(ZSTD(15))
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/clusters/osb4_hpc_metrics/tables/{table4}/data', '{host2}')
PARTITION BY toYYYYMM(Date)
ORDER BY (Path, Time)
TTL Date + toIntervalMonth(6)
SETTINGS index_granularity = 8192
```

Any hints ?

Ralph
if (num_shard_rows)
                    dst_column = src_column->permute(shard_permutation, num_shard_rows);
                else
                    dst_column = src_column->cloneEmpty();
            }
        }
        const Block & shard_block = (num_shards > 1) ? job.current_shard_block : current_block;
        const Settings & settings = context.getSettingsRef();
        
        if (shard_block.rows() == 0)
            return;
        if (!job.is_local_job || !settings.prefer_localhost_replica)
        {
            if (!job.stream)
            {
                auto timeouts = ConnectionTimeouts::getTCPTimeoutsWithFailover(settings);
                if (shard_info.hasInternalReplication())
                {
                    
                    if (shard_job.replicas_jobs.size() != 1)
                        throw Exception("There are several writing job for an automatically replicated shard", ErrorCodes::LOGICAL_ERROR);
                    
                    auto connections = shard_info.pool->getMany(timeouts, &settings, PoolMode::GET_ONE);
                    if (connections.empty() || connections.front().isNull())
                        throw Exception("Expected exactly one connection for shard " + toString(job.shard_index), ErrorCodes::LOGICAL_ERROR);
                    job.connection_entry = std::move(connections.front());
                }
                else
                {
                    const auto & replica = addresses.at(job.shard_index).at(job.replica_index);