Skip to content

Commit 6401cb9

Browse files
committed
fix: revert using GetSession as ping
1 parent d2db09f commit 6401cb9

File tree

7 files changed

+33
-30
lines changed

7 files changed

+33
-30
lines changed

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,6 @@ public String getName() {
101101
return options;
102102
}
103103

104-
com.google.spanner.v1.Session get() {
105-
return spanner.getRpc().getSession(name);
106-
}
107-
108104
@Override
109105
public long executePartitionedUpdate(Statement stmt) {
110106
setActive(null);

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,12 @@ public void prepareReadWriteTransaction() {
841841

842842
private void keepAlive() {
843843
markUsed();
844-
delegate.get();
844+
try (ResultSet resultSet =
845+
delegate
846+
.singleUse(TimestampBound.ofMaxStaleness(60, TimeUnit.SECONDS))
847+
.executeQuery(Statement.newBuilder("SELECT 1").build())) {
848+
resultSet.next();
849+
}
845850
}
846851

847852
void markUsed() {

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@
109109
import com.google.spanner.v1.ExecuteBatchDmlRequest;
110110
import com.google.spanner.v1.ExecuteBatchDmlResponse;
111111
import com.google.spanner.v1.ExecuteSqlRequest;
112-
import com.google.spanner.v1.GetSessionRequest;
113112
import com.google.spanner.v1.PartialResultSet;
114113
import com.google.spanner.v1.PartitionQueryRequest;
115114
import com.google.spanner.v1.PartitionReadRequest;
@@ -345,13 +344,6 @@ private void acquireAdministrativeRequestsRateLimiter() {
345344
}
346345
}
347346

348-
@Override
349-
public Session getSession(String name) {
350-
GetSessionRequest request = GetSessionRequest.newBuilder().setName(name).build();
351-
GrpcCallContext context = newCallContext(null, projectName);
352-
return get(spannerStub.getSessionCallable().futureCall(request, context));
353-
}
354-
355347
@Override
356348
public Paginated<InstanceConfig> listInstanceConfigs(int pageSize, @Nullable String pageToken)
357349
throws SpannerException {

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,6 @@ interface StreamingCall {
172172
void cancel(@Nullable String message);
173173
}
174174

175-
Session getSession(String name);
176-
177175
// Instance admin APIs.
178176
Paginated<InstanceConfig> listInstanceConfigs(int pageSize, @Nullable String pageToken)
179177
throws SpannerException;

google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.google.common.truth.Truth.assertThat;
2020
import static org.mockito.Matchers.any;
2121
import static org.mockito.Mockito.doAnswer;
22+
import static org.mockito.Mockito.mock;
2223
import static org.mockito.Mockito.when;
2324
import static org.mockito.MockitoAnnotations.initMocks;
2425

@@ -99,20 +100,23 @@ public void run() {
99100
}
100101

101102
private SessionImpl setupMockSession(final SessionImpl session) {
102-
when(session.get())
103+
ReadContext mockContext = mock(ReadContext.class);
104+
final ResultSet mockResult = mock(ResultSet.class);
105+
when(session.singleUse(any(TimestampBound.class))).thenReturn(mockContext);
106+
when(mockContext.executeQuery(any(Statement.class)))
103107
.thenAnswer(
104-
new Answer<com.google.spanner.v1.Session>() {
108+
new Answer<ResultSet>() {
105109
@Override
106-
public com.google.spanner.v1.Session answer(InvocationOnMock invocation)
107-
throws Throwable {
110+
public ResultSet answer(InvocationOnMock invocation) throws Throwable {
108111
Integer currentValue = pingedSessions.get(session.getName());
109112
if (currentValue == null) {
110113
currentValue = 0;
111114
}
112115
pingedSessions.put(session.getName(), ++currentValue);
113-
return com.google.spanner.v1.Session.getDefaultInstance();
116+
return mockResult;
114117
}
115118
});
119+
when(mockResult.next()).thenReturn(true);
116120
return session;
117121
}
118122

google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.spanner;
1818

1919
import static com.google.common.truth.Truth.assertThat;
20+
import static org.mockito.Mockito.any;
2021
import static org.mockito.Mockito.doAnswer;
2122
import static org.mockito.Mockito.mock;
2223
import static org.mockito.Mockito.when;
@@ -142,16 +143,20 @@ public Void answer(InvocationOnMock invocation) throws Throwable {
142143
}
143144

144145
private void setupSession(final SessionImpl session) {
145-
when(session.get())
146+
ReadContext mockContext = mock(ReadContext.class);
147+
final ResultSet mockResult = mock(ResultSet.class);
148+
when(session.singleUse(any(TimestampBound.class))).thenReturn(mockContext);
149+
when(mockContext.executeQuery(any(Statement.class)))
146150
.thenAnswer(
147-
new Answer<com.google.spanner.v1.Session>() {
151+
new Answer<ResultSet>() {
152+
148153
@Override
149-
public com.google.spanner.v1.Session answer(InvocationOnMock invocation)
150-
throws Throwable {
154+
public ResultSet answer(InvocationOnMock invocation) throws Throwable {
151155
resetTransaction(session);
152-
return com.google.spanner.v1.Session.getDefaultInstance();
156+
return mockResult;
153157
}
154158
});
159+
when(mockResult.next()).thenReturn(true);
155160
doAnswer(
156161
new Answer<ApiFuture<Empty>>() {
157162

google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -892,8 +892,8 @@ public void run() {
892892
})
893893
.when(sessionClient)
894894
.asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class));
895-
for (SessionImpl sess : new SessionImpl[] {session1, session2, session3}) {
896-
when(sess.get()).thenReturn(com.google.spanner.v1.Session.getDefaultInstance());
895+
for (SessionImpl session : sessions) {
896+
mockKeepAlive(session);
897897
}
898898
FakeClock clock = new FakeClock();
899899
clock.currentTimeMillis = System.currentTimeMillis();
@@ -963,16 +963,18 @@ public void run() {
963963
session1.close();
964964
session2.close();
965965
runMaintainanceLoop(clock, pool, pool.poolMaintainer.numKeepAliveCycles);
966-
verify(session, never()).get();
966+
verify(session, never()).singleUse(any(TimestampBound.class));
967967
runMaintainanceLoop(clock, pool, pool.poolMaintainer.numKeepAliveCycles);
968-
verify(session, times(2)).get();
968+
verify(session, times(2)).singleUse(any(TimestampBound.class));
969969
clock.currentTimeMillis +=
970970
clock.currentTimeMillis + (options.getKeepAliveIntervalMinutes() + 5) * 60 * 1000;
971971
session1 = pool.getReadSession();
972972
session1.writeAtLeastOnce(new ArrayList<Mutation>());
973973
session1.close();
974974
runMaintainanceLoop(clock, pool, pool.poolMaintainer.numKeepAliveCycles);
975-
verify(session, times(options.getMinSessions())).get();
975+
// The session pool only keeps MinSessions + MaxIdleSessions alive.
976+
verify(session, times(options.getMinSessions() + options.getMaxIdleSessions()))
977+
.singleUse(any(TimestampBound.class));
976978
pool.closeAsync().get(5L, TimeUnit.SECONDS);
977979
}
978980

@@ -1642,6 +1644,7 @@ public Void call() {
16421644
private void mockKeepAlive(Session session) {
16431645
ReadContext context = mock(ReadContext.class);
16441646
ResultSet resultSet = mock(ResultSet.class);
1647+
when(resultSet.next()).thenReturn(true, false);
16451648
when(session.singleUse(any(TimestampBound.class))).thenReturn(context);
16461649
when(context.executeQuery(any(Statement.class))).thenReturn(resultSet);
16471650
}

0 commit comments

Comments
 (0)