Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
edc5bbf
fix: prevent illegal negative timeout values into thread sleep() meth…
arpan14 Feb 6, 2023
49a85df
Merge pull request #1 from arpan14/retryerror
arpan14 Feb 8, 2023
4cd497b
Fixing lint issues.
arpan14 Feb 8, 2023
4a6aa8e
Merge branch 'googleapis:main' into main
arpan14 Mar 13, 2023
b2aa09d
Merge branch 'googleapis:main' into main
arpan14 Mar 15, 2023
8d6d71e
Merge branch 'googleapis:main' into main
arpan14 May 9, 2023
34502d1
feat: long running transaction clean up background task. Adding confi…
arpan14 Apr 21, 2023
660cbcf
fix: linting issues and tests.
arpan14 May 9, 2023
82f9a09
fix: avoid refactoring existing tests.
arpan14 May 9, 2023
65a42f7
fix:lint issues and unit tests.
arpan14 May 9, 2023
d76b0b1
docs:adding documentation.
arpan14 May 10, 2023
fcf1565
fix:linting issues.
arpan14 May 10, 2023
7858d7c
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
342eed8
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
227dd27
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
ab05e08
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
3f07bf6
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
cbc93e6
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
5f36519
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
cf5f8a3
Apply suggestions from code review
arpan14 Jun 6, 2023
3469bed
fix:comments on PR.
arpan14 Jun 6, 2023
c27eaa9
fix:rename variables.
arpan14 Jun 6, 2023
ded6d75
fix:variable name rename.
arpan14 Jun 6, 2023
b4b4033
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 6, 2023
4423664
Revert "Update google-cloud-spanner/src/main/java/com/google/cloud/sp…
arpan14 Jun 6, 2023
a9da9dd
fix:variable name
arpan14 Jun 6, 2023
6239429
fix:removed lock.
arpan14 Jun 12, 2023
acdc9ac
fix:add handling to prevent duplicate session leak logs.
arpan14 Jun 13, 2023
480c719
fix:avoid long delays in integration tests.
arpan14 Jun 19, 2023
019e100
fix:lint issues.
arpan14 Jun 19, 2023
ff144ae
fix:pr comments around pool options, mock spanner.
arpan14 Jun 20, 2023
efe888f
fix: cleaned up session being returned back to the pool.
arpan14 Jun 22, 2023
d0d2c91
fix:mock timers to avoid flaky tests.
arpan14 Jun 25, 2023
9f0a100
fix:flaky tests.
arpan14 Jun 25, 2023
b96e940
fix:flaky tests.
arpan14 Jun 25, 2023
ecd2f4b
feat: support a new option to silently close inactive transactions wi…
arpan14 Jun 25, 2023
6b72583
fix:variable names.
arpan14 Jun 26, 2023
8ca552b
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 28, 2023
ed84ad1
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 28, 2023
a1b4b5f
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 28, 2023
c011d4c
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 28, 2023
6c76a05
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jun 28, 2023
dee86d0
fix:review comments.
arpan14 Jul 4, 2023
b3b45e2
Merge branch 'googleapis:main' into session-leak-pr
arpan14 Jul 6, 2023
e82c54f
Merge branch 'googleapis:main' into session-leak-pr
arpan14 Jul 10, 2023
c3e39ff
fix:add more unit tests for session pool options.
arpan14 Jul 10, 2023
db37f9d
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Se…
arpan14 Jul 11, 2023
4edaa52
docs:update as per PR comment.
arpan14 Jul 11, 2023
416ca61
Merge branch 'googleapis:main' into session-leak-pr
arpan14 Jul 18, 2023
ee3ec84
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Jul 25, 2023
943c2c5
Merge branch 'googleapis:main' into session-leak-pr
arpan14 Jul 25, 2023
a4faf05
fix: solve race conditions for PDML transactions.
arpan14 Jul 25, 2023
3f1e752
fix: make method scope to be package-private.
arpan14 Jul 25, 2023
d1f599e
test: add benchmark for long-running sessions clean up task.
arpan14 Jul 25, 2023
c41fbd7
fix: disable the feature by default.
arpan14 Aug 1, 2023
ea39b03
Merge branch 'googleapis:main' into session-leak-pr
arpan14 Aug 1, 2023
d9ce080
fix: remove benchmark code.
arpan14 Aug 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1891,11 +1891,23 @@ private void removeLongRunningSessions(
> 0) {
if ((options.warnInactiveTransactions() || options.warnAndCloseInactiveTransactions())
&& !session.isLeakedExceptionLogged) {
logger.log(
Level.WARNING,
String.format("Removing long running session => %s", session.getName()),
sessionFuture.leakedException);
session.isLeakedExceptionLogged = true;
if (options.warnAndCloseInactiveTransactions()) {
logger.log(
Level.WARNING,
String.format("Removing long-running session => %s", session.getName()),
sessionFuture.leakedException);
session.isLeakedExceptionLogged = true;
} else if (options.warnInactiveTransactions()) {
logger.log(
Level.WARNING,
String.format(
"Detected long-running session => %s. To automatically remove "
+ "long-running sessions, set SessionOption ActionOnInactiveTransaction "
+ "to WARN_AND_CLOSE by invoking setWarnAndCloseIfInactiveTransactions() method.",
session.getName()),
sessionFuture.leakedException);
session.isLeakedExceptionLogged = true;
}
}
if ((options.closeInactiveTransactions()
|| options.warnAndCloseInactiveTransactions())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,8 +334,7 @@ static InactiveTransactionRemovalOptions.Builder newBuilder() {
}

static class Builder {
private ActionOnInactiveTransaction actionOnInactiveTransaction =
ActionOnInactiveTransaction.WARN;
private ActionOnInactiveTransaction actionOnInactiveTransaction;
private Duration executionFrequency = Duration.ofMinutes(2);
private double usedSessionsRatioThreshold = 0.95;
private Duration idleTimeThreshold = Duration.ofMinutes(60L);
Expand Down Expand Up @@ -556,7 +555,7 @@ public Builder setBlockIfPoolExhausted() {
*
* @return this builder for chaining
*/
public Builder setWarnIfInactiveTransactions() {
Builder setWarnIfInactiveTransactions() {
this.inactiveTransactionRemovalOptions =
InactiveTransactionRemovalOptions.newBuilder()
.setActionOnInactiveTransaction(ActionOnInactiveTransaction.WARN)
Expand All @@ -575,7 +574,7 @@ public Builder setWarnIfInactiveTransactions() {
*
* @return this builder for chaining
*/
public Builder setWarnAndCloseIfInactiveTransactions() {
Builder setWarnAndCloseIfInactiveTransactions() {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are we making these methods package protected?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@psinghbay1 This feature is not yet launched. Hence it is package protected in this PR. We will be enabling this in the next couple of weeks.

this.inactiveTransactionRemovalOptions =
InactiveTransactionRemovalOptions.newBuilder()
.setActionOnInactiveTransaction(ActionOnInactiveTransaction.WARN_AND_CLOSE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@ public void burstWrite(final BenchmarkState server) throws Exception {
}
Futures.allAsList(futures).get();
service.shutdown();
assertThat(pool.numLeakedSessionsRemoved()).isEqualTo(0); // no sessions should be cleaned up in case of partitioned updates.
assertThat(pool.numLeakedSessionsRemoved())
.isEqualTo(0); // no sessions should be cleaned up in case of partitioned updates.
}

/** Measures the time needed to execute a burst of read and write requests. */
Expand Down Expand Up @@ -249,31 +250,36 @@ public void burstReadAndWrite(final BenchmarkState server) throws Exception {
}

private void randomWait() throws InterruptedException {
if(RND.nextBoolean()) {
if (RND.nextBoolean()) {
Thread.sleep(RND.nextInt(LONG_HOLD_SESSION_TIME));
} else {
Thread.sleep(RND.nextInt(HOLD_SESSION_TIME));
}
}

private void randomWaitForMockServer(final BenchmarkState server) {
if(RND.nextBoolean()) {
server.mockServer.getMockSpanner().setExecuteStreamingSqlExecutionTime(
SimulatedExecutionTime.ofMinimumAndRandomTime(
LONG_HOLD_SESSION_TIME, 0));
if (RND.nextBoolean()) {
server
.mockServer
.getMockSpanner()
.setExecuteStreamingSqlExecutionTime(
SimulatedExecutionTime.ofMinimumAndRandomTime(LONG_HOLD_SESSION_TIME, 0));
} else {
server.mockServer.getMockSpanner().setExecuteStreamingSqlExecutionTime(
SimulatedExecutionTime.ofMinimumAndRandomTime(
HOLD_SESSION_TIME, 0));
server
.mockServer
.getMockSpanner()
.setExecuteStreamingSqlExecutionTime(
SimulatedExecutionTime.ofMinimumAndRandomTime(HOLD_SESSION_TIME, 0));
}
}

private void assertNumLeakedSessionsRemoved(final BenchmarkState server, final SessionPool pool) {
final SessionPoolOptions sessionPoolOptions =
server.spanner.getOptions().getSessionPoolOptions();
if(sessionPoolOptions.warnAndCloseInactiveTransactions() || sessionPoolOptions.closeInactiveTransactions()) {
if (sessionPoolOptions.warnAndCloseInactiveTransactions()
|| sessionPoolOptions.closeInactiveTransactions()) {
assertThat(pool.numLeakedSessionsRemoved()).isGreaterThan(0);
} else if(sessionPoolOptions.warnInactiveTransactions()) {
} else if (sessionPoolOptions.warnInactiveTransactions()) {
assertThat(pool.numLeakedSessionsRemoved()).isEqualTo(0);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ public void verifyDefaultInactiveTransactionRemovalOptions() {
InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions =
sessionPoolOptions.getInactiveTransactionRemovalOptions();

assertTrue(sessionPoolOptions.warnInactiveTransactions());
assertFalse(sessionPoolOptions.warnInactiveTransactions());
assertFalse(sessionPoolOptions.warnAndCloseInactiveTransactions());
assertFalse(sessionPoolOptions.closeInactiveTransactions());
assertEquals(0.95, inactiveTransactionRemovalOptions.getUsedSessionsRatioThreshold(), 0.0);
Expand Down