> (you don't have to strictly follow this form)

**Use case**

Sometimes, for really sophisticated scenarios it can be hard to control the amount of in-progress backups run externally. For the purpose of simpler control we can introduce server-level setting which disallows running concurrent backups of any type. 

Something like this in `config.xml` (enabled by default):
`<allow_concurrent_backups>true</allow_concurrent_backups>`

**Describe the solution you'd like**

It's important that backups can be executed in distributed way on multiple servers. Need to take it into account.

**Describe alternatives you've considered**
External check of `system.backups` table, but it can be complex.

{
        
        
        
        restore_coordination = makeRestoreCoordination(restore_settings.coordination_zk_path, context, restore_settings.internal);
    }
    try
    {
        auto backup_info = BackupInfo::fromAST(*restore_query->backup_name);
        String backup_name_for_logging = backup_info.toStringForLogging();
        addInfo(restore_id, backup_name_for_logging, restore_settings.internal, BackupStatus::RESTORING);
        
        ContextMutablePtr context_in_use = context;
        bool on_cluster = !restore_query->cluster.empty();
        if (restore_settings.async || on_cluster)
        {
            
            
            context_in_use = Context::createCopy(context);
            context_in_use->makeQueryContext();
        }
        if (restore_settings.async)
        {
            backups_thread_pool.scheduleOrThrowOnError(
                [this, restore_query, restore_id, backup_name_for_logging, backup_info, restore_settings, restore_coordination, context_in_use]
                {
                    doRestore(
                        restore_query,
                        restore_id,
                        backup_name_for_logging,