Coverage Report

Created: 2026-03-09 06:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/hdf5/src/H5Clog.c
Line
Count
Source
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 LICENSE 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
 *
15
 * Created:     H5Clog.c
16
 *
17
 * Purpose:     Functions for metadata cache logging
18
 *
19
 *-------------------------------------------------------------------------
20
 */
21
22
/****************/
23
/* Module Setup */
24
/****************/
25
#include "H5Cmodule.h" /* This source code file is part of the H5C module */
26
27
/***********/
28
/* Headers */
29
/***********/
30
#include "H5private.h"  /* Generic Functions                        */
31
#define H5AC_FRIEND     /* Suppress error about including H5ACpkg */
32
#include "H5ACpkg.h"    /* Metadata cache                           */
33
#include "H5Cpkg.h"     /* Cache                                    */
34
#include "H5Clog.h"     /* Cache logging                            */
35
#include "H5Eprivate.h" /* Error handling                           */
36
37
/****************/
38
/* Local Macros */
39
/****************/
40
41
/******************/
42
/* Local Typedefs */
43
/******************/
44
45
/********************/
46
/* Package Typedefs */
47
/********************/
48
49
/********************/
50
/* Local Prototypes */
51
/********************/
52
53
/*********************/
54
/* Package Variables */
55
/*********************/
56
57
/*****************************/
58
/* Library Private Variables */
59
/*****************************/
60
61
/*******************/
62
/* Local Variables */
63
/*******************/
64
65
/*-------------------------------------------------------------------------
66
 * Function:    H5C_log_set_up
67
 *
68
 * Purpose:     Setup for metadata cache logging.
69
 *
70
 * Return:      SUCCEED/FAIL
71
 *
72
 *-------------------------------------------------------------------------
73
 */
74
herr_t
75
H5C_log_set_up(H5C_t *cache, const char log_location[], H5C_log_style_t style, bool start_immediately)
76
0
{
77
0
    int    mpi_rank  = -1;      /* -1 indicates serial (no MPI rank) */
78
0
    herr_t ret_value = SUCCEED; /* Return value */
79
80
0
    FUNC_ENTER_NOAPI(FAIL)
81
82
    /* Sanity checks */
83
0
    assert(cache);
84
0
    assert(log_location);
85
86
    /* Check logging flags */
87
0
    if (cache->log_info->enabled)
88
0
        HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "logging already set up");
89
90
        /* Get the rank when MPI is in use. Logging clients will usually
91
         * use that to create per-process logs.
92
         */
93
#ifdef H5_HAVE_PARALLEL
94
    if (NULL != cache->aux_ptr)
95
        mpi_rank = ((H5AC_aux_t *)(cache->aux_ptr))->mpi_rank;
96
#endif /*H5_HAVE_PARALLEL*/
97
98
    /* Set up logging */
99
0
    if (H5C_LOG_STYLE_JSON == style) {
100
0
        if (H5C__log_json_set_up(cache->log_info, log_location, mpi_rank) < 0)
101
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to set up json logging");
102
0
    }
103
0
    else if (H5C_LOG_STYLE_TRACE == style) {
104
0
        if (H5C__log_trace_set_up(cache->log_info, log_location, mpi_rank) < 0)
105
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to set up trace logging");
106
0
    }
107
0
    else
108
0
        HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unknown logging style");
109
110
    /* Set logging flags */
111
0
    cache->log_info->enabled = true;
112
113
    /* Start logging if requested */
114
0
    if (start_immediately)
115
0
        if (H5C_start_logging(cache) < 0)
116
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to start logging");
117
118
0
done:
119
120
0
    FUNC_LEAVE_NOAPI(ret_value)
121
0
} /* H5C_log_set_up() */
122
123
/*-------------------------------------------------------------------------
124
 * Function:    H5C_log_tear_down
125
 *
126
 * Purpose:     Tear-down for metadata cache logging.
127
 *
128
 * Return:      SUCCEED/FAIL
129
 *
130
 *-------------------------------------------------------------------------
131
 */
