int main(int argc, char **argv) {
  size_t prefix_len;
  FILE *current_nodes, *current_node_tags, *nodes, *node_tags;
  char *tempfn;
  struct data data, *d = &data;

  if (argc != 8) {
    printf("Usage: 019_populate_node_tags_and_remove_helper host user passwd database port socket prefix\n");
    exit(EXIT_FAILURE);
  }

  d->mysql = connect_to_mysql(argv);

  d->version_size = 1 + select_size(d->mysql, "SELECT max(id) FROM current_nodes");
  d->version = (uint16_t *) malloc(sizeof(uint16_t) * d->version_size);
  if (!d->version) {
    perror("malloc");
    abort();
    exit(EXIT_FAILURE);
  }
  memset(d->version, 0, sizeof(uint16_t) * d->version_size);

  prefix_len = strlen(argv[7]);
  tempfn = (char *) malloc(prefix_len + 32);
  strcpy(tempfn, argv[7]);

  strcpy(tempfn + prefix_len, "current_nodes");
  open_file(&current_nodes, tempfn);

  strcpy(tempfn + prefix_len, "current_node_tags");
  open_file(&current_node_tags, tempfn);

  strcpy(tempfn + prefix_len, "nodes");
  open_file(&nodes, tempfn);

  strcpy(tempfn + prefix_len, "node_tags");
  open_file(&node_tags, tempfn);

  free(tempfn);

  proc_nodes(d, "nodes", nodes, node_tags, 1);
  proc_nodes(d, "current_nodes", current_nodes, current_node_tags, 0);

  free(d->version);

  mysql_close(d->mysql);

  fclose(current_nodes);
  fclose(current_node_tags);
  fclose(nodes);
  fclose(node_tags);

  exit(EXIT_SUCCESS);
}
コード例 #2
0
ファイル: io_replayer.c プロジェクト: choki/wlg
void *workload_replayer(void *arg)
{
    unsigned int tid = 0;
    readLine req;
    long long trace_sTime = -1;
    long long trace_wTime = 0;
    long long gio_sTime   = 0;
    long long gio_wTime   = 0;
    struct timeval now;
    int fd;
    char *buf;
    size_t ret;
    unsigned long mSize;
    unsigned long mAddr;
    OPERATION_TYPE op;

    desc = (wg_env *)arg;
    if( (fd = open(desc->file_path, O_CREAT|O_RDWR|O_DIRECT, 0666)) == -1 ){
    //if( (fd = open(desc->file_path, O_CREAT|O_RDWR, 0666)) == -1){
	PRINT("Error on opening the init_file of workload generator, file:%s, line:%d, fd=%d\n", __func__, __LINE__, fd);
	exit(1);
    }

#if !defined(BLOCKING_IO)
    aio_initialize(desc->max_queue_depth);
#endif

    mem_allocation(desc, &buf, REPLAYER_MAX_FILE_SIZE);
    if (NULL == buf) {
	PRINT("Error on memory allocation, file:%s, line:%d\n", __func__, __LINE__);
	exit(1);
    }

    while(1){
	//Dequeueing
	req = de_queue();
	//If a request is successfully dequeued.
	if(strcmp(req.rwbs, "EMPTY") != 0){
	    mSize = select_size(req.size);
	    mAddr = select_start_addr(req.sSector);
	    fill_data(desc, buf, mSize);

	    //Calculate wait time based on trace log
	    if(trace_sTime == -1){
		get_start_time(&trace_sTime, &gio_sTime); 
	    }
	    trace_wTime = MICRO_SECOND(req.sTime) - trace_sTime;
	    if(trace_wTime < 0){
		PRINT("trace_wTime : %lli\n", trace_wTime);
		PRINT("Issue time must be ordered. Check the issue time in trace file");
		exit(1);
	    }

	    //Caculate how much time should wait
	    get_current_time(&now);
	    gio_wTime = TIME_VALUE(&now) - gio_sTime;
	    PRINT("TIMEDEBUG trace_wTime:%10lli  \tgio_wTime:%10lli\n",
		    trace_wTime, gio_wTime);

	    //If we need to wait
	    if(trace_wTime > gio_wTime){
		PRINT("WAITING ....%lli us\n", trace_wTime - gio_wTime);
		usec_sleep(trace_wTime - gio_wTime);
	    }
	    op = strstr(req.rwbs,"R")!=NULL? WG_READ : WG_WRITE;
#if defined(BLOCKING_IO)
	    if(op == WG_READ){
		//PRINT("R\n");
		ret = pread(fd, buf , (size_t)mSize, mAddr);
	    }else{
		//PRINT("W\n");
		ret = pwrite(fd, buf , (size_t)mSize, mAddr);
		fsync(fd);
	    }
	    if (ret != mSize) {
		PRINT("Error on file I/O (error# : %zu), file:%s, line:%d\n", ret, __func__, __LINE__);
		break;
	    }
#else
    	    ret = aio_enqueue(fd, buf, mSize, mAddr, op);
	    if (ret != 1) {
		PRINT("Error on file I/O (error# : %zu), file:%s, line:%d\n", ret, __func__, __LINE__);
		break;
	    }
#endif //BLOCKING_IO
#if 0
	    PRINT("DEQUEUED REQ tid:%u sTime:%lf rwbs:%s Addr:%12li \t Size:%12lu\n\n", 
		    tid,
		    req.sTime,
		    req.rwbs,
		    mAddr,
		    mSize);	
#endif
		   
	}

	if( get_queue_status() == 1 ){
	    PRINT("END OF REPLAYER\n");
	    break;
	}
    }
    pthread_mutex_destroy(&thr_mutex);
}