/*从文件中读取同步数据,然后向备用侧进行同步*/ void *thread_send_bak(void *parm) { char dip[35]; int dpt; char status; int sockid = -1; char buf[64000], tmp[50]; int i,j; int send_status; int data_flag; dul_find(hlrcode); data_flag = 0; while(1) { while(sockid == -1){ sockid = tcp_connect(local_item->dip, local_item->dpt); if(sockid < 0){ file_log(L, "can not connect bak server %s:%d", local_item->dip, local_item->dpt); sockid = -1; sleep(2); } /*设置sotimeout*/ tcp_setrcvtimeo(sockid, 10000); file_log(L, "tcp_connect %s:%d succ %d", local_item->dip, local_item->dpt, sockid); } if(data_flag == 0){ i = dul_read_bak(hlrcode, buf+8, sizeof(buf)-8); if(i <= 0){ /* 没有数据 */ file_log(L, "no data, sleep(1)"); sleep(1); continue; } } data_flag = 1; sprintf(tmp, "%08d", i); memcpy(buf, tmp, 8); j = tcp_writen(sockid, buf, i+8); /*write data */ if(j < i+8 ){ file_log(L, "tcp send data failed, %d", i); tcp_close(sockid); sockid = -1; sleep(1); continue; } read_buf(sockid, tmp); data_flag = 0; } if(sockid != -1) tcp_close(sockid); return NULL; }
/* Funcao que busca um usuario na btree Variaveis: btree- arvore binaria usr- struct que representa e guarda as informações do usuário a ser buscado pos- posicao da id no arquivo de registros reg- arquivo de registros buff- guarda o tamanho da string do registro buffer- string que guarda todo o registro */ void Busca_usuario(arvoreb_t *btree) { offset_t pos; usr_t usr; FILE *reg; char buff; char buffer[MAX_REG]; printf("Digite a id do usuario que deseja consultar: "); usr.id = _scanf_int(); printf("\n"); pos = searchArvoreB(btree, usr.id); if (pos < 0) { //Usuario nao foi encontrado printf("Usuario nao cadastrado\n"); system_pause(); return; } else { //Grava as informações do usuario reg = fopen(FILE_REG, "rb"); if (reg == NULL) { printf("Nao foi possivel encontrar o arquivo de registros\n"); system_pause(); return; } fseek(reg, pos, SEEK_SET); fread(&buff, sizeof(char), 1, reg); fread(buffer, sizeof(char), buff, reg); strTOstruct(buffer, &usr); file_log("Chave %d encontrada, offset %ld\nNome: %s, Tipo Usuario: %d.\n", usr.id, pos, usr.nome, usr.tu); printf("Chave %d encontrada, offset %ld\nNome: %s, Tipo Usuario: %d.\n", usr.id, pos, usr.nome, usr.tu); system_pause(); fclose(reg); } }
void yy_time_log(time_t t) { if(t-yy_time.rec_time >= 300){ file_log("perf", "rectime=%ld,rectype=hlrerc,hlrcode=%s,hlrport=%s," "rows=%d,tm4get=%d,tm4exc=%d", t, yy_time.hlrcode, yy_time.hlrport, yy_time.rows, yy_time.tm4get/1000, yy_time.tm4exc/1000); yy_time.rows = 0; yy_time.tm4exc = 0; yy_time.tm4get = 0; yy_time.rec_time = t; } }
/* Funcao que insere um usuario na btree e no arquivo de registro, se necessario Variaveis: btree- arvore binária id- numero da id a ser inserida pos- posicao do registro no arquivo de registros reg- arquivo de registros tu- tipo de usuario a ser inserido buff- guarda o tamanho da string a ser armazenada no arquivo de registros usr_name- nome do usuario a ser inserido buffer- string que guarda todo o registro */ void Insere_usuario (arvoreb_t *btree) { id_type id; offset_t pos; FILE *reg; int tu; char buff; char usr_name[MAX_USR_NM]; char buffer[MAX_REG]; printf("Digite a id do usuario: "); id = _scanf_int(); if (searchArvoreB(btree, id) >= 0) { //Registro com mesmo nome ja existe printf("Usuario ja existente.\n"); system_pause(); return; } printf("Digite o nome do usuario: "); _scanf_s(usr_name, MAX_USR_NM); printf("Digite o tipo do usuario: "); tu = _scanf_int(); printf("\n"); switch(tu) { case 1: case 2: case 3: debug("Tipo de usuario adicionado: %d\n", tu); break; default: printf("Tipo de usuario invalido\n"); system_pause(); return; } //Insere no arquivo de registro reg = fopen(FILE_REG, "ab"); sprintf(buffer, "%d|%s|%d|", id, usr_name, tu); pos = ftell(reg); buff = strlen(buffer); fwrite(&buff, sizeof(char), 1, reg); fwrite(buffer, sizeof(char), buff, reg); fclose(reg); //Insere na arvore binaria file_log("Execucao de operacao de INSERCAO de %d, %s, %d.\n", id, usr_name, tu); insertArvoreB(btree, id, pos); printf("Insercao feita com sucesso\n"); system_pause(); }
void *thread_tcp_recv_data(void *param) { int servsock = -1; int sockid = -1; char clip[35]; int ret, clport; char buf[64000]; servsock = tcp_listen(NULL, local_item->rpt); if(servsock < 0){ file_log(L, "can not listen on %d, hlrcode:%s", local_item->rpt, hlrcode); exit(1); } set_hlrcode(hlrcode); while(1){ if(sockid < 0){ sockid = tcp_accept(servsock, clip, &clport); if(sockid < 0){ file_log(L, "tcp_accept failed, return %d, errno:%d", sockid, errno); exit(2); } } while(1){ ret = read_buf(sockid, buf); if(ret <= 0){ tcp_close(sockid); sockid = -1; break; } write_record(buf, ret, 0); /*写到offon_fordb 的文件中, 由offon_fordb负责入库*/ write_buf(sockid, "ok", 2); } sleep(1); } return NULL; }
int CG(double* Phi, double* X, double* K, int numProcs, int myID) { double* R = new double[TOT]; double* P = new double[TOT]; double* Ap = new double[TOT]; double* temBuf = new double[TOT]; int n = 0; MPI_Setzero(X, numProcs, myID); MPI_Assign(Phi, R, numProcs, myID); MPI_Assign(R, P, numProcs, myID); double rnrn = MPI_Dot(R, R, numProcs, myID); while((rnrn>Accuracy) && (n<N_iter)) { MMT(P, Ap, K, numProcs, myID); double a = rnrn/MPI_Dot(P, Ap, numProcs, myID); MPI_Multiply(P, a, temBuf, numProcs, myID); MPI_Add(X, temBuf, X, numProcs, myID); MPI_Multiply(Ap, a, temBuf, numProcs, myID); MPI_Subtract(R, temBuf, R, numProcs, myID); double b = MPI_Dot(R, R, numProcs, myID)/rnrn; MPI_Multiply(P, b, temBuf, numProcs, myID); MPI_Add(R, temBuf, P, numProcs, myID); rnrn = MPI_Dot(R, R, numProcs, myID); n++; } if(myID == ROOT) { ofstream file_log("evolution.log", ios_base::app); file_log<<n<<endl; file_log.close(); } delete [] R; delete [] P; delete [] Ap; delete [] temBuf; if(n == N_iter) { return 0; } else { return 1; } }
void sauverScore(QString fichier_nom,int score) { QFile file_log(fichier_nom); // Ouverture / Création du fichier if(!file_log.exists()){ file_log.open(QIODevice::WriteOnly | QIODevice::Text); } else { file_log.open(QIODevice::Append | QIODevice::Text); } QTextStream stream(&file_log); // On écrit dans le fichier stream << QString::number(score) << "\n"; // Fermeture du fichier file_log.close(); }
/* Funcao que carrega um arquivo de registros ja existente para uma btree Variaveis: reg- arquivo de registros btree- arvore binaria usr- struct que representa um determinado usuário pos- posicao da id no arquivo de registros reg- arquivo de registros buff- guarda o tamanho da string a ser armazenada no arquivo de registros buffer- string que guarda um registro inteiro */ void Load_reg(FILE *reg, arvoreb_t *btree) { usr_t usr; offset_t pos; char buff; char buffer[MAX_REG]; file_log("Execucao da criacao do arquivo de indice %s com base no arquivo de dados %s.\n", FILENAMEARVOREB, FILE_REG); rewind(reg); while(!feof(reg)) { pos = ftell(reg); fread(&buff, sizeof(char), 1, reg); fread(buffer, sizeof(char), buff, reg); strTOstruct(buffer, &usr); //Insere apenas na arvore binaria se o registro ainda nao foi removido if(usr.nome[0] != '*') { insertArvoreB(btree, usr.id, pos); } } }
int Trajectory(double* X1, double* X2, double* Phi1, double* Phi2, double* K, int numProcs, int myID) { double* Eta = new double[TOT]; double* P = new double[TOT]; double* F = new double[TOT]; double* temK = new double[TOT]; double* temBuf = new double[TOT]; double t = sqrt(0.5); int flag; MPI_Generate(Eta, t, numProcs, myID); M(Eta, Phi1, K, numProcs, myID); MPI_Generate(Eta, t, numProcs, myID); M(Eta, Phi2, K, numProcs, myID); MPI_Setzero(X1, numProcs, myID); MPI_Setzero(X2, numProcs, myID); MPI_Generate(P, 1.0, numProcs, myID); MPI_Assign(K, temK, numProcs, myID); double hamStart = Hamiltonian(X1, X2, Phi1, Phi2, P, K, numProcs, myID); flag = FermionForce(X1, X2, Phi1, Phi2, F, K, numProcs, myID); if(!flag) { MPI_Assign(temK, K, numProcs, myID); return 0; } MPI_Multiply(F, 0.5*dt, temBuf, numProcs, myID); MPI_Add(P, temBuf, P, numProcs, myID); for(int i = 0; i<(N_md-1); i++) { MPI_Multiply(P, dt, temBuf, numProcs, myID); MPI_Add(K, temBuf, K, numProcs, myID); flag = FermionForce(X1, X2, Phi1, Phi2, F, K, numProcs, myID); if(!flag) { MPI_Assign(temK, K, numProcs, myID); return 0; } MPI_Multiply(F, dt, temBuf, numProcs, myID); MPI_Add(P, temBuf, P, numProcs, myID); } MPI_Multiply(P, dt, temBuf, numProcs, myID); MPI_Add(K, temBuf, K, numProcs, myID); flag = FermionForce(X1, X2, Phi1, Phi2, F, K, numProcs, myID); if(!flag) { MPI_Assign(temK, K, numProcs, myID); return 0; } MPI_Multiply(F, 0.5*dt, temBuf, numProcs, myID); MPI_Add(P, temBuf, P, numProcs, myID); double hamEnd = Hamiltonian(X1, X2, Phi1, Phi2, P, K, numProcs, myID); double r = 0.0; if(myID == ROOT) { random_device rd; mt19937 generator(rd()); uniform_real_distribution<double> dis(0.0, 1.0); r = dis(generator); } MPI_Bcast(&r, 1, MPI_DOUBLE, ROOT, MPI_COMM_WORLD); double s = exp(hamStart-hamEnd); if(myID == ROOT) { ofstream file_log("evolution.log", ios_base::app); file_log<<"Hamiltoian: "<<hamStart<<" "<<hamEnd<<" "<<r<<" "<<s<<endl; file_log.close(); } delete [] Eta; delete [] P; delete [] F; delete [] temK; delete [] temBuf; if(r<s) { return 1; } else { MPI_Assign(temK, K, numProcs, myID); return 0; } }
TEST_F(FileLogTest, write) { ASSERT_FALSE(FileSystem().exists(get_test_file_path())); FileLog file_log(get_test_file_path()); static_cast<Log&>(file_log).write("test", Log::Level::DEBUG); ASSERT_TRUE(FileSystem().exists(get_test_file_path())); }
TEST_F(FileLogTest, constructor) { FileLog file_log(get_test_file_path()); }