**Affected version:** 8.2 - 8.5.2
**Fixed in:** 8.5.3

### Problem Description

The problem applies to transforms that use more than 1 CCS cluster or 1 local and 1 CCS as source. A typical source could look like this (the important part: `remotes*`):

```
        "index" : [
          "remotes*:filebeat*"
        ],

```

If 2 indices share the same name the transform might fail with an error similar to this:

```
 Failed to retrieve checkpoint due to: Duplicate key logs-2022-11-14 (attempted merging values [... and ...]
```

Similar to the above the `_stats` call is broken for such a transform, it can fail with an error message starting with:

```
Failure during checkpoint retrieval
```

This can happen even if the transform is in state `STOPPED` or `FAILED`.

### Mitigation

Choose _one_ of the following mitigations:

 - split your transforms to use max 1 CCS/local indices

_or_

 - avoid upgrading to 8.2, until the issue got resolved (this is a regression of #80984)

_or_

 - avoid duplicate names for your indices even on remote cluster, e.g. name the index: `remote1-filebeat...`, `remote2-filebeat...`


### Solution

This is a regression of #80984 which introduced a new way of check-pointing. The remote needs to be prefixed to the index name.
x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/checkpoint/DefaultCheckpointProvider.java
try {
            ResolvedIndices resolvedIndexes = remoteClusterResolver.resolve(transformConfig.getSource().getIndex());
            ActionListener<Map<String, long[]>> groupedListener = listener;
            if (resolvedIndexes.numClusters() > 1) {
                ActionListener<Collection<Map<String, long[]>>> mergeMapsListener = ActionListener.wrap(indexCheckpoints -> {
                    listener.onResponse(
                        indexCheckpoints.stream()
                            .flatMap(m -> m.entrySet().stream())
                            .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()))
                    );
                }, listener::onFailure);
                groupedListener = new GroupedActionListener<>(mergeMapsListener, resolvedIndexes.numClusters());
            }
            if (resolvedIndexes.getLocalIndices().isEmpty() == false) {
                getCheckpointsFromOneCluster(
                    client,
                    transformConfig.getHeaders(),
                    resolvedIndexes.getLocalIndices().toArray(new String[0]),
                    RemoteClusterService.LOCAL_CLUSTER_GROUP_KEY,
                    groupedListener
                );
            }
            for (Map.Entry<String, List<String>> remoteIndex : resolvedIndexes.getRemoteIndicesPerClusterAlias().entrySet()) {
                Client remoteClient = client.getRemoteClusterClient(remoteIndex.getKey());
                getCheckpointsFromOneCluster(
                    remoteClient,
                    transformConfig.getHeaders(),
                    remoteIndex.getValue().toArray(new String[0]),
                    remoteIndex.getKey(),
                    groupedListener