Search in sources :

Example 1 with Scheduler

use of org.opensearch.threadpool.Scheduler in project OpenSearch by opensearch-project.

the class GlobalCheckpointListenersTests method testFailingListenerAfterTimeout.

public void testFailingListenerAfterTimeout() throws InterruptedException {
    final CountDownLatch latch = new CountDownLatch(1);
    final Logger mockLogger = mock(Logger.class);
    doAnswer(invocationOnMock -> {
        latch.countDown();
        return null;
    }).when(mockLogger).warn(any(String.class), any(RuntimeException.class));
    final GlobalCheckpointListeners globalCheckpointListeners = new GlobalCheckpointListeners(shardId, scheduler, mockLogger);
    final TimeValue timeout = TimeValue.timeValueMillis(randomIntBetween(1, 50));
    globalCheckpointListeners.add(NO_OPS_PERFORMED, maybeMultipleInvocationProtectingListener((g, e) -> {
        throw new RuntimeException("failure");
    }), timeout);
    latch.await();
    final ArgumentCaptor<String> message = ArgumentCaptor.forClass(String.class);
    final ArgumentCaptor<RuntimeException> t = ArgumentCaptor.forClass(RuntimeException.class);
    verify(mockLogger).warn(message.capture(), t.capture());
    assertThat(message.getValue(), equalTo("error notifying global checkpoint listener of timeout"));
    assertNotNull(t.getValue());
    assertThat(t.getValue(), instanceOf(RuntimeException.class));
    assertThat(t.getValue().getMessage(), equalTo("failure"));
}
Also used : Matchers.hasToString(org.hamcrest.Matchers.hasToString) ScheduledFuture(java.util.concurrent.ScheduledFuture) TimeoutException(java.util.concurrent.TimeoutException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) ParameterizedMessage(org.apache.logging.log4j.message.ParameterizedMessage) OpenSearchExecutors(org.opensearch.common.util.concurrent.OpenSearchExecutors) UNASSIGNED_SEQ_NO(org.opensearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO) ArgumentCaptor(org.mockito.ArgumentCaptor) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Assertions(org.opensearch.Assertions) After(org.junit.After) Map(java.util.Map) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ExecutorService(java.util.concurrent.ExecutorService) CyclicBarrier(java.util.concurrent.CyclicBarrier) TimeValue(org.opensearch.common.unit.TimeValue) NO_OPS_PERFORMED(org.opensearch.index.seqno.SequenceNumbers.NO_OPS_PERFORMED) Executor(java.util.concurrent.Executor) Index(org.opensearch.index.Index) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) Settings(org.opensearch.common.settings.Settings) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) Mockito.times(org.mockito.Mockito.times) Executors(java.util.concurrent.Executors) Mockito.verify(org.mockito.Mockito.verify) UncheckedIOException(java.io.UncheckedIOException) TimeUnit(java.util.concurrent.TimeUnit) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) CountDownLatch(java.util.concurrent.CountDownLatch) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Matchers.equalTo(org.hamcrest.Matchers.equalTo) Mockito.any(org.mockito.Mockito.any) Matchers.containsString(org.hamcrest.Matchers.containsString) Mockito.reset(org.mockito.Mockito.reset) Scheduler(org.opensearch.threadpool.Scheduler) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Mockito.mock(org.mockito.Mockito.mock) Matchers.hasToString(org.hamcrest.Matchers.hasToString) Matchers.containsString(org.hamcrest.Matchers.containsString) CountDownLatch(java.util.concurrent.CountDownLatch) Logger(org.apache.logging.log4j.Logger) TimeValue(org.opensearch.common.unit.TimeValue)

Example 2 with Scheduler

use of org.opensearch.threadpool.Scheduler in project OpenSearch by opensearch-project.

the class GlobalCheckpointListenersTests method testFailingListenerReadyToBeNotified.