132
herr_t
133
H5C_log_tear_down(H5C_t *cache)
134
0
{
135
0
    herr_t ret_value = SUCCEED; /* Return value */
136
137
0
    FUNC_ENTER_NOAPI(FAIL)
138
139
    /* Sanity checks */
140
0
    assert(cache);
141
142
    /* Check logging flags */
143
0
    if (false == cache->log_info->enabled)
144
0
        HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "logging not enabled");
145
146
    /* Stop logging if that's going on */
147
0
    if (cache->log_info->logging)
148
0
        if (H5C_stop_logging(cache) < 0)
149
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to stop logging");
150
151
    /* Tear down logging */
152
0
    if (cache->log_info->cls->tear_down_logging)
153
0
        if (cache->log_info->cls->tear_down_logging(cache->log_info) < 0)
154
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific tear down call failed");
155
156
    /* Unset logging flags */
157
0
    cache->log_info->enabled = false;
158
159
0
done:
160
0
    FUNC_LEAVE_NOAPI(ret_value)
161
0
} /* H5C_log_tear_down() */
162
163
/*-------------------------------------------------------------------------
164
 * Function:    H5C_start_logging
165
 *
166
 * Purpose:     Start logging metadata cache operations.
167
 *
168
 * Return:      SUCCEED/FAIL
169
 *
170
 *-------------------------------------------------------------------------
171
 */
172
herr_t
173
H5C_start_logging(H5C_t *cache)
174
0
{
175
0
    herr_t ret_value = SUCCEED; /* Return value */
176
177
0
    FUNC_ENTER_NOAPI(FAIL)
178
179
    /* Sanity checks */
180
0
    assert(cache);
181
182
    /* Check logging flags */
183
0
    if (false == cache->log_info->enabled)
184
0
        HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "logging not enabled");
185
186
    /* Start logging */
187
0
    if (cache->log_info->cls->start_logging)
188
0
        if (cache->log_info->cls->start_logging(cache->log_info) < 0)
189
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific start call failed");
190
191
    /* Set logging flags */
192
0
    cache->log_info->logging = true;
193
194
    /* Write a log message */
195
0
    if (cache->log_info->cls->write_start_log_msg)
196
0
        if (cache->log_info->cls->write_start_log_msg(cache->log_info->udata) < 0)
197
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific write start call failed");
198
199
0
done:
200
0
    FUNC_LEAVE_NOAPI(ret_value)
201
0
} /* H5C_start_logging() */
202
203
/*-------------------------------------------------------------------------
204
 * Function:    H5C_stop_logging
205
 *
206
 * Purpose:     Stop logging metadata cache operations.
207
 *
208
 * Return:      SUCCEED/FAIL
209
 *
210
 *-------------------------------------------------------------------------
211
 */
212
herr_t
213
H5C_stop_logging(H5C_t *cache)
214
0
{
215
0
    herr_t ret_value = SUCCEED; /* Return value */
216
217
0
    FUNC_ENTER_NOAPI(FAIL)
218
219
    /* Sanity checks */
220
0
    assert(cache);
221
222
    /* Check logging flags */
223
0
    if (false == cache->log_info->enabled)
224
0
        HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "logging not enabled");
225
0
    if (false == cache->log_info->logging)
226
0
        HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "logging not in progress");
227
228
    /* Write a log message */
229
0
    if (cache->log_info->cls->write_stop_log_msg)
230
0
        if (cache->log_info->cls->write_stop_log_msg(cache->log_info->udata) < 0)
231
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific write stop call failed");
232
233
    /* Stop logging */
234
0
    if (cache->log_info->cls->stop_logging)
235
0
        if (cache->log_info->cls->stop_logging(cache->log_info) < 0)
236
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific stop call failed");
237
238
    /* Set logging flags */
239
0
    cache->log_info->logging = false;
240
241
0
done:
242
0
    FUNC_LEAVE_NOAPI(ret_value)
243
0
} /* H5C_stop_logging() */
244
245
/*-------------------------------------------------------------------------
246
 * Function:    H5C_get_logging_status
247
 *
248
 * Purpose:     Determines if the cache is actively logging (via the OUT
249
 *              parameters).
250
 *
251
 * Return:      SUCCEED/FAIL
252
 *
253
 *-------------------------------------------------------------------------
254
 */
