Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into lucene_snapshot
Browse files Browse the repository at this point in the history
  • Loading branch information
elasticsearchmachine committed May 19, 2024
2 parents ab46fc4 + 449632c commit ef8b57f
Show file tree
Hide file tree
Showing 30 changed files with 52 additions and 127 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,7 @@ BufferedReader getBufferedReader(Path path) throws IOException {
final IOException ioException = new IOException("fatal");
when(reader.readLine()).thenThrow(ioException);
final Logger logger = LogManager.getLogger("testGetMaxMapCountIOException");
final MockLogAppender appender = new MockLogAppender();
try (var ignored = appender.capturing("testGetMaxMapCountIOException")) {
try (var appender = MockLogAppender.capture("testGetMaxMapCountIOException")) {
appender.addExpectation(
new MessageLoggingExpectation(
"expected logged I/O exception",
Expand All @@ -152,8 +151,7 @@ BufferedReader getBufferedReader(Path path) throws IOException {
reset(reader);
when(reader.readLine()).thenReturn("eof");
final Logger logger = LogManager.getLogger("testGetMaxMapCountNumberFormatException");
final MockLogAppender appender = new MockLogAppender();
try (var ignored = appender.capturing("testGetMaxMapCountNumberFormatException")) {
try (var appender = MockLogAppender.capture("testGetMaxMapCountNumberFormatException")) {
appender.addExpectation(
new MessageLoggingExpectation(
"expected logged number format exception",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,8 @@ public static void restoreLoggerState() {
private void assertLogged(Runnable loggingCode, LoggingExpectation... expectations) {
Logger testLogger = LogManager.getLogger("");
Level savedLevel = testLogger.getLevel();
MockLogAppender mockAppender = new MockLogAppender();

try (var ignored = mockAppender.capturing("")) {
try (var mockAppender = MockLogAppender.capture("")) {
Loggers.setLevel(testLogger, Level.ALL);
for (var expectation : expectations) {
mockAppender.addExpectation(expectation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,7 @@ public void testRegularSettingUpdateIsFullyLogged() throws Exception {

private void assertExpectedLogMessages(Consumer<Logger> consumer, MockLogAppender.LoggingExpectation... expectations) {
Logger testLogger = LogManager.getLogger("org.elasticsearch.test");
MockLogAppender appender = new MockLogAppender();
try (var ignored = appender.capturing("org.elasticsearch.test")) {
try (var appender = MockLogAppender.capture("org.elasticsearch.test")) {
Arrays.stream(expectations).forEach(appender::addExpectation);
consumer.accept(testLogger);
appender.assertAllExpectationsMatched();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@ public class MockLogAppender implements Releasable {

private static final Map<String, List<MockLogAppender>> mockAppenders = new ConcurrentHashMap<>();
private static final RealMockAppender parent = new RealMockAppender();
// TODO: this can become final once the ctor is made private
private List<String> loggers = List.of();
private final List<String> loggers;
private final List<WrappedLoggingExpectation> expectations;
private volatile boolean isAlive = true;

Expand Down Expand Up @@ -84,17 +83,13 @@ public void append(LogEvent event) {
}
}

public MockLogAppender() {
private MockLogAppender(List<String> loggers) {
/*
* We use a copy-on-write array list since log messages could be appended while we are setting up expectations. When that occurs,
* we would run into a concurrent modification exception from the iteration over the expectations in #append, concurrent with a
* modification from #addExpectation.
*/
expectations = new CopyOnWriteArrayList<>();
}

private MockLogAppender(List<String> loggers) {
this();
this.loggers = loggers;
}

Expand Down Expand Up @@ -294,18 +289,6 @@ public String toString() {
}
}

public Releasable capturing(Class<?>... classes) {
this.loggers = Arrays.stream(classes).map(Class::getCanonicalName).toList();
addToMockAppenders(this, loggers);
return this;
}

public Releasable capturing(String... names) {
this.loggers = Arrays.asList(names);
addToMockAppenders(this, loggers);
return this;
}

/**
* Adds the list of class loggers to this {@link MockLogAppender}.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,8 @@ public void testConcurrentLogAndLifecycle() throws Exception {
});
logThread.start();

final var appender = new MockLogAppender();
for (int i = 0; i < 1000; i++) {
try (var ignored = appender.capturing(MockLogAppenderTests.class)) {
try (var appender = MockLogAppender.capture(MockLogAppenderTests.class)) {
Thread.yield();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ public static Iterable<Object[]> parameters() throws Exception {
)
@Override
public void test() throws IOException {
final MockLogAppender mockLogAppender = new MockLogAppender();
try (var ignored = mockLogAppender.capturing(ESClientYamlSuiteTestCaseFailLogIT.class)) {
try (var mockLogAppender = MockLogAppender.capture(ESClientYamlSuiteTestCaseFailLogIT.class)) {
mockLogAppender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"message with dump of the test yaml",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ public void testCurrentCapacity() throws Exception {
}

public void assertCurrentCapacity(long memory, long storage, int nodes) {
MockLogAppender appender = new MockLogAppender();
try (var ignored = appender.capturing(TransportGetAutoscalingCapacityAction.class)) {
try (var appender = MockLogAppender.capture(TransportGetAutoscalingCapacityAction.class)) {
appender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"autoscaling capacity response message with " + storage,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,7 @@ public void onFailure(final Exception e) {

public void testAutoFollowCoordinatorLogsSkippingAutoFollowCoordinationWithNonCompliantLicense() throws Exception {
final Logger logger = LogManager.getLogger(AutoFollowCoordinator.class);
final MockLogAppender appender = new MockLogAppender();

try (var ignored = appender.capturing(AutoFollowCoordinator.class)) {
try (var appender = MockLogAppender.capture(AutoFollowCoordinator.class)) {
appender.addExpectation(
new MockLogAppender.ExceptionSeenEventExpectation(
getTestName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,7 @@ public void testLogWarningIfBitSetExceedsCacheSize() throws Exception {
assertThat(cache.entryCount(), equalTo(0));
assertThat(cache.ramBytesUsed(), equalTo(0L));

final MockLogAppender mockAppender = new MockLogAppender();
try (var ignored = mockAppender.capturing(cache.getClass())) {
try (var mockAppender = MockLogAppender.capture(cache.getClass())) {
mockAppender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"[bitset too big]",
Expand Down Expand Up @@ -230,8 +229,7 @@ public void testLogMessageIfCacheFull() throws Exception {
assertThat(cache.entryCount(), equalTo(0));
assertThat(cache.ramBytesUsed(), equalTo(0L));

final MockLogAppender mockAppender = new MockLogAppender();
try (var ignored = mockAppender.capturing(cache.getClass())) {
try (var mockAppender = MockLogAppender.capture(cache.getClass())) {
mockAppender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"[cache full]",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,7 @@ public void testOnFailure() throws IllegalAccessException {

SetStepInfoUpdateTask task = new SetStepInfoUpdateTask(index, policy, currentStepKey, stepInfo);

final MockLogAppender mockAppender = new MockLogAppender();
try (var ignored = mockAppender.capturing(SetStepInfoUpdateTask.class)) {
try (var mockAppender = MockLogAppender.capture(SetStepInfoUpdateTask.class)) {
mockAppender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"warning",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,6 @@ public class TransportGetPipelineActionTests extends ESTestCase {
* a TransportGetPipelineAction.
*/
public void testGetPipelineMultipleIDsPartialFailure() throws Exception {
// Set up a log appender for detecting log messages
final MockLogAppender mockLogAppender = new MockLogAppender();

// Set up a MultiGetResponse
GetResponse mockResponse = mock(GetResponse.class);
when(mockResponse.getId()).thenReturn("1");
Expand All @@ -66,7 +63,7 @@ public void testGetPipelineMultipleIDsPartialFailure() throws Exception {
new MultiGetItemResponse[] { new MultiGetItemResponse(mockResponse, null), new MultiGetItemResponse(null, failure) }
);

try (var threadPool = createThreadPool(); var ignored = mockLogAppender.capturing(TransportGetPipelineAction.class)) {
try (var threadPool = createThreadPool(); var mockLogAppender = MockLogAppender.capture(TransportGetPipelineAction.class)) {
mockLogAppender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"message",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,41 +106,35 @@ public void testThrottlingSummary() throws IllegalAccessException, TimeoutExcept
).getBytes(StandardCharsets.UTF_8)
);

MockLogAppender mockAppender = new MockLogAppender();
mockAppender.addExpectation(
executeLoggingTest(
is,
Level.INFO,
"test_throttling",
new MockLogAppender.SeenEventExpectation(
"test1",
CppLogMessageHandler.class.getName(),
Level.INFO,
"[test_throttling] * message 1"
)
);
mockAppender.addExpectation(
),
new MockLogAppender.SeenEventExpectation(
"test2",
CppLogMessageHandler.class.getName(),
Level.INFO,
"[test_throttling] * message 1 | repeated [5]"
)
);
mockAppender.addExpectation(
),
new MockLogAppender.SeenEventExpectation(
"test3",
CppLogMessageHandler.class.getName(),
Level.INFO,
"[test_throttling] * message 4"
)
);
mockAppender.addExpectation(
),
new MockLogAppender.SeenEventExpectation(
"test4",
CppLogMessageHandler.class.getName(),
Level.INFO,
"[test_throttling] * message 5"
)
);

executeLoggingTest(is, Level.INFO, "test_throttling");
}

public void testThrottlingSummaryOneRepeat() throws IllegalAccessException, TimeoutException, IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,7 @@ public void testSearchableSnapshotRelocationDoNotUseSnapshotBasedRecoveries() th

final var newNode = internalCluster().startDataOnlyNode();

final var mockAppender = new MockLogAppender();
try (var ignored = mockAppender.capturing(ShardSnapshotsService.class)) {
try (var mockAppender = MockLogAppender.capture(ShardSnapshotsService.class)) {
mockAppender.addExpectation(
new MockLogAppender.UnseenEventExpectation(
"Error fetching segments file",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -786,13 +786,12 @@ public void testSecurityPluginInstallsRestHandlerInterceptorEvenIfSecurityIsDisa
public void testSecurityRestHandlerInterceptorCanBeInstalled() throws IllegalAccessException {
final Logger amLogger = LogManager.getLogger(ActionModule.class);
Loggers.setLevel(amLogger, Level.DEBUG);
final MockLogAppender appender = new MockLogAppender();

Settings settings = Settings.builder().put("xpack.security.enabled", false).put("path.home", createTempDir()).build();
SettingsModule settingsModule = new SettingsModule(Settings.EMPTY);
ThreadPool threadPool = new TestThreadPool(getTestName());

try (var ignored = appender.capturing(ActionModule.class)) {
try (var appender = MockLogAppender.capture(ActionModule.class)) {
UsageService usageService = new UsageService();
Security security = new Security(settings);

Expand Down Expand Up @@ -838,7 +837,6 @@ public void testSecurityStatusMessageInLog() throws Exception {
final Logger mockLogger = LogManager.getLogger(Security.class);
boolean securityEnabled = true;
Loggers.setLevel(mockLogger, Level.INFO);
final MockLogAppender appender = new MockLogAppender();

Settings.Builder settings = Settings.builder().put("path.home", createTempDir());
if (randomBoolean()) {
Expand All @@ -847,7 +845,7 @@ public void testSecurityStatusMessageInLog() throws Exception {
settings.put("xpack.security.enabled", securityEnabled);
}

try (var ignored = appender.capturing(Security.class)) {
try (var appender = MockLogAppender.capture(Security.class)) {
appender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"message",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,7 @@ public void init() throws Exception {
}

public void testLogWhenLicenseProhibitsAuditing() throws Exception {
MockLogAppender mockLogAppender = new MockLogAppender();
try (var ignored = mockLogAppender.capturing(AuditTrailService.class)) {
try (var mockLogAppender = MockLogAppender.capture(AuditTrailService.class)) {
when(licenseState.getOperationMode()).thenReturn(randomFrom(License.OperationMode.values()));
if (isAuditingAllowed) {
mockLogAppender.addExpectation(
Expand Down Expand Up @@ -94,8 +93,7 @@ public void testLogWhenLicenseProhibitsAuditing() throws Exception {
}

public void testNoLogRecentlyWhenLicenseProhibitsAuditing() throws Exception {
MockLogAppender mockLogAppender = new MockLogAppender();
try (var ignored = mockLogAppender.capturing(AuditTrailService.class)) {
try (var mockLogAppender = MockLogAppender.capture(AuditTrailService.class)) {
service.nextLogInstantAtomic.set(randomFrom(Instant.now().minus(Duration.ofMinutes(5)), Instant.now()));
mockLogAppender.addExpectation(
new MockLogAppender.UnseenEventExpectation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1498,9 +1498,8 @@ public void testApiKeyAuthCacheWillTraceLogOnEvictionDueToCacheSize() throws Ill
IntStream.range(0, cacheSize).forEach(i -> apiKeyAuthCache.put(idPrefix + count.incrementAndGet(), new ListenableFuture<>()));
final Logger logger = LogManager.getLogger(ApiKeyService.class);
Loggers.setLevel(logger, Level.TRACE);
final MockLogAppender appender = new MockLogAppender();

try (var ignored = appender.capturing(ApiKeyService.class)) {
try (var appender = MockLogAppender.capture(ApiKeyService.class)) {
appender.addExpectation(
new MockLogAppender.PatternSeenEventExpectation(
"evict",
Expand Down Expand Up @@ -1559,9 +1558,8 @@ public void testApiKeyCacheWillNotTraceLogOnEvictionDueToCacheTtl() throws Illeg

final Logger logger = LogManager.getLogger(ApiKeyService.class);
Loggers.setLevel(logger, Level.TRACE);
final MockLogAppender appender = new MockLogAppender();

try (var ignored = appender.capturing(ApiKeyService.class)) {
try (var appender = MockLogAppender.capture(ApiKeyService.class)) {
appender.addExpectation(
new MockLogAppender.UnseenEventExpectation(
"evict",
Expand Down Expand Up @@ -1592,9 +1590,8 @@ public void testApiKeyAuthCacheWillLogWarningOnPossibleThrashing() throws Except
apiKeyAuthCache.put(randomAlphaOfLength(21), new ListenableFuture<>());
final Logger logger = LogManager.getLogger(ApiKeyService.class);
Loggers.setLevel(logger, Level.TRACE);
final MockLogAppender appender = new MockLogAppender();

try (var ignored = appender.capturing(ApiKeyService.class)) {
try (var appender = MockLogAppender.capture(ApiKeyService.class)) {
// Prepare the warning logging to trigger
service.getEvictionCounter().add(4500);
final long thrashingCheckIntervalInSeconds = 300L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -417,9 +417,7 @@ public void testTokenFirstMissingSecondFound() throws Exception {
}

public void testTokenMissing() throws Exception {
final MockLogAppender mockAppender = new MockLogAppender();

try (var ignored = mockAppender.capturing(RealmsAuthenticator.class)) {
try (var mockAppender = MockLogAppender.capture(RealmsAuthenticator.class)) {
mockAppender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"unlicensed realms",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -480,9 +480,8 @@ public void testRunAsIsIgnoredForUnsupportedAuthenticationTypes() throws Illegal

final Logger logger = LogManager.getLogger(AuthenticatorChain.class);
Loggers.setLevel(logger, Level.INFO);
final MockLogAppender appender = new MockLogAppender();

try (var ignored = appender.capturing(AuthenticatorChain.class)) {
try (var appender = MockLogAppender.capture(AuthenticatorChain.class)) {
appender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"run-as",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,7 @@ public void testNullUser() throws IllegalAccessException {
final ElasticsearchSecurityException e = new ElasticsearchSecurityException("fail");
when(request.authenticationFailed(authenticationToken)).thenReturn(e);

final MockLogAppender mockAppender = new MockLogAppender();
try (var ignored = mockAppender.capturing(RealmsAuthenticator.class)) {
try (var mockAppender = MockLogAppender.capture(RealmsAuthenticator.class)) {
mockAppender.addExpectation(
new MockLogAppender.SeenEventExpectation(
"unlicensed realms",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -935,10 +935,9 @@ public void testRealmsAreDisabledOnLicenseDowngrade() throws Exception {
verify(licenseState).enableUsageTracking(Security.CUSTOM_REALMS_FEATURE, "custom_realm_2");

final Logger realmsLogger = LogManager.getLogger(Realms.class);
final MockLogAppender appender = new MockLogAppender();

when(licenseState.statusDescription()).thenReturn("mock license");
try (var ignored = appender.capturing(Realms.class)) {
try (var appender = MockLogAppender.capture(Realms.class)) {
for (String realmId : List.of("kerberos.kerberos_realm", "type_0.custom_realm_1", "type_1.custom_realm_2")) {
appender.addExpectation(
new MockLogAppender.SeenEventExpectation(
Expand Down

0 comments on commit ef8b57f

Please sign in to comment.