public void testFailingListenerReadyToBeNotified() {
    final Logger mockLogger = mock(Logger.class);
    final GlobalCheckpointListeners globalCheckpointListeners = new GlobalCheckpointListeners(shardId, scheduler, mockLogger);
    final long globalCheckpoint = randomLongBetween(NO_OPS_PERFORMED + 1, Long.MAX_VALUE);
    globalCheckpointListeners.globalCheckpointUpdated(globalCheckpoint);
    final int numberOfListeners = randomIntBetween(0, 16);
    final long[] globalCheckpoints = new long[numberOfListeners];
    for (int i = 0; i < numberOfListeners; i++) {
        final int index = i;
        final boolean failure = randomBoolean();
        globalCheckpointListeners.add(randomLongBetween(NO_OPS_PERFORMED, globalCheckpoint - 1), maybeMultipleInvocationProtectingListener((g, e) -> {
            if (failure) {
                globalCheckpoints[index] = Long.MIN_VALUE;
                throw new RuntimeException("failure");
            } else {
                globalCheckpoints[index] = globalCheckpoint;
            }
        }), null);
        // the listener should be notified immediately
        if (failure) {
            assertThat(globalCheckpoints[i], equalTo(Long.MIN_VALUE));
            final ArgumentCaptor<ParameterizedMessage> message = ArgumentCaptor.forClass(ParameterizedMessage.class);
            final ArgumentCaptor<RuntimeException> t = ArgumentCaptor.forClass(RuntimeException.class);
            verify(mockLogger).warn(message.capture(), t.capture());
            reset(mockLogger);
            assertThat(message.getValue().getFormat(), equalTo("error notifying global checkpoint listener of updated global checkpoint [{}]"));
            assertNotNull(message.getValue().getParameters());
            assertThat(message.getValue().getParameters().length, equalTo(1));
            assertThat(message.getValue().getParameters()[0], equalTo(globalCheckpoint));
            assertNotNull(t.getValue());
            assertThat(t.getValue().getMessage(), equalTo("failure"));
        } else {
            assertThat(globalCheckpoints[i], equalTo(globalCheckpoint));
        }
    }
}
Also used : Matchers.hasToString(org.hamcrest.Matchers.hasToString) ScheduledFuture(java.util.concurrent.ScheduledFuture) TimeoutException(java.util.concurrent.TimeoutException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) ParameterizedMessage(org.apache.logging.log4j.message.ParameterizedMessage) OpenSearchExecutors(org.opensearch.common.util.concurrent.OpenSearchExecutors) UNASSIGNED_SEQ_NO(org.opensearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO) ArgumentCaptor(org.mockito.ArgumentCaptor) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Assertions(org.opensearch.Assertions) After(org.junit.After) Map(java.util.Map) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ExecutorService(java.util.concurrent.ExecutorService) CyclicBarrier(java.util.concurrent.CyclicBarrier) TimeValue(org.opensearch.common.unit.TimeValue) NO_OPS_PERFORMED(org.opensearch.index.seqno.SequenceNumbers.NO_OPS_PERFORMED) Executor(java.util.concurrent.Executor) Index(org.opensearch.index.Index) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) Settings(org.opensearch.common.settings.Settings) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) Mockito.times(org.mockito.Mockito.times) Executors(java.util.concurrent.Executors) Mockito.verify(org.mockito.Mockito.verify) UncheckedIOException(java.io.UncheckedIOException) TimeUnit(java.util.concurrent.TimeUnit) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) CountDownLatch(java.util.concurrent.CountDownLatch) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Matchers.equalTo(org.hamcrest.Matchers.equalTo) Mockito.any(org.mockito.Mockito.any) Matchers.containsString(org.hamcrest.Matchers.containsString) Mockito.reset(org.mockito.Mockito.reset) Scheduler(org.opensearch.threadpool.Scheduler) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Mockito.mock(org.mockito.Mockito.mock) ParameterizedMessage(org.apache.logging.log4j.message.ParameterizedMessage) Logger(org.apache.logging.log4j.Logger)

Example 3 with Scheduler

use of org.opensearch.threadpool.Scheduler in project OpenSearch by opensearch-project.

the class GlobalCheckpointListenersTests method testNotificationOnClosedUsesExecutor.

