-
Notifications
You must be signed in to change notification settings - Fork 124
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: move session lastUseTime parameter from PooledSession to SessionImpl class. Fix updation of the parameter for chained RPCs within one transaction. #2704
Merged
arpan14
merged 32 commits into
googleapis:main
from
arpan14:session-lastusetime-refactor
Nov 3, 2023
Merged
Changes from 28 commits
Commits
Show all changes
32 commits
Select commit
Hold shift + click to select a range
edc5bbf
fix: prevent illegal negative timeout values into thread sleep() meth…
arpan14 49a85df
Merge pull request #1 from arpan14/retryerror
arpan14 4cd497b
Fixing lint issues.
arpan14 4a6aa8e
Merge branch 'googleapis:main' into main
arpan14 b2aa09d
Merge branch 'googleapis:main' into main
arpan14 8d6d71e
Merge branch 'googleapis:main' into main
arpan14 77e6e7d
Merge branch 'googleapis:main' into main
arpan14 e8b7fad
Merge branch 'googleapis:main' into main
arpan14 8aa84e1
Merge branch 'googleapis:main' into main
arpan14 922f324
refactor: move session lastUseTime parameter from PooledSession to Se…
arpan14 b544080
chore: add clock instances in callees of SessionImpl.
arpan14 9862265
chore: partially fix failing unit tests in SessionPoolTest and Sessio…
arpan14 5e5f769
chore: fix failing tests in SessionPoolStressTest.
arpan14 a385ceb
chore: update lastUseTime for methods in SessionPoolTransactionContex…
arpan14 fd3bb41
chore: lint errors.
arpan14 4864053
chore: fix tests in DatabaseClientImplTest by passing the mocked cloc…
arpan14 f5b82fa
fix: update session lastUseTime field for AbstractReadContext class. …
arpan14 73f0192
fix: failing tests in TransactionRunnerImplTest.
arpan14 ff32178
fix: failing test in SessionPoolMaintainerTest.
arpan14 1316579
refactor: move FakeClock to a new class.
arpan14 80dd971
refactor: move Clock to a new class.
arpan14 1acd645
chore: resolving PR comments.
arpan14 6af8187
chore: address review comments.
arpan14 999a39b
chore: updating lastUseTime state in TransactionRunnerImpl. Removing …
arpan14 ec80d6a
chore: remove redundant update statements from SessionPool class. Add…
arpan14 6cdef81
chore: add more tests for TransactionRunner.
arpan14 593a10b
chore: remove dead code from constructor of SessionPoolTransactionCon…
arpan14 ced1e06
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] 0485aee
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Tr…
arpan14 c4163d8
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Tr…
arpan14 b75b19f
Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/Tr…
arpan14 86327e2
chore: fixing precondition errors due to null clock.
arpan14 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,6 +17,7 @@ | |
package com.google.cloud.spanner; | ||
|
||
import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException; | ||
import static com.google.common.base.MoreObjects.firstNonNull; | ||
import static com.google.common.base.Preconditions.checkArgument; | ||
import static com.google.common.base.Preconditions.checkNotNull; | ||
import static com.google.common.base.Preconditions.checkState; | ||
|
@@ -72,6 +73,7 @@ abstract static class Builder<B extends Builder<?, T>, T extends AbstractReadCon | |
private int defaultPrefetchChunks = SpannerOptions.Builder.DEFAULT_PREFETCH_CHUNKS; | ||
private QueryOptions defaultQueryOptions = SpannerOptions.Builder.DEFAULT_QUERY_OPTIONS; | ||
private ExecutorProvider executorProvider; | ||
private Clock clock; | ||
|
||
Builder() {} | ||
|
||
|
@@ -110,6 +112,11 @@ B setExecutorProvider(ExecutorProvider executorProvider) { | |
return self(); | ||
} | ||
|
||
B setClock(Clock clock) { | ||
this.clock = clock; | ||
return self(); | ||
} | ||
|
||
abstract T build(); | ||
} | ||
|
||
|
@@ -392,6 +399,8 @@ void initTransaction() { | |
private final int defaultPrefetchChunks; | ||
private final QueryOptions defaultQueryOptions; | ||
|
||
private Clock clock = new Clock(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See above, I think this can be made final |
||
|
||
@GuardedBy("lock") | ||
private boolean isValid = true; | ||
|
||
|
@@ -416,6 +425,7 @@ void initTransaction() { | |
this.defaultQueryOptions = builder.defaultQueryOptions; | ||
this.span = builder.span; | ||
this.executorProvider = builder.executorProvider; | ||
this.clock = firstNonNull(builder.clock, this.clock); | ||
} | ||
|
||
@Override | ||
|
@@ -689,6 +699,7 @@ CloseableIterator<PartialResultSet> startStream(@Nullable ByteString resumeToken | |
SpannerRpc.StreamingCall call = | ||
rpc.executeQuery( | ||
request.build(), stream.consumer(), session.getOptions(), isRouteToLeader()); | ||
session.markUsed(clock.instant()); | ||
call.request(prefetchChunks); | ||
stream.setCall(call, request.getTransaction().hasBegin()); | ||
return stream; | ||
|
@@ -826,6 +837,7 @@ CloseableIterator<PartialResultSet> startStream(@Nullable ByteString resumeToken | |
SpannerRpc.StreamingCall call = | ||
rpc.read( | ||
builder.build(), stream.consumer(), session.getOptions(), isRouteToLeader()); | ||
session.markUsed(clock.instant()); | ||
olavloite marked this conversation as resolved.
Show resolved
Hide resolved
|
||
call.request(prefetchChunks); | ||
stream.setCall(call, /* withBeginTransaction = */ builder.getTransaction().hasBegin()); | ||
return stream; | ||
|
29 changes: 29 additions & 0 deletions
29
google-cloud-spanner/src/main/java/com/google/cloud/spanner/Clock.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* | ||
* Copyright 2023 Google LLC | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.google.cloud.spanner; | ||
|
||
import org.threeten.bp.Instant; | ||
|
||
/** | ||
* Wrapper around current time so that we can fake it in tests. TODO(user): Replace with Java 8 | ||
* Clock. | ||
*/ | ||
class Clock { | ||
Instant instant() { | ||
return Instant.now(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: maybe set this by default to
= new Clock()
and remove the null check in the AbstractReadContext constructor?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, this is the clock field within the builder class. I have set it to
= new Clock()
by default at the member definition (L402)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually meant setting this one (so
Builder.clock
) by default to= new Clock()
. That way, the clock in theAbstractReadContext
can be final.