blob: 0d0c922166bb7a09a86a116be302f3d84445fa3c [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.distributed.internal;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.Vector;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import com.gemstone.gemfire.CancelCriterion;
import com.gemstone.gemfire.InternalGemFireError;
import com.gemstone.gemfire.distributed.DistributedMember;
import com.gemstone.gemfire.distributed.DurableClientAttributes;
import com.gemstone.gemfire.distributed.Role;
import com.gemstone.gemfire.distributed.internal.locks.ElderState;
import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
import com.gemstone.gemfire.distributed.internal.membership.MemberAttributes;
import com.gemstone.gemfire.distributed.internal.membership.MembershipManager;
import com.gemstone.gemfire.distributed.internal.membership.jgroup.GFJGBasicAdapter;
import com.gemstone.gemfire.i18n.LogWriterI18n;
import com.gemstone.gemfire.internal.SocketCreator;
import com.gemstone.gemfire.internal.Version;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
import com.gemstone.gemfire.internal.logging.InternalLogWriter;
import com.gemstone.gemfire.internal.logging.LogWriterImpl;
import com.gemstone.org.jgroups.JChannel;
/**
* A <code>LonerDistributionManager</code> is a dm that never communicates
* with anyone else.
*
* @author Darrel
*
*
* @since 3.5
*/
public class LonerDistributionManager implements DM {
private final InternalDistributedSystem system;
private final InternalLogWriter logger;
private ElderState elderState;
//////////////////////// Constructors ////////////////////////
/**
* Creates a new local distribution manager
*
* @param system
* The distributed system to which this distribution manager
* will send messages.
*
*/
public LonerDistributionManager(InternalDistributedSystem system,
InternalLogWriter logger) {
JChannel.setDefaultGFFunctions(new GFJGBasicAdapter());
this.system = system;
this.logger = logger;
this.id = generateMemberId();
this.allIds = Collections.singleton(id);
this.viewMembers = new Vector(allIds);
DistributionStats.enableClockStats = this.system.getConfig().getEnableTimeStatistics();
}
////////////////////// Instance Methods //////////////////////
protected void startThreads() {
// no threads needed
}
protected void shutdown() {
}
private final InternalDistributedMember id;
/*static {
// Make the id a little unique
String host;
try {
host = InetAddress.getLocalHost().getCanonicalHostName();
MemberAttributes.setDefaults(65535,
com.gemstone.gemfire.internal.OSProcess.getId(),
DistributionManager.LONER_DM_TYPE,
MemberAttributes.parseRoles(system.getConfig().getRoles()));
id = new InternalDistributedMember(host, 65535); // noise value for port number
} catch (UnknownHostException ex) {
throw new InternalError(LocalizedStrings.LonerDistributionManager_CANNOT_RESOLVE_LOCAL_HOST_NAME_TO_AN_IP_ADDRESS.toLocalizedString());
}
}*/
private final Set<InternalDistributedMember> allIds;// = Collections.singleton(id);
private final Vector viewMembers;// = new Vector(allIds);
private ConcurrentMap<InternalDistributedMember, InternalDistributedMember> canonicalIds = new ConcurrentHashMap();
static private final DummyDMStats stats = new DummyDMStats();
static private final DummyExecutor executor = new DummyExecutor();
@Override
public long cacheTimeMillis() {
return this.system.getClock().cacheTimeMillis();
}
public InternalDistributedMember getDistributionManagerId() {
return id;
}
public Set getDistributionManagerIds() {
return allIds;
}
public Set getDistributionManagerIdsIncludingAdmin() {
return allIds;
}
public Serializable[] getDirectChannels(InternalDistributedMember[] ids) {
return ids;
}
public InternalDistributedMember getCanonicalId(DistributedMember dmid) {
InternalDistributedMember iid = (InternalDistributedMember)dmid;
InternalDistributedMember result = this.canonicalIds.putIfAbsent(iid,iid);
if (result != null) {
return result;
}
return iid;
}
public Set getOtherDistributionManagerIds() {
return Collections.EMPTY_SET;
}
@Override
public Set getOtherNormalDistributionManagerIds() {
return Collections.EMPTY_SET;
}
public Set getAllOtherMembers() {
return Collections.EMPTY_SET;
}
@Override // DM method
public void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members, Version version) {
for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext(); ) {
InternalDistributedMember id = it.next();
if (id.getVersionObject().compareTo(version) < 0) {
it.remove();
}
}
}
@Override // DM method
public void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members, Version version) {
for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext(); ) {
InternalDistributedMember id = it.next();
if (id.getVersionObject().compareTo(version) >= 0) {
it.remove();
}
}
}
public Set addMembershipListenerAndGetDistributionManagerIds(MembershipListener l) {
//return getOtherDistributionManagerIds();
return allIds;
}
public Set addAllMembershipListenerAndGetAllIds(MembershipListener l) {
return allIds;
}
public int getDistributionManagerCount() {
return 0;
}
public InternalDistributedMember getId() {
return getDistributionManagerId();
}
public boolean isAdam() {
return true;
}
public InternalDistributedMember getElderId() {
return getId();
}
public boolean isElder() {
return true;
}
public boolean isLoner() {
return true;
}
public synchronized ElderState getElderState(boolean force, boolean useTryLock) {
// loners are always the elder
if (this.elderState == null) {
this.elderState = new ElderState(this);
}
return this.elderState;
}
public long getChannelId() {
return 0;
}
public Set putOutgoingUserData(final DistributionMessage message) {
if (message.forAll() || message.getRecipients().length == 0) {
// do nothing
return null;
} else {
throw new RuntimeException(LocalizedStrings.LonerDistributionManager_LONER_TRIED_TO_SEND_MESSAGE_TO_0.toLocalizedString(message.getRecipientsDescription()));
}
}
public InternalDistributedSystem getSystem() {
return this.system;
}
public void addMembershipListener(MembershipListener l) {}
public void removeMembershipListener(MembershipListener l) {}
public void removeAllMembershipListener(MembershipListener l) {}
public void addAdminConsole(InternalDistributedMember p_id) {}
public DMStats getStats() {
return stats;
}
public DistributionConfig getConfig() {
DistributionConfig result = null;
if (getSystem() != null) {
result = getSystem().getConfig();
}
return result;
}
public void handleManagerDeparture(InternalDistributedMember p_id,
boolean crashed, String reason) {}
public LogWriterI18n getLoggerI18n() {
return this.logger;
}
public InternalLogWriter getInternalLogWriter() {
return this.logger;
}
public ExecutorService getThreadPool() {
return executor;
}
public ExecutorService getHighPriorityThreadPool() {
return executor;
}
public ExecutorService getWaitingThreadPool() {
return executor;
}
public ExecutorService getPrMetaDataCleanupThreadPool() {
return executor;
}
public Map getChannelMap() {
return null;
}
public Map getMemberMap() {
return null;
}
public void close() {
}
public void restartCommunications() {
}
public Vector getViewMembers() {
return viewMembers;
}
public DistributedMember getOldestMember(Collection members) throws NoSuchElementException {
if (members.size() == 1) {
DistributedMember member = (DistributedMember)members.iterator().next();
if (member.equals(viewMembers.get(0))) {
return member;
}
}
throw new NoSuchElementException(LocalizedStrings.LonerDistributionManager_MEMBER_NOT_FOUND_IN_MEMBERSHIP_SET.toLocalizedString());
}
public Set getAdminMemberSet(){ return Collections.EMPTY_SET; }
public static class DummyDMStats implements DMStats {
public long getSentMessages() {return 0;}
public void incSentMessages(long messages) {}
public void incTOSentMsg() {}
public long getSentCommitMessages() {return 0;}
public void incSentCommitMessages(long messages) {}
public long getCommitWaits() {return 0;}
public void incCommitWaits() {}
public long getSentMessagesTime() {return 0;}
public void incSentMessagesTime(long nanos) {}
public long getBroadcastMessages() {return 0;}
public void incBroadcastMessages(long messages) {}
public long getBroadcastMessagesTime() {return 0;}
public void incBroadcastMessagesTime(long nanos) {}
public long getReceivedMessages() {return 0;}
public void incReceivedMessages(long messages) {}
public long getReceivedBytes() {return 0;}
public void incReceivedBytes(long bytes) {}
public void incSentBytes(long bytes) {}
public long getProcessedMessages() {return 0;}
public void incProcessedMessages(long messages) {}
public long getProcessedMessagesTime() {return 0;}
public void incProcessedMessagesTime(long nanos) {}
public long getMessageProcessingScheduleTime() {return 0;}
public int getDLockWaitsInProgress() {return 0;}
public int getDLockWaitsCompleted() {return 0;}
public long getDLockWaitTime() {return 0;}
public long startDLockWait() {return 0;}
public void endDLockWait(long start, boolean gotit) {}
public void incDLockVetosSent(int ops) {}
public void incDLockVetosReceived(int ops) {}
public void incDLockYesVotesSent(int ops) {}
public void incDLockYesVotesReceived(int ops) {}
public void incDLockNoVotesSent(int ops) {}
public void incDLockNoVotesReceived(int ops) {}
public void incDLockAbstainsSent(int ops) {}
public void incDLockAbstainsReceived(int ops) {}
public void incMessageProcessingScheduleTime(long nanos) {}
public int getOverflowQueueSize() {return 0;}
public void incOverflowQueueSize(int messages) {}
public int getNumProcessingThreads() {return 0;}
public void incNumProcessingThreads(int threads) {}
public int getNumSerialThreads() {return 0;}
public void incNumSerialThreads(int threads) {}
public void incMessageChannelTime(long val) {}
public long getReplyMessageTime() {return 0;}
public void incReplyMessageTime(long val) {}
public long getDistributeMessageTime() {return 0;}
public void incDistributeMessageTime(long val) {}
public int getNodes() {return 0;}
public void setNodes(int val) {}
public void incNodes(int val) {}
public int getReplyWaitsInProgress() {return 0;}
public int getReplyWaitsCompleted() {return 0;}
public long getReplyWaitTime() {return 0;}
public long startReplyWait() {return 0;}
public void endReplyWait(long startNanos, long startMillis) {}
public void incReplyTimeouts() { }
public long getReplyTimeouts() { return 0; }
public void incReceivers() {}
public void decReceivers() {}
public void incFailedAccept() {}
public void incFailedConnect() {}
public void incReconnectAttempts() {}
public void incLostLease() {}
public void incSenders(boolean shared, boolean preserveOrder) {}
public void decSenders(boolean shared, boolean preserveOrder) {}
public int getSendersSU() { return 0; }
public long startSocketWrite(boolean sync) {return 0; }
public void endSocketWrite(boolean sync, long start, int bytesWritten, int retries) {}
public long startSerialization() {return 0;}
public void endSerialization(long start, int bytes) {}
public long startDeserialization() {return 0;}
public void endDeserialization(long start, int bytes) {}
public long startMsgSerialization() {return 0;}
public void endMsgSerialization(long start) {}
public long startMsgDeserialization() {return 0;}
public void endMsgDeserialization(long start) {}
public void incBatchSendTime(long start) {}
public void incBatchCopyTime(long start) {}
public void incBatchWaitTime(long start) {}
public void incBatchFlushTime(long start) {}
public long startUcastWrite() { return 0; }
public void endUcastWrite(long start, int bytesWritten) {}
public void incUcastWrites(int bytesWritten) {}
public long startMcastWrite() { return 0; }
public void endMcastWrite(long start, int bytesWritten) {}
public void incMcastWrites(int bytesWritten) {}
public void incUcastRetransmits() {}
public void incMcastRetransmits() {}
public void incMcastRetransmitRequests() {}
public int getMcastRetransmits() { return 0; }
public int getMcastWrites() { return 0; }
public long startUcastFlush() { return 0; }
public void endUcastFlush(long start) {}
public void incFlowControlRequests() {}
public void incFlowControlResponses() {}
public long startFlowControlWait() { return 0; }
public void endFlowControlWait(long start) {}
public long startFlowControlThrottleWait() { return 0; }
public void endFlowControlThrottleWait(long start) {}
public void incUcastReadBytes(long amount) {}
public void incMcastReadBytes(long amount) {}
public void incJgUNICASTdataReceived(long amount) {}
public void setJgQueuedMessagesSize(long value) {}
public void setJgSTABLEreceivedMessagesSize(long value) {}
public void setJgSTABLEsentMessagesSize(long value) {}
public void incJgSTABLEsuspendTime(long value) {}
public void incJgSTABLEmessages(long value) {}
public void incJgSTABLEmessagesSent(long value) {}
public void incJgSTABILITYmessages(long value) {}
public void incjgDownTime(long value){}
public void incjgUpTime(long value){}
public void incjChannelUpTime(long value){}
public void incThreadOwnedReceivers(long value, int dominoCount) {}
public void incJgFCsendBlocks(long value)
{}
public void incJgFCautoRequests(long value)
{}
public void incJgFCreplenish(long value)
{}
public void incJgFCresumes(long value)
{}
public void incJgFCsentCredits(long value)
{}
public void incJgFCsentThrottleRequests(long value)
{}
public void incJgFragmentationsPerformed()
{}
public void incJgFragmentsCreated(long numFrags)
{}
public void setJgUNICASTreceivedMessagesSize(long amount) {
}
public void setJgUNICASTsentMessagesSize(long amount) {
}
public void setJgUNICASTsentHighPriorityMessagesSize(long amount) {
}
public int getAsyncSocketWritesInProgress() {return 0;}
public int getAsyncSocketWrites() {return 0;}
public int getAsyncSocketWriteRetries() {return 0;}
public long getAsyncSocketWriteBytes() {return 0;}
public long getAsyncSocketWriteTime() {return 0;}
public int getAsyncQueues() {return 0;}
public void incAsyncQueues(int inc) {}
public int getAsyncQueueFlushesInProgress() {return 0;}
public int getAsyncQueueFlushesCompleted() {return 0;}
public long getAsyncQueueFlushTime() {return 0;}
public long startAsyncQueueFlush() {return 0;}
public void endAsyncQueueFlush(long start) {}
public int getAsyncQueueTimeouts() {return 0;}
public void incAsyncQueueTimeouts(int inc) {}
public int getAsyncQueueSizeExceeded() {return 0;}
public void incAsyncQueueSizeExceeded(int inc) {}
public int getAsyncDistributionTimeoutExceeded() {return 0;}
public void incAsyncDistributionTimeoutExceeded() {}
public long getAsyncQueueSize() {return 0;}
public void incAsyncQueueSize(long inc) {}
public long getAsyncQueuedMsgs() {return 0;}
public void incAsyncQueuedMsgs() {}
public long getAsyncDequeuedMsgs() {return 0;}
public void incAsyncDequeuedMsgs() {}
public long getAsyncConflatedMsgs() {return 0;}
public void incAsyncConflatedMsgs() {}
public int getAsyncThreads() {return 0;}
public void incAsyncThreads(int inc) {}
public int getAsyncThreadInProgress() {return 0;}
public int getAsyncThreadCompleted() {return 0;}
public long getAsyncThreadTime() {return 0;}
public long startAsyncThread() {return 0;}
public void endAsyncThread(long start) {}
public long getAsyncQueueAddTime() {return 0;}
public void incAsyncQueueAddTime(long inc) {}
public long getAsyncQueueRemoveTime() {return 0;}
public void incAsyncQueueRemoveTime(long inc) {}
public void incJgNAKACKwaits(long value) {}
public void incThreadOwnedReceivers(long value) {}
public void incReceiverBufferSize(int inc, boolean direct) {}
public void incSenderBufferSize(int inc, boolean direct) {}
public long startSocketLock() {return 0;}
public void endSocketLock(long start) {}
public long startBufferAcquire() {return 0;}
public void endBufferAcquire(long start) {}
public void incMessagesBeingReceived(boolean newMsg, int bytes) {}
public void decMessagesBeingReceived(int bytes) {}
public void incReplyHandOffTime(long start) {}
public int getElders() {return 0;}
public void incElders(int val) {}
public int getInitialImageMessagesInFlight() {return 0;}
public void incInitialImageMessagesInFlight(int val) {}
public int getInitialImageRequestsInProgress() {return 0;}
public void incInitialImageRequestsInProgress(int val) {}
public void incPdxSerialization(int bytesWritten) {}
public void incPdxDeserialization(int i) {}
public long startPdxInstanceDeserialization() {return 0;}
public void endPdxInstanceDeserialization(long start) {}
public void incPdxInstanceCreations() {}
}
protected static class DummyExecutor implements ExecutorService {
@Override
public void execute(Runnable command) {
command.run();
}
@Override
public void shutdown() {
}
@Override
public List<Runnable> shutdownNow() {
return Collections.emptyList();
}
@Override
public boolean isShutdown() {
return false;
}
@Override
public boolean isTerminated() {
return false;
}
@Override
public boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException {
return true;
}
@Override
public <T> Future<T> submit(final Callable<T> task) {
Exception ex = null;
T result = null;
try {
result = task.call();
} catch (Exception e) {
ex = e;
}
return new CompletedFuture<T>(result, ex);
}
@Override
public <T> Future<T> submit(final Runnable task, final T result) {
return submit(new Callable<T>() {
@Override
public T call() throws Exception {
task.run();
return result;
}
});
}
@Override
public Future<?> submit(Runnable task) {
return submit(task, null);
}
@Override
public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
throws InterruptedException {
List<Future<T>> results = new ArrayList<Future<T>>();
for (Callable<T> task : tasks) {
results.add(submit(task));
}
return results;
}
@Override
public <T> List<Future<T>> invokeAll(
Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
throws InterruptedException {
return invokeAll(tasks);
}
@Override
public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
throws InterruptedException, ExecutionException {
ExecutionException ex = null;
for (Callable<T> task : tasks) {
try {
return submit(task).get();
} catch (ExecutionException e) {
ex = e;
}
}
throw (ExecutionException) ex.fillInStackTrace();
}
@Override
public <T> T invokeAny(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit) throws InterruptedException,
ExecutionException, TimeoutException {
return invokeAny(tasks);
}
}
private static class CompletedFuture<T> implements Future<T> {
private final T result;
private final Exception ex;
public CompletedFuture(T result, Exception ex) {
this.result = result;
this.ex = ex;
}
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
return false;
}
@Override
public boolean isCancelled() {
return false;
}
@Override
public boolean isDone() {
return true;
}
@Override
public T get() throws InterruptedException, ExecutionException {
if (ex != null) {
throw new ExecutionException(ex);
}
return result;
}
@Override
public T get(long timeout, TimeUnit unit) throws InterruptedException,
ExecutionException, TimeoutException {
return get();
}
}
public void throwIfDistributionStopped() {
stopper.checkCancelInProgress(null);
}
/** Returns count of members filling the specified role */
public int getRoleCount(Role role) {
return id.getRoles().contains(role) ? 1 : 0;
}
/** Returns true if at least one member is filling the specified role */
public boolean isRolePresent(Role role) {
return id.getRoles().contains(role);
}
/** Returns a set of all roles currently in the distributed system. */
public Set getAllRoles() {
return id.getRoles();
}
private int lonerPort = 0;
//private static final int CHARS_32KB = 16384;
private InternalDistributedMember generateMemberId() {
InternalDistributedMember result = null;
String host;
try {
// create string of the current millisecond clock time
StringBuffer sb = new StringBuffer();
// use low four bytes for backward compatibility
long time = System.currentTimeMillis() & 0xffffffffL;
for (int i = 0; i < 4; i++) {
String hex = Integer.toHexString((int)(time & 0xff));
if (hex.length() < 2) {
sb.append('0');
}
sb.append(hex);
time = time / 0x100;
}
String uniqueString = sb.toString();
String name = this.system.getName();
host = SocketCreator.getLocalHost().getCanonicalHostName();
DistributionConfig config = system.getConfig();
DurableClientAttributes dac = null;
if (config.getDurableClientId() != null) {
dac = new DurableClientAttributes(config.getDurableClientId(), config
.getDurableClientTimeout());
}
MemberAttributes.setDefaults(lonerPort,
com.gemstone.gemfire.internal.OSProcess.getId(),
DistributionManager.LONER_DM_TYPE, -1,
name,
MemberAttributes.parseGroups(config.getRoles(), config.getGroups()), dac);
result = new InternalDistributedMember(host, lonerPort, name, uniqueString);
} catch (UnknownHostException ex) {
throw new InternalGemFireError(LocalizedStrings.LonerDistributionManager_CANNOT_RESOLVE_LOCAL_HOST_NAME_TO_AN_IP_ADDRESS.toLocalizedString());
}
return result;
}
/**
* update the loner port with an integer that may be more unique than the
* default port (zero). This updates the ID in place and establishes new
* default settings for the manufacture of new IDs.
*
* @param newPort the new port to use
*/
public void updateLonerPort(int newPort) {
this.logger.config(LocalizedStrings.LonerDistributionmanager_CHANGING_PORT_FROM_TO,
new Object[]{this.lonerPort, newPort});
this.lonerPort = newPort;
MemberAttributes.setDefaults(lonerPort,
MemberAttributes.DEFAULT.getVmPid(),
DistributionManager.LONER_DM_TYPE,
-1,
MemberAttributes.DEFAULT.getName(),
MemberAttributes.DEFAULT.getGroups(), MemberAttributes.DEFAULT.getDurableClientAttributes());
this.getId().setPort(this.lonerPort);
}
public boolean isCurrentMember(InternalDistributedMember p_id) {
return getId().equals(p_id);
}
public Set putOutgoing(DistributionMessage msg)
{
return null;
}
public boolean shutdownInProgress() {
return false;
}
public void removeUnfinishedStartup(InternalDistributedMember m, boolean departed) {
}
public void setUnfinishedStartups(Collection s) {
}
protected static class Stopper extends CancelCriterion {
@Override
public String cancelInProgress() {
checkFailure();
return null;
}
@Override
public RuntimeException generateCancelledException(Throwable e) {
return null;
}
}
private final Stopper stopper = new Stopper();
public CancelCriterion getCancelCriterion() {
return stopper;
}
/* (non-Javadoc)
* @see com.gemstone.gemfire.distributed.internal.DM#getMembershipManager()
*/
public MembershipManager getMembershipManager() {
// no membership manager
return null;
}
/* (non-Javadoc)
* @see com.gemstone.gemfire.distributed.internal.DM#getRootCause()
*/
public Throwable getRootCause() {
return null;
}
/* (non-Javadoc)
* @see com.gemstone.gemfire.distributed.internal.DM#setRootCause(java.lang.Throwable)
*/
public void setRootCause(Throwable t) {
}
/* (non-Javadoc)
* @see com.gemstone.gemfire.distributed.internal.DM#getMembersOnThisHost()
* @since gemfire59poc
*/
public Set<InternalDistributedMember> getMembersInThisZone() {
return this.allIds;
}
public void acquireGIIPermitUninterruptibly() {
}
public void releaseGIIPermit() {
}
public int getDistributedSystemId() {
return getSystem().getConfig().getDistributedSystemId();
}
public boolean enforceUniqueZone() {
return system.getConfig().getEnforceUniqueHost() || system.getConfig().getRedundancyZone() != null;
}
public boolean areInSameZone(InternalDistributedMember member1,
InternalDistributedMember member2) {
return false;
}
public boolean areOnEquivalentHost(InternalDistributedMember member1,
InternalDistributedMember member2) {
return member1 == member2;
}
public Set<InternalDistributedMember> getMembersInSameZone(
InternalDistributedMember acceptedMember) {
return Collections.singleton(acceptedMember);
}
public Set<InetAddress> getEquivalents(InetAddress in) {
Set<InetAddress> value = new HashSet<InetAddress>();
value.add(this.getId().getIpAddress());
return value;
}
public Set<DistributedMember> getGroupMembers(String group) {
if (getDistributionManagerId().getGroups().contains(group)) {
return Collections.singleton((DistributedMember)getDistributionManagerId());
} else {
return Collections.emptySet();
}
}
public void addHostedLocators(InternalDistributedMember member, Collection<String> locators, boolean isSharedConfigurationEnabled) {
// no-op
}
public Collection<String> getHostedLocators(InternalDistributedMember member) {
return Collections.<String>emptyList();
}
public Map<InternalDistributedMember, Collection<String>> getAllHostedLocators() {
return Collections.<InternalDistributedMember, Collection<String>>emptyMap();
}
@Override
public Set getNormalDistributionManagerIds() {
return getDistributionManagerIds();
}
@Override
public Map<InternalDistributedMember, Collection<String>> getAllHostedLocatorsWithSharedConfiguration() {
return Collections.<InternalDistributedMember, Collection<String>>emptyMap();
}
@Override
public void forceUDPMessagingForCurrentThread() {
// no-op for loners
}
@Override
public void releaseUDPMessagingForCurrentThread() {
// no-op for loners
}
@Override
public boolean isSharedConfigurationServiceEnabledForDS() {
//return false for loner
return false;
}
}