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

Function cmap_mcast_send

exec/cmap.c:926–1007  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

924}
925
926static cs_error_t cmap_mcast_send(enum cmap_mcast_reason reason, int argc, char *argv[])
927{
928 int i;
929 size_t value_len;
930 icmap_value_types_t value_type;
931 cs_error_t err;
932 size_t item_len;
933 size_t msg_len = 0;
934 struct req_exec_cmap_mcast req_exec_cmap_mcast;
935 struct req_exec_cmap_mcast_item *item = NULL;
936 struct iovec req_exec_cmap_iovec[MAX_REQ_EXEC_CMAP_MCAST_ITEMS + 1];
937
938 ENTER();
939
940 if (argc > MAX_REQ_EXEC_CMAP_MCAST_ITEMS) {
941 return (CS_ERR_TOO_MANY_GROUPS);
942 }
943
944 memset(req_exec_cmap_iovec, 0, sizeof(req_exec_cmap_iovec));
945
946 for (i = 0; i < argc; i++) {
947 err = icmap_get(argv[i], NULL, &value_len, &value_type);
948 if (err != CS_OK && err != CS_ERR_NOT_EXIST) {
949 goto free_mem;
950 }
951 if (err == CS_ERR_NOT_EXIST) {
952 value_type = ICMAP_VALUETYPE_NOT_EXIST;
953 value_len = 0;
954 }
955
956 item_len = MAR_ALIGN_UP(sizeof(*item) + value_len, 8);
957
958 item = malloc(item_len);
959 if (item == NULL) {
960 goto free_mem;
961 }
962 memset(item, 0, item_len);
963
964 item->value_type = value_type;
965 item->value_len = value_len;
966 item->key_name.length = strlen(argv[i]);
967
968 assert(strlen(argv[i]) < sizeof(item->key_name.value));
969
970 strcpy((char *)item->key_name.value, argv[i]);
971
972 if (value_type != ICMAP_VALUETYPE_NOT_EXIST) {
973 err = icmap_get(argv[i], item->value, &value_len, &value_type);
974 if (err != CS_OK) {
975 goto free_mem;
976 }
977 }
978
979 req_exec_cmap_iovec[i + 1].iov_base = (char *)item;
980 req_exec_cmap_iovec[i + 1].iov_len = item_len;
981 msg_len += item_len;
982
983 qb_log(LOG_TRACE, "Item %u - type %u, len %zu", i, item->value_type, item->value_len);

Callers 2

cmap_sync_processFunction · 0.85

Calls 1

icmap_getFunction · 0.85

Tested by

no test coverage detected