scr: new release and dependency updates (#23378)
SCR moved to a component version some time ago, but never had a release associated with these changes. SCR v2 is a legacy version that is no longer being developed/supported. In preparation for an upcoming SCR v3 release, there is now a 3.0rc1 release available to users. This adds the 3.0rc1 release to the spack package and deprecates the older versions. Additional changes include: - Enforce using the main branches of the components when installing scr@develop - Enforce SCR v3 uses at least the recently released versions of each of the components - Use a simple `detect_scheduler()` function in an attempt to be smarter about setting the default resource manager and not require users to always manually provide the variant - Add/update variants that were recently added to AXL and KVTree components - Fix cmake arg naming bug of setting `SCR_CONFIG_FILE` - `SCR_ASYNC_API` is now being handled by a component and is only needed by the legacy versions.
This commit is contained in:
parent
6394604d0a
commit
88b30090ef
1 changed files with 43 additions and 22 deletions
|
@ -11,6 +11,14 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def detect_scheduler():
|
||||||
|
if which('aprun'):
|
||||||
|
return 'APRUN'
|
||||||
|
if which('jsrun'):
|
||||||
|
return 'LSF'
|
||||||
|
return 'SLURM'
|
||||||
|
|
||||||
|
|
||||||
class Scr(CMakePackage):
|
class Scr(CMakePackage):
|
||||||
"""SCR caches checkpoint data in storage on the compute nodes of a
|
"""SCR caches checkpoint data in storage on the compute nodes of a
|
||||||
Linux cluster to provide a fast, scalable checkpoint/restart
|
Linux cluster to provide a fast, scalable checkpoint/restart
|
||||||
|
@ -21,33 +29,36 @@ class Scr(CMakePackage):
|
||||||
git = "https://github.com/llnl/scr.git"
|
git = "https://github.com/llnl/scr.git"
|
||||||
|
|
||||||
version('develop', branch='develop')
|
version('develop', branch='develop')
|
||||||
version('legacy', branch='legacy')
|
version('legacy', branch='legacy', deprecated=True)
|
||||||
|
|
||||||
version('2.0.0', sha256='471978ae0afb56a20847d3989b994fbd680d1dea21e77a5a46a964b6e3deed6b')
|
version('3.0rc1', sha256='bd31548a986f050024429d8ee3644eb135f047f98a3d503a40c5bd4a85291308')
|
||||||
version('1.2.2', sha256='764a85638a9e8762667ec1f39fa5f7da7496fca78de379a22198607b3e027847')
|
version('2.0.0', sha256='471978ae0afb56a20847d3989b994fbd680d1dea21e77a5a46a964b6e3deed6b', deprecated=True)
|
||||||
version('1.2.1', sha256='23acab2dc7203e9514455a5168f2fd57bc590affb7a1876912b58201513628fe')
|
version('1.2.2', sha256='764a85638a9e8762667ec1f39fa5f7da7496fca78de379a22198607b3e027847', deprecated=True)
|
||||||
version('1.2.0', sha256='e3338ab2fa6e9332d2326c59092b584949a083a876adf5a19d4d5c7a1bbae047')
|
version('1.2.1', sha256='23acab2dc7203e9514455a5168f2fd57bc590affb7a1876912b58201513628fe', deprecated=True)
|
||||||
|
version('1.2.0', sha256='e3338ab2fa6e9332d2326c59092b584949a083a876adf5a19d4d5c7a1bbae047', deprecated=True)
|
||||||
|
|
||||||
depends_on('pdsh+static_modules', type=('build', 'run'))
|
depends_on('pdsh+static_modules', type=('build', 'run'))
|
||||||
depends_on('zlib')
|
depends_on('zlib')
|
||||||
depends_on('mpi')
|
depends_on('mpi')
|
||||||
|
|
||||||
# As of mid-2020, develop requires the "master" branch
|
# Use the latest iteration of the components when installing scr@develop
|
||||||
# of a few component libraries
|
|
||||||
depends_on('axl@master', when="@develop")
|
depends_on('axl@master', when="@develop")
|
||||||
depends_on('kvtree@master', when="@develop")
|
|
||||||
depends_on('redset@master', when="@develop")
|
|
||||||
depends_on('er@master', when="@develop")
|
depends_on('er@master', when="@develop")
|
||||||
|
depends_on('kvtree@master', when="@develop")
|
||||||
depends_on('rankstr@master', when="@develop")
|
depends_on('rankstr@master', when="@develop")
|
||||||
|
depends_on('redset@master', when="@develop")
|
||||||
depends_on('shuffile@master', when="@develop")
|
depends_on('shuffile@master', when="@develop")
|
||||||
|
depends_on('spath@master', when="@develop")
|
||||||
|
|
||||||
# SCR legacy is anything 2.x.x or earlier
|
# SCR legacy is anything 2.x.x or earlier
|
||||||
# SCR components is anything 3.x.x or later
|
# SCR components is anything 3.x.x or later
|
||||||
depends_on('er', when="@3:")
|
depends_on('axl@0.4.0:', when="@3:")
|
||||||
depends_on('kvtree', when="@3:")
|
depends_on('er@0.0.4:', when="@3:")
|
||||||
depends_on('rankstr', when="@3:")
|
depends_on('kvtree@1.1.1:', when="@3:")
|
||||||
depends_on('filo', when="@3")
|
depends_on('rankstr@0.0.3:', when="@3:")
|
||||||
depends_on('spath', when="@3:")
|
depends_on('redset@0.0.5:', when="@3:")
|
||||||
|
depends_on('shuffile@0.0.4:', when="@3:")
|
||||||
|
depends_on('spath@0.0.2:', when="@3:")
|
||||||
|
|
||||||
# DTCMP is an optional dependency up until 3.x
|
# DTCMP is an optional dependency up until 3.x
|
||||||
variant('dtcmp', default=True,
|
variant('dtcmp', default=True,
|
||||||
|
@ -65,7 +76,7 @@ class Scr(CMakePackage):
|
||||||
depends_on('libyogrt scheduler=lsf', when="+libyogrt resource_manager=LSF")
|
depends_on('libyogrt scheduler=lsf', when="+libyogrt resource_manager=LSF")
|
||||||
depends_on('libyogrt', when="+libyogrt")
|
depends_on('libyogrt', when="+libyogrt")
|
||||||
|
|
||||||
# MySQL not yet in spack
|
# Enabling SCR logging is a WIP, for which this will be needed
|
||||||
# variant('mysql', default=True, decription="MySQL database for logging")
|
# variant('mysql', default=True, decription="MySQL database for logging")
|
||||||
# depends_on('mysql', when="+mysql")
|
# depends_on('mysql', when="+mysql")
|
||||||
|
|
||||||
|
@ -79,20 +90,29 @@ class Scr(CMakePackage):
|
||||||
variant('fortran', default=True,
|
variant('fortran', default=True,
|
||||||
description="Build SCR with fortran bindings")
|
description="Build SCR with fortran bindings")
|
||||||
|
|
||||||
variant('resource_manager', default='SLURM',
|
variant('resource_manager', default=detect_scheduler(),
|
||||||
values=('SLURM', 'APRUN', 'PMIX', 'LSF', 'NONE'),
|
values=('SLURM', 'APRUN', 'PMIX', 'LSF', 'NONE'),
|
||||||
multi=False,
|
multi=False,
|
||||||
description="Resource manager for which to configure SCR.")
|
description="Resource manager for which to configure SCR.")
|
||||||
|
|
||||||
|
# SCR_ASYNC_API in process of being automated. Only applying this to :2.x.x
|
||||||
variant('async_api', default='NONE',
|
variant('async_api', default='NONE',
|
||||||
values=('NONE', 'CRAY_DW', 'IBM_BBAPI', 'INTEL_CPPR'),
|
values=('NONE', 'CRAY_DW', 'IBM_BBAPI', 'INTEL_CPPR'),
|
||||||
multi=False,
|
multi=False,
|
||||||
description="Asynchronous data transfer API to use with SCR.")
|
description="Asynchronous data transfer API to use with SCR.")
|
||||||
|
|
||||||
|
variant('bbapi_fallback', default='False',
|
||||||
|
description='Using BBAPI, if source or destination don\'t support \
|
||||||
|
file extents then fallback to pthreads')
|
||||||
|
depends_on('axl+bbapi_fallback', when="@3: +bbapi_fallback")
|
||||||
|
|
||||||
variant('file_lock', default='FLOCK',
|
variant('file_lock', default='FLOCK',
|
||||||
values=('FLOCK', 'FNCTL', 'NONE'),
|
values=('FLOCK', 'FNCTL', 'NONE'),
|
||||||
multi=False,
|
multi=False,
|
||||||
description='File locking style for SCR.')
|
description='File locking style for SCR.')
|
||||||
|
depends_on('kvtree file_lock=FLOCK', when='@3: file_lock=FLOCK')
|
||||||
|
depends_on('kvtree file_lock=FNCTL', when='@3: file_lock=FNCTL')
|
||||||
|
depends_on('kvtree file_lock=NONE', when='@3: file_lock=NONE')
|
||||||
|
|
||||||
# The default cache and control directories should be placed in tmpfs if available.
|
# The default cache and control directories should be placed in tmpfs if available.
|
||||||
# On Linux, /dev/shm is a common tmpfs location. Other platforms, like macOS,
|
# On Linux, /dev/shm is a common tmpfs location. Other platforms, like macOS,
|
||||||
|
@ -121,12 +141,13 @@ def cmake_args(self):
|
||||||
|
|
||||||
conf_path = self.get_abs_path_rel_prefix(
|
conf_path = self.get_abs_path_rel_prefix(
|
||||||
self.spec.variants['scr_config'].value)
|
self.spec.variants['scr_config'].value)
|
||||||
args.append('-DCMAKE_SCR_CONFIG_FILE={0}'.format(conf_path))
|
args.append('-DSCR_CONFIG_FILE={0}'.format(conf_path))
|
||||||
|
|
||||||
# We uppercase the values for these to avoid unnecessary user error.
|
# We uppercase the values for these to avoid unnecessary user error.
|
||||||
args.append('-DSCR_RESOURCE_MANAGER={0}'.format(
|
args.append('-DSCR_RESOURCE_MANAGER={0}'.format(
|
||||||
spec.variants['resource_manager'].value.upper()))
|
spec.variants['resource_manager'].value.upper()))
|
||||||
|
|
||||||
|
if spec.satisfies('@:2.999'):
|
||||||
args.append('-DSCR_ASYNC_API={0}'.format(
|
args.append('-DSCR_ASYNC_API={0}'.format(
|
||||||
spec.variants['async_api'].value.upper()))
|
spec.variants['async_api'].value.upper()))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue