use of org.apache.geode.distributed.internal.ServerLocation in project geode by apache.
the class ExplicitConnectionSourceImpl method toString.
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("EndPoints[");
synchronized (this) {
Iterator it = serverList.iterator();
while (it.hasNext()) {
ServerLocation loc = (ServerLocation) it.next();
sb.append(loc.getHostName() + ":" + loc.getPort());
if (it.hasNext()) {
sb.append(",");
}
}
}
sb.append("]");
return sb.toString();
}
use of org.apache.geode.distributed.internal.ServerLocation in project geode by apache.
the class PoolImpl method getPrimaryPort.
/**
* Test hook that returns an int which the port of the primary server. -1 is returned if we have
* no primary.
*/
public int getPrimaryPort() {
int result = -1;
ServerLocation sl = getPrimary();
if (sl != null) {
result = sl.getPort();
}
return result;
}
use of org.apache.geode.distributed.internal.ServerLocation in project geode by apache.
the class PoolImpl method getPrimary.
/**
* Test hook that returns a string consisting of the host name and port of the primary server.
* Null is returned if we have no primary.
*/
public ServerLocation getPrimary() {
ServerLocation result = null;
if (this.queueManager != null) {
QueueManager.QueueConnections cons = this.queueManager.getAllConnections();
Connection con = cons.getPrimary();
result = con.getServer();
}
return result;
}
use of org.apache.geode.distributed.internal.ServerLocation in project geode by apache.
the class PoolImpl method getPrimaryName.
/**
* Test hook that returns a string consisting of the host name and port of the primary server.
* Null is returned if we have no primary.
*/
public String getPrimaryName() {
String result = null;
ServerLocation sl = getPrimary();
if (sl != null) {
result = sl.getHostName() + sl.getPort();
}
return result;
}
use of org.apache.geode.distributed.internal.ServerLocation in project geode by apache.
the class QueueManagerImpl method initializeConnections.
private void initializeConnections() {
final boolean isDebugEnabled = logger.isDebugEnabled();
if (isDebugEnabled) {
logger.debug("SubscriptionManager - intitializing connections");
}
int queuesNeeded = redundancyLevel == -1 ? -1 : redundancyLevel + 1;
Set excludedServers = new HashSet(blackList.getBadServers());
List servers = findQueueServers(excludedServers, queuesNeeded, true, false, null);
if (servers == null || servers.isEmpty()) {
logger.warn(LocalizedStrings.QueueManagerImpl_COULD_NOT_CREATE_A_QUEUE_NO_QUEUE_SERVERS_AVAILABLE);
scheduleRedundancySatisfierIfNeeded(redundancyRetryInterval);
synchronized (lock) {
queueConnections = queueConnections.setPrimaryDiscoveryFailed(null);
lock.notifyAll();
}
return;
}
if (isDebugEnabled) {
logger.debug("SubscriptionManager - discovered subscription servers {}", servers);
}
SortedMap /* <ServerQueueStatus,Connection> */
oldQueueServers = new TreeMap(QSIZE_COMPARATOR);
List nonRedundantServers = new ArrayList();
for (Iterator itr = servers.iterator(); itr.hasNext(); ) {
ServerLocation server = (ServerLocation) itr.next();
Connection connection = null;
try {
connection = factory.createClientToServerConnection(server, true);
} catch (GemFireSecurityException e) {
throw e;
} catch (GemFireConfigException e) {
throw e;
} catch (Exception e) {
if (isDebugEnabled) {
logger.debug("SubscriptionManager - Error connected to server: {}", server, e);
}
}
if (connection != null) {
ServerQueueStatus status = connection.getQueueStatus();
if (status.isRedundant() || status.isPrimary()) {
oldQueueServers.put(status, connection);
} else {
nonRedundantServers.add(connection);
}
}
}
// This ordering was determined from the old ConnectionProxyImpl code
//
// initialization order of the new redundant and primary server is
// old redundant w/ second largest queue
// old redundant w/ third largest queue
// ...
// old primary
// non redundants in no particular order
//
// The primary is then chosen as
// redundant with the largest queue
// primary if there are no redundants
// a non redundant
// if the redundant with the largest queue fails, then we go and
// make a new server a primary.
Connection newPrimary = null;
if (!oldQueueServers.isEmpty()) {
newPrimary = (Connection) oldQueueServers.remove(oldQueueServers.lastKey());
} else if (!nonRedundantServers.isEmpty()) {
newPrimary = (Connection) nonRedundantServers.remove(0);
}
nonRedundantServers.addAll(0, oldQueueServers.values());
for (Iterator itr = nonRedundantServers.iterator(); itr.hasNext(); ) {
Connection connection = (Connection) itr.next();
QueueConnectionImpl queueConnection = initializeQueueConnection(connection, false, null);
if (queueConnection != null) {
addToConnectionList(queueConnection, false);
}
}
QueueConnectionImpl primaryQueue = null;
if (newPrimary != null) {
primaryQueue = initializeQueueConnection(newPrimary, true, null);
if (primaryQueue == null) {
newPrimary.destroy();
} else {
if (!addToConnectionList(primaryQueue, true)) {
primaryQueue = null;
}
}
}
excludedServers.addAll(servers);
// above.
if (redundancyLevel != -1 && getCurrentRedundancy() < redundancyLevel) {
if (isDebugEnabled) {
logger.debug("SubscriptionManager - Some initial connections failed. Trying to create redundant queues");
}
recoverRedundancy(excludedServers, false);
}
if (redundancyLevel != -1 && primaryQueue == null) {
if (isDebugEnabled) {
logger.debug("SubscriptionManager - Intial primary creation failed. Trying to create a new primary");
}
while (primaryQueue == null) {
primaryQueue = createNewPrimary(excludedServers);
if (primaryQueue == null) {
// couldn't find a server to make primary
break;
}
if (!addToConnectionList(primaryQueue, true)) {
excludedServers.add(primaryQueue.getServer());
primaryQueue = null;
}
}
}
if (primaryQueue == null) {
if (isDebugEnabled) {
logger.debug("SubscriptionManager - Unable to create a new primary queue, using one of the redundant queues");
}
while (primaryQueue == null) {
primaryQueue = promoteBackupToPrimary(queueConnections.getBackups());
if (primaryQueue == null) {
// no backup servers available
break;
}
if (!addToConnectionList(primaryQueue, true)) {
synchronized (lock) {
// make sure we don't retry this same connection.
queueConnections = queueConnections.removeConnection(primaryQueue);
}
primaryQueue = null;
}
}
}
if (primaryQueue == null) {
logger.error(LocalizedMessage.create(LocalizedStrings.QueueManagerImpl_COULD_NOT_INITIALIZE_A_PRIMARY_QUEUE_ON_STARTUP_NO_QUEUE_SERVERS_AVAILABLE));
synchronized (lock) {
queueConnections = queueConnections.setPrimaryDiscoveryFailed(new NoSubscriptionServersAvailableException(LocalizedStrings.QueueManagerImpl_COULD_NOT_INITIALIZE_A_PRIMARY_QUEUE_ON_STARTUP_NO_QUEUE_SERVERS_AVAILABLE.toLocalizedString()));
lock.notifyAll();
}
cqsDisconnected();
} else {
cqsConnected();
}
if (getCurrentRedundancy() < redundancyLevel) {
logger.warn(LocalizedMessage.create(LocalizedStrings.QueueManagerImpl_UNABLE_TO_INITIALIZE_ENOUGH_REDUNDANT_QUEUES_ON_STARTUP_THE_REDUNDANCY_COUNT_IS_CURRENTLY_0, getCurrentRedundancy()));
}
}
Aggregations