Skip to content

Commit 223b4d9

Browse files
committed
[fix](fe) move some variables from Tablet to LocalTablet which are not used in CloudTablet
1 parent 73fe371 commit 223b4d9

File tree

12 files changed

+109
-54
lines changed

12 files changed

+109
-54
lines changed

fe/fe-core/src/main/java/org/apache/doris/catalog/EnvFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ public Type getTabletClass() {
9999
}
100100

101101
public Tablet createTablet() {
102-
return new Tablet();
102+
return new LocalTablet();
103103
}
104104

105105
public Tablet createTablet(long tabletId) {
106-
return new Tablet(tabletId);
106+
return new LocalTablet(tabletId);
107107
}
108108

109109
public Replica createReplica() {
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
package org.apache.doris.catalog;
19+
20+
import org.apache.doris.common.Pair;
21+
import org.apache.doris.common.lock.MonitoredReentrantReadWriteLock;
22+
23+
import com.google.gson.annotations.SerializedName;
24+
import org.apache.logging.log4j.LogManager;
25+
import org.apache.logging.log4j.Logger;
26+
27+
import java.util.Comparator;
28+
29+
public class LocalTablet extends Tablet {
30+
private static final Logger LOG = LogManager.getLogger(LocalTablet.class);
31+
32+
// cooldown conf
33+
@SerializedName(value = "cri", alternate = {"cooldownReplicaId"})
34+
private long cooldownReplicaId = -1;
35+
@SerializedName(value = "ctm", alternate = {"cooldownTerm"})
36+
private long cooldownTerm = -1;
37+
private MonitoredReentrantReadWriteLock cooldownConfLock = new MonitoredReentrantReadWriteLock();
38+
39+
public LocalTablet() {
40+
}
41+
42+
public LocalTablet(long tabletId) {
43+
super(tabletId);
44+
}
45+
46+
public void setCooldownConf(long cooldownReplicaId, long cooldownTerm) {
47+
cooldownConfLock.writeLock().lock();
48+
this.cooldownReplicaId = cooldownReplicaId;
49+
this.cooldownTerm = cooldownTerm;
50+
cooldownConfLock.writeLock().unlock();
51+
}
52+
53+
public long getCooldownReplicaId() {
54+
return cooldownReplicaId;
55+
}
56+
57+
public Pair<Long, Long> getCooldownConf() {
58+
cooldownConfLock.readLock().lock();
59+
try {
60+
return Pair.of(cooldownReplicaId, cooldownTerm);
61+
} finally {
62+
cooldownConfLock.readLock().unlock();
63+
}
64+
}
65+
66+
@Override
67+
public long getRemoteDataSize() {
68+
// if CooldownReplicaId is not init
69+
// [fix](fe) move some variables from Tablet to LocalTablet which are not used in CloudTablet
70+
if (cooldownReplicaId <= 0) {
71+
return 0;
72+
}
73+
for (Replica r : replicas) {
74+
if (r.getId() == cooldownReplicaId) {
75+
return r.getRemoteDataSize();
76+
}
77+
}
78+
// return replica with max remoteDataSize
79+
return replicas.stream().max(Comparator.comparing(Replica::getRemoteDataSize)).get().getRemoteDataSize();
80+
}
81+
}

fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.apache.doris.cloud.catalog.CloudReplica;
2424
import org.apache.doris.common.Config;
2525
import org.apache.doris.common.FeConstants;
26-
import org.apache.doris.common.Pair;
2726
import org.apache.doris.common.UserException;
2827
import org.apache.doris.resource.Tag;
2928
import org.apache.doris.system.Backend;
@@ -41,7 +40,6 @@
4140

4241
import java.util.ArrayList;
4342
import java.util.Collections;
44-
import java.util.Comparator;
4543
import java.util.Iterator;
4644
import java.util.List;
4745
import java.util.Map;
@@ -117,13 +115,6 @@ public TabletHealth() {
117115
@SerializedName(value = "ic", alternate = {"isConsistent"})
118116
private boolean isConsistent;
119117

120-
// cooldown conf
121-
@SerializedName(value = "cri", alternate = {"cooldownReplicaId"})
122-
private long cooldownReplicaId = -1;
123-
@SerializedName(value = "ctm", alternate = {"cooldownTerm"})
124-
private long cooldownTerm = -1;
125-
private final Object cooldownConfLock = new Object();
126-
127118
// last time that the tablet checker checks this tablet.
128119
// no need to persist
129120
private long lastStatusCheckTime = -1;
@@ -182,23 +173,6 @@ public boolean isConsistent() {
182173
return isConsistent;
183174
}
184175

185-
public void setCooldownConf(long cooldownReplicaId, long cooldownTerm) {
186-
synchronized (cooldownConfLock) {
187-
this.cooldownReplicaId = cooldownReplicaId;
188-
this.cooldownTerm = cooldownTerm;
189-
}
190-
}
191-
192-
public long getCooldownReplicaId() {
193-
return cooldownReplicaId;
194-
}
195-
196-
public Pair<Long, Long> getCooldownConf() {
197-
synchronized (cooldownConfLock) {
198-
return Pair.of(cooldownReplicaId, cooldownTerm);
199-
}
200-
}
201-
202176
protected boolean isLatestReplicaAndDeleteOld(Replica newReplica) {
203177
boolean delete = false;
204178
boolean hasBackend = false;
@@ -494,17 +468,7 @@ public long getDataSize(boolean singleReplica, boolean filterSizeZero) {
494468
}
495469

496470
public long getRemoteDataSize() {
497-
// if CooldownReplicaId is not init
498-
if (cooldownReplicaId <= 0) {
499-
return 0;
500-
}
501-
for (Replica r : replicas) {
502-
if (r.getId() == cooldownReplicaId) {
503-
return r.getRemoteDataSize();
504-
}
505-
}
506-
// return replica with max remoteDataSize
507-
return replicas.stream().max(Comparator.comparing(Replica::getRemoteDataSize)).get().getRemoteDataSize();
471+
return 0;
508472
}
509473

510474
public long getRowCount(boolean singleReplica) {

fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -672,14 +672,14 @@ private boolean needSync(Replica replicaInFe, TTabletInfo backendTabletInfo) {
672672

673673
private void handleCooldownConf(TabletMeta tabletMeta, TTabletInfo beTabletInfo,
674674
List<CooldownConf> cooldownConfToPush, List<CooldownConf> cooldownConfToUpdate) {
675-
Tablet tablet;
675+
LocalTablet tablet;
676676
try {
677677
OlapTable table = (OlapTable) Env.getCurrentInternalCatalog().getDbNullable(tabletMeta.getDbId())
678678
.getTable(tabletMeta.getTableId())
679679
.get();
680680
table.readLock();
681681
try {
682-
tablet = table.getPartition(tabletMeta.getPartitionId()).getIndex(tabletMeta.getIndexId())
682+
tablet = (LocalTablet) table.getPartition(tabletMeta.getPartitionId()).getIndex(tabletMeta.getIndexId())
683683
.getTablet(beTabletInfo.tablet_id);
684684
} finally {
685685
table.readUnlock();

fe/fe-core/src/main/java/org/apache/doris/common/proc/ReplicasProcNode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.apache.doris.catalog.DiskInfo;
2121
import org.apache.doris.catalog.Env;
22+
import org.apache.doris.catalog.LocalTablet;
2223
import org.apache.doris.catalog.OlapTable;
2324
import org.apache.doris.catalog.Replica;
2425
import org.apache.doris.catalog.Tablet;
@@ -136,7 +137,7 @@ public ProcResult fetchResult() throws AnalysisException {
136137
path,
137138
metaUrl,
138139
compactionUrl,
139-
String.valueOf(tablet.getCooldownConf().first),
140+
String.valueOf(tablet instanceof LocalTablet ? ((LocalTablet) tablet).getCooldownConf().first : ""),
140141
cooldownMetaId,
141142
String.valueOf(queryHits));
142143
if (Config.isCloudMode()) {

fe/fe-core/src/main/java/org/apache/doris/common/proc/TabletsProcDir.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.apache.doris.catalog.DiskInfo;
2121
import org.apache.doris.catalog.Env;
22+
import org.apache.doris.catalog.LocalTablet;
2223
import org.apache.doris.catalog.MaterializedIndex;
2324
import org.apache.doris.catalog.Replica;
2425
import org.apache.doris.catalog.Table;
@@ -178,7 +179,8 @@ public List<List<Comparable>> fetchComparableResult(long version, long backendId
178179
String compactionUrl = String.format(
179180
"http://" + hostPort + "/api/compaction/show?tablet_id=%d", tabletId);
180181
tabletInfo.add(compactionUrl);
181-
tabletInfo.add(tablet.getCooldownConf().first);
182+
tabletInfo.add(
183+
tablet instanceof LocalTablet ? ((LocalTablet) tablet).getCooldownConf().first : "");
182184
if (replica.getCooldownMetaId() == null) {
183185
tabletInfo.add("");
184186
} else {

fe/fe-core/src/main/java/org/apache/doris/cooldown/CooldownConfHandler.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.doris.cooldown;
1919

2020
import org.apache.doris.catalog.Env;
21+
import org.apache.doris.catalog.LocalTablet;
2122
import org.apache.doris.catalog.OlapTable;
2223
import org.apache.doris.catalog.Replica;
2324
import org.apache.doris.catalog.Tablet;
@@ -83,7 +84,7 @@ private void updateCooldownConf(List<CooldownConf> confToUpdate) {
8384
int index = rand.nextInt(replicas.size());
8485
conf.setCooldownReplicaId(replicas.get(index).getId());
8586
// find TabletMeta to get cooldown term
86-
Tablet tablet = getTablet(conf);
87+
LocalTablet tablet = (LocalTablet) getTablet(conf);
8788
if (tablet == null || tablet.getCooldownConf().second != conf.cooldownTerm) {
8889
// If tablet.cooldownTerm != conf.cooldownTerm, means cooldown conf of this tablet has been updated,
8990
// should skip this update.
@@ -100,7 +101,7 @@ private void updateCooldownConf(List<CooldownConf> confToUpdate) {
100101

101102
// update Tablet
102103
for (CooldownConf conf : updatedConf) {
103-
Tablet tablet = tabletMap.get(conf.tabletId);
104+
LocalTablet tablet = (LocalTablet) tabletMap.get(conf.tabletId);
104105
tablet.setCooldownConf(conf.cooldownReplicaId, conf.cooldownTerm);
105106
LOG.info("update cooldown conf. tabletId={} cooldownReplicaId={} cooldownTerm={}", conf.tabletId,
106107
conf.cooldownReplicaId, conf.cooldownTerm);
@@ -135,7 +136,7 @@ private static Tablet getTablet(CooldownConf conf) {
135136

136137
public static void replayUpdateCooldownConf(CooldownConfList cooldownConfList) {
137138
cooldownConfList.getCooldownConf().forEach(conf -> {
138-
Tablet tablet = getTablet(conf);
139+
LocalTablet tablet = (LocalTablet) getTablet(conf);
139140
if (tablet != null) {
140141
tablet.setCooldownConf(conf.cooldownReplicaId, conf.cooldownTerm);
141142
}

fe/fe-core/src/main/java/org/apache/doris/master/ReportHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.doris.catalog.DiskInfo;
2626
import org.apache.doris.catalog.Env;
2727
import org.apache.doris.catalog.Index;
28+
import org.apache.doris.catalog.LocalTablet;
2829
import org.apache.doris.catalog.MaterializedIndex;
2930
import org.apache.doris.catalog.MaterializedIndex.IndexState;
3031
import org.apache.doris.catalog.MaterializedIndexMeta;
@@ -1533,7 +1534,7 @@ private static boolean addReplica(long tabletId, TabletMeta tabletMeta, TTabletI
15331534
if (backendTabletInfo.isSetCooldownMetaId()) {
15341535
// replica has cooldowned data
15351536
do {
1536-
Pair<Long, Long> cooldownConf = tablet.getCooldownConf();
1537+
Pair<Long, Long> cooldownConf = ((LocalTablet) tablet).getCooldownConf();
15371538
if (backendTabletInfo.getCooldownTerm() > cooldownConf.second) {
15381539
// should not be here
15391540
LOG.warn("report cooldownTerm({}) > cooldownTerm in TabletMeta({}), tabletId={}",

fe/fe-core/src/main/java/org/apache/doris/persist/gson/GsonUtils.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
import org.apache.doris.catalog.JdbcTable;
8686
import org.apache.doris.catalog.ListPartitionInfo;
8787
import org.apache.doris.catalog.ListPartitionItem;
88+
import org.apache.doris.catalog.LocalTablet;
8889
import org.apache.doris.catalog.MTMV;
8990
import org.apache.doris.catalog.MapType;
9091
import org.apache.doris.catalog.MysqlDBTable;
@@ -528,10 +529,11 @@ public class GsonUtils {
528529
static {
529530
tabletTypeAdapterFactory = RuntimeTypeAdapterFactory
530531
.of(Tablet.class, "clazz")
531-
.registerSubtype(Tablet.class, Tablet.class.getSimpleName())
532+
.registerSubtype(LocalTablet.class, LocalTablet.class.getSimpleName())
532533
.registerSubtype(CloudTablet.class, CloudTablet.class.getSimpleName());
533534
if (Config.isNotCloudMode()) {
534-
tabletTypeAdapterFactory.registerDefaultSubtype(Tablet.class);
535+
tabletTypeAdapterFactory.registerDefaultSubtype(LocalTablet.class);
536+
tabletTypeAdapterFactory.registerCompatibleSubtype(LocalTablet.class, Tablet.class.getSimpleName());
535537
} else {
536538
// compatible with old cloud code.
537539
tabletTypeAdapterFactory.registerDefaultSubtype(CloudTablet.class);

fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.doris.catalog.DistributionInfo;
3333
import org.apache.doris.catalog.HashDistributionInfo;
3434
import org.apache.doris.catalog.Index;
35+
import org.apache.doris.catalog.LocalTablet;
3536
import org.apache.doris.catalog.MaterializedIndex;
3637
import org.apache.doris.catalog.OlapTable;
3738
import org.apache.doris.catalog.Partition;
@@ -559,8 +560,8 @@ private void addScanRangeLocations(Partition partition,
559560
}
560561
}
561562

562-
if (isEnableCooldownReplicaAffinity(context)) {
563-
final long coolDownReplicaId = tablet.getCooldownReplicaId();
563+
if (Config.isNotCloudMode() && isEnableCooldownReplicaAffinity(context)) {
564+
final long coolDownReplicaId = ((LocalTablet) tablet).getCooldownReplicaId();
564565
// we prefer to query using cooldown replica to make sure the cache is fully utilized
565566
// for example: consider there are 3BEs(A,B,C) and each has one replica for tablet X. and X
566567
// is now under cooldown

0 commit comments

Comments
 (0)