示例#1
0
/*从文件中读取同步数据,然后向备用侧进行同步*/
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;
}
示例#2
0
/*
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);
	}
}
示例#3
0
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;
	}
}
示例#4
0
/*
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();
}
示例#5
0
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;
}
示例#6
0
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;
    }
}
示例#7
0
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();


}
示例#8
0
/*
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);
		}
	}
}
示例#9
0
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;
    }
}
示例#10
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()));
}
示例#11
0
TEST_F(FileLogTest, constructor) {
  FileLog file_log(get_test_file_path());
}