mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-29 19:12:03 +00:00
Merge
This commit is contained in:
parent
cf2843d22c
commit
3aad8dad8f
@ -427,10 +427,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
void renameAndDetachPart(DataPartPtr part, const String & prefix);
|
void renameAndDetachPart(DataPartPtr part, const String & prefix);
|
||||||
|
|
||||||
/** Удаляет кусок из рабочего набора. clearOldParts удалит его файлы, если на него никто не ссылается.
|
|
||||||
*/
|
|
||||||
void removePart(DataPartPtr part);
|
|
||||||
|
|
||||||
/** Удалить неактуальные куски. Возвращает имена удаленных кусков.
|
/** Удалить неактуальные куски. Возвращает имена удаленных кусков.
|
||||||
*/
|
*/
|
||||||
Strings clearOldParts();
|
Strings clearOldParts();
|
||||||
|
@ -597,6 +597,7 @@ MergeTreeData::DataPartsVector MergeTreeData::renameTempPartAndReplace(MutableDa
|
|||||||
/// Переименовываем кусок.
|
/// Переименовываем кусок.
|
||||||
Poco::File(old_path).renameTo(new_path);
|
Poco::File(old_path).renameTo(new_path);
|
||||||
|
|
||||||
|
bool obsolete = false; /// Покрыт ли part каким-нибудь куском.
|
||||||
DataPartsVector res;
|
DataPartsVector res;
|
||||||
/// Куски, содержащиеся в part, идут в data_parts подряд, задевая место, куда вставился бы сам part.
|
/// Куски, содержащиеся в part, идут в data_parts подряд, задевая место, куда вставился бы сам part.
|
||||||
DataParts::iterator it = data_parts.lower_bound(part);
|
DataParts::iterator it = data_parts.lower_bound(part);
|
||||||
@ -606,6 +607,8 @@ MergeTreeData::DataPartsVector MergeTreeData::renameTempPartAndReplace(MutableDa
|
|||||||
--it;
|
--it;
|
||||||
if (!part->contains(**it))
|
if (!part->contains(**it))
|
||||||
{
|
{
|
||||||
|
if ((*it)->contains(*part))
|
||||||
|
obsolete = true;
|
||||||
++it;
|
++it;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -615,14 +618,28 @@ MergeTreeData::DataPartsVector MergeTreeData::renameTempPartAndReplace(MutableDa
|
|||||||
}
|
}
|
||||||
std::reverse(res.begin(), res.end()); /// Нужно получить куски в порядке возрастания.
|
std::reverse(res.begin(), res.end()); /// Нужно получить куски в порядке возрастания.
|
||||||
/// Пойдем вправо.
|
/// Пойдем вправо.
|
||||||
while (it != data_parts.end() && part->contains(**it))
|
while (it != data_parts.end())
|
||||||
{
|
{
|
||||||
|
if (!part->contains(**it))
|
||||||
|
{
|
||||||
|
if ((*it)->name == part->name || (*it)->contains(*part))
|
||||||
|
obsolete = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
res.push_back(*it);
|
res.push_back(*it);
|
||||||
(*it)->remove_time = time(0);
|
(*it)->remove_time = time(0);
|
||||||
data_parts.erase(it++);
|
data_parts.erase(it++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (obsolete)
|
||||||
|
{
|
||||||
|
LOG_WARNING(log, "Obsolete part " + part->name + " added");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
data_parts.insert(part);
|
data_parts.insert(part);
|
||||||
|
}
|
||||||
|
|
||||||
all_data_parts.insert(part);
|
all_data_parts.insert(part);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -336,7 +336,7 @@ MergeTreeData::DataPartPtr MergeTreeDataMerger::mergeParts(const MergeTreeData::
|
|||||||
/// Проверим, что удалились все исходные куски и только они.
|
/// Проверим, что удалились все исходные куски и только они.
|
||||||
if (replaced_parts.size() != parts.size())
|
if (replaced_parts.size() != parts.size())
|
||||||
{
|
{
|
||||||
LOG_ERROR(log, "Unexpected number of parts removed when adding " << new_data_part->name << ": " << replaced_parts.size()
|
LOG_WARNING(log, "Unexpected number of parts removed when adding " << new_data_part->name << ": " << replaced_parts.size()
|
||||||
<< " instead of " << parts.size());
|
<< " instead of " << parts.size());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -617,7 +617,8 @@ void StorageReplicatedMergeTree::pullLogsToQueue()
|
|||||||
|
|
||||||
bool operator<(const LogIterator & rhs) const
|
bool operator<(const LogIterator & rhs) const
|
||||||
{
|
{
|
||||||
return timestamp < rhs.timestamp;
|
/// Нужно доставать из очереди минимальный timestamp.
|
||||||
|
return timestamp > rhs.timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool readEntry(zkutil::ZooKeeper & zookeeper, const String & zookeeper_path)
|
bool readEntry(zkutil::ZooKeeper & zookeeper, const String & zookeeper_path)
|
||||||
@ -1395,11 +1396,15 @@ void StorageReplicatedMergeTree::drop()
|
|||||||
{
|
{
|
||||||
shutdown();
|
shutdown();
|
||||||
|
|
||||||
|
LOG_INFO(log, "Removing replica " << replica_path);
|
||||||
replica_is_active_node = nullptr;
|
replica_is_active_node = nullptr;
|
||||||
zookeeper->removeRecursive(replica_path);
|
zookeeper->removeRecursive(replica_path);
|
||||||
if (zookeeper->getChildren(zookeeper_path + "/replicas").empty())
|
if (zookeeper->getChildren(zookeeper_path + "/replicas").empty())
|
||||||
|
{
|
||||||
|
LOG_INFO(log, "Removing table " << zookeeper_path << " (this might take several minutes)");
|
||||||
zookeeper->removeRecursive(zookeeper_path);
|
zookeeper->removeRecursive(zookeeper_path);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void StorageReplicatedMergeTree::LogEntry::writeText(WriteBuffer & out) const
|
void StorageReplicatedMergeTree::LogEntry::writeText(WriteBuffer & out) const
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user