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

[fix](move-memtable) immediately return error when close wait failed #44344

Merged
merged 1 commit into from
Nov 21, 2024

Conversation

kaijchen
Copy link
Contributor

@kaijchen kaijchen commented Nov 20, 2024

What problem does this PR solve?

Related PR: #38003

Problem Summary:

#38003 introduced a problem where the last sink node could report success even when close wait timeout, which may cause data loss.

Previously we made that change hoping to tolerate minority replica failure in this step.
However, it turns out the last sink node could miss tablet reports from downstreams in case of close wait failure.

This PR fixes the problem by return the close_wait error immediately.
The most common error in close wait is timeout, and it should not be fault tolerant on a replica basis anyways.

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

@doris-robot
Copy link

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@kaijchen
Copy link
Contributor Author

run buildall

Copy link
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@doris-robot
Copy link

TeamCity be ut coverage result:
Function Coverage: 38.02% (9900/26039)
Line Coverage: 29.21% (82824/283546)
Region Coverage: 28.34% (42529/150085)
Branch Coverage: 24.90% (21558/86590)
Coverage Report: http://coverage.selectdb-in.cc/coverage/c040ae01a6cbdc13de30d953d2f666b82aa887b1_c040ae01a6cbdc13de30d953d2f666b82aa887b1/report/index.html

@liaoxin01
Copy link
Contributor

run buildall

@doris-robot
Copy link

TeamCity be ut coverage result:
Function Coverage: 38.02% (9899/26039)
Line Coverage: 29.20% (82790/283546)
Region Coverage: 28.34% (42528/150085)
Branch Coverage: 24.90% (21559/86590)
Coverage Report: http://coverage.selectdb-in.cc/coverage/c040ae01a6cbdc13de30d953d2f666b82aa887b1_c040ae01a6cbdc13de30d953d2f666b82aa887b1/report/index.html

Copy link
Contributor

@liaoxin01 liaoxin01 left a comment

Choose a reason for hiding this comment

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

LGTM

@github-actions github-actions bot added the approved Indicates a PR has been approved by one committer. label Nov 20, 2024
Copy link
Contributor

PR approved by at least one committer and no changes requested.

Copy link
Contributor

PR approved by anyone and no changes requested.

Copy link
Contributor

@dataroaring dataroaring left a comment

Choose a reason for hiding this comment

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

LGTM

kaijchen added a commit to kaijchen/doris that referenced this pull request Nov 21, 2024
@liaoxin01 liaoxin01 merged commit babd6ce into apache:master Nov 21, 2024
34 of 37 checks passed
github-actions bot pushed a commit that referenced this pull request Nov 21, 2024
…44344)


Problem Summary:

#38003 introduced a problem where the last sink node could report
success even when close wait timeout, which may cause data loss.

Previously we made that change hoping to tolerate minority replica
failure in this step.
However, it turns out the last sink node could miss tablet reports from
downstreams in case of close wait failure.

This PR fixes the problem by return the close_wait error immediately.
The most common error in close wait is timeout, and it should not be
fault tolerant on a replica basis anyways.
github-actions bot pushed a commit that referenced this pull request Nov 21, 2024
…44344)


Problem Summary:

#38003 introduced a problem where the last sink node could report
success even when close wait timeout, which may cause data loss.

Previously we made that change hoping to tolerate minority replica
failure in this step.
However, it turns out the last sink node could miss tablet reports from
downstreams in case of close wait failure.

This PR fixes the problem by return the close_wait error immediately.
The most common error in close wait is timeout, and it should not be
fault tolerant on a replica basis anyways.
dataroaring pushed a commit that referenced this pull request Nov 21, 2024
kaijchen added a commit to kaijchen/doris that referenced this pull request Nov 22, 2024
csun5285 pushed a commit to csun5285/doris that referenced this pull request Nov 22, 2024
…pache#44344)


Problem Summary:

apache#38003 introduced a problem where the last sink node could report
success even when close wait timeout, which may cause data loss.

Previously we made that change hoping to tolerate minority replica
failure in this step.
However, it turns out the last sink node could miss tablet reports from
downstreams in case of close wait failure.

This PR fixes the problem by return the close_wait error immediately.
The most common error in close wait is timeout, and it should not be
fault tolerant on a replica basis anyways.
yiguolei pushed a commit that referenced this pull request Nov 22, 2024
morningman pushed a commit that referenced this pull request Nov 25, 2024
…44344)


Problem Summary:

