Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
294 commits
Select commit Hold shift + click to select a range
41ecc48
fix(FAM): bug in FamName path parsing
mcakircali Jun 12, 2024
b7f07d1
refactor(FAM): cosmetic
mcakircali Jun 12, 2024
783773c
test(FAM): added more region and object API stuff
mcakircali Jun 12, 2024
149e929
Merge branch 'develop' into feature/backend-openfam
mcakircali Jun 12, 2024
2fcedb3
feat(Exceptions): added OutOfStorage exception
mcakircali Jun 13, 2024
07d6e0c
test(FAM): added more object tests
mcakircali Jun 13, 2024
a7a6557
feat(FAM): added version to FamNode header
mcakircali Jun 13, 2024
516e5eb
fix(FAM): added missing find_package in CMakeLists
mcakircali Jun 13, 2024
d1c4d69
style(FAM): cosmetic
mcakircali Jun 13, 2024
5808cbf
Merge branch 'develop' into feature/backend-openfam
mcakircali Jun 13, 2024
774ec73
feat(FAM): added FamNamePath
mcakircali Jun 14, 2024
7425645
test(FAM): ctor URI and Name
mcakircali Jun 14, 2024
e0af456
feat(URI): added Endpoint getter
mcakircali Jun 15, 2024
42b7708
feat(FAM): API for FamNamePath from URI and cleanup
mcakircali Jun 15, 2024
66ec025
test(FAM): fixes API
mcakircali Jun 15, 2024
0e89adc
feat(URI): extended ctor for Endpoint
mcakircali Jun 17, 2024
c80c033
feat(FAM): moved FamPath to seperate source
mcakircali Jun 17, 2024
1726e51
test(FAM): fixed API changes
mcakircali Jun 17, 2024
6eb6b86
test(FAM): added FamPath tests
mcakircali Jun 17, 2024
398b43d
feat(cmake): added FindLibUUID
mcakircali Jun 17, 2024
2645f4b
feat(FAM): generate UUID V5
mcakircali Jun 17, 2024
d3ded3b
fix(FAM): FamHandle API
mcakircali Jun 17, 2024
615619d
feat(FAM): FamName with endpoint member
mcakircali Jul 2, 2024
d64aa53
feat(FAM): small changes to FamName and FamPath
mcakircali Jul 2, 2024
f4fc2aa
fix(FAM): added metadata server exception
mcakircali Jul 5, 2024
65bbbee
feat(FAM): make FamName abstract
mcakircali Jul 5, 2024
b24cdac
feat(FAM): added FamRegionName
mcakircali Jul 5, 2024
e74667e
feat(FAM): added FamObjectName
mcakircali Jul 5, 2024
09526be
fix(FAM): use FamObjectName in FamHandle
mcakircali Jul 5, 2024
8753c73
fix(FAM): use FamObjectName in FamURIManager
mcakircali Jul 5, 2024
1937926
test(FAM): refactor after FamName changes
mcakircali Jul 5, 2024
00d8f3d
Merge branch 'develop' into feature/backend-openfam
mcakircali Jul 5, 2024
9fd48e6
fix(FAM): FamName API
mcakircali Jul 5, 2024
d335320
fix(FAM): cleanup
mcakircali Jul 5, 2024
21cf1ad
feat(FAM): added ctor for FamPath
mcakircali Jul 5, 2024
597ff39
test(FAM): added Name stuff and fixes
mcakircali Jul 5, 2024
57749e0
feat(FAM): get object from region
mcakircali Jul 6, 2024
bf89030
feat(FAM): static uuid method
mcakircali Jul 6, 2024
c9f3e0c
feat(FAM): added object uuid method
mcakircali Jul 6, 2024
5554942
feat(FAM): added uri belongs method
mcakircali Jul 6, 2024
8f4ece7
test(Buffer): fix null check
mcakircali Jul 6, 2024
43aa461
Merge branch 'develop' into feature/backend-openfam
mcakircali Jun 25, 2025
afb3514
fix format
mcakircali Jun 25, 2025
2967c0d
Merge branch 'develop' into feature/backend-openfam
mcakircali Jun 26, 2025
b3d6599
fix libuuid cmake
mcakircali Jun 26, 2025
2a8dfdb
fix(FAM): cmake option
mcakircali Jun 27, 2025
e9c8e74
fix(FAM): includes FamList
mcakircali Jun 27, 2025
cb288c3
fix(FAM): includes FamSession
mcakircali Jun 27, 2025
36978cd
fix(FAM): includes
mcakircali Jun 27, 2025
a49d8f8
fix(FAM): exceptions
mcakircali Jun 27, 2025
63f2616
feat(FAM): added Stream API to FamName
mcakircali Jul 16, 2024
618252f
feat(FAM): added Stream API to FamPath
mcakircali Jul 16, 2024
6822172
fix(FAM): name and path
mcakircali Jun 27, 2025
be3d4e0
fix(FAM): assert handle obj
mcakircali Jul 16, 2024
03f5804
feat(FAM): added uriBelongs to FamRegionName
mcakircali Jul 16, 2024
ae87385
feat(FAM): added buffer() to ObjectName
mcakircali Jul 16, 2024
f71c8e4
test(FAM): API fixes
mcakircali Jul 16, 2024
e0a3c81
feat(FAM): added FamMap (WIP)
mcakircali Oct 30, 2024
64b2055
fix(FAM): Fam_Descriptor_Status issue
mcakircali Nov 6, 2024
1e7db17
fix(FAM): nothrow get session
mcakircali Nov 10, 2024
6b67b1b
feat(FAM): add string support for property
mcakircali Nov 10, 2024
0065db5
fix(FAM): format
mcakircali Jun 27, 2025
3736534
ECKIT-635: add debug log
mcakircali Jul 1, 2025
8c46a9a
ECKIT-635: test includes
mcakircali Jul 1, 2025
a510ff5
ECKIT-635: fix fam include
mcakircali Jul 2, 2025
1466241
ECKIT-635: fix fam test
mcakircali Jul 2, 2025
9c4136a
ECKIT-635: add perm level
mcakircali Jul 2, 2025
792919c
ECKIT-635: fix test
mcakircali Jul 2, 2025
c48544c
ECKIT-635: cleanup
mcakircali Jul 2, 2025
f2c8e43
ECKIT-635: cleanup fam test
mcakircali Jul 2, 2025
2a877e3
ECKIT-635: fix fam map
mcakircali Jul 2, 2025
86351fd
ECKIT-635: fix fam region name
mcakircali Jul 2, 2025
bd54d22
ECKIT-635: fix fam list includes
mcakircali Jul 2, 2025
0e85346
ECKIT-635: fam session
mcakircali Jul 2, 2025
7df9d13
ECKIT-635: fam session to manager
mcakircali Jul 2, 2025
e7934fb
ECKIT-635: reorg fam session manager
mcakircali Jul 2, 2025
6aab8db
ECKIT-635: clean fam region
mcakircali Jul 2, 2025
a4f6485
ECKIT-635: clean fam region test
mcakircali Jul 2, 2025
be57038
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Jul 2, 2025
92f4e52
ECKIT-635: fix api
mcakircali Jul 2, 2025
4534d29
fix(cmake): bump min ecbuild version
mcakircali Jul 2, 2025
47258aa
Merge branch 'fix/min-ecbuild-version' into feature/ECKIT-635_fam-bac…
mcakircali Jul 2, 2025
023a26b
ECKIT-635: fam region dtor
mcakircali Jul 2, 2025
d90d76e
ECKIT-635: fam handle
mcakircali Jul 2, 2025
354f90e
ECKIT-635: remove ptr fam object
mcakircali Jul 2, 2025
f46d945
ECKIT-635: fix fam text
mcakircali Jul 2, 2025
0255014
ECKIT-635: cleanup fam session
mcakircali Jul 2, 2025
c3b6af2
Merge branch 'fix/cmake-syntax-issue' into feature/ECKIT-635_fam-back…
mcakircali Jul 2, 2025
28dcb94
ECKIT-635: fix leak fam session
mcakircali Jul 2, 2025
455112c
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Jul 3, 2025
1e25ef3
ECKIT-635: cleanup fam object name
mcakircali Jul 3, 2025
5f43e70
ECKIT-635: fix magic number fam property
mcakircali Jul 3, 2025
240a79d
ECKIT-635: rule of five for FamName
mcakircali Jul 3, 2025
424213f
ECKIT-635: FamName param case
mcakircali Jul 3, 2025
05f1ea7
ECKIT-635: fix fam hash table
mcakircali Jul 7, 2025
47e2704
ECKIT-635: param case
mcakircali Jul 7, 2025
556090b
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Jul 9, 2025
400e330
ECKIT-635: include
mcakircali Jul 9, 2025
a56d42b
FDB-537 famobejctname and famurimanager
mcakircali Aug 18, 2025
3a60716
wip fam map
mcakircali Aug 18, 2025
3e3c988
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Aug 18, 2025
5907c2b
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Aug 27, 2025
a25ad0a
Merge branch 'develop' into project/opencube-m34
mcakircali Aug 27, 2025
a750c09
fix(FAM): read size length
mcakircali Sep 3, 2025
6682755
Merge branch 'develop' into project/opencube-m34
mcakircali Oct 1, 2025
40fc4e8
Merge branch 'develop' into project/opencube-map
mcakircali Feb 24, 2026
710bfb5
Merge branch 'develop' into project/opencube-map
mcakircali Feb 24, 2026
c7a8de0
fix(FAM): FamPath uuid
mcakircali Mar 3, 2026
db6535d
fix(FAM): tests
mcakircali Mar 3, 2026
c12e6c1
fix(FAM): FamName api
mcakircali Mar 3, 2026
ce9a377
Merge branch 'develop' into project/opencube-map
mcakircali Mar 3, 2026
bc7ed58
fix(FAM): FamObject move only
mcakircali Mar 4, 2026
6c6c9ba
fix(FAM): iterator never set to invalid=false
mcakircali Mar 4, 2026
a221db1
fix(FAM): map ctor rules
mcakircali Mar 4, 2026
6faa482
fix(FAM): list::front/back asserts empty
mcakircali Mar 4, 2026
8fd0b81
refactor(FAM): list iter
mcakircali Mar 4, 2026
39bb2dd
fix(FAM): tests
mcakircali Mar 4, 2026
3b930a2
feat(FAM): list helpers
mcakircali Mar 4, 2026
9aaba96
feat(FAM): fam object value type
mcakircali Mar 4, 2026
924d1da
test(FAM): add more list
mcakircali Mar 4, 2026
1fb55b1
feat(FAM): session mutex and cleanup
mcakircali Mar 5, 2026
2b7194e
fix(FAM): sessions
mcakircali Mar 6, 2026
81c7ac6
fix(FAM): session cleanup
mcakircali Mar 6, 2026
e7a0007
chore(FAM): test accessor
mcakircali Mar 6, 2026
66b67cc
refactor(FAM): FamSession -> Session
mcakircali Mar 6, 2026
69d1da8
refactor(FAM): FamSession
mcakircali Mar 6, 2026
9ccb7cb
refactor(FAM): trailing return
mcakircali Mar 6, 2026
e64b136
feat(fam): implement FamList pop operations and tests
mcakircali Mar 6, 2026
00de9c9
feat(fam): add erase FamList
mcakircali Mar 9, 2026
7d6b447
feat(fam): cleanup
mcakircali Mar 9, 2026
81d0fb1
feat(fam): lock-free list
mcakircali Mar 9, 2026
c9488c9
feat(fam): add more list api
mcakircali Mar 12, 2026
1e7779f
feat(fam): implement map
mcakircali Mar 12, 2026
c7b00d1
feat(fam): add map entry type
mcakircali Mar 12, 2026
f78cb5f
feat(fam): implement map iterators
mcakircali Mar 12, 2026
4cbeb55
fix(fam): list test
mcakircali Mar 12, 2026
e85d1b2
test(fam): add map
mcakircali Mar 12, 2026
6665bc8
feat(fam): template map
mcakircali Mar 12, 2026
f576ba1
test(fam): add map64 type
mcakircali Mar 12, 2026
e8b7149
doc(fam): map
mcakircali Mar 12, 2026
0edc3c6
feat(fam): cleanup
mcakircali Mar 12, 2026
c3f1664
feat(fam): predef map sizes
mcakircali Mar 13, 2026
903f797
Merge branch 'feature/fam-map' into feature/ECKIT-635_fam-backend-map
mcakircali Mar 16, 2026
872c481
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Mar 16, 2026
6037432
feat(fam): table suffix and uriBelogns
mcakircali Mar 17, 2026
1d59939
feat(fam): cmake openfam mock
mcakircali Mar 19, 2026
168c7b0
feat(fam): add openfam mock exception
mcakircali Mar 19, 2026
edd4b51
feat(fam): add openfam mock
mcakircali Mar 19, 2026
27ee1c8
feat(fam): mock via shared memory
mcakircali Mar 21, 2026
6c69137
refactor(fam): simplify
mcakircali Mar 21, 2026
85c8eed
fix(fam): __ATOMIC_RELEASE
mcakircali Mar 21, 2026
58c0873
fix(fam): free region
mcakircali Mar 21, 2026
ed87a07
fix(fam): null check fam_resize_region
mcakircali Mar 21, 2026
6de79b6
fix(fam): FamHandle::seek absolute
mcakircali Mar 21, 2026
0ef69ca
fix(fam): isValidName signed char
mcakircali Mar 21, 2026
abc5091
fix(fam): partHandle empty check
mcakircali Mar 21, 2026
0affaad
fix(fam): perm_t
mcakircali Mar 21, 2026
2fb7ed8
fix(fam): fam_get_option can return nullptr
mcakircali Mar 21, 2026
459d67c
fix(fam): FamObject::data() unsigned underflow
mcakircali Mar 21, 2026
b45118f
fix(fam): ensureCreate loop guards
mcakircali Mar 21, 2026
f3f96ac
fix(fam): fam_stat check nullptr
mcakircali Mar 21, 2026
d2ca3f2
fix(fam): use std::uint64_t{7}
mcakircali Mar 21, 2026
fea244e
fix(fam): throw failed unlock
mcakircali Mar 21, 2026
a4585db
fix(fam): use string_view
mcakircali Mar 21, 2026
68489de
fix(fam): remove Dead breaks
mcakircali Mar 21, 2026
f9abca8
doc(fam): mock allocate
mcakircali Mar 21, 2026
e904034
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Mar 21, 2026
b4d4e8c
fix(fam): remove junk
mcakircali Mar 21, 2026
99e797d
fix(fam): test fam common
mcakircali Mar 21, 2026
766ae3c
fix(fam): T deduce to unsigned long
mcakircali Mar 21, 2026
84e8b4a
fix(fam): add missing includes
mcakircali Mar 21, 2026
06fbeff
fix(fam): testing fills up shm
mcakircali Mar 21, 2026
8156c6f
fix(fam): make shared
mcakircali Mar 21, 2026
c87171f
test(fam): add famurimanager asString
mcakircali Mar 21, 2026
f7d867a
test(fam): safer make test data
mcakircali Mar 21, 2026
068a019
fix(fam): zero fill if data is null
mcakircali Mar 21, 2026
6f82636
fix(fam): add missing include
mcakircali Mar 21, 2026
30ae134
fix(fam): dereference const
mcakircali Mar 21, 2026
9ec4778
doc(fam): add TOCTOU comment
mcakircali Mar 21, 2026
47f3cf6
doc(fam): add map::insert duplicates
mcakircali Mar 23, 2026
877a785
fix(fam): object zero-size data
mcakircali Mar 23, 2026
6f18d27
fix(fam): assert fampath parsing
mcakircali Mar 23, 2026
a098a7c
fix(fam): fampath uuid
mcakircali Mar 23, 2026
f862eac
fix(fam): add missing chrono header
mcakircali Mar 23, 2026
f43017e
test(fam): fam endpoint as env
mcakircali Mar 23, 2026
00aa3cd
fix(fam): catch concurrent destroys
mcakircali Mar 23, 2026
3d92483
fix(fam): cmake options
mcakircali Mar 24, 2026
682537f
feat(fam): add FamCommon for types
mcakircali Mar 24, 2026
8bc1011
test(fam): add FamHandle
mcakircali Mar 25, 2026
89a9d92
test(fam): add mixed
mcakircali Mar 25, 2026
64e7f9e
test(fam): split monolith fam into separate tests
mcakircali Mar 25, 2026
2bd6570
test(fam): move to fam directory
mcakircali Mar 25, 2026
e00de34
chore(fam): remove unused header
mcakircali Mar 25, 2026
008299d
fix(fam): reduce obj name length
mcakircali Mar 25, 2026
ba34435
feat(fam): add FamMap insertOrAssign
mcakircali Mar 25, 2026
4987689
fix(fam): limit mock objname size = 40
mcakircali Mar 26, 2026
69146c8
Merge branch 'develop' into feature/ECKIT-635_fam-backend-map
mcakircali Apr 13, 2026
9af6489
feat(fam): add ShmHandle
mcakircali Apr 13, 2026
7012776
feat(fam): use std lock_guard instead of LockGuard
mcakircali Apr 13, 2026
a4177a6
feat(fam): address pr comment
mcakircali Apr 13, 2026
898e844
feat(fam): set fam mock size at runtime
mcakircali Apr 13, 2026
bad5093
feat(fam): alignTo8 magic
mcakircali Apr 15, 2026
e8dff89
feat(fam): add findlibopenfam
mcakircali Apr 16, 2026
e708956
feat(fam): mock is a shared lib
mcakircali Apr 17, 2026
4e742f4
feat(fam): add clang tidy
mcakircali Apr 17, 2026
77bf4e4
feat(fam): config and session name
mcakircali Apr 17, 2026
7095552
feat(fam): address pr comment
mcakircali Apr 17, 2026
04d70c7
fix(fam): guard object data()
mcakircali Apr 17, 2026
23c7360
test(fam): address pr comment
mcakircali Apr 17, 2026
35ff24b
feat(fam): pr comment fampath class
mcakircali Apr 17, 2026
3133415
test(fam): explicit cleanup
mcakircali Apr 17, 2026
64dd19a
feat(fam): add emplace to FamMap
mcakircali Apr 17, 2026
5d596c3
feat(fam): map insert or assign is push front
mcakircali Apr 17, 2026
8a20fd8
feat(fam): renamed session()
mcakircali Apr 17, 2026
af517ef
feat(fam): mock uses 0600
mcakircali Apr 17, 2026
23ba853
feat(fam): mock reclaim data area
mcakircali Apr 17, 2026
8c77723
feat(fam): FamHash heap allocation
mcakircali Apr 17, 2026
55a0f5a
feat(fam): FamMap insert pushFront
mcakircali Apr 17, 2026
b6af1c6
feat(fam): FamMap avoid infinite spin
mcakircali Apr 17, 2026
27b3601
feat(fam): FamMap force insert
mcakircali Apr 17, 2026
053bd26
test(fam): FamMap force insert
mcakircali Apr 17, 2026
f00eb89
chore(fam): cleanup
mcakircali Apr 20, 2026
9144313
test(fam): more FamMap api
mcakircali Apr 20, 2026
aabe0db
test(fam): multi-proc
mcakircali Apr 20, 2026
edb56ea
test(fam): list map multi-proc
mcakircali Apr 20, 2026
f86e39b
fix(fam): mock multi-proc
mcakircali Apr 20, 2026
154e75e
feat(fam): add simple spin lock
mcakircali Apr 21, 2026
78dd2e4
feat(fam): add ensureObject
mcakircali Apr 21, 2026
905a187
test(fam): add set_terminate
mcakircali Apr 21, 2026
80b1c6f
test(Testing): add ProcessFork
mcakircali Apr 21, 2026
5208960
test(fam): use processfork
mcakircali Apr 21, 2026
3499252
fix(fam): famlist race condition
mcakircali Apr 21, 2026
d0683ac
test(fam): fix real fam
mcakircali Apr 22, 2026
13cdc0d
fix(fam): format
mcakircali Apr 22, 2026
853cc4e
test(fam): re-org
mcakircali Apr 22, 2026
8183b84
feat(fam): add backoff
mcakircali Apr 23, 2026
efbb044
feat(fam): add fork process
mcakircali Apr 23, 2026
6669559
feat(fam): handle concurrent destroy
mcakircali Apr 24, 2026
8b0a201
feat(fam): assert types
mcakircali Apr 24, 2026
14a8090
feat(fam): remove epoch
mcakircali Apr 24, 2026
276e693
feat(fam): FamMap lease-based lock
mcakircali Apr 27, 2026
79f8150
fix(fam): FamMap size assert
mcakircali Apr 27, 2026
2998fcb
chore(fam): refactor famcommon
mcakircali Apr 27, 2026
e0bbec5
fix(fam): FamMap clear is locked
mcakircali Apr 28, 2026
a06474a
fix(fam): ensureObject throws w/ msg
mcakircali Apr 28, 2026
9ab9db0
fix(fam): FamHandle throw out of range
mcakircali Apr 28, 2026
e907e3c
feat(fam): prev/next offsets
mcakircali Apr 28, 2026
b843046
feat(fam): remove inheritance on pod
mcakircali Apr 28, 2026
0ed86f8
fix(fam): assert msg
mcakircali Apr 28, 2026
7accf7d
fix(fam): header cleanup
mcakircali Apr 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ build/
tests/geo/eckit_geo_cache
_build
*.ccls-cache
compile_commands.json
20 changes: 20 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,26 @@ if( NOT TARGET OpenMP::OpenMP_CXX )
set( eckit_HAVE_OMP 0 )
endif()

