Skip to content

Commit e20fed6

Browse files
committed
chore: add a metric label is_multiplexed for multiplexed session.
1 parent e043de8 commit e20fed6

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class MetricRegistryConstants {
7979
static final String NUM_SESSIONS_IN_USE = "spanner/num_in_use_sessions";
8080
static final String NUM_SESSIONS_AVAILABLE = "spanner/num_available_sessions";
8181
static final String SESSIONS_TYPE = "session_type";
82+
static final String IS_MULTIPLEXED = "is_multiplexed";
8283

8384
static final String MAX_IN_USE_SESSIONS_DESCRIPTION =
8485
"The maximum number of sessions in use during the last 10 minute interval.";

google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import static com.google.cloud.spanner.MetricRegistryConstants.COUNT;
2020
import static com.google.cloud.spanner.MetricRegistryConstants.GET_SESSION_TIMEOUTS;
21+
import static com.google.cloud.spanner.MetricRegistryConstants.IS_MULTIPLEXED;
2122
import static com.google.cloud.spanner.MetricRegistryConstants.MAX_ALLOWED_SESSIONS;
2223
import static com.google.cloud.spanner.MetricRegistryConstants.MAX_ALLOWED_SESSIONS_DESCRIPTION;
2324
import static com.google.cloud.spanner.MetricRegistryConstants.MAX_IN_USE_SESSIONS;
@@ -1402,7 +1403,7 @@ PooledSession get(final boolean eligibleForLongRunning) {
14021403
res.markBusy(span);
14031404
span.addAnnotation("Using Session", "sessionId", res.getName());
14041405
synchronized (lock) {
1405-
incrementNumSessionsInUse();
1406+
incrementNumSessionsInUse(false);
14061407
checkedOutSessions.add(this);
14071408
}
14081409
res.eligibleForLongRunning = eligibleForLongRunning;
@@ -2162,9 +2163,15 @@ enum Position {
21622163
@GuardedBy("lock")
21632164
private long numSessionsAcquired = 0;
21642165

2166+
@GuardedBy("lock")
2167+
private long numMultiplexedSessionsAcquired = 0;
2168+
21652169
@GuardedBy("lock")
21662170
private long numSessionsReleased = 0;
21672171

2172+
@GuardedBy("lock")
2173+
private long numMultiplexedSessionsReleased = 0;
2174+
21682175
@GuardedBy("lock")
21692176
private long numIdleSessionsRemoved = 0;
21702177

@@ -2175,6 +2182,7 @@ enum Position {
21752182
private long numLeakedSessionsRemoved = 0;
21762183

21772184
private AtomicLong numWaiterTimeouts = new AtomicLong();
2185+
private AtomicLong numMultiplexedSessionWaiterTimeouts = new AtomicLong();
21782186

21792187
@GuardedBy("lock")
21802188
private final Set<PooledSession> allSessions = new HashSet<>();
@@ -2184,15 +2192,12 @@ enum Position {
21842192
final Set<PooledSessionFuture> checkedOutSessions = new HashSet<>();
21852193

21862194
private final SessionConsumer sessionConsumer = new SessionConsumerImpl();
2187-
21882195
@VisibleForTesting Function<PooledSession, Void> idleSessionRemovedListener;
21892196

21902197
@VisibleForTesting Function<PooledSession, Void> longRunningSessionRemovedListener;
2191-
21922198
private final CountDownLatch waitOnMinSessionsLatch;
21932199
private final SessionReplacementHandler pooledSessionReplacementHandler =
21942200
new PooledSessionReplacementHandler();
2195-
21962201
/**
21972202
* Create a session pool with the given options and for the given database. It will also start
21982203
* eagerly creating sessions if {@link SessionPoolOptions#getMinSessions()} is greater than 0.
@@ -2424,6 +2429,10 @@ long getNumWaiterTimeouts() {
24242429
return numWaiterTimeouts.get();
24252430
}
24262431

2432+
long getNumMultiplexedSessionWaiterTimeouts() {
2433+
return numMultiplexedSessionWaiterTimeouts.get();
2434+
}
2435+
24272436
private void initPool() {
24282437
synchronized (lock) {
24292438
poolMaintainer.init();
@@ -2557,12 +2566,16 @@ private PooledSessionFuture checkoutSession(
25572566
return res;
25582567
}
25592568

2560-
private void incrementNumSessionsInUse() {
2569+
private void incrementNumSessionsInUse(boolean isMultiplexed) {
25612570
synchronized (lock) {
2562-
if (maxSessionsInUse < ++numSessionsInUse) {
2563-
maxSessionsInUse = numSessionsInUse;
2571+
if (!isMultiplexed) {
2572+
if (maxSessionsInUse < ++numSessionsInUse) {
2573+
maxSessionsInUse = numSessionsInUse;
2574+
}
2575+
numSessionsAcquired++;
2576+
} else {
2577+
numMultiplexedSessionsAcquired++;
25642578
}
2565-
numSessionsAcquired++;
25662579
}
25672580
}
25682581

@@ -3139,13 +3152,25 @@ private void initOpenTelemetryMetricsCollection(
31393152
measurement.record(this.sessions.size(), attributesAvailableSessions);
31403153
});
31413154

3155+
AttributesBuilder attributesBuilderIsMultiplexed;
3156+
if (attributes != null) {
3157+
attributesBuilderIsMultiplexed = attributes.toBuilder();
3158+
} else {
3159+
attributesBuilderIsMultiplexed = Attributes.builder();
3160+
}
3161+
Attributes attributesRegularSession =
3162+
attributesBuilderIsMultiplexed.put(IS_MULTIPLEXED, false).build();
3163+
Attributes attributesMultiplexedSession =
3164+
attributesBuilderIsMultiplexed.put(IS_MULTIPLEXED, true).build();
31423165
meter
31433166
.counterBuilder(GET_SESSION_TIMEOUTS)
31443167
.setDescription(SESSIONS_TIMEOUTS_DESCRIPTION)
31453168
.setUnit(COUNT)
31463169
.buildWithCallback(
31473170
measurement -> {
3148-
measurement.record(this.getNumWaiterTimeouts(), attributes);
3171+
measurement.record(this.getNumWaiterTimeouts(), attributesRegularSession);
3172+
measurement.record(
3173+
this.getNumMultiplexedSessionWaiterTimeouts(), attributesMultiplexedSession);
31493174
});
31503175

31513176
meter
@@ -3154,7 +3179,8 @@ private void initOpenTelemetryMetricsCollection(
31543179
.setUnit(COUNT)
31553180
.buildWithCallback(
31563181
measurement -> {
3157-
measurement.record(this.numSessionsAcquired, attributes);
3182+
measurement.record(this.numSessionsAcquired, attributesRegularSession);
3183+
measurement.record(this.numMultiplexedSessionsAcquired, attributesMultiplexedSession);
31583184
});
31593185

31603186
meter
@@ -3163,7 +3189,8 @@ private void initOpenTelemetryMetricsCollection(
31633189
.setUnit(COUNT)
31643190
.buildWithCallback(
31653191
measurement -> {
3166-
measurement.record(this.numSessionsReleased, attributes);
3192+
measurement.record(this.numSessionsReleased, attributesRegularSession);
3193+
measurement.record(this.numMultiplexedSessionsReleased, attributesMultiplexedSession);
31673194
});
31683195
}
31693196
}

0 commit comments

Comments
 (0)