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() */ |