Skip to content

Commit d9248b4

Browse files
committed
fix test and improve logging
1 parent c7cb973 commit d9248b4

File tree

3 files changed

+81
-74
lines changed

3 files changed

+81
-74
lines changed

modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/TransportDeleteDataStreamActionTests.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.elasticsearch.cluster.metadata.DataStream;
1616
import org.elasticsearch.cluster.metadata.DataStreamTestHelper;
1717
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
18+
import org.elasticsearch.cluster.metadata.ProjectId;
1819
import org.elasticsearch.common.Strings;
1920
import org.elasticsearch.common.collect.ImmutableOpenMap;
2021
import org.elasticsearch.common.settings.Settings;
@@ -138,8 +139,9 @@ public void testDeleteSnapshottingDataStream() {
138139
List.of(new Tuple<>(dataStreamName, 2), new Tuple<>(dataStreamName2, 2)),
139140
otherIndices
140141
);
141-
SnapshotsInProgress snapshotsInProgress = SnapshotsInProgress.EMPTY.withAddedEntry(createEntry(dataStreamName, "repo1", false))
142-
.withAddedEntry(createEntry(dataStreamName2, "repo2", true));
142+
SnapshotsInProgress snapshotsInProgress = SnapshotsInProgress.EMPTY.withAddedEntry(
143+
createEntry(dataStreamName, projectId, "repo1", false)
144+
).withAddedEntry(createEntry(dataStreamName2, projectId, "repo2", true));
143145
ClusterState snapshotCs = ClusterState.builder(cs).putCustom(SnapshotsInProgress.TYPE, snapshotsInProgress).build();
144146

145147
DeleteDataStreamAction.Request req = new DeleteDataStreamAction.Request(TEST_REQUEST_TIMEOUT, new String[] { dataStreamName });
@@ -157,9 +159,9 @@ public void testDeleteSnapshottingDataStream() {
157159
);
158160
}
159161

