https://clickhouse-test-reports.s3.yandex.net/19868/c39ee3f58c85de0f2a7b609377e2f138305dc745/fuzzer_debug/report.html#fail1
{
        return std::tie(settings, query, client_info.query_kind, sample_block_structure) ==
               std::tie(other.settings, other.query, other.client_info.query_kind, other.sample_block_structure);
    }
    struct Hash
    {
        size_t operator()(const BatchHeader & batch_header) const
        {
            SipHash hash_state;
            hash_state.update(batch_header.query.data(), batch_header.query.size());
            hash_state.update(batch_header.sample_block_structure.data(), batch_header.sample_block_structure.size());
            return hash_state.get64();
        }
    };
};
struct StorageDistributedDirectoryMonitor::Batch
{
    std::vector<UInt64> file_indices;
    size_t total_rows = 0;
    size_t total_bytes = 0;
    bool recovered = false;
    StorageDistributedDirectoryMonitor & parent;
    const std::map<UInt64, String> & file_index_to_path;
    bool fsync = false;
    bool dir_fsync = false;
    Batch(