Symptoms: all threads in BackgroundScheduledPool busy, lot of tasks in replication queue, none of the tasks is executing. 

![Screenshot from 2021-04-16 16-21-44_](https://user-images.githubusercontent.com/1549571/115193796-e767d600-a0ec-11eb-887c-5c9c2412e50c.png)

Related to #16895

Possible workarounds (poor options): increasing the background_schedule_pool_size to huge values, or restart server every time when that happens etc. - 

if (storage.dropPart(zk, entry.part_name, log_entry,false, false))
                    storage.waitForAllReplicasToProcessLogEntry(log_entry, true);
            }
            {
                
                Entry entry_copy = entry;
                entry_copy.state = EntryState::SOURCE_DROP_POST_DELAY;
                entry_copy.update_time = std::time(nullptr);
                zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version);
            }
        }
        break;
        case EntryState::SOURCE_DROP_POST_DELAY:
        {
            std::this_thread::sleep_for(std::chrono::seconds(storage.getSettings()->part_moves_between_shards_delay_seconds));
            
            Entry entry_copy = entry;
            entry_copy.state = EntryState::REMOVE_UUID_PIN;
            entry_copy.update_time = std::time(nullptr);
            zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version);
        }
        break;
        case EntryState::REMOVE_UUID_PIN:
        {
            {
                PinnedPartUUIDs src_pins;
                PinnedPartUUIDs dst_pins;
                {
                    String s = zk->get(zookeeper_path + "/pinned_part_uuids", &src_pins.stat);
                    src_pins.fromString(s);