void initialize(iter_t iterations, void* cookie) { state_t *state = (state_t *) cookie; char path[PATH_MAX]; int ret; int fd; int rw = state->write ? O_WRONLY: 0; if (iterations) return; /* Use isolated directories to eliminate locking contetion on path, * from measurements */ if (state->isolate) { sprintf(path, "%s/%d", state->path, benchmp_childid()); if (chdir(path)) DO_ABORT("chdir() failed"); } else { sprintf(path, "%s/%s", state->path, state->filename); strcpy(state->filename, path); } if (state->use_uid) { setegid(benchmp_childid_gid()); seteuid(benchmp_childid_uid()); } if (state->lock_uid) { if (state->lock_uid > sizeof(state->qfd[0]) / sizeof(int)) state->lock_uid = sizeof(state->qfd[0]) / sizeof(int); ret = get_quota_n(state->filename, geteuid(), getegid(), state->qfd[0], state->lock_uid); if (ret) DO_ABORT("Cant get quota"); } state->fd = -1; if (state->clone) { char buf[128]; char* s; sprintf(buf, "%d", (int)getpid()); s = (char*)malloc(strlen(state->filename) + strlen(buf) + 1); sprintf(s, "%s%d", state->filename, (int)getpid()); strcpy(state->filename, s); } fd = open(state->filename, O_CREAT|rw, 0666); if (fd < 0) DO_ABORT("open"); state->fd = fd; }
void time_with_loop(iter_t iterations, void * cookie) { state_t *state = (state_t *) cookie; char *filename = state->filename; int rw = state->write ? O_WRONLY: 0; int fd = state->fd; int ret = 0; char buf [40960]; while (iterations-- > 0) { ret |= (pwrite(fd, buf, 4096, 40960) != 4096); ret |= ftruncate(fd, 8192); } if (ret) DO_ABORT("error while test"); }
void* default_unli_handler (void* arg) { void* retr = NULL; long proc_id = (long)arg; if (OraDBDefaultUnli::init_lib() < 0) { LOG_CRITICAL("%s: %d: Unable to initialize libsqlora8!", __func__, proc_id); DO_ABORT(); return retr; } OraDBDefaultUnli conn; if (conn.initialize(Config::getOraAuth()) < 0) { LOG_CRITICAL("%s: %d: Unable to connect to db (%s).", __func__, proc_id, Config::getOraAuth()); DO_ABORT(); return retr; } LOG_INFO("%s: %d: Started.", __func__, proc_id); while (! IS_SHUTDOWN()) { default_unli_t default_unli; while (! c2q_dequeue(Global::getDefaultUnliQ(), &default_unli, sizeof(default_unli_t))) { if (! strcmp(default_unli.mcc, "515")) { LOG_DEBUG("%s: %d: Ignoring records with mcc 515: msisdn: %s, mnc: %s, mcc: %s, sgsn_ip: %s, tac_tai: %s, date: %s, filename: %s", __func__, proc_id , default_unli.msisdn, default_unli.mnc, default_unli.mcc, default_unli.sgsn_ip, default_unli.tac_tai, default_unli.date, default_unli.filename); continue; } //-- process default unli transaction... conn.processDefaultUnli(&default_unli); LOG_DEBUG("%s: %d: db_retr: %d, msisdn: %s, mnc: %s, mcc: %s, sgsn_ip: %s, tac_tai: %s, date: %s, filename: %s", __func__, proc_id , default_unli.db_retr, default_unli.msisdn, default_unli.mnc, default_unli.mcc, default_unli.sgsn_ip, default_unli.tac_tai , default_unli.date, default_unli.filename); switch (default_unli.db_retr) { case DB_RETR_NF_BUS: //-- call NF Bus... doNfBus(&default_unli); //if (0 == doNfBus(&default_unli)) { // send_system_msg("TRIGGER", TRAN_TYPE_BROADCAST, 0, // Config::getAccessCode(), default_unli.msisdn, SYSMSG_BROADCAST_ROAM_FREE_CT, 1); //} //-- continue... case DB_RETR_OK: //-- call matrix api... doMatrix(&default_unli); break; default: LOG_ERROR("%s: %d: Unable to process default_unli: retr: %d, msisdn: %s, mnc: %s, mcc: %s, sgsn_ip: %s, tac_tai: %s, date: %s, filename: %s", __func__, proc_id , default_unli.db_retr, default_unli.msisdn, default_unli.mnc, default_unli.mcc, default_unli.sgsn_ip, default_unli.tac_tai , default_unli.date, default_unli.filename); } } //-- sleep for a while sys_msleep(1000); } LOG_INFO("%s: %d: Terminated.", __func__, proc_id); conn.destroy_db(); return retr; }
void* default_unli_fetcher (void* arg) { void* retr = NULL; std::vector<std::string> list; std::string pattern = std::string(Config::getLocalDir()) + std::string("/*Gi*.csv"); default_unli_t default_unli; if (OraDBDefaultUnli::init_lib() < 0) { LOG_CRITICAL("%s: Unable to initialize libsqlora8!", __func__); DO_ABORT(); return retr; } OraDBDefaultUnli conn; if (conn.initialize(Config::getOraAuth()) < 0) { LOG_CRITICAL("%s: Unable to connect to db (%s).", __func__, Config::getOraAuth()); DO_ABORT(); return retr; } LOG_INFO("%s: Started.", __func__); LOG_INFO("%s: processing %s files.", __func__, pattern.c_str()); while (! IS_SHUTDOWN()) { glob(list, pattern); //LOG_DEBUG("%s: got %d files.", __func__, list.size()); for (size_t i=0; i < list.size(); ++i) { std::string &src = list[i]; std::string filename = basename(src); //-- check if already processed... memset(&default_unli, 0, sizeof(default_unli_t)); snprintf(default_unli.filename, sizeof(default_unli.filename), "%s", filename.c_str()); if (conn.getLastFileProcessed(&default_unli) < 0) { LOG_ERROR("%s: Unable to get last default_unli file: retr: %d, filename: %s", __func__ , default_unli.db_retr, default_unli.filename); } else { int status = default_unli.db_retr; if (1 != status) { LOG_DEBUG("%s: Ignoring previously processed file: %s", __func__, default_unli.filename); } std::string processed = Config::getLocalProcessedDir() + filename; std::string ignored = Config::getLocalIgnoredDir() + filename; std::string &dest = (1 == status) ? processed : ignored; if (0 != mv(src, dest)) { LOG_ERROR("%s: Unable to move '%s' to '%s'", __func__, src.c_str(), dest.c_str()); } } } //-- sleep for a while sys_msleep(1000); } LOG_INFO("%s: Terminated.", __func__); conn.destroy_db(); return retr; }