Coverage Report

Created: 2024-06-18 06:29

/src/hdf5/src/H5VLnative_introspect.c
Line
Count
Source (jump to first uncovered line)
1
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
 * Copyright by The HDF Group.                                               *
3
 * All rights reserved.                                                      *
4
 *                                                                           *
5
 * This file is part of HDF5.  The full HDF5 copyright notice, including     *
6
 * terms governing use, modification, and redistribution, is contained in    *
7
 * the COPYING file, which can be found at the root of the source code       *
8
 * distribution tree, or in https://www.hdfgroup.org/licenses.               *
9
 * If you do not have access to either file, you may request a copy from     *
10
 * help@hdfgroup.org.                                                        *
11
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
12
13
/*
14
 * Purpose:     Connector/container introspection callbacks for the native VOL connector
15
 *
16
 */
17
18
/****************/
19
/* Module Setup */
20
/****************/
21
22
/***********/
23
/* Headers */
24
/***********/
25
#include "H5private.h"   /* Generic Functions                        */
26
#include "H5Eprivate.h"  /* Error handling                           */
27
#include "H5VLprivate.h" /* Virtual Object Layer                     */
28
29
#include "H5VLnative_private.h" /* Native VOL connector                     */
30
31
/****************/
32
/* Local Macros */
33
/****************/
34
35
/******************/
36
/* Local Typedefs */
37
/******************/
38
39
/********************/
40
/* Local Prototypes */
41
/********************/
42
43
/*********************/
44
/* Package Variables */
45
/*********************/
46
47
/*****************************/
48
/* Library Private Variables */
49
/*****************************/
50
51
/*******************/
52
/* Local Variables */
53
/*******************/
54
55
/* Note: H5VL__native_introspect_get_conn_cls and H5VL__native_introspect_get_cap_flags
56
 *      are in src/H5VLnative.c so that they can work with the statically declared
57
 *      class struct.
58
 */
59
60
/*---------------------------------------------------------------------------
61
 * Function:    H5VL__native_introspect_opt_query
62
 *
63
 * Purpose:     Query if an optional operation is supported by this connector
64
 *
65
 * Returns:     SUCCEED (Can't fail)
66
 *
67
 *---------------------------------------------------------------------------
68
 */
69
herr_t
70
H5VL__native_introspect_opt_query(void H5_ATTR_UNUSED *obj, H5VL_subclass_t subcls, int opt_type,
71
                                  uint64_t *flags)