public void testNotificationOnClosedUsesExecutor() throws IOException {
    final AtomicInteger count = new AtomicInteger();
    final Executor executor = command -> {
        count.incrementAndGet();
        command.run();
    };
    final GlobalCheckpointListeners globalCheckpointListeners = new GlobalCheckpointListeners(shardId, scheduler, logger);
    globalCheckpointListeners.close();
    final AtomicInteger notified = new AtomicInteger();
    final int numberOfListeners = randomIntBetween(0, 16);
    for (int i = 0; i < numberOfListeners; i++) {
        globalCheckpointListeners.add(NO_OPS_PERFORMED, maybeMultipleInvocationProtectingListener(new TestGlobalCheckpointListener() {

            @Override
            public Executor executor() {
                return executor;
            }

            @Override
            public void accept(final long g, final Exception e) {
                notified.incrementAndGet();
                assertThat(g, equalTo(UNASSIGNED_SEQ_NO));
                assertNotNull(e);
                assertThat(e, instanceOf(IndexShardClosedException.class));
                assertThat(((IndexShardClosedException) e).getShardId(), equalTo(shardId));
            }
        }), null);
    }
    assertThat(notified.get(), equalTo(numberOfListeners));
    assertThat(count.get(), equalTo(numberOfListeners));
}
Also used : Matchers.hasToString(org.hamcrest.Matchers.hasToString) ScheduledFuture(java.util.concurrent.ScheduledFuture) TimeoutException(java.util.concurrent.TimeoutException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) ParameterizedMessage(org.apache.logging.log4j.message.ParameterizedMessage) OpenSearchExecutors(org.opensearch.common.util.concurrent.OpenSearchExecutors) UNASSIGNED_SEQ_NO(org.opensearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO) ArgumentCaptor(org.mockito.ArgumentCaptor) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Assertions(org.opensearch.Assertions) After(org.junit.After) Map(java.util.Map) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ExecutorService(java.util.concurrent.ExecutorService) CyclicBarrier(java.util.concurrent.CyclicBarrier) TimeValue(org.opensearch.common.unit.TimeValue) NO_OPS_PERFORMED(org.opensearch.index.seqno.SequenceNumbers.NO_OPS_PERFORMED) Executor(java.util.concurrent.Executor) Index(org.opensearch.index.Index) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) Settings(org.opensearch.common.settings.Settings) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) Mockito.times(org.mockito.Mockito.times) Executors(java.util.concurrent.Executors) Mockito.verify(org.mockito.Mockito.verify) UncheckedIOException(java.io.UncheckedIOException) TimeUnit(java.util.concurrent.TimeUnit) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) CountDownLatch(java.util.concurrent.CountDownLatch) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Matchers.equalTo(org.hamcrest.Matchers.equalTo) Mockito.any(org.mockito.Mockito.any) Matchers.containsString(org.hamcrest.Matchers.containsString) Mockito.reset(org.mockito.Mockito.reset) Scheduler(org.opensearch.threadpool.Scheduler) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Mockito.mock(org.mockito.Mockito.mock) Executor(java.util.concurrent.Executor) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) TimeoutException(java.util.concurrent.TimeoutException) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) UncheckedIOException(java.io.UncheckedIOException)

Example 4 with Scheduler

use of org.opensearch.threadpool.Scheduler in project OpenSearch by opensearch-project.

the class GlobalCheckpointListenersTests method testTimeout.

