use of org.apache.geode.cache.query.internal.cq.CqService in project geode by apache.
the class HARegionQueue method maintainCqStats.
private void maintainCqStats(Object event, long incrementAmount) {
CqService cqService = region.getGemFireCache().getCqService();
if (cqService != null) {
try {
if (event instanceof HAEventWrapper) {
HAEventWrapper hw = (HAEventWrapper) event;
if (hw.getClientUpdateMessage() != null) {
event = hw.getClientUpdateMessage();
} else {
event = (Conflatable) this.haContainer.get(event);
}
if (event instanceof ClientUpdateMessage) {
if (((ClientUpdateMessage) event).hasCqs() && ((ClientUpdateMessage) event).hasCqs(clientProxyID)) {
CqNameToOp cqNames = ((ClientUpdateMessage) event).getClientCq(clientProxyID);
if (cqNames != null) {
for (String cqName : cqNames.getNames()) {
InternalCqQuery cq = ((InternalCqQuery) cqService.getClientCqFromServer(clientProxyID, cqName));
CqQueryVsdStats cqStats = cq.getVsdStats();
if (cq != null && cqStats != null) {
cqStats.incNumHAQueuedEvents(incrementAmount);
}
}
}
}
}
}
} catch (Exception e) {
// as maintaining cq stats should not affect the system.
if (logger.isTraceEnabled()) {
logger.trace("Exception while maintaining cq events stats.", e);
}
}
}
}
use of org.apache.geode.cache.query.internal.cq.CqService in project geode by apache.
the class CacheClientProxy method closeClientCq.
// Only close the client cq if it is paused and no one is attempting to restart the proxy
public boolean closeClientCq(String clientCQName) throws CqException {
if (testHook != null) {
testHook.doTestHook("PRE_DRAIN_IN_PROGRESS");
}
synchronized (drainsInProgressLock) {
numDrainsInProgress++;
}
if (testHook != null) {
testHook.doTestHook("DRAIN_IN_PROGRESS_BEFORE_DRAIN_LOCK_CHECK");
}
try {
// the numDrainsInProgress. That means we need to stop.
if (drainLocked) {
// someone is trying to restart a paused proxy
String msg = LocalizedStrings.CacheClientProxy_COULD_NOT_DRAIN_CQ_DUE_TO_RESTARTING_DURABLE_CLIENT.toLocalizedString(clientCQName, proxyID.getDurableId());
logger.info(msg);
throw new CqException(msg);
}
// we can probably remove the isPaused check
if (isPaused() && !isConnected()) {
CqService cqService = getCache().getCqService();
if (cqService != null) {
InternalCqQuery cqToClose = cqService.getCq(cqService.constructServerCqName(clientCQName, this.proxyID));
// close and drain
if (cqToClose != null) {
cqService.closeCq(clientCQName, this.proxyID);
this._messageDispatcher.drainClientCqEvents(this.proxyID, cqToClose);
} else {
String msg = LocalizedStrings.CqService_CQ_NOT_FOUND_FAILED_TO_CLOSE_THE_SPECIFIED_CQ_0.toLocalizedString(clientCQName);
logger.info(msg);
throw new CqException(msg);
}
}
} else {
String msg = LocalizedStrings.CacheClientProxy_COULD_NOT_DRAIN_CQ_DUE_TO_ACTIVE_DURABLE_CLIENT.toLocalizedString(clientCQName, proxyID.getDurableId());
logger.info(msg);
throw new CqException(msg);
}
} finally {
synchronized (drainsInProgressLock) {
numDrainsInProgress--;
}
if (testHook != null) {
testHook.doTestHook("DRAIN_COMPLETE");
}
}
return true;
}
use of org.apache.geode.cache.query.internal.cq.CqService in project geode by apache.
the class CacheServerBridge method getClientHealthStatus.
private ClientHealthStatus getClientHealthStatus(ClientConnInfo connInfo) {
ClientProxyMembershipID proxyId = connInfo.getClientId();
CacheClientProxy proxy = CacheClientNotifier.getInstance().getClientProxy(proxyId);
if (proxy != null && !proxy.isConnected() && !proxyId.isDurable()) {
return null;
}
CacheServerBridge.clientVersion.set(getClientVersion(connInfo));
int clientCQCount = 0;
CqService cqService = cache.getCqService();
if (cqService != null) {
List<ServerCQ> cqs = cqService.getAllClientCqs(proxyId);
clientCQCount = cqs.size();
}
ClientHealthStatus status = new ClientHealthStatus();
Region clientHealthMonitoringRegion = ClientHealthMonitoringRegion.getInstance(this.cache);
String clientName = proxyId.getDSMembership();
status.setClientId(connInfo.toString());
status.setName(clientName);
status.setHostName(connInfo.getHostName());
status.setClientCQCount(clientCQCount);
// Only available for clients having subscription enabled true
if (proxy != null) {
status.setUpTime(proxy.getUpTime());
status.setQueueSize(proxy.getQueueSizeStat());
status.setConnected(proxy.isConnected());
status.setSubscriptionEnabled(true);
} else {
status.setConnected(true);
status.setSubscriptionEnabled(false);
}
ClientHealthStats stats = (ClientHealthStats) clientHealthMonitoringRegion.get(clientName);
if (stats != null) {
status.setCpus(stats.getCpus());
status.setNumOfCacheListenerCalls(stats.getNumOfCacheListenerCalls());
status.setNumOfGets(stats.getNumOfGets());
status.setNumOfMisses(stats.getNumOfMisses());
status.setNumOfPuts(stats.getNumOfPuts());
status.setNumOfThreads(stats.getNumOfThreads());
status.setProcessCpuTime(stats.getProcessCpuTime());
status.setPoolStats(stats.getPoolStats());
}
return status;
}
use of org.apache.geode.cache.query.internal.cq.CqService in project geode by apache.
the class GetSubscriptionQueueSizeFunction method execute.
@Override
public void execute(FunctionContext context) {
final Cache cache = CliUtil.getCacheIfExists();
final String memberNameOrId = CliUtil.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember());
String[] args = (String[]) context.getArguments();
String durableClientId = null, cqName = null;
SubscriptionQueueSizeResult result = new SubscriptionQueueSizeResult(memberNameOrId);
durableClientId = args[0];
cqName = args[1];
try {
CacheClientNotifier cacheClientNotifier = CacheClientNotifier.getInstance();
if (cacheClientNotifier != null) {
CacheClientProxy cacheClientProxy = cacheClientNotifier.getClientProxy(durableClientId);
// Check if the client is present or not
if (cacheClientProxy != null) {
if (cqName != null && !cqName.isEmpty()) {
CqService cqService = cacheClientProxy.getCache().getCqService();
if (cqService != null) {
CqQuery cqQuery = cqService.getClientCqFromServer(cacheClientProxy.getProxyID(), cqName);
if (cqQuery != null) {
CqQueryVsdStats cqVsdStats = ((InternalCqQuery) cqQuery).getVsdStats();
if (cqVsdStats != null) {
long queueSize = cqVsdStats.getNumHAQueuedEvents();
result.setSubscriptionQueueSize(queueSize);
} else {
result.setErrorMessage(CliStrings.format(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE_CQ_STATS_NOT_FOUND, durableClientId, cqName));
}
} else {
result.setErrorMessage(CliStrings.format(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE_CQ_NOT_FOUND, durableClientId, cqName));
}
} else {
result.setErrorMessage(CliStrings.COUNT_DURABLE_CQ_EVENTS__NO__CQS__REGISTERED);
}
} else {
result.setSubscriptionQueueSize(cacheClientNotifier.getDurableClientHAQueueSize(durableClientId));
}
} else {
result.setErrorMessage(CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId));
}
} else {
result.setErrorMessage(CliStrings.NO_CLIENT_FOUND);
}
} catch (Exception e) {
result.setExceptionMessage(e.getMessage());
} finally {
context.getResultSender().lastResult(result);
}
}
use of org.apache.geode.cache.query.internal.cq.CqService in project geode by apache.
the class ListDurableCqNamesFunction method execute.
public void execute(final FunctionContext context) {
final Cache cache = getCache();
final DistributedMember member = cache.getDistributedSystem().getDistributedMember();
String memberNameOrId = CliUtil.getMemberNameOrId(member);
DurableCqNamesResult result = new DurableCqNamesResult(memberNameOrId);
String durableClientId = (String) context.getArguments();
try {
CacheClientNotifier ccn = CacheClientNotifier.getInstance();
if (ccn != null) {
CacheClientProxy ccp = ccn.getClientProxy(durableClientId);
if (ccp != null) {
CqService cqService = ccp.getCache().getCqService();
if (cqService != null && cqService.isRunning()) {
List<String> durableCqNames = cqService.getAllDurableClientCqs(ccp.getProxyID());
if (durableCqNames != null && !durableCqNames.isEmpty()) {
result.setCqNamesList(new ArrayList<String>(durableCqNames));
} else {
result.setErrorMessage(CliStrings.format(CliStrings.LIST_DURABLE_CQS__NO__CQS__FOR__CLIENT, durableClientId));
}
} else {
result.setErrorMessage(CliStrings.LIST_DURABLE_CQS__NO__CQS__REGISTERED);
}
} else {
result.setErrorMessage(CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId));
}
} else {
result.setErrorMessage(CliStrings.NO_CLIENT_FOUND);
}
} catch (Exception e) {
result.setExceptionMessage(e.getMessage());
} finally {
context.getResultSender().lastResult(result);
}
}
Aggregations