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 2015/12/13 05:43:43 UTC
svn commit: r1719761 [3/3] - in
/river/jtsk/trunk/src/org/apache/river/mercury: MailboxImpl.java
MailboxImplInit.java PersistentEventLog.java StreamPool.java
TransientEventLog.java
Modified: river/jtsk/trunk/src/org/apache/river/mercury/MailboxImplInit.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/mercury/MailboxImplInit.java?rev=1719761&r1=1719760&r2=1719761&view=diff
==============================================================================
--- river/jtsk/trunk/src/org/apache/river/mercury/MailboxImplInit.java (original)
+++ river/jtsk/trunk/src/org/apache/river/mercury/MailboxImplInit.java Sun Dec 13 04:43:42 2015
@@ -42,6 +42,7 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
+import javax.security.auth.login.LoginContext;
import net.jini.activation.ActivationExporter;
import net.jini.config.Configuration;
import net.jini.config.ConfigurationException;
@@ -67,12 +68,12 @@ class MailboxImplInit {
boolean activationPrepared;
Exporter exporter;
ProxyPreparer listenerPreparer;
+ ProxyPreparer recoveredListenerPreparer;
ProxyPreparer locatorToJoinPreparer;
LeasePeriodPolicy leasePolicy;
String persistenceDirectory;
ProxyPreparer recoveredLocatorToJoinPreparer;
int logToSnapshotThreshold;
- ReliableLog log;
Uuid serviceID;
String[] lookupGroups;
LookupLocator[] lookupLocators;
@@ -86,290 +87,85 @@ class MailboxImplInit {
/** <code>EventLogIterator</code> generator */
EventLogFactory eventLogFactory = new EventLogFactory();
List<Uuid> pendingReg = new ArrayList<Uuid>();
- Thread snapshotter;
- Thread notifier;
- Thread expirer;
Configuration config;
AccessControlContext context;
+ LoginContext loginContext;
+ boolean persistent;
MailboxImplInit(Configuration config,
boolean persistent,
ActivationID activationID,
- Entry[] baseLookupAttrs,
- LogHandler localLogHandler,
- Thread snapshotter,
- Thread notifier,
- Thread expirer)
- throws ConfigurationException, RemoteException, ActivationException, IOException
+ Entry[] baseLookupAttrs
+ ) throws ConfigurationException, RemoteException, ActivationException
{
- this.notifier = notifier;
- this.expirer = expirer;
+ this.persistent = persistent;
this.config = config;
context = AccessController.getContext();
// Get activation specific configuration items, if activated
if (activationID != null) {
ProxyPreparer activationSystemPreparer = (ProxyPreparer) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "activationSystemPreparer", ProxyPreparer.class, new BasicProxyPreparer());
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "activationSystemPreparer: {0}", activationSystemPreparer);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "activationSystemPreparer: {0}", activationSystemPreparer);
}
activationSystem = (ActivationSystem) activationSystemPreparer.prepareProxy(ActivationGroup.getSystem());
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "Prepared activation system is: {0}", activationSystem);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.FINEST)) {
+ MailboxImpl.INIT_LOGGER.log(Level.FINEST, "Prepared activation system is: {0}", activationSystem);
}
ProxyPreparer activationIdPreparer = (ProxyPreparer) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "activationIdPreparer", ProxyPreparer.class, new BasicProxyPreparer());
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "activationIdPreparer: {0}", activationIdPreparer);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "activationIdPreparer: {0}", activationIdPreparer);
}
activationID = (ActivationID) activationIdPreparer.prepareProxy(activationID);
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "Prepared activationID is: {0}", activationID);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.FINEST)) {
+ MailboxImpl.INIT_LOGGER.log(Level.FINEST, "Prepared activationID is: {0}", activationID);
}
activationPrepared = true;
exporter = (Exporter) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "serverExporter", Exporter.class, new ActivationExporter(activationID, new BasicJeriExporter(TcpServerEndpoint.getInstance(0), new BasicILFactory(), false, true)), activationID);
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Activatable service exporter is: {0}", exporter);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "Activatable service exporter is: {0}", exporter);
}
this.activationID = activationID;
} else {
//Get non-activatable configuration items
exporter = (Exporter) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "serverExporter", Exporter.class, new BasicJeriExporter(TcpServerEndpoint.getInstance(0), new BasicILFactory(), false, true));
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Non-activatable service exporter is: {0}", exporter);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "Non-activatable service exporter is: {0}", exporter);
}
}
listenerPreparer = (ProxyPreparer) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "listenerPreparer", ProxyPreparer.class, new BasicProxyPreparer());
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Listener preparer is: {0}", listenerPreparer);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "Listener preparer is: {0}", listenerPreparer);
}
/* Get the proxy preparers for the lookup locators to join */
locatorToJoinPreparer = (ProxyPreparer) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "locatorToJoinPreparer", ProxyPreparer.class, new BasicProxyPreparer());
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Locator preparer is: {0}", locatorToJoinPreparer);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "Locator preparer is: {0}", locatorToJoinPreparer);
}
// Create lease policy -- used by recovery logic, below
leasePolicy = (LeasePeriodPolicy) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "leasePeriodPolicy", LeasePeriodPolicy.class, new FixedLeasePeriodPolicy(3 * TimeConstants.HOURS, 1 * TimeConstants.HOURS));
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "LeasePeriodPolicy is: {0}", leasePolicy);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "LeasePeriodPolicy is: {0}", leasePolicy);
}
// Note: referenced by recovery logic in rebuildTransientState()
- ProxyPreparer recoveredListenerPreparer = null;
if (persistent) {
persistenceDirectory = (String) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "persistenceDirectory", String.class);
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Persistence directory is: {0}", persistenceDirectory);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "Persistence directory is: {0}", persistenceDirectory);
}
// Note: referenced by recovery logic in rebuildTransientState()
recoveredListenerPreparer = (ProxyPreparer) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "recoveredListenerPreparer", ProxyPreparer.class, new BasicProxyPreparer());
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Recovered listener preparer is: {0}", recoveredListenerPreparer);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "Recovered listener preparer is: {0}", recoveredListenerPreparer);
}
// Note: referenced by recovery logic, below
recoveredLocatorToJoinPreparer = (ProxyPreparer) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "recoveredLocatorToJoinPreparer", ProxyPreparer.class, new BasicProxyPreparer());
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Recovered locator preparer is: {0}", recoveredLocatorToJoinPreparer);
+ if (MailboxImpl.INIT_LOGGER.isLoggable(Level.CONFIG)) {
+ MailboxImpl.INIT_LOGGER.log(Level.CONFIG, "Recovered locator preparer is: {0}", recoveredLocatorToJoinPreparer);
}
logToSnapshotThreshold = Config.getIntEntry(config, MailboxImpl.MERCURY, "logToSnapshotThreshold", 50, 0, Integer.MAX_VALUE);
- log = new ReliableLog(persistenceDirectory, localLogHandler);
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "Recovering persistent state");
- }
- log.recover();
- }
- if (serviceID == null) {
- // First time up, get initial values
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "Getting initial values.");
- }
- serviceID = UuidFactory.generate();
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "ServiceID: {0}", serviceID);
- }
- // Can be null for ALL_GROUPS
- lookupGroups = (String[]) config.getEntry(MailboxImpl.MERCURY, "initialLookupGroups", String[].class, new String[]{""}); //default to public group
- //default to public group
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Initial groups:");
- MailboxImpl.dumpGroups(lookupGroups, MailboxImpl.initLogger, Level.CONFIG);
- }
- /*
- * Note: Configuration provided locators are assumed to be
- * prepared already.
- */
- lookupLocators = (LookupLocator[]) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "initialLookupLocators", LookupLocator[].class, new LookupLocator[0]);
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Initial locators:");
- MailboxImpl.dumpLocators(lookupLocators, MailboxImpl.initLogger, Level.CONFIG);
- }
- final Entry[] initialAttrs = (Entry[]) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "initialLookupAttributes", Entry[].class, new Entry[0]);
- if (MailboxImpl.initLogger.isLoggable(Level.CONFIG)) {
- MailboxImpl.initLogger.log(Level.CONFIG, "Initial lookup attributes:");
- MailboxImpl.dumpAttrs(initialAttrs, MailboxImpl.initLogger, Level.CONFIG);
- }
- if (initialAttrs.length == 0) {
- lookupAttrs = baseLookupAttrs;
- } else {
- lookupAttrs = new Entry[initialAttrs.length + baseLookupAttrs.length];
- int i = 0;
- for (int j = 0; j < baseLookupAttrs.length; j++, i++) {
- lookupAttrs[i] = baseLookupAttrs[j];
- }
- for (int j = 0; j < initialAttrs.length; j++, i++) {
- lookupAttrs[i] = initialAttrs[j];
- }
- }
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "Combined lookup attributes:");
- MailboxImpl.dumpAttrs(lookupAttrs, MailboxImpl.initLogger, Level.FINEST);
- }
- } else {
- // recovered logic
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "Preparing recovered locators:");
- MailboxImpl.dumpLocators(lookupLocators, MailboxImpl.initLogger, Level.FINEST);
- }
- MailboxImpl.prepareExistingLocators(recoveredLocatorToJoinPreparer, lookupLocators);
- //TODO - Add recovered state debug: groups, locators, etc.
- }
- if (persistent) {
- // Take snapshot of current state.
- if (MailboxImpl.initLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.initLogger.log(Level.FINEST, "Taking snapshot.");
- }
- log.snapshot();
- // Reconstruct any transient state, if necessary.
- //rebuildTransientState(recoveredListenerPreparer);
- if (MailboxImpl.operationsLogger.isLoggable(Level.FINER)) {
- MailboxImpl.operationsLogger.entering(MailboxImpl.mailboxSourceClass, "rebuildTransientState", recoveredListenerPreparer);
- }
- this.snapshotter = snapshotter;
- // Reconstruct regByExpiration and pendingReg data structures,
- // if necessary.
- if (!regByID.isEmpty()) {
- if (MailboxImpl.recoveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.recoveryLogger.log(Level.FINEST, "Rebuilding transient state ...");
- }
- Collection<ServiceRegistration> regs = regByID.values();
- Iterator<ServiceRegistration> iter = regs.iterator();
- ServiceRegistration reg = null;
- Uuid uuid = null;
- EventLogIterator eli = null;
- while (iter.hasNext()) {
- reg = iter.next(); // get Reg
- // get Reg
- uuid = reg.getCookie(); // get its Uuid
- // get its Uuid
- if (MailboxImpl.recoveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.recoveryLogger.log(Level.FINEST, "Checking reg : {0}", reg);
- }
- // Check if registration is still current
- if (MailboxImpl.ensureCurrent(reg)) {
- if (MailboxImpl.recoveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.recoveryLogger.log(Level.FINEST, "Restoring reg transient state ...");
- }
- try {
- reg.restoreTransientState(recoveredListenerPreparer);
- } catch (Exception e) {
- if (MailboxImpl.recoveryLogger.isLoggable(Levels.HANDLED)) {
- MailboxImpl.recoveryLogger.log(Levels.HANDLED, "Trouble restoring reg transient state", e);
- }
- try {
- reg.setEventTarget(null);
- } catch (IOException ioe) {
- throw new AssertionError("Setting a null target threw an exception: " + ioe);
- }
- }
- if (MailboxImpl.recoveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.recoveryLogger.log(Level.FINEST, "Reinitializing iterator ...");
- }
- // regenerate an EventLogIterator for this Reg
- // Note that event state is maintained separately
- // through the event log mechanism.
- eli = persistent ? eventLogFactory.iterator(uuid, MailboxImpl.getEventLogPath(persistenceDirectory, uuid)) : eventLogFactory.iterator(uuid);
- reg.setIterator(eli);
- if (MailboxImpl.recoveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.recoveryLogger.log(Level.FINEST, "Adding registration to expiration watch list");
- }
- // Put Reg into time sorted collection
- regByExpiration.put(reg, reg);
- // Check if registration needs to be added to the
- // pending list. Note, we could have processed
- // an "enabled" log record during recovery, so
- // only add it if it's not already there.
- // We don't need to check activeReg since the
- // the notifier hasn't kicked in yet. Don't call
- // enableRegistration() since it clears the "unknown
- // events" list which we want to maintain.
- if (reg.hasEventTarget() && !pendingReg.contains(uuid)) {
- if (MailboxImpl.recoveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.recoveryLogger.log(Level.FINEST, "Adding registration to pending task list");
- }
- pendingReg.add(uuid);
- }
- } else {
- /* Registration has expired, so remove it via the iterator,
- * which is the only "safe" way to do it during a traversal.
- * Call the overloaded version of removeRegistration()
- * which will avoid directly removing the registration
- * from regByID (which would result in a
- * ConcurrentModificationException). See Bug 4507320.
- */
- if (MailboxImpl.recoveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.recoveryLogger.log(Level.FINEST, "Removing expired registration: ");
- }
- iter.remove();
- // removeRegistration(uuid, reg, true);
- /**/
- // Remove Reg from data structures, if present.
- // If initializing, don't remove directly from regByID since we
- // currently traversing it via an iterator. Assumption is that
- // the caller has already removed it via the iterator.
- // See Bug 4507320.
- // if (!initializing) {
- // regByID.remove(uuid);
- // }
- regByExpiration.remove(reg);
- boolean exists = pendingReg.remove(uuid);
- MailboxImpl.NotifyTask task = activeReg.remove(uuid);
- if (task != null) {
- // cancel active task, if any
- task.cancel(false);
- if (MailboxImpl.deliveryLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.deliveryLogger.log(Level.FINEST, "Cancelling active notification task for {0}", uuid);
- }
- }
- // Delete any associated resources
- try {
- if (MailboxImpl.persistenceLogger.isLoggable(Level.FINEST)) {
- MailboxImpl.persistenceLogger.log(Level.FINEST, "Removing logs for {0}", reg);
- }
- EventLogIterator it = reg.iterator();
- if (it != null) {
- it.destroy();
- }
- } catch (IOException ioe) {
- if (MailboxImpl.persistenceLogger.isLoggable(Levels.HANDLED)) {
- MailboxImpl.persistenceLogger.log(Levels.HANDLED, "Trouble removing logs", ioe);
- }
- // Did the best we could ... continue.
- }
- // Sanity check
- if (exists && task != null) {
- if (MailboxImpl.leaseLogger.isLoggable(Level.SEVERE)) {
- MailboxImpl.leaseLogger.log(Level.SEVERE, "ERROR: Registration was found " + "on both the active and pending lists");
- }
- // TODO (FCS)- throw assertion error
- }
- if (MailboxImpl.operationsLogger.isLoggable(Level.FINER)) {
- MailboxImpl.operationsLogger.exiting(MailboxImpl.mailboxSourceClass, "removeRegistration");
- }
- /**/
- }
- }
- }
- if (MailboxImpl.operationsLogger.isLoggable(Level.FINER)) {
- MailboxImpl.operationsLogger.exiting(MailboxImpl.mailboxSourceClass, "rebuildTransientState");
- }
+
}
+
maxUnexportDelay = Config.getLongEntry(config, MailboxImpl.MERCURY, "maxUnexportDelay", 2 * TimeConstants.MINUTES, 0, Long.MAX_VALUE);
unexportRetryDelay = Config.getLongEntry(config, MailboxImpl.MERCURY, "unexportRetryDelay", TimeConstants.SECONDS, 1, Long.MAX_VALUE);
}
Modified: river/jtsk/trunk/src/org/apache/river/mercury/PersistentEventLog.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/mercury/PersistentEventLog.java?rev=1719761&r1=1719760&r2=1719761&view=diff
==============================================================================
--- river/jtsk/trunk/src/org/apache/river/mercury/PersistentEventLog.java (original)
+++ river/jtsk/trunk/src/org/apache/river/mercury/PersistentEventLog.java Sun Dec 13 04:43:42 2015
@@ -88,7 +88,7 @@ class PersistentEventLog implements Even
/** <tt>Logger</tt> used for persistence-related debugging messages */
private static final Logger persistenceLogger =
- MailboxImpl.persistenceLogger;
+ MailboxImpl.PERSISTENCE_LOGGER;
/** Size of control data file: 4 longs * 8 bytes per long */
private static final int CTLBLOCK_LEN = 8 * 4;
Modified: river/jtsk/trunk/src/org/apache/river/mercury/StreamPool.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/mercury/StreamPool.java?rev=1719761&r1=1719760&r2=1719761&view=diff
==============================================================================
--- river/jtsk/trunk/src/org/apache/river/mercury/StreamPool.java (original)
+++ river/jtsk/trunk/src/org/apache/river/mercury/StreamPool.java Sun Dec 13 04:43:42 2015
@@ -44,7 +44,7 @@ class StreamPool {
// Class fields
/** Logger for lease related messages */
private static final Logger persistenceLogger =
- MailboxImpl.persistenceLogger;
+ MailboxImpl.PERSISTENCE_LOGGER;
/**
* Maximum limit for the number of concurrent <tt>LogStream</tt>s
Modified: river/jtsk/trunk/src/org/apache/river/mercury/TransientEventLog.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/mercury/TransientEventLog.java?rev=1719761&r1=1719760&r2=1719761&view=diff
==============================================================================
--- river/jtsk/trunk/src/org/apache/river/mercury/TransientEventLog.java (original)
+++ river/jtsk/trunk/src/org/apache/river/mercury/TransientEventLog.java Sun Dec 13 04:43:42 2015
@@ -60,7 +60,7 @@ class TransientEventLog implements Event
/** <tt>Logger</tt> used for persistence-related debugging messages */
private static final Logger persistenceLogger =
- MailboxImpl.persistenceLogger;
+ MailboxImpl.PERSISTENCE_LOGGER;
//
// Object fields