[ 
https://issues.apache.org/jira/browse/BEAM-11476?focusedWorklogId=546323&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-546323
 ]

ASF GitHub Bot logged work on BEAM-11476:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 03/Feb/21 00:07
            Start Date: 03/Feb/21 00:07
    Worklog Time Spent: 10m 
      Work Description: KevinGG commented on pull request #13881:
URL: https://github.com/apache/beam/pull/13881#issuecomment-772102411


   If `cleanup` is invoked more than once, the extra invocation must have come 
from the `ie.new_env()` when the current environment instance is not None. The 
old code patches `cleanup` with the decorator. It seems that when running tests 
on Jenkins, sometimes, even setting `ie._interactive_beam_env = None` 
forcefully wouldn't guarantee the module property is `None` when the subsequent 
statements in the same test method are executed.
   
   In that case, the test should be resilient to global state of 
`ie._interactive_beam_env`. By moving patches inside each test function after 
`ie.new_env()`, the test mock is not affected by whether `ie.new_env()` 
invoking `cleanup` or not. And the assertions can focus on testing the logic 
within each test.
   
   Couldn't reproduce the flakiness locally, but tested with 4 CPU cores 
running concurrently for 100 flake runs:
   ```
   pytest --flake-finder --flake-runs=100 -n 4 
apache_beam/runners/interactive/interactive_environment_test.py
   ```
   ![Screen Shot 2021-02-02 at 4 06 22 
PM](https://user-images.githubusercontent.com/4423149/106678966-9a09ad00-6570-11eb-94d9-e868d387c1b7.png)
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 546323)
    Time Spent: 20m  (was: 10m)

> flaky test: test_track_user_pipeline_cleanup_non_inspectable_pipeline
> ---------------------------------------------------------------------
>
>                 Key: BEAM-11476
>                 URL: https://issues.apache.org/jira/browse/BEAM-11476
>             Project: Beam
>          Issue Type: Bug
>          Components: sdk-py-core
>            Reporter: Udi Meiri
>            Assignee: Ning Kang
>            Priority: P1
>              Labels: currently-failing, flake
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> Test name: 
> apache_beam.runners.interactive.interactive_environment_test.InteractiveEnvironmentTest.test_track_user_pipeline_cleanup_non_inspectable_pipeline
> {code}
> Error Message
> AssertionError: Expected 'cleanup' to not have been called. Called 1 times.
> Stacktrace
> self = 
> <apache_beam.runners.interactive.interactive_environment_test.InteractiveEnvironmentTest
>  testMethod=test_track_user_pipeline_cleanup_non_inspectable_pipeline>
> mocked_cleanup = <MagicMock name='cleanup' id='140386685111432'>
>     @patch(
>         'apache_beam.runners.interactive.interactive_environment'
>         '.InteractiveEnvironment.cleanup')
>     def test_track_user_pipeline_cleanup_non_inspectable_pipeline(
>         self, mocked_cleanup):
>       ie._interactive_beam_env = None
>       ie.new_env()
>       dummy_pipeline_1 = beam.Pipeline()
>       dummy_pipeline_2 = beam.Pipeline()
>       dummy_pipeline_3 = beam.Pipeline()
>       dummy_pipeline_4 = beam.Pipeline()
>       dummy_pcoll = dummy_pipeline_4 | beam.Create([1])
>       dummy_pipeline_5 = beam.Pipeline()
>       dummy_non_inspectable_pipeline = 'dummy'
>       ie.current_env().watch(locals())
>       from apache_beam.runners.interactive.background_caching_job import 
> BackgroundCachingJob
>       ie.current_env().set_background_caching_job(
>           dummy_pipeline_1,
>           BackgroundCachingJob(
>               runner.PipelineResult(runner.PipelineState.DONE), limiters=[]))
>       ie.current_env().set_test_stream_service_controller(dummy_pipeline_2, 
> None)
>       ie.current_env().set_cache_manager(
>           cache.FileBasedCacheManager(), dummy_pipeline_3)
>       ie.current_env().mark_pcollection_computed([dummy_pcoll])
>       ie.current_env().set_cached_source_signature(
>           dummy_non_inspectable_pipeline, None)
>       ie.current_env().set_pipeline_result(
>           dummy_pipeline_5, 
> runner.PipelineResult(runner.PipelineState.RUNNING))
> >     mocked_cleanup.assert_not_called()
> apache_beam/runners/interactive/interactive_environment_test.py:265: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> _mock_self = <MagicMock name='cleanup' id='140386685111432'>
>     def assert_not_called(_mock_self):
>         """assert that the mock was never called.
>         """
>         self = _mock_self
>         if self.call_count != 0:
>             msg = ("Expected '%s' to not have been called. Called %s times." %
>                    (self._mock_name or 'mock', self.call_count))
> >           raise AssertionError(msg)
> E           AssertionError: Expected 'cleanup' to not have been called. 
> Called 1 times.
> /usr/lib/python3.7/unittest/mock.py:792: AssertionError
> {code}
> https://ci-beam.apache.org/job/beam_PreCommit_Python_Cron/3609/
> https://ci-beam.apache.org/job/beam_PreCommit_Python_Cron/3607/
> https://ci-beam.apache.org/job/beam_PreCommit_Python_Cron/3593/



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to