**Affected version:** 7.12 - 7.17.7, 8.0-8.5
**Fixed in:** 7.17.7, 8.5.0

### Problem Description

A continuous transform can fail if a transform is searching at the same time as an ILM action occurs or in general anything that closes an index. This should not happen if transform is configured with a wildcard pattern for the source index, e.g. `filebeat-*`.

In a specific case an ILM policy temporarily closes the index due to the unfollow-the-follower action.

A typical log entry for this bugs contains something like this:

```
task encountered irrecoverable failure: org.elasticsearch.cluster.block.ClusterBlockException: index [ ... ] blocked by: [FORBIDDEN/4/index closed];
```

### Mitigation

A: Restart the transform. This can be automated by monitoring `_stats` and restarting the transform using `_stop?force=true` followed by `_start`.

B: Don't use the ILM unfollow action until a fix is available.

C: **Unreleased**: Starting with 8.5 set the transform to `unattended` mode via `settings`, this will let transform retry even for this failure class

### Solution

If the source of a transform is configured with a wildcard, transform should not treat an index closed exception as an irrecoverable failure.

### Backport

The fix needs to be backported to the `7.17` series.
x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/transforms/TransformFailureHandler.java
import org.elasticsearch.xpack.transform.notifications.TransformAuditor;
import org.elasticsearch.xpack.transform.utils.ExceptionRootCauseFinder;
import java.util.Optional;
import static org.elasticsearch.core.Strings.format;
import static org.elasticsearch.xpack.core.common.notifications.Level.INFO;
import static org.elasticsearch.xpack.core.common.notifications.Level.WARNING;
/**
 * Handles all failures a transform can run into when searching, indexing as well as internal
 * state handling.
 *
 * TODO:
 *
 *  - the settings have to be passed as parameter - because they can change at runtime - longer term the necessary
 *    parts should be read from the context object instead
 */
class TransformFailureHandler {
    private static final Logger logger = LogManager.getLogger(TransformFailureHandler.class);
    public static final int LOG_FAILURE_EVERY = 10;
    private final TransformAuditor auditor;
    private final String transformId;
    private final TransformContext context;
    TransformFailureHandler(TransformAuditor auditor, TransformContext context, String transformId) {
        this.auditor = auditor;
        this.transformId = transformId;
        this.context = context;
    }
    /**
     * Handle a search or indexing failure
     *
     * @param e the exception caught