public void profileRemoved(Profile profile) { if (profile instanceof CacheServerProfile) { CacheServerProfile bp = (CacheServerProfile) profile; // InternalDistributedMember id = bp.getDistributedMember(); ServerLocation location = buildServerLocation(bp); loadSnapshot.removeServer(location); if (logger.isDebugEnabled()) { logger.debug("ServerLocator: server departed {}", location); } synchronized (ownerMap) { ownerMap.remove(location); } } else { cachedLocators = null; } }
@Override public Profile getProfile() { return getDistributionAdvisor().createProfile(); }
private void logServers() { if (productUseLog != null) { Map<ServerLocation, ServerLoad> loadMap = getLoadMap(); if (loadMap.size() == 0) { return;
public void updateLoad(ServerLocation location, ServerLoad load, List clientIds) { if (getLogWriter().fineEnabled()) { getLogWriter() .fine("ServerLocator: Received a load update from " + location + ", " + load); } loadSnapshot.updateLoad(location, load, clientIds); this.stats.incServerLoadUpdates(); logServers(); }
@Override public Object processRequest(Object request) { if (!readyToProcessRequests()) { return null; break; case DataSerializableFixedID.LOCATOR_LIST_REQUEST: response = getLocatorListResponse((LocatorListRequest) request); break; case DataSerializableFixedID.CLIENT_REPLACEMENT_REQUEST: response = pickReplacementServer((ClientReplacementRequest) request); break; case DataSerializableFixedID.GET_ALL_SERVERS_REQUEST: response = pickAllServers((GetAllServersRequest) request); break; case DataSerializableFixedID.CLIENT_CONNECTION_REQUEST: response = pickServer((ClientConnectionRequest) request); break; case DataSerializableFixedID.QUEUE_CONNECTION_REQUEST: response = pickQueueServers((QueueConnectionRequest) request); break; default:
@Override public ServerLocation findServer(Set<ServerLocation> excludedServers, String serverGroup) { security.authorize(CLUSTER, READ, ALL, ALL); InternalLocator internalLocator = (InternalLocator) locator; // In order to ensure that proper checks are performed on the request we will use // the locator's processRequest() API. We assume that all servers have Protobuf // enabled. ClientConnectionRequest clientConnectionRequest = new ClientConnectionRequest(excludedServers, serverGroup); ClientConnectionResponse connectionResponse = (ClientConnectionResponse) internalLocator .getServerLocatorAdvisee().processRequest(clientConnectionRequest); ServerLocation serverLocation = null; if (connectionResponse != null && connectionResponse.hasResult()) { serverLocation = connectionResponse.getServer(); } return serverLocation; } }
public void profileUpdated(Profile profile) { cachedLocators = null; getLogWriter() .warning("ServerLocator - unexpected profile update."); }
private Object getLocatorListResponse(LocatorListRequest request) { List<ServerLocation> controllers = getLocators(); boolean balanced = loadSnapshot.hasBalancedConnections(request.getServerGroup()); return new LocatorListResponse(controllers, balanced); }
if (clientRequest.isFindDurable() && clientRequest.getProxyId().isDurable()) { servers = FindDurableQueueProcessor.sendAndFind(this, clientRequest.getProxyId(), getDistributionManager());
new ServerLocator(getPort(), this.bindAddress, this.hostnameForClients, this.logFile, this.productUseLog, getConfig().getName(), distributedSystem, this.stats); this.handler.addHandler(LocatorListRequest.class, serverLocator);
@Test public void testProcessRequestProcessesLocatorStatusRequest() throws IOException { final ServerLocator serverLocator = createServerLocator(); final Object response = serverLocator.processRequest(new LocatorStatusRequest()); System.out.println("response=" + response); assertTrue(response instanceof LocatorStatusResponse); }
@Test public void testErrorReturnedWhenNoServers() throws Exception { when(serverLocatorAdviseeMock.processRequest(any(Object.class))).thenReturn(null); LocatorAPI.GetServerRequest getServerRequest = ProtobufRequestUtilities.createGetServerRequest(); Result operationHandlerResult = getOperationHandlerResult(getServerRequest); assertTrue(operationHandlerResult instanceof Failure); Failure failure = (Failure) operationHandlerResult; ClientProtocol.ErrorResponse errorResponse = failure.getErrorMessage(); assertEquals(NO_AVAILABLE_SERVER, errorResponse.getError().getErrorCode()); }
private List<ServerLocation> getLocators() { if (cachedLocators != null) { return cachedLocators; } else { synchronized (cachedLocatorsLock) { List<ControllerProfile> profiles = advisor.fetchControllers(); List<ServerLocation> result = new ArrayList<>(profiles.size() + 1); for (ControllerProfile profile : profiles) { result.add(buildServerLocation(profile)); } result.add(new ServerLocation(hostNameForClients, port)); cachedLocators = result; return result; } } }
public static ArrayList sendAndFind(ServerLocator locator, ClientProxyMembershipID proxyId, DistributionManager dm) { Set members = ((GridAdvisor) locator.getDistributionAdvisor()).adviseBridgeServers(); if (members.contains(dm.getId())) { // Don't send message to local server, see #50534. Set remoteMembers = new HashSet(members); remoteMembers.remove(dm.getId()); members = remoteMembers; } FindDurableQueueProcessor processor = new FindDurableQueueProcessor(dm, members); FindDurableQueueMessage.send(proxyId, dm, members, processor); try { processor.waitForRepliesUninterruptibly(); } catch (ReplyException e) { e.handleCause(); } ArrayList locations = processor.durableLocations; // This will add any local queues to the list findLocalDurableQueues(proxyId, locations); return locations; }
@Test public void testServerReturnedFromHandler() throws Exception { when(serverLocatorAdviseeMock.processRequest(any(Object.class))) .thenReturn(new ClientConnectionResponse(new ServerLocation(HOSTNAME, PORT))); LocatorAPI.GetServerRequest getServerRequest = ProtobufRequestUtilities.createGetServerRequest(); Result operationHandlerResult = getOperationHandlerResult(getServerRequest); assertTrue(operationHandlerResult instanceof Success); validateGetServerResponse((GetServerResponse) operationHandlerResult.getMessage()); }
public void profileCreated(Profile profile) { if (profile instanceof CacheServerProfile) { CacheServerProfile bp = (CacheServerProfile) profile; ServerLocation location = buildServerLocation(bp); String[] groups = bp.getGroups(); loadSnapshot.addServer(location, groups, bp.getInitialLoad(), bp.getLoadPollInterval()); if (logger.isDebugEnabled()) { logger.debug("ServerLocator: Received load from a new server {}, {}", location, bp.getInitialLoad()); } synchronized (ownerMap) { ownerMap.put(location, profile.getDistributedMember()); } } else { cachedLocators = null; } }
@Test public void testServerReturnedForExistentGroup() throws Exception { when( serverLocatorAdviseeMock.processRequest(new ClientConnectionRequest(any(), EXISTENT_GROUP))) .thenReturn(new ClientConnectionResponse(new ServerLocation(HOSTNAME, PORT))); LocatorAPI.GetServerRequest getServerRequest = ProtobufRequestUtilities.createGetServerRequest(EXISTENT_GROUP); Result operationHandlerResult = getOperationHandlerResult(getServerRequest); assertTrue(operationHandlerResult instanceof Success); validateGetServerResponse((GetServerResponse) operationHandlerResult.getMessage()); }
@Test public void testErrorReturnedForNonexistentGroup() throws Exception { when(serverLocatorAdviseeMock .processRequest(new ClientConnectionRequest(any(), NONEXISTENT_GROUP))) .thenReturn(new ClientConnectionResponse(null)); LocatorAPI.GetServerRequest getServerRequest = ProtobufRequestUtilities.createGetServerRequest(NONEXISTENT_GROUP); Result operationHandlerResult = getOperationHandlerResult(getServerRequest); assertTrue(operationHandlerResult instanceof Failure); Failure failure = (Failure) operationHandlerResult; ClientProtocol.ErrorResponse errorResponse = failure.getErrorMessage(); assertEquals(NO_AVAILABLE_SERVER, errorResponse.getError().getErrorCode()); assertTrue(errorResponse.getError().getMessage().contains(NONEXISTENT_GROUP)); }