blob: 71f73a0c2d8334dd718740d2ee176c87a980173d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.internal.cache.ha;
import org.apache.geode.StatisticDescriptor;
import org.apache.geode.Statistics;
import org.apache.geode.StatisticsFactory;
import org.apache.geode.StatisticsType;
import org.apache.geode.StatisticsTypeFactory;
import org.apache.geode.annotations.Immutable;
import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
/**
* This class tracks GemFire statistics related to a {@link HARegionQueue}.
*
*
*/
public class HARegionQueueStats {
/** The <code>StatisticsType</code> of the statistics */
@Immutable
private static final StatisticsType _type;
/** Name of the events queued statistic */
protected static final String EVENTS_QUEUED = "eventsQueued";
/** Name of the events conflated statistic */
protected static final String EVENTS_CONFLATED = "eventsConflated";
/** Name of the marker events conflated statistic */
protected static final String MARKER_EVENTS_CONFLATED = "markerEventsConflated";
/** Name of the events removed statistic */
protected static final String EVENTS_REMOVED = "eventsRemoved";
/** Name of the events taken statistic */
protected static final String EVENTS_TAKEN = "eventsTaken";
/** Name of the events expired statistic */
protected static final String EVENTS_EXPIRED = "eventsExpired";
/** Name of the events removed by QRM statistic */
protected static final String EVENTS_REMOVED_BY_QRM = "eventsRemovedByQrm";
/** Name of the thread identifiers statistic */
protected static final String THREAD_IDENTIFIERS = "threadIdentifiers";
/** Name of the events dispatched statistic */
protected static final String EVENTS_DISPATCHED = "eventsDispatched";
/**
* Name of the num void removals statistic. This refers to the events which were supposed to be
* destroyed from queue through remove() but were removed by some other operation like conflation
* or expiration.
*/
protected static final String NUM_VOID_REMOVALS = "numVoidRemovals";
/**
* Name of the number of sequence violated events statistic. This refers to the events which has
* sequence id less than lastSequnceId hence not put in the region queue
*/
protected static final String NUM_SEQUENCE_VIOLATED = "numSequenceViolated";
/** Id of the events queued statistic */
private static final int _eventsQueuedId;
/** Id of the events conflated statistic */
private static final int _eventsConflatedId;
/** Id of the marker events conflated statistic */
private static final int _markerEventsConflatedId;
/** Id of the events removed statistic */
private static final int _eventsRemovedId;
/** Id of the events taken statistic */
private static final int _eventsTakenId;
/** Id of the events expired statistic */
private static final int _eventsExpiredId;
/** Id of the events removed by qrm statistic */
private static final int _eventsRemovedByQrmId;
/** Id of the thread identifiers statistic */
private static final int _threadIdentifiersId;
/** Id of the num events dispatched statistic */
private static final int _eventsDispatched;
/** Id of the num void removal statistic */
private static final int _numVoidRemovals;
/** Id of the num sequence violated statistic */
private static final int _numSequenceViolated;
/**
* Static initializer to create and initialize the <code>StatisticsType</code>
*/
static {
String statName = "ClientSubscriptionStats";
StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
_type = f.createType(statName, statName, new StatisticDescriptor[] {
f.createLongCounter(EVENTS_QUEUED, "Number of events added to queue.", "operations"),
f.createLongCounter(EVENTS_CONFLATED, "Number of events conflated for the queue.",
"operations"),
f.createLongCounter(MARKER_EVENTS_CONFLATED,
"Number of marker events conflated for the queue.", "operations"),
f.createLongCounter(EVENTS_REMOVED, "Number of events removed from the queue.",
"operations"),
f.createLongCounter(EVENTS_TAKEN, "Number of events taken from the queue.", "operations"),
f.createLongCounter(EVENTS_EXPIRED, "Number of events expired from the queue.",
"operations"),
f.createLongCounter(EVENTS_REMOVED_BY_QRM, "Number of events removed by QRM message.",
"operations"),
f.createIntCounter(THREAD_IDENTIFIERS, "Number of ThreadIdenfier objects for the queue.",
"units"),
f.createLongCounter(EVENTS_DISPATCHED, "Number of events that have been dispatched.",
"operations"),
f.createLongCounter(NUM_VOID_REMOVALS, "Number of void removals from the queue.",
"operations"),
f.createLongCounter(NUM_SEQUENCE_VIOLATED, "Number of events that has violated sequence.",
"operations")});
// Initialize id fields
_eventsQueuedId = _type.nameToId(EVENTS_QUEUED);
_eventsConflatedId = _type.nameToId(EVENTS_CONFLATED);
_markerEventsConflatedId = _type.nameToId(MARKER_EVENTS_CONFLATED);
_eventsRemovedId = _type.nameToId(EVENTS_REMOVED);
_eventsTakenId = _type.nameToId(EVENTS_TAKEN);
_eventsExpiredId = _type.nameToId(EVENTS_EXPIRED);
_eventsRemovedByQrmId = _type.nameToId(EVENTS_REMOVED_BY_QRM);
_threadIdentifiersId = _type.nameToId(THREAD_IDENTIFIERS);
_eventsDispatched = _type.nameToId(EVENTS_DISPATCHED);
_numVoidRemovals = _type.nameToId(NUM_VOID_REMOVALS);
_numSequenceViolated = _type.nameToId(NUM_SEQUENCE_VIOLATED);
}
/** The <code>Statistics</code> instance to which most behavior is delegated */
private final Statistics _stats;
/**
* Constructor.
*
* @param factory The <code>StatisticsFactory</code> which creates the <code>Statistics</code>
* instance
* @param name The name of the <code>Statistics</code>
*/
public HARegionQueueStats(StatisticsFactory factory, String name) {
this._stats = factory.createAtomicStatistics(_type, "ClientSubscriptionStats-" + name);
}
// /////////////////// Instance Methods /////////////////////
/**
* Closes the <code>HARegionQueueStats</code>.
*/
public void close() {
this._stats.close();
}
/**
* Returns the current value of the "eventsQueued" stat.
*
* @return the current value of the "eventsQueued" stat
*/
public long getEventsEnqued() {
return this._stats.getLong(_eventsQueuedId);
}
/**
* Increments the "eventsQueued" stat by 1.
*/
public void incEventsEnqued() {
this._stats.incLong(_eventsQueuedId, 1);
}
/**
* Returns the current value of the "eventsConflated" stat.
*
* @return the current value of the "eventsConflated" stat
*/
public long getEventsConflated() {
return this._stats.getLong(_eventsConflatedId);
}
/**
* Increments the "eventsConflated" stat by 1.
*/
public void incEventsConflated() {
this._stats.incLong(_eventsConflatedId, 1);
}
/**
* Returns the current value of the "markerEventsConflated" stat.
*
* @return the current value of the "markerEventsConflated" stat
*/
public long getMarkerEventsConflated() {
return this._stats.getLong(_markerEventsConflatedId);
}
/**
* Increments the "markerEventsConflated" stat by 1.
*/
public void incMarkerEventsConflated() {
this._stats.incLong(_markerEventsConflatedId, 1);
}
/**
* Returns the current value of the "eventsRemoved" stat.
*
* @return the current value of the "eventsRemoved" stat
*/
public long getEventsRemoved() {
return this._stats.getLong(_eventsRemovedId);
}
/**
* Increments the "eventsRemoved" stat by 1.
*/
public void incEventsRemoved() {
this._stats.incLong(_eventsRemovedId, 1);
}
/**
* Returns the current value of the "eventsTaken" stat.
*
* @return the current value of the "eventsTaken" stat
*/
public long getEventsTaken() {
return this._stats.getLong(_eventsTakenId);
}
/**
* Increments the "eventsTaken" stat by 1.
*/
public void incEventsTaken() {
this._stats.incLong(_eventsTakenId, 1);
}
/**
* Returns the current value of the "eventsExpired" stat.
*
* @return the current value of the "eventsExpired" stat
*/
public long getEventsExpired() {
return this._stats.getLong(_eventsExpiredId);
}
/**
* Increments the "eventsExpired" stat by 1.
*/
public void incEventsExpired() {
this._stats.incLong(_eventsExpiredId, 1);
}
/**
* Returns the current value of the "eventsRemovedByQrm" stat.
*
* @return the current value of the "eventsRemovedByQrm" stat
*/
public long getEventsRemovedByQrm() {
return this._stats.getLong(_eventsRemovedByQrmId);
}
/**
* Increments the "eventsRemovedByQrm" stat by 1.
*/
public void incEventsRemovedByQrm() {
this._stats.incLong(_eventsRemovedByQrmId, 1);
}
/**
* Returns the current value of the "threadIdentifiers" stat.
*
* @return the current value of the "threadIdentifiers" stat
*/
public int getThreadIdentiferCount() {
return this._stats.getInt(_threadIdentifiersId);
}
/**
* Increments the "threadIdentifiers" stat by 1.
*/
public void incThreadIdentifiers() {
this._stats.incInt(_threadIdentifiersId, 1);
}
/**
* Decrements the "threadIdentifiers" stat by 1.
*/
public void decThreadIdentifiers() {
this._stats.incInt(_threadIdentifiersId, -1);
}
/**
* Returns the current value of the "eventsDispatched" stat.
*
* @return the current value of the "eventsDispatched" stat
*/
public long getEventsDispatched() {
return this._stats.getLong(_eventsDispatched);
}
/**
* Increments the "eventsDispatched" stat by 1.
*/
public void incEventsDispatched() {
this._stats.incLong(_eventsDispatched, 1);
}
/**
* Returns the current value of the "numVoidRemovals" stat.
*
* @return the current value of the "numVoidRemovals" stat
*/
public long getNumVoidRemovals() {
return this._stats.getLong(_numVoidRemovals);
}
/**
* Increments the "numVoidRemovals" stat by 1.
*/
public void incNumVoidRemovals() {
this._stats.incLong(_numVoidRemovals, 1);
}
/**
* Returns the current value of the "numSequenceViolated" stat.
*
* @return the current value of the "numSequenceViolated" stat
*/
public long getNumSequenceViolated() {
return this._stats.getLong(_numSequenceViolated);
}
/**
* Increments the "numSequenceViolated" stat by 1.
*/
public void incNumSequenceViolated() {
this._stats.incLong(_numSequenceViolated, 1);
}
/**
* Returns true if the stats instance has been closed.
*
* @return true if the stats instance has been closed.
*/
public boolean isClosed() {
return this._stats.isClosed();
}
}