Fix issue when running shards on Android (#1853) #1998
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.
Proposed changes
maestro/maestro-client/src/main/java/maestro/drivers/AndroidDriver.kt
Lines 180 to 182 in 53e31b4
The issue seems to originate in the simultaneous call to
blockingStubWithTimeout.deviceInfo
inAndroidDriver#deviceInfo()
fromMaestro#deviceInfo()
which causes the following error:Stacktrace "java.net.ConnectException: Connection refused"
Even though
cachedDeviceConfig
islazy
which means it's synchronized, it seems that the issue happens because all the calls come from on same thread.maestro/maestro-client/src/main/java/maestro/Maestro.kt
Lines 46 to 48 in f9f4cc8
I added a semaphore in
AndroidDevice#runDeviceCall
to ensure it can only be called once at a time.maestro/maestro-client/src/main/java/maestro/drivers/AndroidDriver.kt
Lines 1065 to 1067 in 95ee50b
This seems to have fixed the issue. From now on, calls to
runDeviceCall
will not happen synchronously.Testing
Thread.sleep
and rebuildingmaestro test --shards 2 flows/
with a folder with around 7 successful flowsIssues fixed
Linked #1867
Fixes #1853