提交 1f69a7a0 编写于 作者: A Alexander Burmak

Fixed merge issues

上级 c514ec32
...@@ -3124,7 +3124,7 @@ MergeTreeData::MutableDataPartsVector MergeTreeData::tryLoadPartsToAttach(const ...@@ -3124,7 +3124,7 @@ MergeTreeData::MutableDataPartsVector MergeTreeData::tryLoadPartsToAttach(const
namespace namespace
{ {
inline DiskSpace::ReservationPtr checkAndReturnReservation(UInt64 expected_size, ReservationPtr reservation) inline ReservationPtr checkAndReturnReservation(UInt64 expected_size, ReservationPtr reservation)
{ {
if (reservation) if (reservation)
return reservation; return reservation;
...@@ -3135,7 +3135,7 @@ inline DiskSpace::ReservationPtr checkAndReturnReservation(UInt64 expected_size, ...@@ -3135,7 +3135,7 @@ inline DiskSpace::ReservationPtr checkAndReturnReservation(UInt64 expected_size,
} }
DiskSpace::ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size) const ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size) const
{ {
expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size); expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size);
...@@ -3144,7 +3144,7 @@ DiskSpace::ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size) cons ...@@ -3144,7 +3144,7 @@ DiskSpace::ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size) cons
return checkAndReturnReservation(expected_size, std::move(reservation)); return checkAndReturnReservation(expected_size, std::move(reservation));
} }
DiskSpace::ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size, DiskSpace::SpacePtr space) const ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size, SpacePtr space) const
{ {
expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size); expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size);
...@@ -3153,36 +3153,36 @@ DiskSpace::ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size, Disk ...@@ -3153,36 +3153,36 @@ DiskSpace::ReservationPtr MergeTreeData::reserveSpace(UInt64 expected_size, Disk
return checkAndReturnReservation(expected_size, std::move(reservation)); return checkAndReturnReservation(expected_size, std::move(reservation));
} }
DiskSpace::ReservationPtr MergeTreeData::tryReserveSpace(UInt64 expected_size, DiskSpace::SpacePtr space) const ReservationPtr MergeTreeData::tryReserveSpace(UInt64 expected_size, SpacePtr space) const
{ {
expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size); expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size);
return space->reserve(expected_size); return space->reserve(expected_size);
} }
DiskSpace::ReservationPtr MergeTreeData::reserveSpacePreferringTTLRules(UInt64 expected_size, ReservationPtr MergeTreeData::reserveSpacePreferringTTLRules(UInt64 expected_size,
const MergeTreeDataPart::TTLInfos & ttl_infos, const MergeTreeDataPart::TTLInfos & ttl_infos,
time_t time_of_move) const time_t time_of_move) const
{ {
expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size); expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size);
DiskSpace::ReservationPtr reservation = tryReserveSpacePreferringTTLRules(expected_size, ttl_infos, time_of_move); ReservationPtr reservation = tryReserveSpacePreferringTTLRules(expected_size, ttl_infos, time_of_move);
return checkAndReturnReservation(expected_size, std::move(reservation)); return checkAndReturnReservation(expected_size, std::move(reservation));
} }
DiskSpace::ReservationPtr MergeTreeData::tryReserveSpacePreferringTTLRules(UInt64 expected_size, ReservationPtr MergeTreeData::tryReserveSpacePreferringTTLRules(UInt64 expected_size,
const MergeTreeDataPart::TTLInfos & ttl_infos, const MergeTreeDataPart::TTLInfos & ttl_infos,
time_t time_of_move) const time_t time_of_move) const
{ {
expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size); expected_size = std::max(RESERVATION_MIN_ESTIMATION_SIZE, expected_size);
DiskSpace::ReservationPtr reservation; ReservationPtr reservation;
auto ttl_entry = selectTTLEntryForTTLInfos(ttl_infos, time_of_move); auto ttl_entry = selectTTLEntryForTTLInfos(ttl_infos, time_of_move);
if (ttl_entry != nullptr) if (ttl_entry != nullptr)
{ {
DiskSpace::SpacePtr destination_ptr = ttl_entry->getDestination(storage_policy); SpacePtr destination_ptr = ttl_entry->getDestination(storage_policy);
if (!destination_ptr) if (!destination_ptr)
{ {
if (ttl_entry->destination_type == PartDestinationType::VOLUME) if (ttl_entry->destination_type == PartDestinationType::VOLUME)
...@@ -3207,7 +3207,7 @@ DiskSpace::ReservationPtr MergeTreeData::tryReserveSpacePreferringTTLRules(UInt6 ...@@ -3207,7 +3207,7 @@ DiskSpace::ReservationPtr MergeTreeData::tryReserveSpacePreferringTTLRules(UInt6
return reservation; return reservation;
} }
DiskSpace::SpacePtr MergeTreeData::TTLEntry::getDestination(const DiskSpace::StoragePolicyPtr & policy) const SpacePtr MergeTreeData::TTLEntry::getDestination(const StoragePolicyPtr & policy) const
{ {
if (destination_type == PartDestinationType::VOLUME) if (destination_type == PartDestinationType::VOLUME)
return policy->getVolumeByName(destination_name); return policy->getVolumeByName(destination_name);
...@@ -3217,7 +3217,7 @@ DiskSpace::SpacePtr MergeTreeData::TTLEntry::getDestination(const DiskSpace::Sto ...@@ -3217,7 +3217,7 @@ DiskSpace::SpacePtr MergeTreeData::TTLEntry::getDestination(const DiskSpace::Sto
return {}; return {};
} }
bool MergeTreeData::TTLEntry::isPartInDestination(const DiskSpace::StoragePolicyPtr & policy, const MergeTreeDataPart & part) const bool MergeTreeData::TTLEntry::isPartInDestination(const StoragePolicyPtr & policy, const MergeTreeDataPart & part) const
{ {
if (destination_type == PartDestinationType::VOLUME) if (destination_type == PartDestinationType::VOLUME)
{ {
......
#pragma once #pragma once
#include <Common/SimpleIncrement.h> #include <Common/SimpleIncrement.h>
#include <Common/DiskSpaceMonitor.h>
#include <Interpreters/Context.h> #include <Interpreters/Context.h>
#include <Interpreters/ExpressionActions.h> #include <Interpreters/ExpressionActions.h>
#include <Storages/IStorage.h> #include <Storages/IStorage.h>
...@@ -679,14 +678,14 @@ public: ...@@ -679,14 +678,14 @@ public:
ReservationPtr reserveSpace(UInt64 expected_size) const; ReservationPtr reserveSpace(UInt64 expected_size) const;
/// Reserves space at least 1MB on specific disk or volume. /// Reserves space at least 1MB on specific disk or volume.
DiskSpace::ReservationPtr reserveSpace(UInt64 expected_size, DiskSpace::SpacePtr space) const; ReservationPtr reserveSpace(UInt64 expected_size, SpacePtr space) const;
DiskSpace::ReservationPtr tryReserveSpace(UInt64 expected_size, DiskSpace::SpacePtr space) const; ReservationPtr tryReserveSpace(UInt64 expected_size, SpacePtr space) const;
/// Reserves space at least 1MB preferring best destination according to `ttl_infos`. /// Reserves space at least 1MB preferring best destination according to `ttl_infos`.
DiskSpace::ReservationPtr reserveSpacePreferringTTLRules(UInt64 expected_size, ReservationPtr reserveSpacePreferringTTLRules(UInt64 expected_size,
const MergeTreeDataPart::TTLInfos & ttl_infos, const MergeTreeDataPart::TTLInfos & ttl_infos,
time_t time_of_move) const; time_t time_of_move) const;
DiskSpace::ReservationPtr tryReserveSpacePreferringTTLRules(UInt64 expected_size, ReservationPtr tryReserveSpacePreferringTTLRules(UInt64 expected_size,
const MergeTreeDataPart::TTLInfos & ttl_infos, const MergeTreeDataPart::TTLInfos & ttl_infos,
time_t time_of_move) const; time_t time_of_move) const;
/// Choose disk with max available free space /// Choose disk with max available free space
...@@ -740,10 +739,10 @@ public: ...@@ -740,10 +739,10 @@ public:
ASTPtr entry_ast; ASTPtr entry_ast;
/// Returns destination disk or volume for this rule. /// Returns destination disk or volume for this rule.
DiskSpace::SpacePtr getDestination(const DiskSpace::StoragePolicyPtr & policy) const; SpacePtr getDestination(const StoragePolicyPtr & policy) const;
/// Checks if given part already belongs destination disk or volume for this rule. /// Checks if given part already belongs destination disk or volume for this rule.
bool isPartInDestination(const DiskSpace::StoragePolicyPtr & policy, const MergeTreeDataPart & part) const; bool isPartInDestination(const StoragePolicyPtr & policy, const MergeTreeDataPart & part) const;
}; };
const TTLEntry * selectTTLEntryForTTLInfos(const MergeTreeDataPart::TTLInfos & ttl_infos, time_t time_of_move) const; const TTLEntry * selectTTLEntryForTTLInfos(const MergeTreeDataPart::TTLInfos & ttl_infos, time_t time_of_move) const;
......
...@@ -228,7 +228,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataWriter::writeTempPart(BlockWithPa ...@@ -228,7 +228,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataWriter::writeTempPart(BlockWithPa
for (const auto & ttl_entry : data.move_ttl_entries) for (const auto & ttl_entry : data.move_ttl_entries)
updateTTL(ttl_entry, move_ttl_infos, move_ttl_infos.moves_ttl[ttl_entry.result_column], block, false); updateTTL(ttl_entry, move_ttl_infos, move_ttl_infos.moves_ttl[ttl_entry.result_column], block, false);
DiskSpace::ReservationPtr reservation = data.reserveSpacePreferringTTLRules(expected_size, move_ttl_infos, time(nullptr)); ReservationPtr reservation = data.reserveSpacePreferringTTLRules(expected_size, move_ttl_infos, time(nullptr));
MergeTreeData::MutableDataPartPtr new_data_part = MergeTreeData::MutableDataPartPtr new_data_part =
std::make_shared<MergeTreeData::DataPart>(data, reservation->getDisk(), part_name, new_part_info); std::make_shared<MergeTreeData::DataPart>(data, reservation->getDisk(), part_name, new_part_info);
......
...@@ -125,7 +125,7 @@ bool MergeTreePartsMover::selectPartsForMove( ...@@ -125,7 +125,7 @@ bool MergeTreePartsMover::selectPartsForMove(
const MergeTreeData::TTLEntry * ttl_entry_ptr = part->storage.selectTTLEntryForTTLInfos(part->ttl_infos, time_of_move); const MergeTreeData::TTLEntry * ttl_entry_ptr = part->storage.selectTTLEntryForTTLInfos(part->ttl_infos, time_of_move);
auto to_insert = need_to_move.find(part->disk); auto to_insert = need_to_move.find(part->disk);
DiskSpace::ReservationPtr reservation; ReservationPtr reservation;
if (ttl_entry_ptr) if (ttl_entry_ptr)
{ {
auto destination = ttl_entry_ptr->getDestination(policy); auto destination = ttl_entry_ptr->getDestination(policy);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册