public void testTimeout() throws InterruptedException {
    final Logger mockLogger = mock(Logger.class);
    final GlobalCheckpointListeners globalCheckpointListeners = new GlobalCheckpointListeners(shardId, scheduler, mockLogger);
    final TimeValue timeout = TimeValue.timeValueMillis(randomIntBetween(1, 50));
    final AtomicBoolean notified = new AtomicBoolean();
    final CountDownLatch latch = new CountDownLatch(1);
    globalCheckpointListeners.add(NO_OPS_PERFORMED, maybeMultipleInvocationProtectingListener((g, e) -> {
        try {
            notified.set(true);
            assertThat(g, equalTo(UNASSIGNED_SEQ_NO));
            assertThat(e, instanceOf(TimeoutException.class));
            assertThat(e, hasToString(containsString(timeout.getStringRep())));
            final ArgumentCaptor<String> message = ArgumentCaptor.forClass(String.class);
            final ArgumentCaptor<TimeoutException> t = ArgumentCaptor.forClass(TimeoutException.class);
            verify(mockLogger).trace(message.capture(), t.capture());
            assertThat(message.getValue(), equalTo("global checkpoint listener timed out"));
            assertThat(t.getValue(), hasToString(containsString(timeout.getStringRep())));
        } catch (Exception caught) {
            fail(e.getMessage());
        } finally {
            latch.countDown();
        }
    }), timeout);
    latch.await();
    assertTrue(notified.get());
}
Also used : Matchers.hasToString(org.hamcrest.Matchers.hasToString) ScheduledFuture(java.util.concurrent.ScheduledFuture) TimeoutException(java.util.concurrent.TimeoutException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) ParameterizedMessage(org.apache.logging.log4j.message.ParameterizedMessage) OpenSearchExecutors(org.opensearch.common.util.concurrent.OpenSearchExecutors) UNASSIGNED_SEQ_NO(org.opensearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO) ArgumentCaptor(org.mockito.ArgumentCaptor) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Assertions(org.opensearch.Assertions) After(org.junit.After) Map(java.util.Map) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ExecutorService(java.util.concurrent.ExecutorService) CyclicBarrier(java.util.concurrent.CyclicBarrier) TimeValue(org.opensearch.common.unit.TimeValue) NO_OPS_PERFORMED(org.opensearch.index.seqno.SequenceNumbers.NO_OPS_PERFORMED) Executor(java.util.concurrent.Executor) Index(org.opensearch.index.Index) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) Settings(org.opensearch.common.settings.Settings) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) Mockito.times(org.mockito.Mockito.times) Executors(java.util.concurrent.Executors) Mockito.verify(org.mockito.Mockito.verify) UncheckedIOException(java.io.UncheckedIOException) TimeUnit(java.util.concurrent.TimeUnit) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) CountDownLatch(java.util.concurrent.CountDownLatch) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Matchers.equalTo(org.hamcrest.Matchers.equalTo) Mockito.any(org.mockito.Mockito.any) Matchers.containsString(org.hamcrest.Matchers.containsString) Mockito.reset(org.mockito.Mockito.reset) Scheduler(org.opensearch.threadpool.Scheduler) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Mockito.mock(org.mockito.Mockito.mock) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ArgumentCaptor(org.mockito.ArgumentCaptor) Matchers.hasToString(org.hamcrest.Matchers.hasToString) Matchers.containsString(org.hamcrest.Matchers.containsString) Logger(org.apache.logging.log4j.Logger) CountDownLatch(java.util.concurrent.CountDownLatch) TimeValue(org.opensearch.common.unit.TimeValue) TimeoutException(java.util.concurrent.TimeoutException) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) UncheckedIOException(java.io.UncheckedIOException) TimeoutException(java.util.concurrent.TimeoutException)

Example 5 with Scheduler

use of org.opensearch.threadpool.Scheduler in project OpenSearch by opensearch-project.

the class GlobalCheckpointListenersTests method testFailingListenerOnClose.

public void testFailingListenerOnClose() throws IOException {
    final Logger mockLogger = mock(Logger.class);
    final GlobalCheckpointListeners globalCheckpointListeners = new GlobalCheckpointListeners(shardId, scheduler, mockLogger);
    globalCheckpointListeners.globalCheckpointUpdated(NO_OPS_PERFORMED);
    final int numberOfListeners = randomIntBetween(0, 16);
    final boolean[] failures = new boolean[numberOfListeners];
    final Exception[] exceptions = new Exception[numberOfListeners];
    for (int i = 0; i < numberOfListeners; i++) {
        final int index = i;
        final boolean failure = randomBoolean();
        failures[index] = failure;
        globalCheckpointListeners.add(0, maybeMultipleInvocationProtectingListener((g, e) -> {
            if (failure) {
                throw new RuntimeException("failure");
            } else {
                exceptions[index] = e;
            }
        }), null);
    }
    globalCheckpointListeners.close();
    for (int i = 0; i < numberOfListeners; i++) {
        if (failures[i]) {
            assertNull(exceptions[i]);
        } else {
            assertNotNull(exceptions[i]);
            assertThat(exceptions[i], instanceOf(IndexShardClosedException.class));
            assertThat(((IndexShardClosedException) exceptions[i]).getShardId(), equalTo(shardId));
        }
    }
    int failureCount = 0;
    for (int i = 0; i < numberOfListeners; i++) {
        if (failures[i]) {
            failureCount++;
        }
    }
    if (failureCount > 0) {
        final ArgumentCaptor<String> message = ArgumentCaptor.forClass(String.class);
        final ArgumentCaptor<RuntimeException> t = ArgumentCaptor.forClass(RuntimeException.class);
        verify(mockLogger, times(failureCount)).warn(message.capture(), t.capture());
        assertThat(message.getValue(), equalTo("error notifying global checkpoint listener of closed shard"));
        assertNotNull(t.getValue());
        assertThat(t.getValue().getMessage(), equalTo("failure"));
    }
}
Also used : Matchers.hasToString(org.hamcrest.Matchers.hasToString) ScheduledFuture(java.util.concurrent.ScheduledFuture) TimeoutException(java.util.concurrent.TimeoutException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) ParameterizedMessage(org.apache.logging.log4j.message.ParameterizedMessage) OpenSearchExecutors(org.opensearch.common.util.concurrent.OpenSearchExecutors) UNASSIGNED_SEQ_NO(org.opensearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO) ArgumentCaptor(org.mockito.ArgumentCaptor) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Assertions(org.opensearch.Assertions) After(org.junit.After) Map(java.util.Map) Mockito.doAnswer(org.mockito.Mockito.doAnswer) ExecutorService(java.util.concurrent.ExecutorService) CyclicBarrier(java.util.concurrent.CyclicBarrier) TimeValue(org.opensearch.common.unit.TimeValue) NO_OPS_PERFORMED(org.opensearch.index.seqno.SequenceNumbers.NO_OPS_PERFORMED) Executor(java.util.concurrent.Executor) Index(org.opensearch.index.Index) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) Settings(org.opensearch.common.settings.Settings) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) Mockito.times(org.mockito.Mockito.times) Executors(java.util.concurrent.Executors) Mockito.verify(org.mockito.Mockito.verify) UncheckedIOException(java.io.UncheckedIOException) TimeUnit(java.util.concurrent.TimeUnit) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) CountDownLatch(java.util.concurrent.CountDownLatch) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Matchers.equalTo(org.hamcrest.Matchers.equalTo) Mockito.any(org.mockito.Mockito.any) Matchers.containsString(org.hamcrest.Matchers.containsString) Mockito.reset(org.mockito.Mockito.reset) Scheduler(org.opensearch.threadpool.Scheduler) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Mockito.mock(org.mockito.Mockito.mock) Matchers.hasToString(org.hamcrest.Matchers.hasToString) Matchers.containsString(org.hamcrest.Matchers.containsString) Logger(org.apache.logging.log4j.Logger) TimeoutException(java.util.concurrent.TimeoutException) IOException(java.io.IOException) BrokenBarrierException(java.util.concurrent.BrokenBarrierException) UncheckedIOException(java.io.UncheckedIOException)

Aggregations

IOException (java.io.IOException)10 UncheckedIOException (java.io.UncheckedIOException)10 HashMap (java.util.HashMap)10 List (java.util.List)10 Map (java.util.Map)10 BrokenBarrierException (java.util.concurrent.BrokenBarrierException)10 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)10 CountDownLatch (java.util.concurrent.CountDownLatch)10 CyclicBarrier (java.util.concurrent.CyclicBarrier)10 Executor (java.util.concurrent.Executor)10 ExecutorService (java.util.concurrent.ExecutorService)10 Executors (java.util.concurrent.Executors)10 ScheduledFuture (java.util.concurrent.ScheduledFuture)10 ScheduledThreadPoolExecutor (java.util.concurrent.ScheduledThreadPoolExecutor)10 TimeUnit (java.util.concurrent.TimeUnit)10 TimeoutException (java.util.concurrent.TimeoutException)10 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)10 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)10 AtomicLong (java.util.concurrent.atomic.AtomicLong)10 Logger (org.apache.logging.log4j.Logger)10