find_package(LibUUID QUIET)
find_package(LibOPENFAM QUIET)

### OpenFAM Support

ecbuild_add_option( FEATURE OPENFAM
DEFAULT ON
CONDITION LibUUID_FOUND AND LibOPENFAM_FOUND
DESCRIPTION "Enables OpenFAM support" )

ecbuild_add_option( FEATURE OPENFAM_MOCK
DEFAULT ON
CONDITION LibUUID_FOUND AND NOT LibOPENFAM_FOUND
DESCRIPTION "Enables OpenFAM Mock for testing and development." )

if( eckit_HAVE_OPENFAM_MOCK )
Comment thread
mcakircali marked this conversation as resolved.
add_subdirectory( src/eckit/io/fam/openfam_mock )
set( eckit_HAVE_OPENFAM 1 )
endif()

### RADOS

ecbuild_add_option( FEATURE RADOS
Expand Down
104 changes: 104 additions & 0 deletions cmake/FindLibOPENFAM.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Copyright 2024- European Centre for Medium-Range Weather Forecasts (ECMWF)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# In applying this licence, ECMWF does not waive the privileges and immunities
# granted to it by virtue of its status as an intergovernmental organisation nor
# does it submit to any jurisdiction.
#
# Requires:
# FindPackageHandleStandardArgs (CMake standard module)
#

#[=======================================================================[.rst:
FindLibOPENFAM
--------------

This module finds the libopenfam (Fabric-Attached Memory) library.

Imported Targets
^^^^^^^^^^^^^^^^

This module provides the following imported targets, if found:

``LibOPENFAM``
The libopenfam library

Result variables
^^^^^^^^^^^^^^^^

This module will set the following variables in your project:

``LIB_OPENFAM_FOUND``
True if the libopenfam library is found.
``LIB_OPENFAM_INCLUDE_DIRS``
Include directories needed to use libopenfam.
``LIB_OPENFAM_LIBRARIES``
Libraries needed to link to libopenfam.

Cache variables
^^^^^^^^^^^^^^^

The following cache variables may also be set to help find libopenfam library:

``LIB_OPENFAM_INCLUDE_DIR``
where to find the libopenfam headers.
``LIB_OPENFAM_LIBRARY``
where to find the libopenfam library.

Hints
^^^^^

The environment variables ``OPENFAM_DIR`` and ``OPENFAM_PATH``
may also be set to help find libopenfam library.

#]=======================================================================]

find_path(LIB_OPENFAM_INCLUDE_DIR fam/fam.h
HINTS
${OPENFAM_DIR}
${OPENFAM_PATH}
ENV OPENFAM_DIR
ENV OPENFAM_PATH
PATH_SUFFIXES include ../include
)

find_library(LIB_OPENFAM_LIBRARY
NAMES openfam
HINTS
${OPENFAM_DIR}
${OPENFAM_PATH}
ENV OPENFAM_DIR
ENV OPENFAM_PATH
PATH_SUFFIXES lib lib64 build/lib build/lib64
)

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(LibOPENFAM REQUIRED_VARS
LIB_OPENFAM_LIBRARY
LIB_OPENFAM_INCLUDE_DIR)

if (LibOPENFAM_FOUND)
set(LIB_OPENFAM_LIBRARIES ${LIB_OPENFAM_LIBRARY})
set(LIB_OPENFAM_INCLUDE_DIRS ${LIB_OPENFAM_INCLUDE_DIR})
if(NOT TARGET LibOPENFAM)
add_library(LibOPENFAM UNKNOWN IMPORTED)
set_target_properties(LibOPENFAM PROPERTIES
IMPORTED_LOCATION "${LIB_OPENFAM_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${LIB_OPENFAM_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${LIB_OPENFAM_LIBRARY}")
endif()
endif()

mark_as_advanced(LIB_OPENFAM_INCLUDE_DIR LIB_OPENFAM_LIBRARY)
108 changes: 108 additions & 0 deletions cmake/FindLibUUID.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Copyright 2024- European Centre for Medium-Range Weather Forecasts (ECMWF)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# In applying this licence, ECMWF does not waive the privileges and immunities
# granted to it by virtue of its status as an intergovernmental organisation nor
# does it submit to any jurisdiction.
#
# Requires:
# FindPackageHandleStandardArgs (CMake standard module)
#

#[=======================================================================[.rst:
FindLibUUID
--------

This module finds the libuuid (from util-linux) library.

Imported Targets
^^^^^^^^^^^^^^^^

This module provides the following imported targets, if found:

``LibUUID``
The libuuid library

Result variables
^^^^^^^^^^^^^^^^

This module will set the following variables in your project:

``LIB_UUID_FOUND``
True if the libuuid library is found.
``LIB_UUID_INCLUDE_DIRS``
Include directories needed to use libuuid.
``LIB_UUID_LIBRARIES``
Libraries needed to link to libuuid.

Cache variables
^^^^^^^^^^^^^^^

The following cache variables may also be set to help find libuuid library:

``LIB_UUID_INCLUDE_DIR``
where to find the libuuid headers.
``LIB_UUID_LIBRARY``
where to find the libuuid library.

Hints
^^^^^

The environment variables ``LIB_UUID_ROOT``, ``LIB_UUID_DIR``, and ``LIB_UUID_PATH``
may also be set to help find libuuid library.

#]=======================================================================]

find_path(LIB_UUID_INCLUDE_DIR uuid.h
HINTS
${LIB_UUID_ROOT}
${LIB_UUID_DIR}
${LIB_UUID_PATH}
ENV LIB_UUID_ROOT
ENV LIB_UUID_DIR
ENV LIB_UUID_PATH
PATH_SUFFIXES uuid
)

find_library(LIB_UUID_LIBRARY
NAMES uuid
HINTS
${LIB_UUID_ROOT}
${LIB_UUID_DIR}
${LIB_UUID_PATH}
ENV LIB_UUID_ROOT
ENV LIB_UUID_DIR
ENV LIB_UUID_PATH
PATH_SUFFIXES lib lib64
)

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(LibUUID REQUIRED_VARS
LIB_UUID_LIBRARY
LIB_UUID_INCLUDE_DIR)

if (LibUUID_FOUND)
set(LIB_UUID_LIBRARIES ${LIB_UUID_LIBRARY})
set(LIB_UUID_INCLUDE_DIRS ${LIB_UUID_INCLUDE_DIR})
if(NOT TARGET LibUUID)
add_library(LibUUID UNKNOWN IMPORTED)
set_target_properties(LibUUID PROPERTIES
IMPORTED_LOCATION "${LIB_UUID_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${LIB_UUID_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${LIB_UUID_LIBRARY}")
endif()
endif()

mark_as_advanced(LIB_UUID_INCLUDE_DIR LIB_UUID_LIBRARY)
46 changes: 46 additions & 0 deletions src/eckit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,48 @@ list(APPEND eckit_message_srcs
message/Splitter.h
)

# FAM support

list( APPEND eckit_io_srcs
io/fam/FamTypes.h
)

if( eckit_HAVE_OPENFAM )
list( APPEND eckit_io_srcs
io/fam/FamHandle.cc
io/fam/FamHandle.h
io/fam/FamList.cc
io/fam/FamList.h
io/fam/FamListIterator.cc
io/fam/FamListIterator.h
io/fam/FamMap.cc
io/fam/FamMap.h
io/fam/FamMapEntry.h
io/fam/FamMapIterator.cc
io/fam/FamMapIterator.h
io/fam/FamName.cc
io/fam/FamName.h
io/fam/FamObject.cc
io/fam/FamObject.h
io/fam/FamObjectName.cc
io/fam/FamObjectName.h
io/fam/FamPath.cc
io/fam/FamPath.h
io/fam/FamProperty.cc
io/fam/FamProperty.h
io/fam/FamRegion.cc
io/fam/FamRegion.h
io/fam/FamRegionName.cc
io/fam/FamRegionName.h
io/fam/FamSession.cc
io/fam/FamSession.h
io/fam/FamSessionManager.cc
io/fam/FamSessionManager.h
io/fam/FamURIManager.cc
io/fam/FamURIManager.h
)
endif( eckit_HAVE_OPENFAM )

if(HAVE_RADOS)
list( APPEND eckit_io_srcs
io/rados/RadosHandle.cc
Expand Down Expand Up @@ -830,6 +872,7 @@ list( APPEND eckit_transaction_srcs
list( APPEND eckit_testing_srcs
testing/Filesystem.cc
testing/Filesystem.h
testing/ProcessFork.h
testing/Test.h
testing/Filesystem.cc
testing/Filesystem.h
Expand Down Expand Up @@ -928,6 +971,7 @@ ecbuild_add_library(
"${RADOS_INCLUDE_DIRS}"
"${OPENSSL_INCLUDE_DIR}"
"${AIO_INCLUDE_DIRS}"
"${LIB_OPENFAM_INCLUDE_DIRS}"

PRIVATE_LIBS
"${SNAPPY_LIBRARIES}"
Expand All @@ -937,6 +981,8 @@ ecbuild_add_library(
"${CURL_LIBRARIES}"
"${AIO_LIBRARIES}"
"${RADOS_LIBRARIES}"
$<$<BOOL:${eckit_HAVE_OPENFAM}>:LibUUID>
$<$<BOOL:${eckit_HAVE_OPENFAM}>:LibOPENFAM>
$<${HAVE_AEC}:libaec::aec>

PUBLIC_LIBS
Expand Down
12 changes: 11 additions & 1 deletion src/eckit/exception/Exceptions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@
* does it submit to any jurisdiction.
*/

#include "eckit/exception/Exceptions.h"

#include <unistd.h>

#include <csignal>
#include <cstdlib>

#include "eckit/config/LibEcKit.h"
#include "eckit/exception/Exceptions.h"
#include "eckit/log/Log.h"
#include "eckit/os/BackTrace.h"
#include "eckit/thread/ThreadSingleton.h"
Expand Down Expand Up @@ -155,6 +156,15 @@ Cancel::Cancel(const std::string& w, const CodeLocation& loc) : Exception("Cance

Retry::Retry(const std::string& w, const CodeLocation& loc) : Exception("Retry: " + w, loc) {}

PermissionDenied::PermissionDenied(const std::string& w, const CodeLocation& loc) :
Exception("Permission denied: " + w, loc) {}

NotFound::NotFound(const std::string& w, const CodeLocation& loc) : Exception("Not found: " + w, loc) {}

AlreadyExists::AlreadyExists(const std::string& w, const CodeLocation& loc) : Exception("Already exists: " + w, loc) {}

OutOfStorage::OutOfStorage(const std::string& w, const CodeLocation& loc) : Exception("Out of storage: " + w, loc) {}

UserError::UserError(const std::string& w, const CodeLocation& loc) : Exception("UserError: " + w, loc) {}

UserError::UserError(const std::string& user, const std::string& w, const CodeLocation& loc) :
Expand Down
24 changes: 24 additions & 0 deletions src/eckit/exception/Exceptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,30 @@ class Retry : public Exception {
explicit Retry(const std::string&, const CodeLocation& = {});
};

class PermissionDenied : public Exception {
public:

explicit PermissionDenied(const std::string& /* w */, const CodeLocation& = {});
};

class NotFound : public Exception {
public:

explicit NotFound(const std::string& /* w */, const CodeLocation& = {});
};

class AlreadyExists : public Exception {
public:

explicit AlreadyExists(const std::string& /* w */, const CodeLocation& = {});
};

class OutOfStorage : public Exception {
public:

explicit OutOfStorage(const std::string& /* w */, const CodeLocation& = {});
};

class UserError : public Exception {
public:

Expand Down
3 changes: 3 additions & 0 deletions src/eckit/filesystem/URI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ URI::URI(const std::string& scheme, const URI& uri, const std::string& hostname,
fragment_(uri.fragment_),
queryValues_(uri.queryValues_) {}

URI::URI(std::string scheme, const net::Endpoint& endpoint, std::string name) noexcept :
name_(std::move(name)), scheme_(std::move(scheme)), host_(endpoint.host()), port_(endpoint.port()) {}

URI::URI(Stream& s) {
s >> scheme_;
s >> user_;
Expand Down
Loading
Loading