You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2017/11/02 17:14:21 UTC
[geode] branch develop updated: GEODE-3936: remove ThreadUtil (#998)
This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new a9a444f GEODE-3936: remove ThreadUtil (#998)
a9a444f is described below
commit a9a444f96b6b9b2f77d5e2721907b77f20fb09ca
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Thu Nov 2 10:14:19 2017 -0700
GEODE-3936: remove ThreadUtil (#998)
---
.../apache/geode/internal/lang/ThreadUtils.java | 138 -------------
.../internal/logging/log4j/AlertAppender.java | 5 +-
.../geode/internal/lang/ThreadUtilsJUnitTest.java | 220 ---------------------
3 files changed, 3 insertions(+), 360 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/lang/ThreadUtils.java b/geode-core/src/main/java/org/apache/geode/internal/lang/ThreadUtils.java
deleted file mode 100644
index 9797a18..0000000
--- a/geode-core/src/main/java/org/apache/geode/internal/lang/ThreadUtils.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.apache.geode.internal.lang;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.Thread.State;
-
-/**
- * The ThreadUtils class is an abstract utility class for working with and invoking methods on
- * Threads.
- * <p/>
- *
- * @see java.lang.Thread
- * @since GemFire 7.0
- */
-public abstract class ThreadUtils {
-
- /**
- * Gets the name of the particular Thread or null if the Thread object reference is null.
- * <p/>
- *
- * @param thread the Thread object whose name is returned.
- * @return a String value indicating the name of the Thread or null if the Thread object reference
- * is null.
- * @see java.lang.Thread#getName()
- */
- public static String getThreadName(final Thread thread) {
- return (thread == null ? null : thread.getName());
- }
-
- /**
- * Interrupts the specified Thread, guarding against null.
- * <p/>
- *
- * @param thread the Thread to interrupt.
- * @see java.lang.Thread#interrupt()
- */
- public static void interrupt(final Thread thread) {
- if (thread != null) {
- thread.interrupt();
- }
- }
-
- /**
- * Determines whether the specified Thread is alive, guarding against null Object references.
- * <p/>
- *
- * @param thread the Thread to determine for aliveness.
- * @return a boolean value indicating whether the specified Thread is alive. Will return false if
- * the Thread Object references is null.
- * @see java.lang.Thread#isAlive()
- */
- public static boolean isAlive(final Thread thread) {
- return (thread != null && thread.isAlive());
- }
-
- /**
- * Determines whether the specified Thread is in a waiting state, guarding against null Object
- * references
- * <p/>
- *
- * @param thread the Thread to access it's state.
- * @return a boolean value indicating whether the Thread is in a waiting state. If the Thread
- * Object reference is null, then this method return false, as no Thread is clearly not
- * waiting for anything.
- * @see java.lang.Thread#getState()
- * @see java.lang.Thread.State#WAITING
- */
- public static boolean isWaiting(final Thread thread) {
- return (thread != null && thread.getState().equals(State.WAITING));
- }
-
- /**
- * Causes the current Thread to sleep for the specified number of milliseconds. If the current
- * Thread is interrupted during sleep, the interrupt flag on the current Thread will remain set
- * and the duration, in milliseconds, of completed sleep is returned.
- * <p/>
- *
- * @param milliseconds an integer value specifying the number of milliseconds the current Thread
- * should sleep.
- * @return a long value indicating duration in milliseconds of completed sleep by the current
- * Thread.
- * @see java.lang.System#nanoTime()
- * @see java.lang.Thread#sleep(long)
- */
- public static long sleep(final long milliseconds) {
- final long t0 = System.nanoTime();
-
- try {
- Thread.sleep(milliseconds);
- } catch (InterruptedException ignore) {
- Thread.currentThread().interrupt();
- }
-
- return (System.nanoTime() - t0) / 1000;
- }
-
- /**
- * Returns a stack trace of the {@code Throwable} as a {@code String}.
- *
- * @param throwable The throwable for which to create the stack trace.
- * @param expectNull True if null should be returned when {@code throwable} is null or false to
- * return "" when {@code throwable} is null
- * @return null if {@code throwable} is null and {@code expectNull} is true, "" if
- * {@code throwable} is null and {@code expectNull} is false, otherwise the stack trace
- * for {@code throwable}
- */
- public static String stackTraceToString(final Throwable throwable, final boolean expectNull) {
- if (throwable == null) {
- if (expectNull == true) {
- return null;
- }
-
- return "";
- }
-
- StringWriter stringWriter = new StringWriter();
- PrintWriter printWriter = new PrintWriter(stringWriter);
- throwable.printStackTrace(printWriter);
- printWriter.close();
- return stringWriter.toString();
- }
-}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/logging/log4j/AlertAppender.java b/geode-core/src/main/java/org/apache/geode/internal/logging/log4j/AlertAppender.java
index a7151cc..5f39257 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/logging/log4j/AlertAppender.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/logging/log4j/AlertAppender.java
@@ -20,6 +20,7 @@ import java.util.Date;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicReference;
+import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LogEvent;
@@ -33,7 +34,6 @@ import org.apache.geode.distributed.internal.DistributionManager;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.internal.admin.Alert;
import org.apache.geode.internal.admin.remote.AlertListenerMessage;
-import org.apache.geode.internal.lang.ThreadUtils;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.internal.tcp.ReenteredConnectException;
@@ -138,7 +138,8 @@ public class AlertAppender extends AbstractAppender implements PropertyChangeLis
final Date date = new Date(event.getTimeMillis());
final String threadName = event.getThreadName();
final String logMessage = event.getMessage().getFormattedMessage();
- final String stackTrace = ThreadUtils.stackTraceToString(event.getThrown(), true);
+ final String stackTrace =
+ (event.getThrown() == null) ? null : ExceptionUtils.getStackTrace(event.getThrown());
final String connectionName = ds.getConfig().getName();
for (Listener listener : this.listeners) {
diff --git a/geode-core/src/test/java/org/apache/geode/internal/lang/ThreadUtilsJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/lang/ThreadUtilsJUnitTest.java
deleted file mode 100644
index 30af492..0000000
--- a/geode-core/src/test/java/org/apache/geode/internal/lang/ThreadUtilsJUnitTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.internal.lang;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.*;
-
-import java.lang.Thread.State;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import edu.umd.cs.mtc.MultithreadedTestCase;
-import edu.umd.cs.mtc.TestFramework;
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.lib.concurrent.Synchroniser;
-import org.jmock.lib.legacy.ClassImposteriser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.test.junit.categories.UnitTest;
-
-/**
- * The ThreadUtilsJUnitTest class is a test suite of test cases for testing the contract and
- * functionality of the ThreadUtils class.
- * <p/>
- *
- * @see org.apache.geode.internal.lang.ThreadUtils
- * @see org.jmock.Expectations
- * @see org.jmock.Mockery
- * @see org.junit.Assert
- * @see org.junit.Test
- * @since GemFire 7.0
- */
-@Category(UnitTest.class)
-public class ThreadUtilsJUnitTest {
-
- protected Mockery mockContext;
-
- @Before
- public void setUp() {
- mockContext = new Mockery() {
- {
- setImposteriser(ClassImposteriser.INSTANCE);
- setThreadingPolicy(new Synchroniser());
- }
- };
- }
-
- @After
- public void tearDown() {
- mockContext.assertIsSatisfied();
- }
-
- @Test
- public void testGetThreadNameWithNull() {
- assertNull(ThreadUtils.getThreadName(null));
- }
-
- @Test
- public void testGetThreadNameWithThread() {
- assertNotNull(ThreadUtils.getThreadName(Thread.currentThread()));
- }
-
- @Test
- public void testInterruptWithNullThread() {
- ThreadUtils.interrupt(null);
- }
-
- @Test
- public void testInterruptWithNonNullThread() {
- final Thread mockThread = mockContext.mock(Thread.class, "Interrupted Thread");
-
- mockContext.checking(new Expectations() {
- {
- oneOf(mockThread).interrupt();
- }
- });
-
- ThreadUtils.interrupt(mockThread);
- }
-
- @Test
- public void testIsAlive() {
- assertTrue(ThreadUtils.isAlive(Thread.currentThread()));
- }
-
- @Test
- public void testIsAliveWithNullThread() {
- assertFalse(ThreadUtils.isAlive(null));
- }
-
- @Test
- public void testIsAliveWithUnstartedThread() {
- final Thread thread = new Thread(new Runnable() {
- public void run() {}
- });
- assertFalse(ThreadUtils.isAlive(thread));
- }
-
- @Test
- public void testIsAliveWithStoppedThread() throws InterruptedException {
- final AtomicBoolean ran = new AtomicBoolean(false);
-
- final Thread thread = new Thread(new Runnable() {
- public void run() {
- ran.set(true);
- }
- });
-
- thread.start();
- thread.join(50);
-
- assertFalse(ThreadUtils.isAlive(thread));
- assertTrue(ran.get());
- }
-
- @Test
- public void testIsWaitingWithNullThread() {
- assertFalse(ThreadUtils.isWaiting(null));
- }
-
- @Test
- public void testIsWaitingWithRunningThread() {
- final Thread runningThread = mockContext.mock(Thread.class, "Running Thread");
-
- mockContext.checking(new Expectations() {
- {
- oneOf(runningThread).getState();
- will(returnValue(State.RUNNABLE));
- }
- });
-
- assertFalse(ThreadUtils.isWaiting(runningThread));
- }
-
- @Test
- public void testIsWaitingWithWaitingThread() {
- final Thread waitingThread = mockContext.mock(Thread.class, "Waiting Thread");
-
- mockContext.checking(new Expectations() {
- {
- one(waitingThread).getState();
- will(returnValue(State.WAITING));
- }
- });
-
- assertTrue(ThreadUtils.isWaiting(waitingThread));
- }
-
- @Test
- public void testSleep() {
- final long t0 = System.currentTimeMillis();
- final long sleepDuration = ThreadUtils.sleep(500);
- final long t1 = System.currentTimeMillis();
-
- assertTrue(t1 > t0);
- assertTrue(sleepDuration > 0);
- }
-
- @Ignore("This is really just testing Thread.sleep(long)")
- @Test
- public void testSleepWithInterrupt() throws Throwable {
- TestFramework.runOnce(new SleepInterruptedMultithreadedTestCase(10 * 1000));
- }
-
- protected static class SleepInterruptedMultithreadedTestCase extends MultithreadedTestCase {
-
- private final long sleepDuration;
-
- private volatile Thread sleeperThread;
- private volatile boolean sleeperWasInterrupted;
- private volatile long actualSleepDuration;
-
- public SleepInterruptedMultithreadedTestCase(final long sleepDuration) {
- assert sleepDuration > 0 : "The duration of sleep must be greater than equal to 0!";
- this.sleepDuration = sleepDuration;
- }
-
- public void thread1() {
- assertTick(0);
- sleeperThread = Thread.currentThread();
- sleeperThread.setName("Sleeper Thread");
- waitForTick(1);
- actualSleepDuration = ThreadUtils.sleep(sleepDuration);
- sleeperWasInterrupted = sleeperThread.isInterrupted();
- assertTick(2);
- }
-
- public void thread2() throws Exception {
- assertTick(0);
- Thread.currentThread().setName("Interrupting Thread");
- waitForTick(1);
- waitForTick(2);
- sleeperThread.interrupt();
- assertTick(2);
- }
-
- @Override
- public void finish() {
- assertThat(sleeperWasInterrupted).isTrue();
- assertThat(actualSleepDuration).isGreaterThan(0);
- }
- }
-
-}
--
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].