255
herr_t
256
H5C_get_logging_status(const H5C_t *cache, bool *is_enabled, bool *is_currently_logging)
257
272
{
258
272
    FUNC_ENTER_NOAPI_NOERR
259
260
    /* Sanity checks */
261
272
    assert(cache);
262
272
    assert(is_enabled);
263
272
    assert(is_currently_logging);
264
265
    /* Get logging flags */
266
272
    *is_enabled           = cache->log_info->enabled;
267
272
    *is_currently_logging = cache->log_info->logging;
268
269
272
    FUNC_LEAVE_NOAPI(SUCCEED)
270
272
} /* H5C_get_logging_status() */
271
272
/*-------------------------------------------------------------------------
273
 * Function:    H5C_log_write_create_cache_msg
274
 *
275
 * Purpose:     Write a log message for cache creation.
276
 *
277
 * Return:      SUCCEED/FAIL
278
 *
279
 *-------------------------------------------------------------------------
280
 */
281
herr_t
282
H5C_log_write_create_cache_msg(H5C_t *cache, herr_t fxn_ret_value)
283
0
{
284
0
    herr_t ret_value = SUCCEED; /* Return value */
285
286
0
    FUNC_ENTER_NOAPI(FAIL)
287
288
    /* Sanity checks */
289
0
    assert(cache);
290
291
    /* Write a log message */
292
0
    if (cache->log_info->cls->write_create_cache_log_msg)
293
0
        if (cache->log_info->cls->write_create_cache_log_msg(cache->log_info->udata, fxn_ret_value) < 0)
294
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific write create cache call failed");
295
296
0
done:
297
0
    FUNC_LEAVE_NOAPI(ret_value)
298
0
} /* H5C_log_write_create_cache_msg() */
299
300
/*-------------------------------------------------------------------------
301
 * Function:    H5C_log_write_destroy_cache_msg
302
 *
303
 * Purpose:     Write a log message for cache destruction.
304
 *
305
 * NOTE:        This can't print out the H5AC call return value, since we
306
 *              won't know that until the cache is destroyed and at that
307
 *              point we no longer have pointers to the logging information.
308
 *
309
 * Return:      SUCCEED/FAIL
310
 *
311
 *-------------------------------------------------------------------------
312
 */
313
herr_t
314
H5C_log_write_destroy_cache_msg(H5C_t *cache)
315
0
{
316
0
    herr_t ret_value = SUCCEED; /* Return value */
317
318
0
    FUNC_ENTER_NOAPI(FAIL)
319
320
    /* Sanity checks */
321
0
    assert(cache);
322
323
    /* Write a log message */
324
0
    if (cache->log_info->cls->write_destroy_cache_log_msg)
325
0
        if (cache->log_info->cls->write_destroy_cache_log_msg(cache->log_info->udata) < 0)
326
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific write destroy cache call failed");
327
328
0
done:
329
0
    FUNC_LEAVE_NOAPI(ret_value)
330
0
} /* H5C_log_write_destroy_cache_msg() */
331
332
/*-------------------------------------------------------------------------
333
 * Function:    H5C_log_write_evict_cache_msg
334
 *
335
 * Purpose:     Write a log message for eviction of cache entries.
336
 *
337
 * Return:      SUCCEED/FAIL
338
 *
339
 *-------------------------------------------------------------------------
340
 */
341
herr_t
342
H5C_log_write_evict_cache_msg(H5C_t *cache, herr_t fxn_ret_value)
343
0
{
344
0
    herr_t ret_value = SUCCEED;
345
346
0
    FUNC_ENTER_NOAPI(FAIL)
347
348
    /* Sanity checks */
349
0
    assert(cache);
350
351
    /* Write a log message */
352
0
    if (cache->log_info->cls->write_evict_cache_log_msg)
353
0
        if (cache->log_info->cls->write_evict_cache_log_msg(cache->log_info->udata, fxn_ret_value) < 0)
354
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific write evict cache call failed");
355
356
0
done:
357
0
    FUNC_LEAVE_NOAPI(ret_value)
358
0
} /* H5C_log_write_evict_cache_msg() */
359
360
/*-------------------------------------------------------------------------
361
 * Function:    H5C_log_write_expunge_entry_msg
362
 *
363
 * Purpose:     Write a log message for expunge of cache entries.
364
 *
365
 * Return:      SUCCEED/FAIL
366
 *
367
 *-------------------------------------------------------------------------
368
 */
