You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2014/05/09 09:03:19 UTC
svn commit: r1593493 [13/24] - in /river/jtsk/skunk/qa_refactor/trunk: qa/
qa/src/com/sun/jini/test/impl/end2end/jssewrapper/
qa/src/com/sun/jini/test/impl/joinmanager/
qa/src/com/sun/jini/test/impl/mahalo/
qa/src/com/sun/jini/test/impl/outrigger/match...
Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/event/EventTypeGenerator.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/event/EventTypeGenerator.java?rev=1593493&r1=1593492&r2=1593493&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/event/EventTypeGenerator.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/event/EventTypeGenerator.java Fri May 9 07:03:18 2014
@@ -1,170 +1,170 @@
-/*
- * 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 com.sun.jini.norm.event;
-
-import com.sun.jini.thread.WakeupManager;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import org.apache.river.impl.thread.NamedThreadFactory;
-
-/**
- * Factory class for <code>EventType</code> objects. All
- * <code>EventType</code> objects created by the same generator (or
- * associated with the same generator by a
- * <code>EventType.restoreTransientState<code> call) will use the same
- * thread pool to manage their event send threads.
- *
- * @author Sun Microsystems, Inc.
- * @see EventType
- * @see EventType#restoreTransientState
- */
-public class EventTypeGenerator implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**
- * Next event ID.
- * @serial
- */
- private long nextEvID = 1;
-
- /**
- * Task manager used to send events
- */
- private transient ExecutorService taskManager =
- new ThreadPoolExecutor(
- 10,
- 10, /* Ignored */
- 15,
- TimeUnit.SECONDS,
- new LinkedBlockingQueue<Runnable>(), /* Unbounded queue */
- new NamedThreadFactory("EventTypeGenerator", false)
- );
-
- /**
- * Wakeup manager used by the event sending tasks to schedule
- * retries.
- */
- private transient WakeupManager wakeupManager =
- new WakeupManager(new WakeupManager.ThreadDesc(null, false));
-
- /**
- * Create a new <code>EventType</code> object. The event ID for
- * this type will be generated by this call.
- *
- * @param monitor Object to callback when an event sending
- * attempt fails with a definite exception and to
- * ensure that the lease on the event is still current.
- * May not be <code>null</code>.
- * @return the new <code>EventType</code> object
- * @throws IOException if listener cannot be serialized
- */
- public synchronized EventType newEventType(SendMonitor monitor)
- throws IOException
- {
- EventType rslt = new EventType(
- this, monitor, nextEvID, null, null);
- // Do this afterward so we don't use up an ID if
- // we can't create the new object
- nextEvID++;
- return rslt;
- }
-
- /**
- * Create a new <code>EventType</code> object specify the
- * event id it should have.
- *
- * @param eventID the event ID of this type
- * @param monitor Object to callback when an event sending
- * attempt fails with a definite exception and to
- * ensure that the lease on the event is still current.
- * May not be <code>null</code>.
- * @return the new <code>EventType</code> object
- * @throws IOException if listener cannot be serialized
- */
- public EventType newEventType(SendMonitor monitor, long eventID)
- throws IOException
- {
- return new EventType(this, monitor, eventID, null, null);
- }
-
- /**
- * Called by event types during transient state recovery to ensure
- * the generator knows about there event ID.
- * <p>
- * Note: this method is not synchronized.
- * @param evID event ID of recovered <code>EventType</code> object
- */
- synchronized void recoverEventID(long evID) {
- if (evID >= nextEvID)
- nextEvID = evID + 1;
- }
-
- /**
- * Return the task manager that <code>EventType</code> objects created
- * by this generator should use to send their events.
- */
- ExecutorService getTaskManager() {
- return taskManager;
- }
-
- /**
- * Return the wakeup manager that <code>EventType</code> objects created
- * by this generator should use to send their events.
- */
- WakeupManager getWakeupManager() {
- return wakeupManager;
- }
-
- /**
- * Terminate any independent treads started by event types
- * associated with this generator.
- */
- public void terminate() {
- taskManager.shutdown();
- wakeupManager.stop();
- wakeupManager.cancelAll();
- }
-
- /**
- * Override <code>readObject</code> to create a <code>TaskManager</code>
- * and a <code>WakeupManager</code>.
- * @see ObjectInputStream#defaultReadObject
- */
- private void readObject(ObjectInputStream in)
- throws IOException, ClassNotFoundException
- {
- // fill in the object from the stream
- in.defaultReadObject();
-
- taskManager = new ThreadPoolExecutor(
- 10,
- 10, /* Ignored */
- 15,
- TimeUnit.SECONDS,
- new LinkedBlockingQueue<Runnable>(), /* Unbounded Queue */
- new NamedThreadFactory("EventTypeGenerator", true)
- );
- wakeupManager =
- new WakeupManager(new WakeupManager.ThreadDesc(null, true));
- }
-}
+/*
+ * 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 com.sun.jini.norm.event;
+
+import com.sun.jini.thread.WakeupManager;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import org.apache.river.impl.thread.NamedThreadFactory;
+
+/**
+ * Factory class for <code>EventType</code> objects. All
+ * <code>EventType</code> objects created by the same generator (or
+ * associated with the same generator by a
+ * <code>EventType.restoreTransientState<code> call) will use the same
+ * thread pool to manage their event send threads.
+ *
+ * @author Sun Microsystems, Inc.
+ * @see EventType
+ * @see EventType#restoreTransientState
+ */
+public class EventTypeGenerator implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Next event ID.
+ * @serial
+ */
+ private long nextEvID = 1;
+
+ /**
+ * Task manager used to send events
+ */
+ private transient ExecutorService taskManager =
+ new ThreadPoolExecutor(
+ 10,
+ 10, /* Ignored */
+ 15,
+ TimeUnit.SECONDS,
+ new LinkedBlockingQueue<Runnable>(), /* Unbounded queue */
+ new NamedThreadFactory("EventTypeGenerator", false)
+ );
+
+ /**
+ * Wakeup manager used by the event sending tasks to schedule
+ * retries.
+ */
+ private transient WakeupManager wakeupManager =
+ new WakeupManager(new WakeupManager.ThreadDesc(null, false));
+
+ /**
+ * Create a new <code>EventType</code> object. The event ID for
+ * this type will be generated by this call.
+ *
+ * @param monitor Object to callback when an event sending
+ * attempt fails with a definite exception and to
+ * ensure that the lease on the event is still current.
+ * May not be <code>null</code>.
+ * @return the new <code>EventType</code> object
+ * @throws IOException if listener cannot be serialized
+ */
+ public synchronized EventType newEventType(SendMonitor monitor)
+ throws IOException
+ {
+ EventType rslt = new EventType(
+ this, monitor, nextEvID, null, null);
+ // Do this afterward so we don't use up an ID if
+ // we can't create the new object
+ nextEvID++;
+ return rslt;
+ }
+
+ /**
+ * Create a new <code>EventType</code> object specify the
+ * event id it should have.
+ *
+ * @param eventID the event ID of this type
+ * @param monitor Object to callback when an event sending
+ * attempt fails with a definite exception and to
+ * ensure that the lease on the event is still current.
+ * May not be <code>null</code>.
+ * @return the new <code>EventType</code> object
+ * @throws IOException if listener cannot be serialized
+ */
+ public EventType newEventType(SendMonitor monitor, long eventID)
+ throws IOException
+ {
+ return new EventType(this, monitor, eventID, null, null);
+ }
+
+ /**
+ * Called by event types during transient state recovery to ensure
+ * the generator knows about there event ID.
+ * <p>
+ * Note: this method is not synchronized.
+ * @param evID event ID of recovered <code>EventType</code> object
+ */
+ synchronized void recoverEventID(long evID) {
+ if (evID >= nextEvID)
+ nextEvID = evID + 1;
+ }
+
+ /**
+ * Return the task manager that <code>EventType</code> objects created
+ * by this generator should use to send their events.
+ */
+ ExecutorService getTaskManager() {
+ return taskManager;
+ }
+
+ /**
+ * Return the wakeup manager that <code>EventType</code> objects created
+ * by this generator should use to send their events.
+ */
+ WakeupManager getWakeupManager() {
+ return wakeupManager;
+ }
+
+ /**
+ * Terminate any independent treads started by event types
+ * associated with this generator.
+ */
+ public void terminate() {
+ taskManager.shutdown();
+ wakeupManager.stop();
+ wakeupManager.cancelAll();
+ }
+
+ /**
+ * Override <code>readObject</code> to create a <code>TaskManager</code>
+ * and a <code>WakeupManager</code>.
+ * @see ObjectInputStream#defaultReadObject
+ */
+ private void readObject(ObjectInputStream in)
+ throws IOException, ClassNotFoundException
+ {
+ // fill in the object from the stream
+ in.defaultReadObject();
+
+ taskManager = new ThreadPoolExecutor(
+ 10,
+ 10, /* Ignored */
+ 15,
+ TimeUnit.SECONDS,
+ new LinkedBlockingQueue<Runnable>(), /* Unbounded Queue */
+ new NamedThreadFactory("EventTypeGenerator", false)
+ );
+ wakeupManager =
+ new WakeupManager(new WakeupManager.ThreadDesc(null, false));
+ }
+}
Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/ExpirationOpQueue.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/ExpirationOpQueue.java?rev=1593493&r1=1593492&r2=1593493&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/ExpirationOpQueue.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/ExpirationOpQueue.java Fri May 9 07:03:18 2014
@@ -1,102 +1,100 @@
-/*
- * 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 com.sun.jini.outrigger;
-
-import java.util.LinkedList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import net.jini.id.Uuid;
-
-/**
- * Logs expiration of leases and asynchronously persists them to disk.
- */
-class ExpirationOpQueue extends Thread {
- /** <code>true</code> if we should stop */
- private volatile boolean dead;
-
- /** The queue of expirations to log */
- private final LinkedList queue = new LinkedList();
-
- /** The server we are working for */
- private final OutriggerServerImpl server;
-
- /** Logger for logging exceptions */
- private static final Logger logger =
- Logger.getLogger(OutriggerServerImpl.leaseLoggerName);
-
- /**
- * Create a new <code>ExpirationOpQueue</code> that
- * will handle lease expiration logging for the
- * specified server.
- * @param server the <code>OutriggerServerImpl</code> to
- * log for.
- */
- ExpirationOpQueue(OutriggerServerImpl server) {
- super("Expiration Op Queue");
- this.server = server;
- }
-
- /**
- * Enqueue the logging of the expiration of the specified lease.
- * @param cookie The cookie of the lease that has expired.
- */
- synchronized void enqueue(Uuid cookie) {
- queue.add(cookie);
- notifyAll();
- }
-
- /**
- * Stop the queue
- */
- synchronized void terminate() {
- dead = true;
- notifyAll();
- }
-
- public void run() {
- while (!dead) { // ok not to lock since it starts false
- try {
- final Uuid cookie;
- synchronized (this) {
- while (!dead && queue.isEmpty()) {
- wait();
- }
-
- if (dead)
- return;
-
- cookie = (Uuid)queue.removeFirst();
- }
-
- server.cancelOp(cookie, true);
- } catch (Throwable t) {
- try {
- logger.log(Level.INFO,
- "ExpirationOpQueue.run encountered " +
- t.getClass().getName() + ", continuing",
- t);
- } catch (Throwable tt) {
- // don't let a problem in logging kill the thread
- }
- }
- }
- }
-}
-
-
+/*
+ * 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 com.sun.jini.outrigger;
+
+import java.util.LinkedList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.jini.id.Uuid;
+
+/**
+ * Logs expiration of leases and asynchronously persists them to disk.
+ */
+class ExpirationOpQueue extends Thread {
+ /** The queue of expirations to log */
+ private final LinkedList queue = new LinkedList();
+
+ /** The server we are working for */
+ private final OutriggerServerImpl server;
+
+ /** Logger for logging exceptions */
+ private static final Logger logger =
+ Logger.getLogger(OutriggerServerImpl.leaseLoggerName);
+
+ /**
+ * Create a new <code>ExpirationOpQueue</code> that
+ * will handle lease expiration logging for the
+ * specified server.
+ * @param server the <code>OutriggerServerImpl</code> to
+ * log for.
+ */
+ ExpirationOpQueue(OutriggerServerImpl server) {
+ super("Expiration Op Queue");
+ this.server = server;
+ }
+
+ /**
+ * Enqueue the logging of the expiration of the specified lease.
+ * @param cookie The cookie of the lease that has expired.
+ */
+ synchronized void enqueue(Uuid cookie) {
+ queue.add(cookie);
+ notifyAll();
+ }
+
+ /**
+ * Stop the queue
+ */
+ void terminate() {
+ interrupt();
+ synchronized (this){
+ notifyAll();
+ }
+ }
+
+ public void run() {
+ while (!Thread.currentThread().isInterrupted()) { // ok not to lock since it starts false
+ try {
+ final Uuid cookie;
+ synchronized (this) {
+ while (queue.isEmpty()) {
+ wait();
+ }
+ cookie = (Uuid)queue.removeFirst();
+ }
+
+ server.cancelOp(cookie, true);
+ } catch (InterruptedException e){
+ Thread.currentThread().interrupt(); // restore
+ return;
+ } catch (Throwable t) {
+ try {
+ logger.log(Level.INFO,
+ "ExpirationOpQueue.run encountered " +
+ t.getClass().getName() + ", continuing",
+ t);
+ } catch (Throwable tt) {
+ // don't let a problem in logging kill the thread
+ }
+ }
+ }
+ }
+}
+
+
Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java?rev=1593493&r1=1593492&r2=1593493&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java Fri May 9 07:03:18 2014
@@ -939,7 +939,7 @@ public class OutriggerServerImpl
// Use this (trivially) in log recovery
h.operationJournal = new OperationJournal(h.templates);
- h.operationJournal.setDaemon(true);
+ h.operationJournal.setDaemon(false);
if (persistent){
@@ -947,7 +947,7 @@ public class OutriggerServerImpl
* preparers for recovered proxies.
*/
h.expirationOpQueue = new ExpirationOpQueue(this);
- h.expirationOpQueue.setDaemon(true);
+ h.expirationOpQueue.setDaemon(false);
h.recoveredTransactionManagerPreparer =
(ProxyPreparer)Config.getNonNullEntry(config,
COMPONENT_NAME, "recoveredTransactionManagerPreparer",
@@ -1006,13 +1006,13 @@ public class OutriggerServerImpl
h.templateReaperThread = new TemplateReaper(reapingInterval);
h.templateReaperThread.setPriority(reapingPriority);
- h.templateReaperThread.setDaemon(true);
+ h.templateReaperThread.setDaemon(false);
h.entryReaperThread = new EntryReaper(reapingInterval);
h.entryReaperThread.setPriority(reapingPriority);
- h.entryReaperThread.setDaemon(true);
+ h.entryReaperThread.setDaemon(false);
h.contentsQueryReaperThread = new ContentsQueryReaper(reapingInterval);
h.contentsQueryReaperThread.setPriority(reapingPriority);
- h.contentsQueryReaperThread.setDaemon(true);
+ h.contentsQueryReaperThread.setDaemon(false);
return h;
}
Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/TxnMonitor.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/TxnMonitor.java?rev=1593493&r1=1593492&r2=1593493&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/TxnMonitor.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/TxnMonitor.java Fri May 9 07:03:18 2014
@@ -96,9 +96,6 @@ class TxnMonitor implements Runnable {
*/
private final Thread ourThread;
- /** Set when we are told to stop */
- private volatile boolean die = false;
-
private volatile boolean started = false;
/** Logger for logging transaction related information */
@@ -129,7 +126,7 @@ class TxnMonitor implements Runnable {
);
ourThread = new Thread(this, "TxnMonitor");
- ourThread.setDaemon(true);
+ ourThread.setDaemon(false);
}
public void start(){
@@ -142,16 +139,15 @@ class TxnMonitor implements Runnable {
public void destroy() {
taskManager.shutdown();
wakeupMgr.stop();
-
+ ourThread.interrupt();
synchronized (this) {
- die = true;
notifyAll();
}
try {
if (started) ourThread.join();
} catch(InterruptedException ie) {
- // ignore
+ Thread.currentThread().interrupt(); // restore
}
}
@@ -202,16 +198,12 @@ class TxnMonitor implements Runnable {
public void run() {
try {
ToMonitor tm;
- for (;;) {
+ while (!Thread.currentThread().isInterrupted()) {
synchronized (this) {
-
// Sleep if nothing is pending.
- while (pending.isEmpty() && !die) {
+ while (pending.isEmpty()) {
wait();
}
-
- if (die) return;
-
tm = pending.removeFirst();
}
@@ -226,7 +218,7 @@ class TxnMonitor implements Runnable {
}
}
} catch (InterruptedException e) {
- return;
+ Thread.currentThread().interrupt();// restore
}
}