Actions `cluster:admin/repository/analyze/blob` and `cluster:admin/repository/analyze/register` and so on are only invoked via the transport service, they do not need to register as client actions so we can drop the `ActionType` instance. Instead the root `RepositoryAnalyzeAction` should create and register all these transport actions itself. But even the root `RepositoryAnalyzeAction` should not be an `ActionType` derivative, we should just declare an `ActionType` instance directly. Moreover we can use `ActionType#localOnly` since the client action does not run on remote clusters.
x-pack/plugin/snapshot-repo-test-kit/src/main/java/org/elasticsearch/repositories/blobstore/testkit/GetBlobChecksumAction.java
while (true) {
                    final int readSize;
                    try {
                        readSize = throttledInputStream.read(buffer, 0, buffer.length);
                    } catch (IOException e) {
                        logger.warn("exception while read blob for [{}]", request);
                        listener.onFailure(e);
                        return;
                    }
                    if (readSize == -1) {
                        break;
                    }
                    if (readSize > 0) {
                        if (bytesRead == 0L) {
                            firstByteNanos = System.nanoTime();
                        }
                        crc32.update(buffer, 0, readSize);
                        bytesRead += readSize;
                    }
                    if (cancellableTask.isCancelled()) {
                        throw new RepositoryVerificationException(
                            request.repositoryName,
                            "cancelled [" + request.getDescription() + "] after reading [" + bytesRead + "] bytes"
                        );
                    }
                }
                success = true;
            } finally {
                if (success == false) {
                    IOUtils.closeWhileHandlingException(throttledInputStream);