Skip to content

Work around https://github.com/dotnet/arcade/issues/7371#7457

Merged
MattGal merged 1 commit into
dotnet:mainfrom
MattGal:dotnet-arcade-7371
Jun 2, 2021
Merged

Work around https://github.com/dotnet/arcade/issues/7371#7457
MattGal merged 1 commit into
dotnet:mainfrom
MattGal:dotnet-arcade-7371

Conversation

@MattGal

@MattGal MattGal commented May 28, 2021

Copy link
Copy Markdown
Member
  • Don't have a threading contention for stdout by only using stdout in the exception case; "starting..." adds minimal value, one can assume if the script is called it starts.
  • sleep the main thread 2s before accessing stdout in case the exception case wants to happen

#7371

To double check:

@MattGal
MattGal requested a review from alexperovich May 28, 2021 18:50
@MattGal

MattGal commented May 28, 2021

Copy link
Copy Markdown
Member Author

@ViktorHofer FYI

Comment thread src/Microsoft.DotNet.Helix/Sdk/tools/azure-pipelines/reporter/run.py Outdated
@MattGal MattGal closed this May 28, 2021
@MattGal MattGal reopened this May 28, 2021
@dotnet dotnet deleted a comment from azure-pipelines Bot Jun 2, 2021
- Don't have a threading contention for stdout by only using stdout in the exception case; "starting..." adds minimal value, one can assume if the script is called it starts.
- sleep() the main thread 5s before accessing stdout in case the exception case wants to happen
- Remove most non-error-path logging since it adds little value and multiple threads competing for stdout can cause un-catch-able failure.
@MattGal
MattGal force-pushed the dotnet-arcade-7371 branch from 9bc7c3d to 702da8b Compare June 2, 2021 15:47
@MattGal
MattGal merged commit 9945dc4 into dotnet:main Jun 2, 2021

log.info("Beginning to read test results...")
# https://github.com/dotnet/arcade/issues/7371 - trying to avoid contention for stdout
time.sleep(5)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This sleep feels... very odd. The workers haven't actually done anything yet (we haven't even put anything into the queue). This is just adding 5 seconds to every job for no real reason.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I had a similar comment here #7457 (comment). The sleep should permit the threads to start up and wait for work. I think the bug this is working around was due to the threads not all starting, all work completing, and the process shut down while remaining threads started and wrote to the console. If the threads are no longer writing to the console, except when handling work items and we're confident in our work item synchronization, then maybe it doesn't help.

Another thing that comes to mind is we can probably avoid starting up worker threads if we know we're not going to use them. I wonder if a calculation can be done up front to determine maximum number of worker threads?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All this code is being deleted in about a week, so I wouldn't bother with another PR unless this is critical. I'm pretty sure this sleep is uncessary, but I'd like to avoid toughing this dead-man-walking code any more than is necessary.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, that conversation didn't make it to my inbox for some reason. Oh well, situation... somethinged?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It seems like just deleting the "starting" would have been enough, but a bit of waiting isn't the end of the world.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

All this code is being deleted in about a week, so I wouldn't bother with another PR unless this is critical. I'm pretty sure this sleep is uncessary, but I'd like to avoid toughing this dead-man-walking code any more than is necessary.

I had lots of conversations before you joined, and due to the nature of dependency flow in Arcade It takes a very long time to try one thing, so I'm trying multiple things. Between the amount of deleted logging and the sleep I think we have a very good chance of not dealing with this any more until it's all replaced on 6/10 ("About a week").

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