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; }
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; } } }