369
herr_t
370
H5C_log_write_expunge_entry_msg(H5C_t *cache, haddr_t address, int type_id, herr_t fxn_ret_value)
371
0
{
372
0
    herr_t ret_value = SUCCEED;
373
374
0
    FUNC_ENTER_NOAPI(FAIL)
375
376
    /* Sanity checks */
377
0
    assert(cache);
378
379
    /* Write a log message */
380
0
    if (cache->log_info->cls->write_expunge_entry_log_msg)
381
0
        if (cache->log_info->cls->write_expunge_entry_log_msg(cache->log_info->udata, address, type_id,
382
0
                                                              fxn_ret_value) < 0)
383
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific write expunge entry call failed");
384
385
0
done:
386
0
    FUNC_LEAVE_NOAPI(ret_value)
387
0
} /* H5C_log_write_expunge_entry_msg() */
388
389
/*-------------------------------------------------------------------------
390
 * Function:    H5C_log_write_flush_cache_msg
391
 *
392
 * Purpose:     Write a log message for cache flushes.
393
 *
394
 * Return:      SUCCEED/FAIL
395
 *
396
 *-------------------------------------------------------------------------
397
 */
398
herr_t
399
H5C_log_write_flush_cache_msg(H5C_t *cache, herr_t fxn_ret_value)
400
0
{
401
0
    herr_t ret_value = SUCCEED;
402
403
0
    FUNC_ENTER_NOAPI(FAIL)
404
405
    /* Sanity checks */
406
0
    assert(cache);
407
408
    /* Write a log message */
409
0
    if (cache->log_info->cls->write_flush_cache_log_msg)
410
0
        if (cache->log_info->cls->write_flush_cache_log_msg(cache->log_info->udata, fxn_ret_value) < 0)
411
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific flush cache call failed");
412
413
0
done:
414
0
    FUNC_LEAVE_NOAPI(ret_value)
415
0
} /* H5C_log_write_flush_cache_msg() */
416
417
/*-------------------------------------------------------------------------
418
 * Function:    H5C_log_write_insert_entry_msg
419
 *
420
 * Purpose:     Write a log message for insertion of cache entries.
421
 *
422
 * Return:      SUCCEED/FAIL
423
 *
424
 *-------------------------------------------------------------------------
425
 */
426
herr_t
427
H5C_log_write_insert_entry_msg(H5C_t *cache, haddr_t address, int type_id, unsigned flags, size_t size,
428
                               herr_t fxn_ret_value)
429
0
{
430
0
    herr_t ret_value = SUCCEED;
431
432
0
    FUNC_ENTER_NOAPI(FAIL)
433
434
    /* Sanity checks */
435
0
    assert(cache);
436
437
    /* Write a log message */
438
0
    if (cache->log_info->cls->write_insert_entry_log_msg)
439
0
        if (cache->log_info->cls->write_insert_entry_log_msg(cache->log_info->udata, address, type_id, flags,
440
0
                                                             size, fxn_ret_value) < 0)
441
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific insert entry call failed");
442
443
0
done:
444
0
    FUNC_LEAVE_NOAPI(ret_value)
445
0
} /* H5C_log_write_insert_entry_msg() */
446
447
/*-------------------------------------------------------------------------
448
 * Function:    H5C_log_write_mark_entry_dirty_msg
449
 *
450
 * Purpose:     Write a log message for marking cache entries as dirty.
451
 *
452
 * Return:      SUCCEED/FAIL
453
 *
454
 *-------------------------------------------------------------------------
455
 */
