예제 #1
0
파일: backup.cpp 프로젝트: DirektSPEED/ardb
	int Backup::Save()
	{
		if (m_is_saving)
		{
			return 1;
		}
		if (m_server->m_cfg.backup_dir.empty())
		{
			ERROR_LOG("Empty bakup dir for backup.");
			return -1;
		}
		//m_server->m_db->CloseAll();
		m_is_saving = true;
		int ret = 0;
		char cmd[m_server->m_cfg.data_base_path.size() + 256];
		make_dir(m_server->m_cfg.backup_dir);

		char dest[m_server->m_cfg.backup_dir.size() + 256];
		char shasumfile[m_server->m_cfg.backup_dir.size() + 256];
		uint32 now = time(NULL);
		sprintf(dest, "%s/dbsave-%u.tar", m_server->m_cfg.backup_dir.c_str(), now);
		sprintf(shasumfile, "%s/dbsave-%u.sha", m_server->m_cfg.backup_dir.c_str(), now);
		std::string source = m_server->m_cfg.data_base_path;
		if (0 == chdir(m_server->m_cfg.data_base_path.c_str()))
		{
			source = "*";
		}
		sprintf(cmd, "tar cf %s %s;", dest, source.c_str());
		ret = system(cmd);
		if (0 != chdir(m_server->m_cfg.home.c_str()))
		{
			WARN_LOG("Failed to change dir to home:%s", m_server->m_cfg.home.c_str());
		}
		if (-1 == ret)
		{
			ERROR_LOG( "Failed to create backup data archive:%s", dest);
		}
		else
		{
			std::string sha1sum_str;
			ret = sha1sum_file(dest, sha1sum_str);
			if (-1 == ret)
			{
				ERROR_LOG( "Failed to compute sha1sum for data archive:%s", dest);
			}
			else
			{
				INFO_LOG("Save file SHA1sum is %s", sha1sum_str.c_str());
				file_write_content(shasumfile, sha1sum_str);
				m_last_save = now;
			}
		}
		m_is_saving = false;
		return ret;
	}
예제 #2
0
파일: cluster.cpp 프로젝트: masterve/test
 void Cluster::OnInitWatcher(zhandle_t *zzh, int type, int state, const char *path)
 {
     INFO_LOG("Watcher %s state = %s for path %s", type2String(type), state2String(state), (path && strlen(path) > 0) ? path : "");
     if (type == ZOO_SESSION_EVENT)
     {
         if (state == ZOO_CONNECTED_STATE)
         {
             const clientid_t *id = zoo_client_id(zzh);
             if (m_zk_clientid.client_id == 0 || m_zk_clientid.client_id != id->client_id)
             {
                 m_zk_clientid = *id;
                 INFO_LOG("Got a new session id: 0x%llx", (long long )m_zk_clientid.client_id);
                 if (!g_db->GetConf().zk_clientid_file.empty())
                 {
                     std::string content;
                     content.assign((const char*) (&m_zk_clientid), sizeof(m_zk_clientid));
                     file_write_content(g_db->GetConf().zk_clientid_file, content);
                 }
             }
             m_state = ZK_STATE_CONNECTED;
         }
         else if (state == ZOO_AUTH_FAILED_STATE)
         {
             WARN_LOG("Zookeeper server authentication failure. Shutting down...");
             zookeeper_close(zzh);
             m_zk = NULL;
             m_state = ZK_STATE_DISCONNECT;
         }
         else if (state == ZOO_EXPIRED_SESSION_STATE)
         {
             WARN_LOG("Session expired. Shutting down...");
             zookeeper_close(zzh);
             m_zk = NULL;
             m_state = ZK_STATE_DISCONNECT;
         }
     }
 }