#38003 introduced a problem where the last sink node could report
success even when close wait timeout, which may cause data loss.

Previously we made that change hoping to tolerate minority replica
failure in this step.
However, it turns out the last sink node could miss tablet reports from
downstreams in case of close wait failure.

This PR fixes the problem by return the close_wait error immediately.
The most common error in close wait is timeout, and it should not be
fault tolerant on a replica basis anyways.
yiguolei pushed a commit that referenced this pull request Nov 25, 2024
…44344)


Problem Summary:

#38003 introduced a problem where the last sink node could report
success even when close wait timeout, which may cause data loss.

Previously we made that change hoping to tolerate minority replica
failure in this step.
However, it turns out the last sink node could miss tablet reports from
downstreams in case of close wait failure.

This PR fixes the problem by return the close_wait error immediately.
The most common error in close wait is timeout, and it should not be
fault tolerant on a replica basis anyways.
dataroaring pushed a commit that referenced this pull request Dec 3, 2024
…44552)

`test_writer_v2_fault_injection` did not assert Exception being thrown,
which caused false positives.
i.e. Code bugged but test passed.

This PR fixed this problem.
Run this test without #44344, it will now report errors as expected. 

```
2024-11-25 17:03:25.463 ERROR [non-concurrent-thread-1] (ScriptContext.groovy:122) - Run test_writer_v2_fault_injection in ./doris/regression-test/suites/fault_injection_p0/test_writer_v2_fault_injection.groovy failed
org.opentest4j.AssertionFailedError: expected Exception 'load timed out before close waiting', actual success ==> expected: <true> but was: <false>
```
github-actions bot pushed a commit that referenced this pull request Dec 3, 2024
…44552)

`test_writer_v2_fault_injection` did not assert Exception being thrown,
which caused false positives.
i.e. Code bugged but test passed.

This PR fixed this problem.
Run this test without #44344, it will now report errors as expected. 

```
2024-11-25 17:03:25.463 ERROR [non-concurrent-thread-1] (ScriptContext.groovy:122) - Run test_writer_v2_fault_injection in ./doris/regression-test/suites/fault_injection_p0/test_writer_v2_fault_injection.groovy failed
org.opentest4j.AssertionFailedError: expected Exception 'load timed out before close waiting', actual success ==> expected: <true> but was: <false>
```
liaoxin01 pushed a commit that referenced this pull request Dec 7, 2024
Related PR: #44344
`VTabletWriterV2::_select_streams()` is already checking if there is
enough downstream BE to meet the replication requirements.
`VTabletWriterV2::close()` should tolerate those non-open streams on
close wait.

Debug point `VTabletWriterV2._open_streams.skip_two_backends` is added
along with `VTabletWriterV2._open_streams.skip_one_backend` to check
this behavior.
github-actions bot pushed a commit that referenced this pull request Dec 7, 2024
Related PR: #44344
`VTabletWriterV2::_select_streams()` is already checking if there is
enough downstream BE to meet the replication requirements.
`VTabletWriterV2::close()` should tolerate those non-open streams on
close wait.

Debug point `VTabletWriterV2._open_streams.skip_two_backends` is added
along with `VTabletWriterV2._open_streams.skip_one_backend` to check
this behavior.
github-actions bot pushed a commit that referenced this pull request Dec 7, 2024
Related PR: #44344
`VTabletWriterV2::_select_streams()` is already checking if there is
enough downstream BE to meet the replication requirements.
`VTabletWriterV2::close()` should tolerate those non-open streams on
close wait.

Debug point `VTabletWriterV2._open_streams.skip_two_backends` is added
along with `VTabletWriterV2._open_streams.skip_one_backend` to check
this behavior.
kaijchen added a commit to kaijchen/doris that referenced this pull request Dec 9, 2024
…pache#44552)

`test_writer_v2_fault_injection` did not assert Exception being thrown,
which caused false positives.
i.e. Code bugged but test passed.

This PR fixed this problem.
Run this test without apache#44344, it will now report errors as expected. 

```
2024-11-25 17:03:25.463 ERROR [non-concurrent-thread-1] (ScriptContext.groovy:122) - Run test_writer_v2_fault_injection in ./doris/regression-test/suites/fault_injection_p0/test_writer_v2_fault_injection.groovy failed
org.opentest4j.AssertionFailedError: expected Exception 'load timed out before close waiting', actual success ==> expected: <true> but was: <false>
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by one committer. dev/2.1.8-merged dev/3.0.3-merged p0_w reviewed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants