Beispiel #1
0
/**
 * @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);

}