456
herr_t
457
H5C_log_write_mark_entry_dirty_msg(H5C_t *cache, const H5C_cache_entry_t *entry, herr_t fxn_ret_value)
458
0
{
459
0
    herr_t ret_value = SUCCEED;
460
461
0
    FUNC_ENTER_NOAPI(FAIL)
462
463
    /* Sanity checks */
464
0
    assert(cache);
465
466
    /* Write a log message */
467
0
    assert(entry);
468
0
    if (cache->log_info->cls->write_mark_entry_dirty_log_msg)
469
0
        if (cache->log_info->cls->write_mark_entry_dirty_log_msg(cache->log_info->udata, entry,
470
0
                                                                 fxn_ret_value) < 0)
471
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific mark dirty entry call failed");
472
473
0
done:
474
0
    FUNC_LEAVE_NOAPI(ret_value)
475
0
} /* H5C_log_write_mark_entry_dirty_msg() */
476
477
/*-------------------------------------------------------------------------
478
 * Function:    H5C_log_write_mark_entry_clean_msg
479
 *
480
 * Purpose:     Write a log message for marking cache entries as clean.
481
 *
482
 * Return:      SUCCEED/FAIL
483
 *
484
 *-------------------------------------------------------------------------
485
 */
486
herr_t
487
H5C_log_write_mark_entry_clean_msg(H5C_t *cache, const H5C_cache_entry_t *entry, herr_t fxn_ret_value)
488
0
{
489
0
    herr_t ret_value = SUCCEED; /* Return value */
490
491
0
    FUNC_ENTER_NOAPI(FAIL)
492
493
    /* Sanity checks */
494
0
    assert(cache);
495
496
    /* Write a log message */
497
0
    assert(entry);
498
0
    if (cache->log_info->cls->write_mark_entry_clean_log_msg)
499
0
        if (cache->log_info->cls->write_mark_entry_clean_log_msg(cache->log_info->udata, entry,
500
0
                                                                 fxn_ret_value) < 0)
501
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific mark clean entry call failed");
502
503
0
done:
504
0
    FUNC_LEAVE_NOAPI(ret_value)
505
0
} /* H5C_log_write_mark_entry_clean_msg() */
506
507
/*-------------------------------------------------------------------------
508
 * Function:    H5C_log_write_mark_unserialized_entry_msg
509
 *
510
 * Purpose:     Write a log message for marking cache entries as unserialized.
511
 *
512
 * Return:      SUCCEED/FAIL
513
 *
514
 *-------------------------------------------------------------------------
515
 */
516
herr_t
517
H5C_log_write_mark_unserialized_entry_msg(H5C_t *cache, const H5C_cache_entry_t *entry, herr_t fxn_ret_value)
518
0
{
519
0
    herr_t ret_value = SUCCEED;
520
521
0
    FUNC_ENTER_NOAPI(FAIL)
522
523
    /* Sanity checks */
524
0
    assert(cache);
525
526
    /* Write a log message */
527
0
    assert(entry);
528
0
    if (cache->log_info->cls->write_mark_unserialized_entry_log_msg)
529
0
        if (cache->log_info->cls->write_mark_unserialized_entry_log_msg(cache->log_info->udata, entry,
530
0
                                                                        fxn_ret_value) < 0)
531
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific mark unserialized entry call failed");
532
533
0
done:
534
0
    FUNC_LEAVE_NOAPI(ret_value)
535
0
} /* H5C_log_write_mark_unserialized_entry_msg() */
536
537
/*-------------------------------------------------------------------------
538
 * Function:    H5C_log_write_mark_serialized_entry_msg
539
 *
540
 * Purpose:     Write a log message for marking cache entries as serialize.
541
 *
542
 * Return:      SUCCEED/FAIL
543
 *
544
 *-------------------------------------------------------------------------
545
 */
546
herr_t
547
H5C_log_write_mark_serialized_entry_msg(H5C_t *cache, const H5C_cache_entry_t *entry, herr_t fxn_ret_value)
548
0
{
549
0
    herr_t ret_value = SUCCEED; /* Return value */
550
551
0
    FUNC_ENTER_NOAPI(FAIL)
552
553
    /* Sanity checks */
554
0
    assert(cache);
555
556
    /* Write a log message */
557
0
    assert(entry);
558
0
    if (cache->log_info->cls->write_mark_serialized_entry_log_msg)
559
0
        if (cache->log_info->cls->write_mark_serialized_entry_log_msg(cache->log_info->udata, entry,
560
0
                                                                      fxn_ret_value) < 0)
561
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific mark serialized entry call failed");
562
563
0
done:
564
0
    FUNC_LEAVE_NOAPI(ret_value)
565
0
} /* H5C_log_write_mark_serialized_entry_msg() */
566
567
/*-------------------------------------------------------------------------
568
 * Function:    H5C_log_write_move_entry_msg
569
 *
570
 * Purpose:     Write a log message for moving a cache entry.
571
 *
572
 * Return:      SUCCEED/FAIL
573
 *
574
 *-------------------------------------------------------------------------
575
 */
