* Better Exceptions on Concurrent Snapshot Operations It is somewhat tricky to debug test failures from concurrent operations without having the exact knowledge of what ran concurrently so I added it to these exceptions in all spots.
This commit is contained in:
parent
a817cf5e5c
commit
f7d9e7bdc4
|
@ -176,15 +176,18 @@ public final class TransportCleanupRepositoryAction extends TransportMasterNodeA
|
||||||
final RepositoryCleanupInProgress repositoryCleanupInProgress = currentState.custom(RepositoryCleanupInProgress.TYPE);
|
final RepositoryCleanupInProgress repositoryCleanupInProgress = currentState.custom(RepositoryCleanupInProgress.TYPE);
|
||||||
if (repositoryCleanupInProgress != null && repositoryCleanupInProgress.cleanupInProgress() == false) {
|
if (repositoryCleanupInProgress != null && repositoryCleanupInProgress.cleanupInProgress() == false) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Cannot cleanup [" + repositoryName + "] - a repository cleanup is already in-progress");
|
"Cannot cleanup [" + repositoryName + "] - a repository cleanup is already in-progress in ["
|
||||||
|
+ repositoryCleanupInProgress + "]");
|
||||||
}
|
}
|
||||||
SnapshotDeletionsInProgress deletionsInProgress = currentState.custom(SnapshotDeletionsInProgress.TYPE);
|
SnapshotDeletionsInProgress deletionsInProgress = currentState.custom(SnapshotDeletionsInProgress.TYPE);
|
||||||
if (deletionsInProgress != null && deletionsInProgress.hasDeletionsInProgress()) {
|
if (deletionsInProgress != null && deletionsInProgress.hasDeletionsInProgress()) {
|
||||||
throw new IllegalStateException("Cannot cleanup [" + repositoryName + "] - a snapshot is currently being deleted");
|
throw new IllegalStateException("Cannot cleanup [" + repositoryName
|
||||||
|
+ "] - a snapshot is currently being deleted in [" + deletionsInProgress + "]");
|
||||||
}
|
}
|
||||||
SnapshotsInProgress snapshots = currentState.custom(SnapshotsInProgress.TYPE);
|
SnapshotsInProgress snapshots = currentState.custom(SnapshotsInProgress.TYPE);
|
||||||
if (snapshots != null && !snapshots.entries().isEmpty()) {
|
if (snapshots != null && !snapshots.entries().isEmpty()) {
|
||||||
throw new IllegalStateException("Cannot cleanup [" + repositoryName + "] - a snapshot is currently running");
|
throw new IllegalStateException(
|
||||||
|
"Cannot cleanup [" + repositoryName + "] - a snapshot is currently running in [" + snapshots + "]");
|
||||||
}
|
}
|
||||||
return ClusterState.builder(currentState).putCustom(RepositoryCleanupInProgress.TYPE,
|
return ClusterState.builder(currentState).putCustom(RepositoryCleanupInProgress.TYPE,
|
||||||
new RepositoryCleanupInProgress(
|
new RepositoryCleanupInProgress(
|
||||||
|
|
|
@ -82,7 +82,10 @@ public class RestoreInProgress extends AbstractNamedDiffable<Custom> implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new StringBuilder("RestoreInProgress[").append(entries).append("]").toString();
|
StringBuilder builder = new StringBuilder("RestoreInProgress[");
|
||||||
|
entries.forEach(entry -> builder.append("{").append(entry.key).append("}{").append(entry.value.snapshot).append("},"));
|
||||||
|
builder.setCharAt(builder.length() - 1, ']');
|
||||||
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Entry get(String restoreUUID) {
|
public Entry get(String restoreUUID) {
|
||||||
|
|
|
@ -278,12 +278,12 @@ public class SnapshotsService extends AbstractLifecycleComponent implements Clus
|
||||||
SnapshotDeletionsInProgress deletionsInProgress = currentState.custom(SnapshotDeletionsInProgress.TYPE);
|
SnapshotDeletionsInProgress deletionsInProgress = currentState.custom(SnapshotDeletionsInProgress.TYPE);
|
||||||
if (deletionsInProgress != null && deletionsInProgress.hasDeletionsInProgress()) {
|
if (deletionsInProgress != null && deletionsInProgress.hasDeletionsInProgress()) {
|
||||||
throw new ConcurrentSnapshotExecutionException(repositoryName, snapshotName,
|
throw new ConcurrentSnapshotExecutionException(repositoryName, snapshotName,
|
||||||
"cannot snapshot while a snapshot deletion is in-progress");
|
"cannot snapshot while a snapshot deletion is in-progress in [" + deletionsInProgress + "]");
|
||||||
}
|
}
|
||||||
final RepositoryCleanupInProgress repositoryCleanupInProgress = currentState.custom(RepositoryCleanupInProgress.TYPE);
|
final RepositoryCleanupInProgress repositoryCleanupInProgress = currentState.custom(RepositoryCleanupInProgress.TYPE);
|
||||||
if (repositoryCleanupInProgress != null && repositoryCleanupInProgress.cleanupInProgress() == false) {
|
if (repositoryCleanupInProgress != null && repositoryCleanupInProgress.cleanupInProgress() == false) {
|
||||||
throw new ConcurrentSnapshotExecutionException(repositoryName, snapshotName,
|
throw new ConcurrentSnapshotExecutionException(repositoryName, snapshotName,
|
||||||
"cannot snapshot while a repository cleanup is in-progress");
|
"cannot snapshot while a repository cleanup is in-progress in [" + repositoryCleanupInProgress + "]");
|
||||||
}
|
}
|
||||||
SnapshotsInProgress snapshots = currentState.custom(SnapshotsInProgress.TYPE);
|
SnapshotsInProgress snapshots = currentState.custom(SnapshotsInProgress.TYPE);
|
||||||
if (snapshots == null || snapshots.entries().isEmpty()) {
|
if (snapshots == null || snapshots.entries().isEmpty()) {
|
||||||
|
@ -1195,12 +1195,12 @@ public class SnapshotsService extends AbstractLifecycleComponent implements Clus
|
||||||
SnapshotDeletionsInProgress deletionsInProgress = currentState.custom(SnapshotDeletionsInProgress.TYPE);
|
SnapshotDeletionsInProgress deletionsInProgress = currentState.custom(SnapshotDeletionsInProgress.TYPE);
|
||||||
if (deletionsInProgress != null && deletionsInProgress.hasDeletionsInProgress()) {
|
if (deletionsInProgress != null && deletionsInProgress.hasDeletionsInProgress()) {
|
||||||
throw new ConcurrentSnapshotExecutionException(snapshot,
|
throw new ConcurrentSnapshotExecutionException(snapshot,
|
||||||
"cannot delete - another snapshot is currently being deleted");
|
"cannot delete - another snapshot is currently being deleted in [" + deletionsInProgress + "]");
|
||||||
}
|
}
|
||||||
final RepositoryCleanupInProgress repositoryCleanupInProgress = currentState.custom(RepositoryCleanupInProgress.TYPE);
|
final RepositoryCleanupInProgress repositoryCleanupInProgress = currentState.custom(RepositoryCleanupInProgress.TYPE);
|
||||||
if (repositoryCleanupInProgress != null && repositoryCleanupInProgress.cleanupInProgress() == false) {
|
if (repositoryCleanupInProgress != null && repositoryCleanupInProgress.cleanupInProgress() == false) {
|
||||||
throw new ConcurrentSnapshotExecutionException(snapshot.getRepository(), snapshot.getSnapshotId().getName(),
|
throw new ConcurrentSnapshotExecutionException(snapshot.getRepository(), snapshot.getSnapshotId().getName(),
|
||||||
"cannot delete snapshot while a repository cleanup is in-progress");
|
"cannot delete snapshot while a repository cleanup is in-progress in [" + repositoryCleanupInProgress + "]");
|
||||||
}
|
}
|
||||||
RestoreInProgress restoreInProgress = currentState.custom(RestoreInProgress.TYPE);
|
RestoreInProgress restoreInProgress = currentState.custom(RestoreInProgress.TYPE);
|
||||||
if (restoreInProgress != null) {
|
if (restoreInProgress != null) {
|
||||||
|
@ -1208,7 +1208,8 @@ public class SnapshotsService extends AbstractLifecycleComponent implements Clus
|
||||||
// otherwise we could end up deleting a snapshot that is being restored
|
// otherwise we could end up deleting a snapshot that is being restored
|
||||||
// and the files the restore depends on would all be gone
|
// and the files the restore depends on would all be gone
|
||||||
if (restoreInProgress.isEmpty() == false) {
|
if (restoreInProgress.isEmpty() == false) {
|
||||||
throw new ConcurrentSnapshotExecutionException(snapshot, "cannot delete snapshot during a restore");
|
throw new ConcurrentSnapshotExecutionException(snapshot,
|
||||||
|
"cannot delete snapshot during a restore in progress in [" + restoreInProgress + "]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ClusterState.Builder clusterStateBuilder = ClusterState.builder(currentState);
|
ClusterState.Builder clusterStateBuilder = ClusterState.builder(currentState);
|
||||||
|
|
Loading…
Reference in New Issue