MCPcopy Create free account
hub / github.com/corosync/corosync / stats_map_track_add

Function stats_map_track_add

exec/stats.c:637–698  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

635}
636
637cs_error_t stats_map_track_add(const char *key_name,
638 int32_t track_type,
639 icmap_notify_fn_t notify_fn,
640 void *user_data,
641 icmap_track_t *icmap_track)
642{
643 struct cs_stats_tracker *tracker;
644 size_t value_len;
645 icmap_value_types_t type;
646 cs_error_t err;
647
648 /* We can track adding or deleting a key under a prefix */
649 if ((track_type & ICMAP_TRACK_PREFIX) &&
650 (!(track_type & ICMAP_TRACK_DELETE) ||
651 !(track_type & ICMAP_TRACK_ADD))) {
652 return CS_ERR_NOT_SUPPORTED;
653 }
654
655 tracker = malloc(sizeof(struct cs_stats_tracker));
656 if (!tracker) {
657 return CS_ERR_NO_MEMORY;
658 }
659
660 tracker->notify_fn = notify_fn;
661 tracker->user_data = user_data;
662 tracker->events = track_type;
663 if (key_name) {
664 tracker->key_name = strdup(key_name);
665 if (!tracker->key_name) {
666 free(tracker);
667 return CS_ERR_NO_MEMORY;
668 }
669 /* Get initial value */
670 if (stats_map_get(tracker->key_name,
671 &tracker->old_value, &value_len, &type) != CS_OK) {
672 tracker->old_value = 0ULL;
673 }
674 } else {
675 tracker->key_name = NULL;
676 tracker->old_value = 0ULL;
677 }
678
679 /* Add/delete trackers can use the qb_map tracking */
680 if ((track_type & ICMAP_TRACK_ADD) ||
681 (track_type & ICMAP_TRACK_DELETE)) {
682 err = qb_map_notify_add(stats_map, tracker->key_name,
683 stats_map_notify_fn,
684 icmap_tt_to_qbtt(track_type),
685 tracker);
686 if (err != 0) {
687 log_printf(LOGSYS_LEVEL_ERROR, "creating stats tracker %s failed. %d\n", tracker->key_name, err);
688 free(tracker->key_name);
689 free(tracker);
690 return (qb_to_cs_error(err));
691 }
692 }
693
694 qb_list_add (&tracker->list, &stats_tracker_list_head);

Callers

nothing calls this directly

Calls 3

stats_map_getFunction · 0.85
icmap_tt_to_qbttFunction · 0.85
qb_to_cs_errorFunction · 0.85

Tested by

no test coverage detected