576
herr_t
577
H5C_log_write_move_entry_msg(H5C_t *cache, haddr_t old_addr, haddr_t new_addr, int type_id,
578
                             herr_t fxn_ret_value)
579
0
{
580
0
    herr_t ret_value = SUCCEED;
581
582
0
    FUNC_ENTER_NOAPI(FAIL)
583
584
    /* Sanity checks */
585
0
    assert(cache);
586
587
    /* Write a log message */
588
0
    if (cache->log_info->cls->write_move_entry_log_msg)
589
0
        if (cache->log_info->cls->write_move_entry_log_msg(cache->log_info->udata, old_addr, new_addr,
590
0
                                                           type_id, fxn_ret_value) < 0)
591
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific move entry call failed");
592
593
0
done:
594
0
    FUNC_LEAVE_NOAPI(ret_value)
595
0
} /* H5C_log_write_move_entry_msg() */
596
597
/*-------------------------------------------------------------------------
598
 * Function:    H5C_log_write_pin_entry_msg
599
 *
600
 * Purpose:     Write a log message for pinning a cache entry.
601
 *
602
 * Return:      SUCCEED/FAIL
603
 *
604
 *-------------------------------------------------------------------------
605
 */
606
herr_t
607
H5C_log_write_pin_entry_msg(H5C_t *cache, const H5C_cache_entry_t *entry, herr_t fxn_ret_value)
608
0
{
609
0
    herr_t ret_value = SUCCEED;
610
611
0
    FUNC_ENTER_NOAPI(FAIL)
612
613
    /* Sanity checks */
614
0
    assert(cache);
615
616
    /* Write a log message */
617
0
    assert(entry);
618
0
    if (cache->log_info->cls->write_pin_entry_log_msg)
619
0
        if (cache->log_info->cls->write_pin_entry_log_msg(cache->log_info->udata, entry, fxn_ret_value) < 0)
620
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific pin entry call failed");
621
622
0
done:
623
0
    FUNC_LEAVE_NOAPI(ret_value)
624
0
} /* H5C_log_write_pin_entry_msg() */
625
626
/*-------------------------------------------------------------------------
627
 * Function:    H5C_log_write_create_fd_msg
628
 *
629
 * Purpose:     Write a log message for creating a flush dependency between
630
 *              two cache entries.
631
 *
632
 * Return:      SUCCEED/FAIL
633
 *
634
 *-------------------------------------------------------------------------
635
 */
636
herr_t
637
H5C_log_write_create_fd_msg(H5C_t *cache, const H5C_cache_entry_t *parent, const H5C_cache_entry_t *child,
638
                            herr_t fxn_ret_value)
639
0
{
640
0
    herr_t ret_value = SUCCEED;
641
642
0
    FUNC_ENTER_NOAPI(FAIL)
643
644
    /* Sanity checks */
645
0
    assert(cache);
646
647
    /* Write a log message */
648
0
    assert(parent);
649
0
    assert(child);
650
0
    if (cache->log_info->cls->write_create_fd_log_msg)
651
0
        if (cache->log_info->cls->write_create_fd_log_msg(cache->log_info->udata, parent, child,
652
0
                                                          fxn_ret_value) < 0)
653
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific create fd call failed");
654
655
0
done:
656
0
    FUNC_LEAVE_NOAPI(ret_value)
657
0
} /* H5C_log_write_create_fd_msg() */
658
659
/*-------------------------------------------------------------------------
660
 * Function:    H5C_log_write_protect_entry_msg
661
 *
662
 * Purpose:     Write a log message for protecting a cache entry.
663
 *
664
 * Return:      SUCCEED/FAIL
665
 *
666
 *-------------------------------------------------------------------------
667
 */
