This commit is contained in:
Michael Kolupaev 2014-05-16 19:55:57 +04:00
parent ca6f5df30e
commit 06edb12dbe
3 changed files with 26 additions and 4 deletions

View File

@ -17,7 +17,7 @@ public:
auto part_blocks = storage.writer.splitBlockIntoParts(block); auto part_blocks = storage.writer.splitBlockIntoParts(block);
for (auto & current_block : part_blocks) for (auto & current_block : part_blocks)
{ {
size_t parts_count = storage.data.getDataPartsCount(); size_t parts_count = storage.data.getMaxPartsCountForMonth();
if (parts_count > storage.data.settings.parts_to_delay_insert) if (parts_count > storage.data.settings.parts_to_delay_insert)
{ {
double delay = std::pow(storage.data.settings.insert_delay_step, parts_count - storage.data.settings.parts_to_delay_insert); double delay = std::pow(storage.data.settings.insert_delay_step, parts_count - storage.data.settings.parts_to_delay_insert);

View File

@ -439,7 +439,10 @@ public:
*/ */
DataParts getDataParts(); DataParts getDataParts();
DataParts getAllDataParts(); DataParts getAllDataParts();
size_t getDataPartsCount();
/** Максимальное количество кусков в одном месяце.
*/
size_t getMaxPartsCountForMonth();
/** Возвращает кусок с указанным именем или кусок, покрывающий его. Если такого нет, возвращает nullptr. /** Возвращает кусок с указанным именем или кусок, покрывающий его. Если такого нет, возвращает nullptr.
* Если including_inactive, просматриваются также неактивные куски (all_data_parts). * Если including_inactive, просматриваются также неактивные куски (all_data_parts).

View File

@ -713,11 +713,30 @@ MergeTreeData::DataParts MergeTreeData::getAllDataParts()
return all_data_parts; return all_data_parts;
} }
size_t MergeTreeData::getDataPartsCount() size_t MergeTreeData::getMaxPartsCountForMonth()
{ {
Poco::ScopedLock<Poco::FastMutex> lock(data_parts_mutex); Poco::ScopedLock<Poco::FastMutex> lock(data_parts_mutex);
return data_parts.size(); size_t res = 0;
size_t cur_count = 0;
DayNum_t cur_month = DayNum_t(0);
for (const auto & part : data_parts)
{
if (part->left_month == cur_month)
{
++cur_count;
}
else
{
cur_month = part->left_month;
cur_count = 1;
}
res = std::max(res, cur_count);
}
return res;
} }
MergeTreeData::DataPartPtr MergeTreeData::getContainingPart(const String & part_name, bool including_inactive) MergeTreeData::DataPartPtr MergeTreeData::getContainingPart(const String & part_name, bool including_inactive)