Skip to content
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

storage: return TransactionRetryError from QueryIntent on pushed intent #27307

Merged

Conversation

nvanbenschoten
Copy link
Member

Extracted from #26599.

This change adjusts how QueryIntent handles pushed intents. First, it
changes how pushed intents interact with SNAPSHOT transactions. Next,
it makes sure to update the response transaction in the case of pushed
intents. Finally, it returns a RETRY_SERIALIZABLE TransactionRetryError
for SERIALIZABLE transactions who observe a pushed intent with the
RETURN_ERROR behavior.

Release note: None

@nvanbenschoten nvanbenschoten requested review from bdarnell and a team July 9, 2018 22:55
@cockroach-teamcity
Copy link
Member

This change is Reviewable

Copy link
Member

@tbg tbg left a comment

Choose a reason for hiding this comment

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

Reviewed 4 of 4 files at r1.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained


pkg/roachpb/api.proto, line 773 at r1 (raw file):

    // response.
    DO_NOTHING = 0;
    // Return an IntentMissingError.

Stale


pkg/storage/replica_test.go, line 5852 at r1 (raw file):

					}

					for _, baTxn := range []*roachpb.Transaction{nil, txn} {

Throw another txn in here that's not the own txn? I don't think we'd ever call this command in that case, but it would still be useful to validate that the code is correct. Or, even better, error out in that case and verify that.

Copy link
Member

@tbg tbg left a comment

Choose a reason for hiding this comment

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

:lgtm:

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale)

This change adjusts how QueryIntent handles pushed intents. First, it
changes how pushed intents interact with SNAPSHOT transactions. Next,
it makes sure to update the response transaction in the case of pushed
intents. Finally, it returns a RETRY_SERIALIZABLE TransactionRetryError
for SERIALIZABLE transactions who observe a pushed intent with the
RETURN_ERROR behavior.

Release note: None
@nvanbenschoten nvanbenschoten force-pushed the nvanbenschoten/queryIntentSnapshot branch from 59fb4fe to 6dad7b6 Compare July 10, 2018 16:22
Copy link
Member Author

@nvanbenschoten nvanbenschoten left a comment

Choose a reason for hiding this comment

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

TFTR!

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale)


pkg/roachpb/api.proto, line 773 at r1 (raw file):

Previously, tschottdorf (Tobias Schottdorf) wrote…

Stale

Done.


pkg/storage/replica_test.go, line 5852 at r1 (raw file):

Previously, tschottdorf (Tobias Schottdorf) wrote…

Throw another txn in here that's not the own txn? I don't think we'd ever call this command in that case, but it would still be useful to validate that the code is correct. Or, even better, error out in that case and verify that.

Done.

Copy link
Contributor

@bdarnell bdarnell left a comment

Choose a reason for hiding this comment

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

Reviewed 1 of 4 files at r1, 3 of 3 files at r2.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale)


pkg/storage/replica_test.go, line 5794 at r2 (raw file):

	defer leaktest.AfterTest(t)()

	for _, iso := range []enginepb.IsolationType{enginepb.SNAPSHOT, enginepb.SERIALIZABLE} {

Note that snapshot isolation will be inaccessible in 2.1, so we don't really need to add new tests or behavior for it (except to the extent necessary to prevent things from breaking during the rollout of 2.1)

@nvanbenschoten
Copy link
Member Author

bors r+

craig bot pushed a commit that referenced this pull request Jul 10, 2018
27262: ui: require yarn >= 1.7.0 r=benesch,vilterp a=tschottdorf

Builds before the upgrade failed mysteriously.
@benesch (cc) suspects a bug in older versions of yarn.

```
$ make build
Running make with -j8
GOPATH set to /Users/tschottdorf/go
build/node-run.sh -C pkg/ui yarn install --offline
(echo "// Code generated by goyacc. DO NOT EDIT."; \
     echo "// GENERATED FILE DO NOT EDIT"; \
     cat pkg/sql/parser/gen/sql.go.tmp | \
     sed -E 's/^const ([A-Z][_A-Z0-9]*) =.*$/const \1 = lex.\1/g') > pkg/sql/parser/sql.go.tmp || rm pkg/sql/parser/sql.go.tmp
(echo "// Code generated by make. DO NOT EDIT."; \
     echo "// GENERATED FILE DO NOT EDIT"; \
     echo; \
     echo "package lex"; \
     echo; \
     grep '^const [A-Z][_A-Z0-9]* ' pkg/sql/parser/gen/sql.go.tmp) > pkg/sql/lex/tokens.go.tmp || rm pkg/sql/lex/tokens.go.tmp
mv -f pkg/sql/lex/tokens.go.tmp pkg/sql/lex/tokens.go
mv -f pkg/sql/parser/sql.go.tmp pkg/sql/parser/sql.go
yarn install v1.6.0
(node:50064) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[1/5] Validating package.json...
go install -v docgen
bin/prereqs ./pkg/cmd/docgen > bin/docgen.d.tmp
[2/5] Resolving packages...
mv -f bin/docgen.d.tmp bin/docgen.d
[3/5] Fetching packages...
build/node-run.sh pkg/ui/bin/gen-protobuf-cli-deps.js > pkg/ui/node_modules/protobufjs/cli/package.json
bash: pkg/ui/node_modules/protobufjs/cli/package.json: No such file or directory
make: *** [pkg/ui/yarn.installed] Error 1
make: *** Waiting for unfinished jobs....
```

Release note (general change): the build now requires yarn at version
1.7.0 or above, to work around yarnpkg/yarn#5761.

27307: storage: return TransactionRetryError from QueryIntent on pushed intent r=nvanbenschoten a=nvanbenschoten

Extracted from #26599.

This change adjusts how QueryIntent handles pushed intents. First, it
changes how pushed intents interact with SNAPSHOT transactions. Next,
it makes sure to update the response transaction in the case of pushed
intents. Finally, it returns a RETRY_SERIALIZABLE TransactionRetryError
for SERIALIZABLE transactions who observe a pushed intent with the
RETURN_ERROR behavior.

Release note: None

27329: log: use fake stacktrace when test-exiting r=benesch a=tschottdorf

Having stack traces littered across tests has been a long-standing pet
peeve of mine (and presumably others). We search through logs more often
than we would like to admit, and having to skip a number of intentional
stack traces is annoying.

Make it so that whenever the logging exit func is mocked, the stack
trace indicates that.

Release note: None

27348: engine: fix RocksDBBatchReader example comment r=nvanbenschoten a=nvanbenschoten

Release note: None

Co-authored-by: Tobias Schottdorf <[email protected]>
Co-authored-by: Nathan VanBenschoten <[email protected]>
@craig
Copy link
Contributor

craig bot commented Jul 10, 2018

Build succeeded

@craig craig bot merged commit 6dad7b6 into cockroachdb:master Jul 10, 2018
@nvanbenschoten nvanbenschoten deleted the nvanbenschoten/queryIntentSnapshot branch July 11, 2018 16:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants