[Notes] [Git][BuildStream/buildstream][tiagogomes/issue-577] 5 commits: Trying to mitigate a mtime granularity braking the cache tests



Title: GitLab

Tiago Gomes pushed to branch tiagogomes/issue-577 at BuildStream / buildstream

Commits:

7 changed files:

Changes:

  • buildstream/_artifactcache/cascache.py
    ... ... @@ -25,6 +25,7 @@ import signal
    25 25
     import stat
    
    26 26
     import tempfile
    
    27 27
     import uuid
    
    28
    +import errno
    
    28 29
     from urllib.parse import urlparse
    
    29 30
     
    
    30 31
     import grpc
    
    ... ... @@ -82,7 +83,8 @@ class CASCache(ArtifactCache):
    82 83
     
    
    83 84
             tree = self.resolve_ref(ref, update_mtime=True)
    
    84 85
     
    
    85
    -        dest = os.path.join(self.extractdir, element._get_project().name, element.normal_name, tree.hash)
    
    86
    +        dest = os.path.join(self.extractdir, element._get_project().name,
    
    87
    +                            element.normal_name, tree.hash)
    
    86 88
             if os.path.isdir(dest):
    
    87 89
                 # artifact has already been extracted
    
    88 90
                 return dest
    
    ... ... @@ -100,7 +102,7 @@ class CASCache(ArtifactCache):
    100 102
                     #
    
    101 103
                     # If rename fails with these errors, another process beat
    
    102 104
                     # us to it so just ignore.
    
    103
    -                if e.errno not in [os.errno.ENOTEMPTY, os.errno.EEXIST]:
    
    105
    +                if e.errno not in [errno.ENOTEMPTY, errno.EEXIST]:
    
    104 106
                         raise ArtifactError("Failed to extract artifact for ref '{}': {}"
    
    105 107
                                             .format(ref, e)) from e
    
    106 108
     
    

  • doc/examples/autotools/project.conf
    ... ... @@ -10,4 +10,4 @@ element-path: elements
    10 10
     # Define some aliases for the tarballs we download
    
    11 11
     aliases:
    
    12 12
       alpine: https://gnome7.codethink.co.uk/tarballs/
    
    13
    -  gnu: https://ftpmirror.gnu.org/gnu/automake/
    13
    +  gnu: http://ftpmirror.gnu.org/gnu/automake/

  • tests/artifactcache/expiry.py
    1
    +#
    
    2
    +#  Copyright (C) 2018 Codethink Limited
    
    3
    +#
    
    4
    +#  This program is free software; you can redistribute it and/or
    
    5
    +#  modify it under the terms of the GNU Lesser General Public
    
    6
    +#  License as published by the Free Software Foundation; either
    
    7
    +#  version 2 of the License, or (at your option) any later version.
    
    8
    +#
    
    9
    +#  This library is distributed in the hope that it will be useful,
    
    10
    +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    11
    +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    
    12
    +#  Lesser General Public License for more details.
    
    13
    +#
    
    14
    +#  You should have received a copy of the GNU Lesser General Public
    
    15
    +#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
    
    16
    +#
    
    17
    +#  Authors: Tristan Maat <tristan maat codethink co uk>
    
    18
    +#
    
    19
    +
    
    1 20
     import os
    
    2 21
     
    
    3 22
     import pytest
    
    ... ... @@ -5,7 +24,7 @@ import pytest
    5 24
     from buildstream import _yaml
    
    6 25
     from buildstream._exceptions import ErrorDomain, LoadErrorReason
    
    7 26
     
    
    8
    -from tests.testutils import cli, create_element_size
    
    27
    +from tests.testutils import cli, create_element_size, wait_for_cache_granularity
    
    9 28
     
    
    10 29
     
    
    11 30
     DATA_DIR = os.path.join(
    
    ... ... @@ -108,6 +127,8 @@ def test_expiry_order(cli, datafiles, tmpdir):
    108 127
         res = cli.run(project=project, args=['build', 'target2.bst'])
    
    109 128
         res.assert_success()
    
    110 129
     
    
    130
    +    wait_for_cache_granularity()
    
    131
    +
    
    111 132
         # Now extract dep.bst
    
    112 133
         res = cli.run(project=project, args=['checkout', 'dep.bst', checkout])
    
    113 134
         res.assert_success()
    

  • tests/frontend/push.py
    1
    +#
    
    2
    +#  Copyright (C) 2018 Codethink Limited
    
    3
    +#  Copyright (C) 2018 Bloomberg Finance LP
    
    4
    +#
    
    5
    +#  This program is free software; you can redistribute it and/or
    
    6
    +#  modify it under the terms of the GNU Lesser General Public
    
    7
    +#  License as published by the Free Software Foundation; either
    
    8
    +#  version 2 of the License, or (at your option) any later version.
    
    9
    +#
    
    10
    +#  This library is distributed in the hope that it will be useful,
    
    11
    +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    12
    +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    
    13
    +#  Lesser General Public License for more details.
    
    14
    +#
    
    15
    +#  You should have received a copy of the GNU Lesser General Public
    
    16
    +#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
    
    17
    +#
    
    18
    +#  Authors: Tristan Van Berkom <tristan vanberkom codethink co uk>
    
    19
    +#           Sam Thursfield <sam thursfield codethink co uk>
    
    20
    +#           Jürg Billeter <juerg billeter codethink co uk>
    
    21
    +#
    
    22
    +
    
    1 23
     import os
    
    2 24
     import pytest
    
    3 25
     
    
    4 26
     from buildstream._exceptions import ErrorDomain
    
    5 27
     from tests.testutils import cli, create_artifact_share, create_element_size
    
    6
    -from tests.testutils import generate_junction
    
    28
    +from tests.testutils import generate_junction, wait_for_cache_granularity
    
    7 29
     from . import configure_project
    
    8 30
     
    
    9 31
     
    
    ... ... @@ -327,6 +349,8 @@ def test_recently_pulled_artifact_does_not_expire(cli, datafiles, tmpdir):
    327 349
             # Ensure element1 is cached locally
    
    328 350
             assert cli.get_element_state(project, 'element1.bst') == 'cached'
    
    329 351
     
    
    352
    +        wait_for_cache_granularity()
    
    353
    +
    
    330 354
             # Create and build the element3 (of 5 MB)
    
    331 355
             create_element_size('element3.bst', project, element_path, [], int(5e6))
    
    332 356
             result = cli.run(project=project, args=['build', 'element3.bst'])
    

  • tests/frontend/workspace.py
    1
    +#
    
    2
    +#  Copyright (C) 2018 Codethink Limited
    
    3
    +#  Copyright (C) 2018 Bloomberg Finance LP
    
    4
    +#
    
    5
    +#  This program is free software; you can redistribute it and/or
    
    6
    +#  modify it under the terms of the GNU Lesser General Public
    
    7
    +#  License as published by the Free Software Foundation; either
    
    8
    +#  version 2 of the License, or (at your option) any later version.
    
    9
    +#
    
    10
    +#  This library is distributed in the hope that it will be useful,
    
    11
    +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    12
    +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    
    13
    +#  Lesser General Public License for more details.
    
    14
    +#
    
    15
    +#  You should have received a copy of the GNU Lesser General Public
    
    16
    +#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
    
    17
    +#
    
    18
    +#  Authors: Tristan Van Berkom <tristan vanberkom codethink co uk>
    
    19
    +#           Tristan Maat <tristan maat codethink co uk>
    
    20
    +#           Chandan Singh <csingh43 bloomberg net>
    
    21
    +#           Phillip Smyth <phillip smyth codethink co uk>
    
    22
    +#           Jonathan Maw <jonathan maw codethink co uk>
    
    23
    +#           Richard Maw <richard maw codethink co uk>
    
    24
    +#
    
    25
    +
    
    1 26
     import os
    
    2 27
     import pytest
    
    3 28
     import shutil
    
    4 29
     import subprocess
    
    5 30
     from ruamel.yaml.comments import CommentedSet
    
    6
    -from tests.testutils import cli, create_repo, ALL_REPO_KINDS
    
    31
    +from tests.testutils import cli, create_repo, ALL_REPO_KINDS, wait_for_cache_granularity
    
    7 32
     
    
    8 33
     from buildstream import _yaml
    
    9 34
     from buildstream._exceptions import ErrorDomain, LoadError, LoadErrorReason
    
    ... ... @@ -507,6 +532,8 @@ def test_detect_modifications(cli, tmpdir, datafiles, modification, strict):
    507 532
         assert cli.get_element_state(project, element_name) == 'cached'
    
    508 533
         assert cli.get_element_key(project, element_name) != "{:?<64}".format('')
    
    509 534
     
    
    535
    +    wait_for_cache_granularity()
    
    536
    +
    
    510 537
         # Modify the workspace in various different ways, ensuring we
    
    511 538
         # properly detect the changes.
    
    512 539
         #
    

  • tests/testutils/__init__.py
    1
    +#
    
    2
    +#  Copyright (C) 2018 Codethink Limited
    
    3
    +#  Copyright (C) 2018 Bloomberg Finance LP
    
    4
    +#
    
    5
    +#  This program is free software; you can redistribute it and/or
    
    6
    +#  modify it under the terms of the GNU Lesser General Public
    
    7
    +#  License as published by the Free Software Foundation; either
    
    8
    +#  version 2 of the License, or (at your option) any later version.
    
    9
    +#
    
    10
    +#  This library is distributed in the hope that it will be useful,
    
    11
    +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    12
    +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    
    13
    +#  Lesser General Public License for more details.
    
    14
    +#
    
    15
    +#  You should have received a copy of the GNU Lesser General Public
    
    16
    +#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
    
    17
    +#
    
    18
    +#  Authors: Tristan Van Berkom <tristan vanberkom codethink co uk>
    
    19
    +#           Tristan Maat <tristan maat codethink co uk>
    
    20
    +#           Sam Thursfield <sam thursfield codethink co uk>
    
    21
    +#           James Ennis <james ennis codethink co uk>
    
    22
    +#           Valentin David <valentin david codethink co uk>
    
    23
    +#           William Salmon <will salmon codethink co uk>
    
    24
    +#
    
    25
    +
    
    1 26
     from .runcli import cli, cli_integration
    
    2 27
     from .repo import create_repo, ALL_REPO_KINDS
    
    3 28
     from .artifactshare import create_artifact_share
    
    4 29
     from .element_generators import create_element_size
    
    5 30
     from .junction import generate_junction
    
    31
    +from .runner_integration import wait_for_cache_granularity

  • tests/testutils/runner_integration.py
    1
    +#
    
    2
    +#  Copyright (C) 2018 Bloomberg Finance LP
    
    3
    +#
    
    4
    +#  This program is free software; you can redistribute it and/or
    
    5
    +#  modify it under the terms of the GNU Lesser General Public
    
    6
    +#  License as published by the Free Software Foundation; either
    
    7
    +#  version 2 of the License, or (at your option) any later version.
    
    8
    +#
    
    9
    +#  This library is distributed in the hope that it will be useful,
    
    10
    +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    11
    +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    
    12
    +#  Lesser General Public License for more details.
    
    13
    +#
    
    14
    +#  You should have received a copy of the GNU Lesser General Public
    
    15
    +#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
    
    16
    +#
    
    17
    +#  Authors:
    
    18
    +#         Will Salmon <will salmon codethink co uk>
    
    19
    +
    
    20
    +import time
    
    21
    +
    
    22
    +
    
    23
    +def wait_for_cache_granularity():
    
    24
    +    # This isn't called very often so has minimal impact on test runtime.
    
    25
    +    # If this changes it may be worth while adding a more sophisticated approach.
    
    26
    +    """
    
    27
    +    Mitigate the coarse granularity of the gitlab runners mtime
    
    28
    +
    
    29
    +    This function waits for the mtime to increment so that the cache can sort by mtime and
    
    30
    +    get the most recent results.
    
    31
    +    """
    
    32
    +    time.sleep(1.1)



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]