Skip to content

Commit 2570d1a

Browse files
dont use removed portions before remove from local_db - prevent race … (#12383)
1 parent bae1ca8 commit 2570d1a

File tree

7 files changed

+24
-22
lines changed

7 files changed

+24
-22
lines changed

ydb/core/tx/columnshard/columnshard_impl.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,7 +1334,9 @@ class TPortionConstructorV2 {
13341334
}
13351335

13361336
NOlap::TPortionDataAccessor BuildAccessor() {
1337-
AFL_VERIFY(PortionInfo && Records && Indexes);
1337+
AFL_VERIFY(PortionInfo);
1338+
AFL_VERIFY(Records)("portion_id", PortionInfo->GetPortionId())("path_id", PortionInfo->GetPathId());
1339+
AFL_VERIFY(Indexes)("portion_id", PortionInfo->GetPortionId())("path_id", PortionInfo->GetPathId());
13381340
std::vector<NOlap::TColumnChunkLoadContextV1> records = Records->BuildRecordsV1();
13391341
return NOlap::TPortionAccessorConstructor::BuildForLoading(std::move(PortionInfo), std::move(records), std::move(*Indexes));
13401342
}
@@ -1418,17 +1420,13 @@ class TTxAskPortionChunks: public TTransactionBase<TColumnShard> {
14181420
auto p = i.second.back();
14191421
TPortionConstructorV2 constructor(p);
14201422
{
1421-
auto rowset = db.Table<NColumnShard::Schema::IndexColumnsV2>().Prefix(p->GetPathId(), p->GetPortionId()).Select();
1423+
auto rowset = db.Table<NColumnShard::Schema::IndexColumnsV2>().Key(p->GetPathId(), p->GetPortionId()).Select();
14221424
if (!rowset.IsReady()) {
14231425
return false;
14241426
}
1425-
while (!rowset.EndOfSet()) {
1426-
NOlap::TColumnChunkLoadContextV2 info(rowset);
1427-
constructor.SetRecords(std::move(info));
1428-
if (!rowset.Next()) {
1429-
return false;
1430-
}
1431-
}
1427+
AFL_VERIFY(!rowset.EndOfSet())("path_id", p->GetPathId())("portion_id", p->GetPortionId())("debug", p->DebugString(true));
1428+
NOlap::TColumnChunkLoadContextV2 info(rowset);
1429+
constructor.SetRecords(std::move(info));
14321430
}
14331431
std::vector<NOlap::TIndexChunkLoadContext> indexes;
14341432
if (p->GetSchema(Self->GetIndexAs<NOlap::TColumnEngineForLogs>().GetVersionedIndex())->GetIndexesCount()) {

ydb/core/tx/columnshard/engines/reader/sys_view/abstract/filler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ NKikimr::TConclusionStatus TMetadataFromStore::DoFillMetadata(const NColumnShard
2323
auto pathInfos = logsIndex->GetTables(fromPathId, toPathId);
2424
for (auto&& pathInfo : pathInfos) {
2525
if (pathIds.emplace(pathInfo->GetPathId()).second) {
26-
metadata->IndexGranules.emplace_back(BuildGranuleView(*pathInfo, metadata->IsDescSorted()));
26+
metadata->IndexGranules.emplace_back(BuildGranuleView(*pathInfo, metadata->IsDescSorted(), metadata->GetRequestSnapshot()));
2727
}
2828
}
2929
}
@@ -52,7 +52,7 @@ NKikimr::TConclusionStatus TMetadataFromTable::DoFillMetadata(const NColumnShard
5252
if (!pathInfo) {
5353
continue;
5454
}
55-
metadata->IndexGranules.emplace_back(BuildGranuleView(*pathInfo, metadata->IsDescSorted()));
55+
metadata->IndexGranules.emplace_back(BuildGranuleView(*pathInfo, metadata->IsDescSorted(), metadata->GetRequestSnapshot()));
5656
break;
5757
}
5858
}

ydb/core/tx/columnshard/engines/reader/sys_view/abstract/filler.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ class IMetadataFiller {
99
private:
1010
virtual TConclusionStatus DoFillMetadata(const NColumnShard::TColumnShard* shard, const std::shared_ptr<TReadMetadataBase>& metadata, const TReadDescription& read) const = 0;
1111

12-
virtual NAbstract::TGranuleMetaView DoBuildGranuleView(const TGranuleMeta& granule, const bool reverse) const {
13-
return NAbstract::TGranuleMetaView(granule, reverse);
12+
virtual NAbstract::TGranuleMetaView DoBuildGranuleView(const TGranuleMeta& granule, const bool reverse, const TSnapshot& reqSnapshot) const {
13+
return NAbstract::TGranuleMetaView(granule, reverse, reqSnapshot);
1414
}
1515
public:
1616
virtual ~IMetadataFiller() = default;
@@ -19,8 +19,8 @@ class IMetadataFiller {
1919
return DoFillMetadata(shard, metadata, read);
2020
}
2121

22-
NAbstract::TGranuleMetaView BuildGranuleView(const TGranuleMeta& granule, const bool reverse) const {
23-
return DoBuildGranuleView(granule, reverse);
22+
NAbstract::TGranuleMetaView BuildGranuleView(const TGranuleMeta& granule, const bool reverse, const TSnapshot& reqSnapshot) const {
23+
return DoBuildGranuleView(granule, reverse, reqSnapshot);
2424
}
2525

2626
};

ydb/core/tx/columnshard/engines/reader/sys_view/abstract/granule_view.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ class TGranuleMetaView {
1111
YDB_READONLY_DEF(TPortions, Portions);
1212
YDB_READONLY_DEF(std::vector<NStorageOptimizer::TTaskDescription>, OptimizerTasks);
1313
public:
14-
TGranuleMetaView(const TGranuleMeta& granule, const bool reverse)
14+
TGranuleMetaView(const TGranuleMeta& granule, const bool reverse, const TSnapshot& reqSnapshot)
1515
: PathId(granule.GetPathId())
1616
{
1717
for (auto&& i : granule.GetPortions()) {
18+
if (i.second->IsRemovedFor(reqSnapshot)) {
19+
continue;
20+
}
1821
Portions.emplace_back(i.second);
1922
}
2023

ydb/core/tx/columnshard/engines/reader/sys_view/chunks/chunks.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ std::vector<std::pair<TString, NKikimr::NScheme::TTypeInfo>> TReadStatsMetadata:
128128
return GetColumns(TStatsIterator::StatsSchema, TStatsIterator::StatsSchema.KeyColumns);
129129
}
130130

131-
std::shared_ptr<NKikimr::NOlap::NReader::NSysView::NAbstract::TReadStatsMetadata> TConstructor::BuildMetadata(
131+
std::shared_ptr<NAbstract::TReadStatsMetadata> TConstructor::BuildMetadata(
132132
const NColumnShard::TColumnShard* self, const TReadDescription& read) const {
133133
auto* index = self->GetIndexOptional();
134134
return std::make_shared<TReadStatsMetadata>(index ? index->CopyVersionedIndexPtr() : nullptr, self->TabletID(),

ydb/core/tx/columnshard/engines/reader/sys_view/chunks/chunks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class TReadStatsMetadata: public NAbstract::TReadStatsMetadata {
2727
public:
2828
using TBase::TBase;
2929

30-
virtual std::unique_ptr<TScanIteratorBase> StartScan(const std::shared_ptr<TReadContext>& /*readContext*/) const override;
30+
virtual std::unique_ptr<TScanIteratorBase> StartScan(const std::shared_ptr<TReadContext>& readContext) const override;
3131
virtual std::vector<std::pair<TString, NScheme::TTypeInfo>> GetKeyYqlSchema() const override;
3232
};
3333

ydb/core/tx/columnshard/engines/reader/sys_view/optimizer/optimizer.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class TStatsIterator : public NAbstract::TStatsIterator<NKikimr::NSysView::Schem
4141

4242
class TMetadataFromStore: public NAbstract::TMetadataFromStore {
4343
protected:
44-
virtual NAbstract::TGranuleMetaView DoBuildGranuleView(const TGranuleMeta& granule, const bool reverse) const override {
45-
NAbstract::TGranuleMetaView result(granule, reverse);
44+
virtual NAbstract::TGranuleMetaView DoBuildGranuleView(const TGranuleMeta& granule, const bool reverse, const TSnapshot& reqSnapshot) const override {
45+
NAbstract::TGranuleMetaView result(granule, reverse, reqSnapshot);
4646
result.FillOptimizerTasks(granule, reverse);
4747
return result;
4848
}
@@ -52,8 +52,9 @@ class TMetadataFromStore: public NAbstract::TMetadataFromStore {
5252

5353
class TMetadataFromTable: public NAbstract::TMetadataFromTable {
5454
protected:
55-
virtual NAbstract::TGranuleMetaView DoBuildGranuleView(const TGranuleMeta& granule, const bool reverse) const override {
56-
NAbstract::TGranuleMetaView result(granule, reverse);
55+
virtual NAbstract::TGranuleMetaView DoBuildGranuleView(
56+
const TGranuleMeta& granule, const bool reverse, const TSnapshot& reqSnapshot) const override {
57+
NAbstract::TGranuleMetaView result(granule, reverse, reqSnapshot);
5758
result.FillOptimizerTasks(granule, reverse);
5859
return result;
5960
}

0 commit comments

Comments
 (0)