- some copier work needs to be improved

1. clickhouse create destionation table just once if success
2. support settings_push.replication_alter_partitions_sync =1 at attach partition 
3. ...
{
public:
    ClusterCopier(const String & task_path_,
                  const String & host_id_,
                  const String & proxy_database_name_,
                  Context & context_)
            :
            task_zookeeper_path(task_path_),
            host_id(host_id_),
            working_database_name(proxy_database_name_),
            context(context_),
            log(&Poco::Logger::get("ClusterCopier")) {}
    void init();
    template <typename T>
    decltype(auto) retry(T && func, UInt64 max_tries = 100);
    void discoverShardPartitions(const ConnectionTimeouts & timeouts, const TaskShardPtr & task_shard);
    
    void discoverTablePartitions(const ConnectionTimeouts & timeouts, TaskTable & task_table, UInt64 num_threads = 0);
    void uploadTaskDescription(const std::string & task_path, const std::string & task_file, const bool force);
    void reloadTaskDescription();
    void updateConfigIfNeeded();
    void process(const ConnectionTimeouts & timeouts);
    
    void setSafeMode(bool is_safe_mode_ = true)