Bug 1181255 - Schedule tsan builds and tests on try. r=jlund
authorChris Manchester <cmanchester@mozilla.com>
Wed, 15 Jul 2015 12:46:29 -0700 (2015-07-15)
changeset 12658 34925337358e336497a3046c7da09ae6fa26073f
parent 12656 def124e9f74de041d0c6bf168aabdea56e6c7c7f
child 12661 14b1bb93fec08740a60617809669f189282765a2
push id9051
push usercmanchester@mozilla.com
push dateWed, 15 Jul 2015 19:46:30 +0000 (2015-07-15)
reviewersjlund
bugs1181255
Bug 1181255 - Schedule tsan builds and tests on try. r=jlund
mozilla-tests/config.py
mozilla/config.py
--- a/mozilla-tests/config.py
+++ b/mozilla-tests/config.py
@@ -92,16 +92,17 @@ setMainFirefoxVersions(BRANCHES)
 
 # Talos
 PLATFORMS = {
     'macosx64': {},
     'win32': {},
     'linux': {},
     'linux64': {},
     'linux64-asan': {},
+    'linux64-tsan': {},
     'linux64-cc': {},
     'win64': {},
 }
 
 PLATFORMS['macosx64']['slave_platforms'] = ['snowleopard', 'mountainlion', 'yosemite']
 PLATFORMS['macosx64']['env_name'] = 'mac-perf'
 PLATFORMS['macosx64']['snowleopard'] = {'name': "Rev4 MacOSX Snow Leopard 10.6"}
 PLATFORMS['macosx64']['mountainlion'] = {'name': "Rev5 MacOSX Mountain Lion 10.8",
@@ -180,16 +181,27 @@ PLATFORMS['linux64-asan']['stage_product
 PLATFORMS['linux64-asan']['mozharness_config'] = {
     'mozharness_python': '/tools/buildbot/bin/python',
     'hg_bin': 'hg',
     'reboot_command': ['/tools/buildbot/bin/python'] + MOZHARNESS_REBOOT_CMD,
     'system_bits': '64',
     'config_file': 'talos/linux_config.py',
 }
 
+PLATFORMS['linux64-tsan']['slave_platforms'] = ['ubuntu64_vm']
+PLATFORMS['linux64-tsan']['ubuntu64_vm'] = {'name': 'Ubuntu TSAN VM 12.04 x64'}
+PLATFORMS['linux64-tsan']['stage_product'] = 'firefox'
+PLATFORMS['linux64-tsan']['mozharness_config'] = {
+    'mozharness_python': '/tools/buildbot/bin/python',
+    'hg_bin': 'hg',
+    'reboot_command': ['/tools/buildbot/bin/python'] + MOZHARNESS_REBOOT_CMD,
+    'system_bits': '64',
+    'config_file': 'talos/linux_config.py',
+}
+
 PLATFORMS['linux64-cc']['slave_platforms'] = ['ubuntu64_vm']
 PLATFORMS['linux64-cc']['ubuntu64_vm'] = {
     'name': 'Ubuntu Code Coverage VM 12.04 x64',
     'build_dir_prefix': 'ubuntu64_vm_cc',
     'scheduler_slave_platform_identifier': 'ubuntu64_vm_cc'
 }
 PLATFORMS['linux64-cc']['stage_product'] = 'firefox'
 PLATFORMS['linux64-cc']['mozharness_config'] = {
@@ -363,16 +375,17 @@ SUITES = {
 
 BRANCH_UNITTEST_VARS = {
     'hghost': 'hg.mozilla.org',
     # turn on platforms as we get them running
     'platforms': {
         'linux': {},
         'linux64': {},
         'linux64-asan': {},
+        'linux64-tsan': {},
         'linux64-cc': {},
         'macosx64': {},
         'win32': {},
         'win64': {},
     },
 }
 
 MOCHITEST_WO_BC = [
@@ -1061,16 +1074,103 @@ PLATFORM_UNITTEST_VARS = {
                     'config_files': ["web_platform_tests/prod_config.py"],
                 },
                 'mozbase': {
                     'config_files': ["unittests/linux_unittest.py"],
                 },
             },
         },
     },
+    'linux64-tsan': {
+        'product_name': 'firefox',
+        'app_name': 'browser',
+        'brand_name': 'Minefield',
+        'builds_before_reboot': 1,
+        'unittest-env': {'DISPLAY': ':0'},
+        'enable_opt_unittests': True,
+        'enable_debug_unittests': False,
+        'ubuntu64-tsan_vm': {
+            'opt_unittest_suites': UNITTEST_SUITES['opt_unittest_suites'][:],
+            'debug_unittest_suites': UNITTEST_SUITES['debug_unittest_suites'][:],
+            'suite_config': {
+                'mochitest': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-push': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-e10s': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-browser-chrome': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-e10s-browser-chrome': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-other': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-devtools-chrome': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-e10s-devtools-chrome': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-gl': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'mochitest-jetpack': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'webapprt-chrome': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'reftest': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'reftest-e10s': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'jsreftest': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'crashtest': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'crashtest-e10s': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'reftest-no-accel': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'xpcshell': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'cppunit': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'marionette': {
+                    'config_files': ["marionette/prod_config.py"],
+                },
+                'jittest': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+                'web-platform-tests': {
+                    'config_files': ["web_platform_tests/prod_config.py"],
+                },
+                'web-platform-tests-reftests': {
+                    'config_files': ["web_platform_tests/prod_config.py"],
+                },
+                'mozbase': {
+                    'config_files': ["unittests/linux_unittest.py"],
+                },
+            },
+        },
+    },
     'linux64-cc': {
         'product_name': 'firefox',
         'app_name': 'browser',
         'brand_name': 'Minefield',
         'builds_before_reboot': 1,
         'unittest-env': {'DISPLAY': ':0'},
         'enable_opt_unittests': True,
         'enable_debug_unittests': False,
@@ -2191,17 +2291,17 @@ for platform in PLATFORMS.keys():
                 continue
             if platform in BRANCHES[name]['platforms']:
                 if slave_platform in BRANCHES[name]['platforms'][platform]:
                     BRANCHES[name]['platforms'][platform][slave_platform]['opt_unittest_suites'] += LUCIDDREAM[:]
 
 # Enable jittests on trunk trees https://bugzilla.mozilla.org/show_bug.cgi?id=973900
 for p in PLATFORMS.keys():
     # run in chunks on linux only
-    if p in ['linux', 'linux64', 'linux64-asan', 'linux64-cc']:
+    if p in ['linux', 'linux64', 'linux64-asan', 'linux64-cc', 'linux64-tsan']:
         jittests = JITTEST_CHUNKED
     else:
         jittests = JITTEST
 
     for _, branch in items_at_least(BRANCHES, 'gecko_version', 31):
         for sp in PLATFORMS[p]['slave_platforms']:
 
             # See Bug 997946 - skip these on OS X 10.8 due to limited capacity
@@ -2371,17 +2471,17 @@ for branch in BRANCHES.keys():
             if tests_key in BRANCHES[branch]:
                 tests = list(BRANCHES[branch]['%s_tests' % s])
                 tests[3] = [x for x in tests[3] if x not in platforms_for_os or x in enabled_platforms_for_os]
                 BRANCHES[branch]['%s_tests' % s] = tuple(tests)
 
 # Versioned b2g branches shouldn't run mochitest-browser-chrome on linux debug builds
 for name in [x for x in BRANCHES.keys() if x.startswith('mozilla-b2g')]:
     branch = BRANCHES[name]
-    for platform in ('linux', 'linux64', 'linux64-asan', 'linux64-cc'):
+    for platform in ('linux', 'linux64', 'linux64-asan', 'linux64-cc', 'linux64-tsan'):
         for slave_platform in PLATFORMS[platform]['slave_platforms']:
             if platform in branch['platforms'] and slave_platform in branch['platforms'][platform]:
                 for chunked_bc in MOCHITEST_BC_3:
                     if chunked_bc in branch['platforms'][platform][slave_platform]['debug_unittest_suites']:
                         branch['platforms'][platform][slave_platform]['debug_unittest_suites'].remove(chunked_bc)
 
 
 # remove mochitest-browser-chrome and mochitest-devtools-chrome
@@ -2398,21 +2498,21 @@ for name in [x for x in BRANCHES.keys() 
                             if (component[0] == 'mochitest-browser-chrome' or
                                 component[0] == 'mochitest-devtools-chrome'):
                                 unit_tests[element].remove(component)
             except TypeError:
                 # not an iterable,
                 pass
 
 
-# Disable Linux64-cc in every branch except try
+# Disable Linux64-cc and linux64-tsan in every branch except try
 for name in BRANCHES.keys():
     if name in ('try',):
         continue
-    for platform in ('linux64-cc',):
+    for platform in ('linux64-cc', 'linux64-tsan'):
         if platform in BRANCHES[name]['platforms']:
             del BRANCHES[name]['platforms'][platform]
 
 # Mac OSX signing changes in gecko 34 - bug 1117637, bug 1047584
 for name, branch in items_before(BRANCHES, 'gecko_version', 34):
   if 'macosx64' in BRANCHES[name]['platforms']:
     BRANCHES[name]['platforms']['macosx64']['mac_res_subdir'] = 'MacOS'
 
--- a/mozilla/config.py
+++ b/mozilla/config.py
@@ -464,16 +464,116 @@ PLATFORM_VARS = {
                 ('/builds/google-oauth-api.key', '/builds/google-oauth-api.key'),
                 ('/builds/mozilla-desktop-geoloc-api.key', '/builds/mozilla-desktop-geoloc-api.key'),
                 ('/builds/crash-stats-api.token', '/builds/crash-stats-api.token'),
             ],
             # The status of this build doesn't affect the last good revision
             # algorithm for nightlies
             'consider_for_nightly': False,
         },
+        'linux64-tsan': {
+            'mozharness_python': '/tools/buildbot/bin/python',
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+            'mozharness_desktop_build': {
+                'script_name': 'scripts/fx_desktop_build.py',
+                'extra_args': [
+                    '--config', 'builds/releng_base_linux_64_builds.py',
+                    '--custom-build-variant-cfg', 'tsan',
+                    '--config', GLOBAL_VARS['mozharness_configs']['balrog'],
+                ],
+                'script_timeout': 3 * 3600,
+                'script_maxtime': int(5.5 * 3600),
+            },
+
+            'product_name': 'firefox',
+            'unittest_platform': 'linux64-tsan',
+            'app_name': 'browser',
+            'brand_name': 'Minefield',
+            'base_name': 'Linux x86-64 %(branch)s tsan',
+            'mozconfig': 'in_tree',
+            'src_mozconfig': 'browser/config/mozconfigs/linux64/opt-tsan',
+            'enable_xulrunner': False,
+            'profiled_build': False,
+            'builds_before_reboot': localconfig.BUILDS_BEFORE_REBOOT,
+            'build_space': 12,
+            'upload_symbols': False,
+            'try_by_default': False,
+            'download_symbols': False,
+            'packageTests': True,
+            'slaves': SLAVES['mock'],
+            'platform_objdir': OBJDIR,
+            'stage_product': 'firefox',
+            'stage_platform': 'linux64-tsan',
+            'update_platform': 'Linux_x86_64-gcc3',
+            'enable_ccache': True,
+            'enable_shared_checkouts': True,
+            'env': {
+                'DISPLAY': ':2',
+                'HG_SHARE_BASE_DIR': '/builds/hg-shared',
+                'TOOLTOOL_CACHE': '/builds/tooltool_cache',
+                'TOOLTOOL_HOME': '/builds',
+                'MOZ_OBJDIR': OBJDIR,
+                'SYMBOL_SERVER_HOST': localconfig.SYMBOL_SERVER_HOST,
+                'SYMBOL_SERVER_USER': 'ffxbld',
+                'SYMBOL_SERVER_PATH': SYMBOL_SERVER_PATH,
+                'POST_SYMBOL_UPLOAD_CMD': SYMBOL_SERVER_POST_UPLOAD_CMD,
+                'SYMBOL_SERVER_SSH_KEY': "/home/mock_mozilla/.ssh/ffxbld_rsa",
+                'MOZ_SYMBOLS_EXTRA_BUILDID': 'linux64-tsan',
+                'CCACHE_DIR': '/builds/ccache',
+                'CCACHE_COMPRESS': '1',
+                'CCACHE_UMASK': '002',
+                'LC_ALL': 'C',
+                'PATH': '/tools/buildbot/bin:/usr/local/bin:/usr/lib64/ccache:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:/tools/python27-mercurial/bin:/home/cltbld/bin',
+            },
+            'enable_opt_unittests': True,
+            'enable_checktests': True,
+            'enable_build_analysis': False,
+            'updates_enabled': False,
+            'create_partial': False,
+            'test_pretty_names': False,
+            'l10n_check_test': False,
+            'tooltool_manifest_src': 'browser/config/tooltool-manifests/linux64/tsan.manifest',
+            'use_mock': True,
+            'mock_target': 'mozilla-centos6-x86_64',
+            'mock_packages': \
+                       ['autoconf213', 'python', 'zip', 'mozilla-python27-mercurial', 'git', 'ccache',
+                        'glibc-static', 'libstdc++-static', 'perl-Test-Simple', 'perl-Config-General',
+                        'gtk2-devel', 'libnotify-devel', 'yasm',
+                        'alsa-lib-devel', 'libcurl-devel',
+                        'wireless-tools-devel', 'libX11-devel',
+                        'libXt-devel', 'mesa-libGL-devel',
+                        'gnome-vfs2-devel', 'GConf2-devel', 'wget',
+                        'mpfr', # required for system compiler
+                        'xorg-x11-font*', # fonts required for PGO
+                        'imake', # required for makedepend!?!
+                        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1', 'yasm', 'ccache', # <-- from releng repo
+                        'valgrind',
+                        'pulseaudio-libs-devel',
+                        'gstreamer-devel', 'gstreamer-plugins-base-devel',
+                        'freetype-2.3.11-6.el6_1.8.x86_64',
+                        'freetype-devel-2.3.11-6.el6_1.8.x86_64',
+                        ],
+            'mock_copyin_files': [
+                ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
+                ('/home/cltbld/.hgrc', '/builds/.hgrc'),
+                ('/home/cltbld/.boto', '/builds/.boto'),
+                ('/builds/gapi.data', '/builds/gapi.data'),
+                ('/builds/google-oauth-api.key', '/builds/google-oauth-api.key'),
+                ('/builds/mozilla-desktop-geoloc-api.key', '/builds/mozilla-desktop-geoloc-api.key'),
+                ('/builds/crash-stats-api.token', '/builds/crash-stats-api.token'),
+            ],
+            # The status of this build doesn't affect the last good revision
+            # algorithm for nightlies
+            'consider_for_nightly': False,
+        },
         'linux64-asan-debug': {
             'mozharness_python': '/tools/buildbot/bin/python',
             'reboot_command': [
                 '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
                 '-f', '../reboot_count.txt', '-n', '1', '-z'
             ],
             'mozharness_repo_cache': '/tools/checkouts/mozharness',
             'tools_repo_cache': '/tools/checkouts/build-tools',
@@ -2268,16 +2368,17 @@ BRANCHES = {
     },
     'try': {
         'branch_projects': ['spidermonkey_try'],
         # The following platforms are not part of the default set,
         # so only run on Try.
         'extra_platforms': {
             'linux64-sh-haz': {},
             'linux64-cc': {},
+            'linux64-tsan': {},
         },
     },
 }
 
 setMainFirefoxVersions(BRANCHES)
 
 # Copy project branches into BRANCHES keys
 for branch in ACTIVE_PROJECT_BRANCHES:
@@ -2783,16 +2884,17 @@ BRANCHES['try']['platforms']['win32']['s
 BRANCHES['try']['platforms']['win64']['slaves'] = TRY_SLAVES['win64-rev2']
 BRANCHES['try']['platforms']['win64-debug']['slaves'] = TRY_SLAVES['win64-rev2']
 BRANCHES['try']['platforms']['macosx64']['slaves'] = TRY_SLAVES['macosx64-lion']
 BRANCHES['try']['platforms']['linux-debug']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['linux64-debug']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['linux64-asan']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['linux64-asan-debug']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['linux64-st-an-debug']['slaves'] = TRY_SLAVES['mock']
+BRANCHES['try']['platforms']['linux64-tsan']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['linux64-sh-haz']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['linux64-br-haz']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['linux64-cc']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['win32-debug']['slaves'] = TRY_SLAVES['win64-rev2']
 BRANCHES['try']['platforms']['macosx64-debug']['slaves'] = TRY_SLAVES['macosx64-lion']
 BRANCHES['try']['platforms']['macosx64-st-an-debug']['slaves'] = TRY_SLAVES['macosx64-lion']
 BRANCHES['try']['platforms']['android']['slaves'] = TRY_SLAVES['mock']
 BRANCHES['try']['platforms']['android-api-9']['slaves'] = TRY_SLAVES['mock']