Example #1
0
	KeyValueEngine* LMDBEngineFactory::CreateDB(const std::string& name)
	{
		if (!m_env_opened)
		{
			make_dir(m_cfg.path);
			int env_opt = MDB_NOSYNC | MDB_NOMETASYNC | MDB_NOMETASYNC;
			int rc = mdb_env_open(m_env, m_cfg.path.c_str(), env_opt, 0664);
			if (rc != 0)
			{
				ERROR_LOG("Failed to open mdb:%s\n", mdb_strerror(rc));
				return NULL;
			}
			m_env_opened = true;
		}
		LMDBEngine* engine = new LMDBEngine();
		LMDBConfig cfg = m_cfg;
		if (engine->Init(cfg, m_env, name) != 0)
		{
			DELETE(engine);
			return NULL;
		}
		DEBUG_LOG(
		        "Create DB:%s at path:%s success", name.c_str(), cfg.path.c_str());
		return engine;
	}
Example #2
0
	void LMDBEngineFactory::DestroyDB(KeyValueEngine* engine)
	{
		LMDBEngine* kcdb = (LMDBEngine*) engine;
		if (NULL != kcdb)
		{
			kcdb->Clear();
		}
		DELETE(engine);
	}
Example #3
0
 KeyValueEngine* LMDBEngineFactory::CreateDB(const std::string& name)
 {
     if (!m_env_opened)
     {
         mdb_env_create(&m_env);
         int page_size = sysconf(_SC_PAGE_SIZE);
         int rc = mdb_env_set_mapsize(m_env, (m_cfg.max_db_size / page_size) * page_size);
         if (rc != MDB_SUCCESS)
         {
             ERROR_LOG("Invalid db size:%llu for reason:%s", m_cfg.max_db_size, mdb_strerror(rc));
             return NULL;
         }
         char tmp[m_cfg.path.size() + name.size() + 10];
         sprintf(tmp, "%s/%s", m_cfg.path.c_str(), name.c_str());
         m_cfg.path = tmp;
         make_dir(m_cfg.path);
         int env_opt = MDB_NOSYNC | MDB_NOMETASYNC | MDB_WRITEMAP | MDB_MAPASYNC ;
         if(!m_cfg.readahead)
         {
             env_opt |= MDB_NORDAHEAD;
         }
         rc = mdb_env_open(m_env, m_cfg.path.c_str(), env_opt, 0664);
         if (rc != MDB_SUCCESS)
         {
             ERROR_LOG("Failed to open mdb:%s", mdb_strerror(rc));
             return NULL;
         }
         m_env_opened = true;
     }
     LMDBEngine* engine = new LMDBEngine();
     LMDBConfig cfg = m_cfg;
     if (engine->Init(cfg, m_env, name) != 0)
     {
         DELETE(engine);
         return NULL;
     }
     DEBUG_LOG("Create DB:%s at path:%s success", name.c_str(), cfg.path.c_str());
     return engine;
 }