/** * @brief * find_event_ptr - find the correct event pointer for the duplicated * event based on event type * * @param[in] ote - old event * @param[in] nsinfo - "new" universe * * @return event_ptr in new universe * @retval NULL : on error */ event_ptr_t * find_event_ptr(timed_event *ote, server_info *nsinfo) { resource_resv *oep; /* old event_ptr in resresv form */ event_ptr_t *event_ptr = NULL; char logbuf[MAX_LOG_SIZE]; if (ote == NULL || nsinfo == NULL) return NULL; switch (ote->event_type) { case TIMED_RUN_EVENT: case TIMED_END_EVENT: oep = (resource_resv *) ote->event_ptr; event_ptr = find_resource_resv_by_time(nsinfo->all_resresv, oep->name, oep->start); if (event_ptr == NULL) { schdlog(PBSEVENT_SCHED, PBS_EVENTCLASS_SCHED, LOG_WARNING, ote->name, "Event can't be found in new server to be duplicated."); event_ptr = NULL; } break; case TIMED_POLICY_EVENT: case TIMED_DED_START_EVENT: case TIMED_DED_END_EVENT: event_ptr = nsinfo->policy; break; case TIMED_NODE_DOWN_EVENT: case TIMED_NODE_UP_EVENT: event_ptr = find_node_info(nsinfo->nodes, ((node_info*)(ote->event_ptr))->name); break; default: snprintf(logbuf, MAX_LOG_SIZE, "Unknown event type: %d", #ifdef NAS /* localmod 005 */ (int)ote->event_type); #else ote->event_type); #endif /* localmod 005 */ schdlog(PBSEVENT_SCHED, PBS_EVENTCLASS_SCHED, LOG_WARNING, __func__, logbuf); } return event_ptr; }
//read the mobility file and generates a hashtable of linked list void parse_data (char *trace_file, int node_type) { FILE *fp; char *pch, *p; char str[128]; int fmt, id = 0, gid; node_container *value; //if(table==NULL) create_new_table (node_type); if(list_head ==NULL) list_head = (node_info **) calloc (MAX_NUM_NODE_TYPES, sizeof (node_info*)); if (list_head == NULL ) { LOG_E (OMG, "-------node list table creation failed--------\n"); exit (-1); } if ((fp = fopen (trace_file, "r")) == NULL) { LOG_E (OMG, "[OMG]:Cannot open file %s\n", trace_file); exit (1); } while (!feof (fp)) { if (fgets (str, 126, fp)) { fmt = 0; p = str; while (*p == ' ' || *p == '\t' || *p == '\r') p++; // skip whitespaces if (*p != '\n') { //escape empty line pch = strtok (p, " "); // the separator between the items in the list is a space node_data *node = (node_data *) calloc (1, sizeof (node_data)); node->type=-1; while (pch != NULL) { switch (fmt) { case 0: if (atof (pch) < 0) LOG_E (OMG, "error: negative time input \n"); node->time = fabs (atof (pch)); LOG_D (OMG, "%.2f \n",node->time); break; case 1: node->vid = atoi (pch); LOG_D (OMG, "%d \n",node->vid); break; case 2: node->x_pos = atof (pch); LOG_D (OMG, "%.2f \n",node->x_pos); break; case 3: node->y_pos = atof (pch); LOG_D (OMG, "%.2f \n",node->y_pos); break; case 4: if (atof (pch) < 0) LOG_D (OMG, "error: negative speed input"); node->speed = fabs (atof (pch)); LOG_D (OMG, "speed %.2f \n",node->speed); break; /*case 5: node->type = atof (pch); break;*/ default: LOG_E (OMG, "[Error in trance file]:incorrect data format \n"); break; } fmt += 1; pch = strtok (NULL, " "); } node->next = NULL; node->visit = 0; // look for node in node info gid = find_node_info (node->vid, node_type); if (gid == -1) { node->gid = id; add_node_info (node->vid, node->gid, node_type); //store node data in the table hash_table_add (table[node_type], node, NULL); id++; } else { node->gid = gid; value = hash_table_lookup (table[node_type], node->gid); hash_table_add (table[node_type], node, value); } } } } fclose (fp); }