668
herr_t
669
H5C_log_write_protect_entry_msg(H5C_t *cache, const H5C_cache_entry_t *entry, int type_id, unsigned flags,
670
                                herr_t fxn_ret_value)
671
0
{
672
0
    herr_t ret_value = SUCCEED;
673
674
0
    FUNC_ENTER_NOAPI(FAIL)
675
676
    /* Sanity checks */
677
0
    assert(cache);
678
679
    /* Write a log message */
680
0
    assert(entry);
681
0
    if (cache->log_info->cls->write_protect_entry_log_msg)
682
0
        if (cache->log_info->cls->write_protect_entry_log_msg(cache->log_info->udata, entry, type_id, flags,
683
0
                                                              fxn_ret_value) < 0)
684
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific protect entry call failed");
685
686
0
done:
687
0
    FUNC_LEAVE_NOAPI(ret_value)
688
0
} /* H5C_log_write_protect_entry_msg() */
689
690
/*-------------------------------------------------------------------------
691
 * Function:    H5C_log_write_resize_entry_msg
692
 *
693
 * Purpose:     Write a log message for resizing a cache entry.
694
 *
695
 * Return:      SUCCEED/FAIL
696
 *
697
 *-------------------------------------------------------------------------
698
 */
699
herr_t
700
H5C_log_write_resize_entry_msg(H5C_t *cache, const H5C_cache_entry_t *entry, size_t new_size,
701
                               herr_t fxn_ret_value)
702
0
{
703
0
    herr_t ret_value = SUCCEED;
704
705
0
    FUNC_ENTER_NOAPI(FAIL)
706
707
    /* Sanity checks */
708
0
    assert(cache);
709
710
    /* Write a log message */
711
0
    assert(entry);
712
0
    if (cache->log_info->cls->write_resize_entry_log_msg)
713
0
        if (cache->log_info->cls->write_resize_entry_log_msg(cache->log_info->udata, entry, new_size,
714
0
                                                             fxn_ret_value) < 0)
715
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific resize entry call failed");
716
717
0
done:
718
0
    FUNC_LEAVE_NOAPI(ret_value)
719
0
} /* H5C_log_write_resize_entry_msg() */
720
721
/*-------------------------------------------------------------------------
722
 * Function:    H5C_log_write_unpin_entry_msg
723
 *
724
 * Purpose:     Write a log message for unpinning a cache entry.
725
 *
726
 * Return:      SUCCEED/FAIL
727
 *
728
 *-------------------------------------------------------------------------
729
 */
730
herr_t
731
H5C_log_write_unpin_entry_msg(H5C_t *cache, const H5C_cache_entry_t *entry, herr_t fxn_ret_value)
732
0
{
733
0
    herr_t ret_value = SUCCEED;
734
735
0
    FUNC_ENTER_NOAPI(FAIL)
736
737
    /* Sanity checks */
738
0
    assert(cache);
739
740
    /* Write a log message */
741
0
    assert(entry);
742
0
    if (cache->log_info->cls->write_unpin_entry_log_msg)
743
0
        if (cache->log_info->cls->write_unpin_entry_log_msg(cache->log_info->udata, entry, fxn_ret_value) < 0)
744
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific unpin entry call failed");
745
746
0
done:
747
0
    FUNC_LEAVE_NOAPI(ret_value)
748
0
} /* H5C_log_write_unpin_entry_msg() */
749
750
/*-------------------------------------------------------------------------
751
 * Function:    H5C_log_write_destroy_fd_msg
752
 *
753
 * Purpose:     Write a log message for destroying a flush dependency
754
 *              between two cache entries.
755
 *
756
 * Return:      SUCCEED/FAIL
757
 *
758
 *-------------------------------------------------------------------------
759
 */
760
herr_t
761
H5C_log_write_destroy_fd_msg(H5C_t *cache, const H5C_cache_entry_t *parent, const H5C_cache_entry_t *child,
762
                             herr_t fxn_ret_value)
763
0
{
764
0
    herr_t ret_value = SUCCEED;
765
766
0
    FUNC_ENTER_NOAPI(FAIL)
767
768
    /* Sanity checks */
769
0
    assert(cache);
770
771
    /* Write a log message */
772
0
    assert(parent);
773
0
    assert(child);
774
0
    if (cache->log_info->cls->write_destroy_fd_log_msg)
775
0
        if (cache->log_info->cls->write_destroy_fd_log_msg(cache->log_info->udata, parent, child,
776
0
                                                           fxn_ret_value) < 0)
777
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific destroy fd call failed");
778
779
0
done:
780
0
    FUNC_LEAVE_NOAPI(ret_value)
781
0
} /* H5C_log_write_destroy_fd_msg() */
782
783
/*-------------------------------------------------------------------------
784
 * Function:    H5C_log_write_unprotect_entry_msg
785
 *
786
 * Purpose:     Write a log message for unprotecting a cache entry.
787
 *
788
 * Return:      SUCCEED/FAIL
789
 *
790
 *-------------------------------------------------------------------------
791
 */
792
herr_t
793
H5C_log_write_unprotect_entry_msg(H5C_t *cache, haddr_t address, int type_id, unsigned flags,
794
                                  herr_t fxn_ret_value)
795
0
{
796
0
    herr_t ret_value = SUCCEED;
797
798
0
    FUNC_ENTER_NOAPI(FAIL)
799
800
    /* Sanity checks */
801
0
    assert(cache);
802
803
    /* Write a log message */
804
0
    if (cache->log_info->cls->write_unprotect_entry_log_msg)
805
0
        if (cache->log_info->cls->write_unprotect_entry_log_msg(cache->log_info->udata, address, type_id,
806
0
                                                                flags, fxn_ret_value) < 0)
807
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific unprotect entry call failed");
808
809
0
done:
810
0
    FUNC_LEAVE_NOAPI(ret_value)
811
0
} /* H5C_log_write_unprotect_entry_msg() */
812
813
/*-------------------------------------------------------------------------
814
 * Function:    H5C_log_write_set_cache_config_msg
815
 *
816
 * Purpose:     Write a log message for setting the cache configuration.
817
 *
818
 * Return:      SUCCEED/FAIL
819
 *
820
 *-------------------------------------------------------------------------
821
 */
822
herr_t
823
H5C_log_write_set_cache_config_msg(H5C_t *cache, const H5AC_cache_config_t *config, herr_t fxn_ret_value)
824
0
{
825
0
    herr_t ret_value = SUCCEED;
826
827
0
    FUNC_ENTER_NOAPI(FAIL)
828
829
    /* Sanity checks */
830
0
    assert(cache);
831
832
    /* Write a log message */
833
0
    assert(config);
834
0
    if (cache->log_info->cls->write_set_cache_config_log_msg)
835
0
        if (cache->log_info->cls->write_set_cache_config_log_msg(cache->log_info->udata, config,
836
0
                                                                 fxn_ret_value) < 0)
837
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific set cache config call failed");
838
839
0
done:
840
0
    FUNC_LEAVE_NOAPI(ret_value)
841
0
} /* H5C_log_write_set_cache_config_msg() */
842
843
/*-------------------------------------------------------------------------
844
 * Function:    H5C_log_write_remove_entry_msg
845
 *
846
 * Purpose:     Write a log message for removing a cache entry.
847
 *
848
 * Return:      SUCCEED/FAIL
849
 *
850
 *-------------------------------------------------------------------------
851
 */
852
herr_t
853
H5C_log_write_remove_entry_msg(H5C_t *cache, const H5C_cache_entry_t *entry, herr_t fxn_ret_value)
854
0
{
855
0
    herr_t ret_value = SUCCEED;
856
857
0
    FUNC_ENTER_NOAPI(FAIL)
858
859
    /* Sanity checks */
860
0
    assert(cache);
861
862
    /* Write a log message */
863
0
    assert(entry);
864
0
    if (cache->log_info->cls->write_remove_entry_log_msg)
865
0
        if (cache->log_info->cls->write_remove_entry_log_msg(cache->log_info->udata, entry, fxn_ret_value) <
866
0
            0)
867
0
            HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "log-specific remove entry call failed");
868
869
0
done:
870
0
    FUNC_LEAVE_NOAPI(ret_value)
871
0
} /* H5C_log_write_remove_entry_msg() */