void CConnectionPoolManager::open( CDbStatusItem* pDbStatusItem )
{

	//check pool
	LOG_DEBUG<<"connectionStr="<<pDbStatusItem->getConnectionString()
		<<" "<<" is not in DB Connection Pool, then create new one";
	
	createConnectionPool(pDbStatusItem);
}
Example #2
0
		t_bool CApplication::runMigrationTasks()
		{
			// create connection pool

			t_uint threads = CString::toUnsignedInt(CConfig::instance()->value("threads", "1"));
			CLog::instance()->information("Count of working threads: " + CString::fromNumber(threads));

			if (!createConnectionPool(threads - 1))
			{
				return false;
			}

			// create tasks

			CString destination_schema = CConfig::instance()->value("destination_schema");

			t_uint range_begin = 0;
			t_uint range_end = 0;

			t_uint range = m_tables.size() / threads;

			for (t_uint i = 0, j = 0; i < m_tables.size() - range; i += range + 1, ++j)
			{
				range_begin = i;
				range_end = i + range;

				std::unique_ptr<CTask> task = std::unique_ptr<CTask>(new CMigrationTask(m_source_pool.at(j), m_destination_pool.at(j), destination_schema, m_tables, range_begin, range_end));

				m_migration_tasks.push_back(std::move(task));
			}

			range_begin = range_end + 1;
			range_end =  m_tables.size() - 1;

			std::unique_ptr<CTask> task = std::unique_ptr<CTask>(new CMigrationTask(std::move(m_source), std::move(m_destination), destination_schema, m_tables, range_begin, range_end));

			// executing tasks

			for (t_uint i = 0; i < m_migration_tasks.size(); ++i)
			{
				executeTask(m_migration_tasks.at(i).get());
			}

			task->execute();

			// wait for completion

			for (t_uint i = 0; i < m_migration_tasks.size(); ++i)
			{
				while (!m_migration_tasks.at(i)->isExecuted())
				{
				}
			}

			return true;
		}