72
7
{
73
7
    herr_t ret_value = SUCCEED; /* Return value */
74
75
7
    FUNC_ENTER_PACKAGE
76
77
    /* Sanity check */
78
7
    assert(flags);
79
80
    /* The native VOL connector supports all optional operations */
81
7
    *flags = H5VL_OPT_QUERY_SUPPORTED;
82
83
    /* Set appropriate flags for each operation in each subclass */
84
7
    switch (subcls) {
85
0
        case H5VL_SUBCLS_NONE:
86
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional 'none' operation");
87
88
0
        case H5VL_SUBCLS_INFO:
89
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional info operation");
90
91
0
        case H5VL_SUBCLS_WRAP:
92
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional wrapper operation");
93
94
0
        case H5VL_SUBCLS_ATTR:
95
0
            switch (opt_type) {
96
#ifndef H5_NO_DEPRECATED_SYMBOLS
97
                case H5VL_NATIVE_ATTR_ITERATE_OLD:
98
                    /* Don't allow asynchronous execution, due to iterator callbacks */
99
                    *flags |= H5VL_OPT_QUERY_NO_ASYNC;
100
                    break;
101
#endif /* H5_NO_DEPRECATED_SYMBOLS */
102
103
0
                default:
104
0
                    HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional attribute operation");
105
0
                    break;
106
0
            } /* end switch */
107
0
            break;
108
109
0
        case H5VL_SUBCLS_DATASET:
110
0
            switch (opt_type) {
111
0
                case H5VL_NATIVE_DATASET_FORMAT_CONVERT:
112
0
                    *flags |= H5VL_OPT_QUERY_MODIFY_METADATA;
113
0
                    break;
114
115
0
                case H5VL_NATIVE_DATASET_GET_CHUNK_INDEX_TYPE:
116
0
                case H5VL_NATIVE_DATASET_GET_CHUNK_STORAGE_SIZE:
117
0
                case H5VL_NATIVE_DATASET_GET_NUM_CHUNKS:
118
0
                case H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_IDX:
119
0
                case H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_COORD:
120
0
                case H5VL_NATIVE_DATASET_GET_VLEN_BUF_SIZE:
121
0
                case H5VL_NATIVE_DATASET_GET_OFFSET:
122
0
                    *flags |= H5VL_OPT_QUERY_QUERY_METADATA;
123
0
                    break;
124
125
0
                case H5VL_NATIVE_DATASET_CHUNK_READ:
126
0
                    *flags |= H5VL_OPT_QUERY_READ_DATA;
127
0
                    break;
128
129
0
                case H5VL_NATIVE_DATASET_CHUNK_WRITE:
130
0
                    *flags |= H5VL_OPT_QUERY_WRITE_DATA;
131
0
                    break;
132
133
0
                default:
134
0
                    HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional dataset operation");
135
0
                    break;
136
0
            } /* end switch */
137
0
            break;
138
139
0
        case H5VL_SUBCLS_DATATYPE:
140
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional datatype operation");
141
142
7
        case H5VL_SUBCLS_FILE:
143
7
            switch (opt_type) {
144
0
                case H5VL_NATIVE_FILE_CLEAR_ELINK_CACHE:
145
0
                case H5VL_NATIVE_FILE_RESET_MDC_HIT_RATE:
146
0
                case H5VL_NATIVE_FILE_SET_MDC_CONFIG:
147
0
                    *flags |= H5VL_OPT_QUERY_MODIFY_METADATA;
148
0
                    break;
149
150
0
                case H5VL_NATIVE_FILE_GET_FILE_IMAGE:
151
0
                    *flags |= H5VL_OPT_QUERY_QUERY_METADATA;
152
0
                    *flags |= H5VL_OPT_QUERY_READ_DATA;
153
0
                    break;
154
155
0
                case H5VL_NATIVE_FILE_GET_FREE_SECTIONS:
156
0
                case H5VL_NATIVE_FILE_GET_FREE_SPACE:
157
0
                case H5VL_NATIVE_FILE_GET_INFO:
158
0
                case H5VL_NATIVE_FILE_GET_MDC_CONF:
159
0
                case H5VL_NATIVE_FILE_GET_MDC_HR:
160
0
                case H5VL_NATIVE_FILE_GET_MDC_SIZE:
161
0
                case H5VL_NATIVE_FILE_GET_SIZE:
162
0
                case H5VL_NATIVE_FILE_GET_VFD_HANDLE:
163
0
                case H5VL_NATIVE_FILE_GET_METADATA_READ_RETRY_INFO:
164
0
                    *flags |= H5VL_OPT_QUERY_QUERY_METADATA;
165
0
                    break;
166
167
0
                case H5VL_NATIVE_FILE_START_SWMR_WRITE:
168
0
                    *flags |= H5VL_OPT_QUERY_MODIFY_METADATA;
169
0
                    *flags |= H5VL_OPT_QUERY_WRITE_DATA;
170
0
                    *flags |= H5VL_OPT_QUERY_NO_ASYNC;
171
0
                    break;
172
173
0
                case H5VL_NATIVE_FILE_START_MDC_LOGGING:
174
0
                case H5VL_NATIVE_FILE_STOP_MDC_LOGGING:
175
0
                case H5VL_NATIVE_FILE_GET_MDC_LOGGING_STATUS:
176
0
                case H5VL_NATIVE_FILE_FORMAT_CONVERT:
177
0
                case H5VL_NATIVE_FILE_RESET_PAGE_BUFFERING_STATS:
178
0
                case H5VL_NATIVE_FILE_GET_PAGE_BUFFERING_STATS:
179
0
                case H5VL_NATIVE_FILE_GET_MDC_IMAGE_INFO:
180
0
                case H5VL_NATIVE_FILE_GET_EOA:
181
0
                case H5VL_NATIVE_FILE_INCR_FILESIZE:
182
0
                case H5VL_NATIVE_FILE_SET_LIBVER_BOUNDS:
183
0
                case H5VL_NATIVE_FILE_GET_MIN_DSET_OHDR_FLAG:
184
0
                case H5VL_NATIVE_FILE_SET_MIN_DSET_OHDR_FLAG:
185
#ifdef H5_HAVE_PARALLEL
186
                case H5VL_NATIVE_FILE_GET_MPI_ATOMICITY:
187
                case H5VL_NATIVE_FILE_SET_MPI_ATOMICITY:
188
#endif /* H5_HAVE_PARALLEL */
189
7
                case H5VL_NATIVE_FILE_POST_OPEN:
190
7
                    break;
191
192
0
                default:
193
0
                    HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional file operation");
194
0
                    break;
195
7
            } /* end switch */
196
7
            break;
197
198
7
        case H5VL_SUBCLS_GROUP:
199
0
            switch (opt_type) {
200
#ifndef H5_NO_DEPRECATED_SYMBOLS
201
                case H5VL_NATIVE_GROUP_ITERATE_OLD:
202
                    /* Don't allow asynchronous execution, due to iterator callbacks */
203
                    *flags |= H5VL_OPT_QUERY_NO_ASYNC;
204
                    break;
205
206
                case H5VL_NATIVE_GROUP_GET_OBJINFO:
207
                    *flags |= H5VL_OPT_QUERY_QUERY_METADATA;
208
                    break;
209
#endif /* H5_NO_DEPRECATED_SYMBOLS */
210
211
0
                default:
212
0
                    HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional group operation");
213
0
                    break;
214
0
            } /* end switch */
215
0
            break;
216
217
0
        case H5VL_SUBCLS_LINK:
218
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional link operation");
219
220
0
        case H5VL_SUBCLS_OBJECT:
221
0
            switch (opt_type) {
222
0
                case H5VL_NATIVE_OBJECT_GET_COMMENT:
223
0
                    *flags |= H5VL_OPT_QUERY_QUERY_METADATA;
224
0
                    break;
225
226
0
                case H5VL_NATIVE_OBJECT_SET_COMMENT:
227
0
                    *flags |= H5VL_OPT_QUERY_MODIFY_METADATA;
228
0
                    break;
229
230
0
                case H5VL_NATIVE_OBJECT_DISABLE_MDC_FLUSHES:
231
0
                case H5VL_NATIVE_OBJECT_ENABLE_MDC_FLUSHES:
232
0
                case H5VL_NATIVE_OBJECT_ARE_MDC_FLUSHES_DISABLED:
233
0
                    break;
234
235
0
                case H5VL_NATIVE_OBJECT_GET_NATIVE_INFO:
236
0
                    *flags |= H5VL_OPT_QUERY_QUERY_METADATA;
237
0
                    break;
238
239
0
                default:
240
0
                    HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional object operation");
241
0
                    break;
242
0
            } /* end switch */
243
0
            break;
244
245
0
        case H5VL_SUBCLS_REQUEST:
246
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional request operation");
247
248
0
        case H5VL_SUBCLS_BLOB:
249
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional blob operation");
250
251
0
        case H5VL_SUBCLS_TOKEN:
252
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown optional token operation");
253
254
0
        default:
255
0
            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unknown H5VL subclass");
256
7
    } /* end switch */
257
258
7
done:
259
7
    FUNC_LEAVE_NOAPI(ret_value)
260
7
} /* end H5VL__native_introspect_opt_query() */