160-
private SnapshotsInProgress.Entry createEntry(String dataStreamName, String repo, boolean partial) {
162+
private SnapshotsInProgress.Entry createEntry(String dataStreamName, ProjectId projectId, String repo, boolean partial) {
161163
return SnapshotsInProgress.Entry.snapshot(
162-
new Snapshot(repo, new SnapshotId("", "")),
164+
new Snapshot(projectId, repo, new SnapshotId("", "")),
163165
false,
164166
partial,
165167
SnapshotsInProgress.State.SUCCESS,

server/src/main/java/org/elasticsearch/repositories/blobstore/BlobStoreRepository.java

Lines changed: 67 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@
179179
import static org.elasticsearch.index.snapshots.blobstore.BlobStoreIndexShardSnapshot.FileInfo;
180180
import static org.elasticsearch.index.snapshots.blobstore.BlobStoreIndexShardSnapshot.FileInfo.canonicalName;
181181
import static org.elasticsearch.indices.recovery.RecoverySettings.INDICES_RECOVERY_MAX_BYTES_PER_SEC_SETTING;
182+
import static org.elasticsearch.repositories.ProjectRepo.projectRepoString;
182183

183184
/**
184185
* BlobStore - based implementation of Snapshot Repository
@@ -1522,8 +1523,8 @@ private void cleanupUnlinkedRootAndIndicesBlobs(RepositoryData newRepositoryData
15221523
} catch (Exception e) {
15231524
logger.warn(
15241525
() -> format(
1525-
"[%s] The following blobs are no longer part of any snapshot [%s] but failed to remove them",
1526-
metadata.name(),
1526+
"%s The following blobs are no longer part of any snapshot [%s] but failed to remove them",
1527+
toStringShort(),
15271528
staleRootBlobs
15281529
),
15291530
e
@@ -1551,8 +1552,8 @@ private void cleanupUnlinkedRootAndIndicesBlobs(RepositoryData newRepositoryData
15511552
logger.debug("[{}] Cleaned up stale index [{}]", metadata.name(), indexId);
15521553
} catch (IOException e) {
15531554
logger.warn(() -> format("""
1554-
[%s] index %s is no longer part of any snapshot in the repository, \
1555-
but failed to clean up its index folder""", metadata.name(), indexId), e);
1555+
%s index %s is no longer part of any snapshot in the repository, \
1556+
but failed to clean up its index folder""", toStringShort(), indexId), e);
15561557
}
15571558
}));
15581559
}
@@ -1625,7 +1626,7 @@ private void logStaleRootLevelBlobs(
16251626
.collect(Collectors.toSet());
16261627
final List<String> blobsToLog = blobsToDelete.stream().filter(b -> blobNamesToIgnore.contains(b) == false).toList();
16271628
if (blobsToLog.isEmpty() == false) {
1628-
logger.info("[{}] Found stale root level blobs {}. Cleaning them up", metadata.name(), blobsToLog);
1629+
logger.info("{} Found stale root level blobs {}. Cleaning them up", toStringShort(), blobsToLog);
16291630
}
16301631
}
16311632
}
@@ -2153,9 +2154,9 @@ private RateLimiter getRateLimiter(
21532154
if (warnIfOverRecovery && effectiveRecoverySpeed.getBytes() > 0) {
21542155
if (maxConfiguredBytesPerSec.getBytes() > effectiveRecoverySpeed.getBytes()) {
21552156
logger.warn(
2156-
"repository [{}] has a rate limit [{}={}] per second which is above the effective recovery rate limit "
2157+
"repository {} has a rate limit [{}={}] per second which is above the effective recovery rate limit "
21572158
+ "[{}={}] per second, thus the repository rate limit will be superseded by the recovery rate limit",
2158-
metadata.name(),
2159+
toStringShort(),
21592160
settingKey,
21602161
maxConfiguredBytesPerSec,
21612162
INDICES_RECOVERY_MAX_BYTES_PER_SEC_SETTING.getKey(),
@@ -2362,7 +2363,7 @@ public void onResponse(RepositoryData repositoryData) {
23622363
@Override
23632364
public void onFailure(Exception e) {
23642365
logger.warn(
2365-
() -> format("[%s] Exception when initializing repository generation in cluster state", metadata.name()),
2366+
() -> format("%s Exception when initializing repository generation in cluster state", toStringShort()),
23662367
e
23672368
);
23682369
acquireAndClearRepoDataInitialized().onFailure(e);
@@ -2611,56 +2612,53 @@ private static String previousWriterMessage(@Nullable Tuple<Long, String> previo
26112612
private void markRepoCorrupted(long corruptedGeneration, Exception originalException, ActionListener<Void> listener) {
26122613
assert corruptedGeneration != RepositoryData.UNKNOWN_REPO_GEN;
26132614
assert bestEffortConsistency == false;
2614-
logger.warn(() -> "Marking repository [" + metadata.name() + "] as corrupted", originalException);
2615-
submitUnbatchedTask(
2616-
"mark repository corrupted [" + metadata.name() + "][" + corruptedGeneration + "]",
2617-
new ClusterStateUpdateTask() {
2618-
@Override
2619-
public ClusterState execute(ClusterState currentState) {
2620-
final var project = currentState.metadata().getProject(projectId);
2621-
final RepositoriesMetadata state = RepositoriesMetadata.get(project);
2622-
final RepositoryMetadata repoState = state.repository(metadata.name());
2623-
if (repoState.generation() != corruptedGeneration) {
2624-
throw new IllegalStateException(
2625-
"Tried to mark repo generation ["
2626-
+ corruptedGeneration
2627-
+ "] as corrupted but its state concurrently changed to ["
2628-
+ repoState
2629-
+ "]"
2630-
);
2631-
}
2632-
return ClusterState.builder(currentState)
2633-
.putProjectMetadata(
2634-
ProjectMetadata.builder(project)
2635-
.putCustom(
2636-
RepositoriesMetadata.TYPE,
2637-
state.withUpdatedGeneration(
2638-
metadata.name(),
2639-
RepositoryData.CORRUPTED_REPO_GEN,
2640-
repoState.pendingGeneration()
2641-
)
2642-
)
2643-
)
2644-
.build();
2645-
}
2646-
2647-
@Override
2648-
public void onFailure(Exception e) {
2649-
listener.onFailure(
2650-
new RepositoryException(
2651-
metadata.name(),
2652-
"Failed marking repository state as corrupted",
2653-
ExceptionsHelper.useOrSuppress(e, originalException)
2654-
)
2615+
logger.warn(() -> "Marking repository " + toStringShort() + " as corrupted", originalException);
2616+
submitUnbatchedTask("mark repository corrupted " + toStringShort() + "[" + corruptedGeneration + "]", new ClusterStateUpdateTask() {
2617+
@Override
2618+
public ClusterState execute(ClusterState currentState) {
2619+
final var project = currentState.metadata().getProject(projectId);
2620+
final RepositoriesMetadata state = RepositoriesMetadata.get(project);
2621+
final RepositoryMetadata repoState = state.repository(metadata.name());
2622+
if (repoState.generation() != corruptedGeneration) {
2623+
throw new IllegalStateException(
2624+
"Tried to mark repo generation ["
2625+
+ corruptedGeneration
2626+
+ "] as corrupted but its state concurrently changed to ["
2627+
+ repoState
2628+
+ "]"
26552629
);
26562630
}
2631+
return ClusterState.builder(currentState)
2632+
.putProjectMetadata(
2633+
ProjectMetadata.builder(project)
2634+
.putCustom(
2635+
RepositoriesMetadata.TYPE,
2636+
state.withUpdatedGeneration(
2637+
metadata.name(),
2638+
RepositoryData.CORRUPTED_REPO_GEN,
2639+
repoState.pendingGeneration()
2640+
)
2641+
)
2642+
)
2643+
.build();
2644+
}
26572645

2658-
@Override
2659-
public void clusterStateProcessed(ClusterState oldState, ClusterState newState) {
2660-
listener.onResponse(null);
2661-
}
2646+
@Override
2647+
public void onFailure(Exception e) {
2648+
listener.onFailure(
2649+
new RepositoryException(
2650+
metadata.name(),
2651+
"Failed marking repository state as corrupted",
2652+
ExceptionsHelper.useOrSuppress(e, originalException)
2653+
)
2654+
);
26622655
}
2663-
);
2656+
2657+
@Override
2658+
public void clusterStateProcessed(ClusterState oldState, ClusterState newState) {
2659+
listener.onResponse(null);
2660+
}
2661+
});
26642662
}
26652663

26662664
private RepositoryData getRepositoryData(long indexGen) {
@@ -2786,9 +2784,9 @@ public ClusterState execute(ClusterState currentState) {
27862784
final boolean uninitializedMeta = meta.generation() == RepositoryData.UNKNOWN_REPO_GEN || bestEffortConsistency;
27872785
if (uninitializedMeta == false && meta.pendingGeneration() != genInState) {
27882786
logger.info(
2789-
"Trying to write new repository data over unfinished write, repo [{}] is at "
2787+
"Trying to write new repository data over unfinished write, repo {} is at "
27902788
+ "safe generation [{}] and pending generation [{}]",
2791-
meta.name(),
2789+
toStringShort(),
27922790
genInState,
27932791
meta.pendingGeneration()
27942792
);
@@ -2920,9 +2918,9 @@ public void onFailure(Exception e) {
29202918
assert newRepositoryData.getUuid().equals(RepositoryData.MISSING_UUID) == false;
29212919
logger.info(
29222920
Strings.format(
2923-
"Generated new repository UUID [%s] for repository [%s] in generation [%d]",
2921+
"Generated new repository UUID [%s] for repository %s in generation [%d]",
29242922
newRepositoryData.getUuid(),
2925-
metadata.name(),
2923+
toStringShort(),
29262924
newGen
29272925
)
29282926
);
@@ -3211,7 +3209,7 @@ private long latestGeneration(Collection<String> rootBlobs) {
32113209
} catch (NumberFormatException nfe) {
32123210
// the index- blob wasn't of the format index-N where N is a number,
32133211
// no idea what this blob is but it doesn't belong in the repository!
3214-
logger.warn("[{}] Unknown blob in the repository: {}", metadata.name(), blobName);
3212+
logger.warn("[{}] Unknown blob in the repository: {}", toStringShort(), blobName);
32153213
}
32163214
}
32173215
return latest;
@@ -3890,7 +3888,11 @@ public void verify(String seed, DiscoveryNode localNode) {
38903888

38913889
@Override
38923890
public String toString() {
3893-
return "BlobStoreRepository[" + "[" + metadata.name() + "], [" + blobStore.get() + ']' + ']';
3891+
return "BlobStoreRepository[" + toStringShort() + ", [" + blobStore.get() + ']' + ']';
3892+
}
3893+
3894+
private String toStringShort() {
3895+
return projectRepoString(projectId, metadata.name());
38943896
}
38953897

38963898
/**
@@ -4011,10 +4013,10 @@ private Tuple<BlobStoreIndexShardSnapshots, ShardGeneration> buildBlobStoreIndex
40114013
// keeping hold of its data blobs.
40124014
try {
40134015
final var message = Strings.format(
4014-
"index %s shard generation [%s] in [%s][%s] not found - falling back to reading all shard snapshots",
4016+
"index %s shard generation [%s] in %s[%s] not found - falling back to reading all shard snapshots",
40154017
indexId,
40164018
generation,
4017-
metadata.name(),
4019+
toStringShort(),
40184020
shardContainer.path()
40194021
);
40204022
logger.error(message, noSuchFileException);
@@ -4055,17 +4057,17 @@ private Tuple<BlobStoreIndexShardSnapshots, ShardGeneration> buildBlobStoreIndex
40554057
}
40564058
}
40574059
logger.error(
4058-
"read shard snapshots [{}] due to missing shard generation [{}] for index {} in [{}][{}]",
4060+
"read shard snapshots [{}] due to missing shard generation [{}] for index {} in {}[{}]",
40594061
messageBuilder,
40604062
generation,
40614063
indexId,
4062-
metadata.name(),
4064+
toStringShort(),
40634065
shardContainer.path()
40644066
);
40654067
return new Tuple<>(blobStoreIndexShardSnapshots, generation);
40664068
} catch (Exception fallbackException) {
40674069
logger.error(
4068-
Strings.format("failed while reading all shard snapshots from [%s][%s]", metadata.name(), shardContainer.path()),
4070+
Strings.format("failed while reading all shard snapshots from %s[%s]", toStringShort(), shardContainer.path()),
40694071
fallbackException
40704072
);
40714073
noSuchFileException.addSuppressed(fallbackException);

server/src/main/java/org/elasticsearch/snapshots/SnapshotsService.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2671,7 +2671,7 @@ public void onFailure(Exception e) {
26712671
final var collector = new Strings.BoundedDelimitedStringCollector(sb, ",", 1024);
26722672
deleteEntry.snapshots().forEach(s -> collector.appendItem(s.getName()));
26732673
collector.finish();
2674-
sb.append("] from repository [").append(deleteEntry.repository()).append("]");
2674+
sb.append("] from repository ").append(projectRepoString(deleteEntry.projectId(), deleteEntry.repository()));
26752675
return sb;
26762676
}, e);
26772677
submitUnbatchedTask(
@@ -4004,8 +4004,11 @@ public void onFailure(Exception e) {
40044004
@Override
40054005
public void clusterStateProcessed(ClusterState oldState, ClusterState newState) {
40064006
logger.warn(
4007-
() -> format("Removed all snapshot tasks for repository [%s] from cluster state, now failing listeners", repository),
4008-
failure
4007+
() -> format(
4008+
"Removed all snapshot tasks for repository %s from cluster state, now failing listeners",
4009+
projectRepoString(projectId, repository),
4010+
failure
4011+
)
40094012
);
40104013
final List<Runnable> readyToResolveListeners = new ArrayList<>();
40114014
synchronized (currentlyFinalizing) {
@@ -4147,8 +4150,8 @@ private static void logSnapshotFailure(String operation, Snapshot snapshot, Exce
41474150
// suppress stack trace at INFO unless extra verbosity is configured
41484151
logger.info(
41494152
format(
4150-
"[%s][%s] failed to %s snapshot: %s",
4151-
snapshot.getRepository(),
4153+
"%s[%s] failed to %s snapshot: %s",
4154+
projectRepoString(snapshot.getProjectId(), snapshot.getRepository()),
41524155
snapshot.getSnapshotId().getName(),
41534156
operation,
41544157
e.getMessage()

0 commit comments

Comments
 (0)