Skip to content

Commit 7f5a455

Browse files
author
Peter Alfonsi
committed
Added overall CacheStatsResponse object packaging all 5 metrics
Signed-off-by: Peter Alfonsi <[email protected]>
1 parent 6059680 commit 7f5a455

File tree

6 files changed

+97
-36
lines changed

6 files changed

+97
-36
lines changed

server/src/main/java/org/opensearch/common/cache/stats/CacheStats.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
package org.opensearch.common.cache.stats;
1010

11-
import org.opensearch.core.xcontent.ToXContentFragment;
11+
import org.opensearch.core.common.io.stream.Writeable;
1212

1313
import java.util.List;
1414

@@ -18,7 +18,28 @@
1818
* When updating stats, we take in the list of dimensions associated with the key/value pair that caused the update.
1919
* This allows us to aggregate stats by dimension when accessing them.
2020
*/
21-
public interface CacheStats extends CacheStatsBase { // TODO: Make this extend ToXContentFragment too
21+
public interface CacheStats extends Writeable {
22+
23+
// Methods to get all 5 values at once, either in total or for a specific set of dimensions.
24+
CacheStatsResponse getTotalStats();
25+
CacheStatsResponse getStatsByDimensions(List<CacheStatsDimension> dimensions);
26+
27+
// Methods to get total values.
28+
long getTotalHits();
29+
long getTotalMisses();
30+
long getTotalEvictions();
31+
long getTotalMemorySize();
32+
long getTotalEntries();
33+
34+
// Methods to get values for a specific set of dimensions.
35+
// Returns the sum of values for cache entries that match all dimensions in the list.
36+
long getHitsByDimensions(List<CacheStatsDimension> dimensions);
37+
long getMissesByDimensions(List<CacheStatsDimension> dimensions);
38+
long getEvictionsByDimensions(List<CacheStatsDimension> dimensions);
39+
long getMemorySizeByDimensions(List<CacheStatsDimension> dimensions);
40+
long getEntriesByDimensions(List<CacheStatsDimension> dimensions);
41+
42+
2243
void incrementHitsByDimensions(List<CacheStatsDimension> dimensions);
2344
void incrementMissesByDimensions(List<CacheStatsDimension> dimensions);
2445
void incrementEvictionsByDimensions(List<CacheStatsDimension> dimensions);

server/src/main/java/org/opensearch/common/cache/stats/CacheStatsBase.java

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* The OpenSearch Contributors require contributions made to
5+
* this file be licensed under the Apache-2.0 license or a
6+
* compatible open source license.
7+
*/
8+
9+
package org.opensearch.common.cache.stats;
10+
11+
/**
12+
* A class containing the 5 metrics tracked by a CacheStats object.
13+
*/
14+
public class CacheStatsResponse { // TODO: Make this extend ToXContent.
15+
public final long hits;
16+
public final long misses;
17+
public final long evictions;
18+
public final long memorySize;
19+
public final long entries;
20+
21+
public CacheStatsResponse(long hits, long misses, long evictions, long memorySize, long entries) {
22+
this.hits = hits;
23+
this.misses = misses;
24+
this.evictions = evictions;
25+
this.memorySize = memorySize;
26+
this.entries = entries;
27+
}
28+
}

server/src/main/java/org/opensearch/common/cache/stats/SingleDimensionCacheStats.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,22 @@ public SingleDimensionCacheStats(StreamInput in) throws IOException {
8484
this.tierDimensionValue = in.readString();
8585
}
8686

87+
@Override
88+
public CacheStatsResponse getTotalStats() {
89+
return new CacheStatsResponse(getTotalHits(), getTotalMisses(), getTotalEvictions(), getTotalMemorySize(), getTotalEntries());
90+
}
91+
92+
@Override
93+
public CacheStatsResponse getStatsByDimensions(List<CacheStatsDimension> dimensions) {
94+
return new CacheStatsResponse(
95+
getHitsByDimensions(dimensions),
96+
getMissesByDimensions(dimensions),
97+
getEvictionsByDimensions(dimensions),
98+
getMemorySizeByDimensions(dimensions),
99+
getEntriesByDimensions(dimensions)
100+
);
101+
}
102+
87103
@Override
88104
public long getTotalHits() {
89105
return this.totalHits.count();

server/src/main/java/org/opensearch/common/cache/tier/TieredSpilloverCacheStats.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import org.opensearch.common.cache.stats.CacheStats;
1212
import org.opensearch.common.cache.stats.CacheStatsDimension;
13+
import org.opensearch.common.cache.stats.CacheStatsResponse;
1314
import org.opensearch.core.common.io.stream.StreamOutput;
1415

1516
import java.io.IOException;
@@ -30,6 +31,16 @@ public void writeTo(StreamOutput out) throws IOException {
3031

3132
}
3233

34+
@Override
35+
public CacheStatsResponse getTotalStats() {
36+
return null;
37+
}
38+
39+
@Override
40+
public CacheStatsResponse getStatsByDimensions(List<CacheStatsDimension> dimensions) {
41+
return null;
42+
}
43+
3344
@Override
3445
public long getTotalHits() {
3546
return 0;

server/src/test/java/org/opensearch/common/cache/stats/SingleDimensionCacheStatsTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,23 +170,42 @@ private void checkShardResults(StatsAndExpectedResults statsAndExpectedResults)
170170
String shardIdString = String.valueOf(shardId);
171171
CacheStatsDimension dimension = getDim(shardId);
172172

173+
// Check the individual metric getters
173174
assertEquals((long) expectedResults.get("hits").get(shardIdString), stats.getHitsByDimensions(List.of(dimension)));
174175
assertEquals((long) expectedResults.get("misses").get(shardIdString), stats.getMissesByDimensions(List.of(dimension)));
175176
assertEquals((long) expectedResults.get("evictions").get(shardIdString), stats.getEvictionsByDimensions(List.of(dimension)));
176177
assertEquals((long) expectedResults.get("memory_size").get(shardIdString), stats.getMemorySizeByDimensions(List.of(dimension)));
177178
assertEquals((long) expectedResults.get("entries").get(shardIdString), stats.getEntriesByDimensions(List.of(dimension)));
179+
180+
// Check the total metric getter
181+
CacheStatsResponse response = stats.getStatsByDimensions(List.of(dimension));
182+
assertEquals((long) expectedResults.get("hits").get(shardIdString), response.hits);
183+
assertEquals((long) expectedResults.get("misses").get(shardIdString), response.misses);
184+
assertEquals((long) expectedResults.get("evictions").get(shardIdString), response.evictions);
185+
assertEquals((long) expectedResults.get("memory_size").get(shardIdString), response.memorySize);
186+
assertEquals((long) expectedResults.get("entries").get(shardIdString), response.entries);
178187
}
179188
}
180189

181190
private void checkTotalResults(StatsAndExpectedResults statsAndExpectedResults) {
182191
// check resulting total values are what we expect
183192
Map<String, Map<String, Long>> expectedResults = statsAndExpectedResults.expectedShardResults;
184193
SingleDimensionCacheStats stats = statsAndExpectedResults.stats;
194+
195+
// Check the individual metric getters
185196
assertEquals(sumMap(expectedResults.get("hits")), stats.getTotalHits());
186197
assertEquals(sumMap(expectedResults.get("misses")), stats.getTotalMisses());
187198
assertEquals(sumMap(expectedResults.get("evictions")), stats.getTotalEvictions());
188199
assertEquals(sumMap(expectedResults.get("memory_size")), stats.getTotalMemorySize());
189200
assertEquals(sumMap(expectedResults.get("entries")), stats.getTotalEntries());
201+
202+
// Check the total metric getter
203+
CacheStatsResponse totalResponse = stats.getTotalStats();
204+
assertEquals(sumMap(expectedResults.get("hits")), totalResponse.hits);
205+
assertEquals(sumMap(expectedResults.get("misses")), totalResponse.misses);
206+
assertEquals(sumMap(expectedResults.get("evictions")), totalResponse.evictions);
207+
assertEquals(sumMap(expectedResults.get("memory_size")), totalResponse.memorySize);
208+
assertEquals(sumMap(expectedResults.get("entries")), totalResponse.entries);
190209
}
191210

192211
// Convenience class to allow reusing setup code across tests

0 commit comments

Comments
 (0)