in geode-core/src/main/java/org/apache/geode/internal/statistics/StatArchiveWriter.java [529:638]
private void writeSample(ResourceInstance ri) throws IOException {
final boolean isDebugEnabled_STATISTICS = logger.isTraceEnabled(LogMarker.STATISTICS_VERBOSE);
if (isDebugEnabled_STATISTICS) {
logger.trace(LogMarker.STATISTICS_VERBOSE, "StatArchiveWriter#writeSample ri={}", ri);
}
if (trace
&& (traceStatisticsName == null
|| traceStatisticsName.equals(ri.getStatistics().getTextId()))
&& (traceStatisticsTypeName == null || traceStatisticsTypeName
.equals(ri.getResourceType().getStatisticsType().getName()))) {
traceDataOut.println("writeSample#writeSample for ri=" + ri);
}
if (ri.getStatistics().isClosed()) {
return;
}
StatisticDescriptor[] stats = ri.getResourceType().getStatisticDescriptors();
if (stats.length > 254) {
throw new Error("StatisticsType " + ri.getResourceType().getStatisticsType().getName()
+ " has too many stats: " + stats.length);
}
boolean wroteInstId = false;
boolean checkForChange = true;
if (!sampleWrittenForResources.contains(ri)) {
// first time for this instance so all values need to be written
checkForChange = false;
sampleWrittenForResources.add(ri);
}
long[] previousStatValues = ri.getPreviousStatArchiveValues();
if (isDebugEnabled_STATISTICS) {
logger.trace(LogMarker.STATISTICS_VERBOSE,
"StatArchiveWriter#writeSample checkForChange={}, previousStatValues={}, stats.length={}",
checkForChange, Arrays.toString(previousStatValues), stats.length);
}
if (previousStatValues == null) {
previousStatValues = new long[stats.length];
ri.setPreviousStatArchiveValues(previousStatValues);
}
int statsWritten = 0;
try {
for (int i = 0; i < stats.length; i++) {
long value = ri.getLatestStatArchiveValues()[i];
if (!checkForChange || value != previousStatValues[i]) {
long delta = checkForChange ? value - previousStatValues[i] : value;
if (!wroteInstId) {
wroteInstId = true;
writeResourceInst(ri.getId());
}
dataOut.writeByte(i);
if (trace
&& (traceStatisticsName == null
|| traceStatisticsName.equals(ri.getStatistics().getTextId()))
&& (traceStatisticsTypeName == null || traceStatisticsTypeName
.equals(ri.getResourceType().getStatisticsType().getName()))) {
traceDataOut.println("writeSample#writeByte i: " + i);
}
if (isDebugEnabled_STATISTICS) {
logger.trace(LogMarker.STATISTICS_VERBOSE,
"StatArchiveWriter#writeStatValue stats[{}]={}, delta={}", i, stats[i], delta);
}
writeStatValue(stats[i], delta, dataOut);
if (trace
&& (traceStatisticsName == null
|| traceStatisticsName.equals(ri.getStatistics().getTextId()))
&& (traceStatisticsTypeName == null || traceStatisticsTypeName
.equals(ri.getResourceType().getStatisticsType().getName()))) {
byte typeCode = ((StatisticDescriptorImpl) stats[i]).getTypeCode();
switch (typeCode) {
case BYTE_CODE:
traceDataOut.println(
"writeStatValue#writeByte " + typeCodeToString(typeCode) + " delta: " + delta);
break;
case SHORT_CODE:
traceDataOut.println(
"writeStatValue#writeShort" + typeCodeToString(typeCode) + " delta: " + delta);
break;
case INT_CODE:
case FLOAT_CODE:
case LONG_CODE:
case DOUBLE_CODE:
traceDataOut.println("writeStatValue#writeCompactValue "
+ typeCodeToString(typeCode) + " delta: " + delta);
break;
default:
}
}
}
}
} catch (IllegalStateException closedEx) {
// resource was closed causing getStatValue to throw this exception
}
if (wroteInstId) {
dataOut.writeByte(ILLEGAL_STAT_OFFSET);
if (trace
&& (traceStatisticsName == null
|| traceStatisticsName.equals(ri.getStatistics().getTextId()))
&& (traceStatisticsTypeName == null || traceStatisticsTypeName
.equals(ri.getResourceType().getStatisticsType().getName()))) {
traceDataOut
.println("writeSample#writeByte ILLEGAL_STAT_OFFSET: " + ILLEGAL_STAT_OFFSET);
}
}
if (isDebugEnabled_STATISTICS) {
logger.trace(LogMarker.STATISTICS_VERBOSE, "StatArchiveWriter#writeSample statsWritten={}",
statsWritten);
}
}