This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new d1a994e [fix](cpu-resource)(resource-tag) Allow set
cpu_resource_limit to -1 and fix resource tag bug(#6830)
d1a994e is described below
commit d1a994eff9e826ad0ef9c5536d128166cb3a7006
Author: Mingyu Chen <[email protected]>
AuthorDate: Thu Jan 13 23:11:37 2022 +0800
[fix](cpu-resource)(resource-tag) Allow set cpu_resource_limit to -1 and
fix resource tag bug(#6830)
1. Allow set cpu_resource_limit
-1 means unlimited
2. Drop replica not in valid tag
Otherwise, the migration task from a resource group to another may
never finish.
---
.../org/apache/doris/clone/TabletScheduler.java | 15 ++++++++++++++
.../java/org/apache/doris/common/ErrorCode.java | 4 ++--
.../java/org/apache/doris/mysql/MysqlProto.java | 2 +-
.../apache/doris/mysql/privilege/UserProperty.java | 9 ++++----
.../java/org/apache/doris/qe/ConnectProcessor.java | 2 +-
.../org/apache/doris/catalog/UserPropertyTest.java | 24 ++++++++++++++++++++--
6 files changed, 46 insertions(+), 10 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java
b/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java
index c98de60..c941817 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java
@@ -767,6 +767,7 @@ public class TabletScheduler extends MasterDaemon {
|| deleteReplicaWithLowerVersion(tabletCtx, force)
|| deleteReplicaOnSameHost(tabletCtx, force)
|| deleteReplicaNotInCluster(tabletCtx, force)
+ || deleteReplicaNotInValidTag(tabletCtx, force)
|| deleteReplicaChosenByRebalancer(tabletCtx, force)
|| deleteReplicaOnHighLoadBackend(tabletCtx, force)) {
// if we delete at least one redundant replica, we still throw a
SchedException with status FINISHED
@@ -892,6 +893,20 @@ public class TabletScheduler extends MasterDaemon {
return false;
}
+ private boolean deleteReplicaNotInValidTag(TabletSchedCtx tabletCtx,
boolean force) throws SchedException {
+ Tablet tablet = tabletCtx.getTablet();
+ List<Replica> replicas = tablet.getReplicas();
+ Map<Tag, Short> allocMap = tabletCtx.getReplicaAlloc().getAllocMap();
+ for (Replica replica : replicas) {
+ Backend be = infoService.getBackend(replica.getBackendId());
+ if (!allocMap.containsKey(be.getTag())) {
+ deleteReplicaInternal(tabletCtx, replica, "not in valid tag",
force);
+ return true;
+ }
+ }
+ return false;
+ }
+
private boolean deleteReplicaChosenByRebalancer(TabletSchedCtx tabletCtx,
boolean force) throws SchedException {
Long id = rebalancer.getToDeleteReplicaId(tabletCtx);
if (id == -1L) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
index d5863bd..8950fca 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
@@ -77,7 +77,7 @@ public enum ErrorCode {
ERR_HANDSHAKE_ERROR(1043, new byte[]{'0', '8', 'S', '0', '1'}, "Bad
handshake"),
ERR_DBACCESS_DENIED_ERROR(1044, new byte[]{'4', '2', '0', '0', '0'},
"Access denied for user '%s'@'%s' to " +
"database '%s'"),
- ERR_ACCESS_DENIED_ERROR(1045, new byte[]{'2', '8', '0', '0', '0'}, "Access
denied for user '%s'@'%s' (using " +
+ ERR_ACCESS_DENIED_ERROR(1045, new byte[]{'2', '8', '0', '0', '0'}, "Access
denied for user '%s' (using " +
"password: %s)"),
ERR_NO_DB_ERROR(1046, new byte[]{'3', 'D', '0', '0', '0'}, "No database
selected"),
ERR_UNKNOWN_COM_ERROR(1047, new byte[]{'0', '8', 'S', '0', '1'}, "Unknown
command"),
@@ -1685,7 +1685,7 @@ public enum ErrorCode {
"data cannot be inserted into table with empty partition. " +
"Use `SHOW PARTITIONS FROM %s` to see the currently
partitions of this table. "),
ERROR_SQL_AND_LIMITATIONS_SET_IN_ONE_RULE(5084, new byte[]{'4', '2', '0',
'0', '0'},
- "sql/sqlHash and partition_num/tablet_num/cardinality cannot be
set in one rule."),
+ "sql/sqlHash and partition_num/tablet_num/cardinality cannot be
set in one rule.")
;
// This is error code
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java
b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java
index 046df2a..ae55381 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java
@@ -70,7 +70,7 @@ public class MysqlProto {
String tmpUser = user;
if (tmpUser == null || tmpUser.isEmpty()) {
- ErrorReport.report(ErrorCode.ERR_ACCESS_DENIED_ERROR, "",
usePasswd);
+ ErrorReport.report(ErrorCode.ERR_ACCESS_DENIED_ERROR, "no user",
usePasswd);
return null;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/UserProperty.java
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/UserProperty.java
index 4041f8f..40f8725 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/UserProperty.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/UserProperty.java
@@ -276,8 +276,9 @@ public class UserProperty implements Writable {
throw new DdlException(key + " is not number");
}
- if (limit <= 0) {
- throw new DdlException(key + " is not valid");
+ // -1 means unlimited
+ if (limit <= 0 && limit != -1) {
+ throw new DdlException(key + " is not valid. Should not
larger than 0 or equal to -1");
}
cpuResourceLimit = limit;
@@ -465,7 +466,7 @@ public class UserProperty implements Writable {
result.add(Lists.newArrayList(clusterPrefix +
DppConfig.getPriorityKey(),
String.valueOf(dppConfig.getPriority())));
}
-
+
// get resolved ips if user has domain
Map<String, Set<String>> resolvedIPs = whiteList.getResolvedIPs();
List<String> ips = Lists.newArrayList();
@@ -526,7 +527,7 @@ public class UserProperty implements Writable {
// consume the flag of empty user name
in.readBoolean();
}
-
+
// user name
if (Catalog.getCurrentCatalogJournalVersion() <
FeMetaVersion.VERSION_30) {
qualifiedUser =
ClusterNamespace.getFullName(SystemInfoService.DEFAULT_CLUSTER,
Text.readString(in));
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
index ef11cae..51d5dea 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
@@ -476,7 +476,7 @@ public class ConnectProcessor {
// so ctx.getCurrentUserIdentity() will get null, and causing
NullPointerException after using it.
// return error directly.
TMasterOpResult result = new TMasterOpResult();
- ctx.getState().setError(ErrorCode.ERR_ACCESS_DENIED_ERROR,
"Missing current user identity. You need to upgrade this Frontend " +
+ ctx.getState().setError(ErrorCode.ERR_COMMON_ERROR, "Missing
current user identity. You need to upgrade this Frontend " +
"to the same version as Master Frontend.");
result.setMaxJournalId(Catalog.getCurrentCatalog().getMaxJournalId().longValue());
result.setPacket(getResultPacket());
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/UserPropertyTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/UserPropertyTest.java
index 90c6bc2..0702e21 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/UserPropertyTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/UserPropertyTest.java
@@ -24,11 +24,11 @@ import org.apache.doris.common.UserException;
import org.apache.doris.load.DppConfig;
import org.apache.doris.mysql.privilege.UserProperty;
+import com.google.common.collect.Lists;
+
import org.junit.Assert;
import org.junit.Test;
-import com.google.common.collect.Lists;
-
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
@@ -133,4 +133,24 @@ public class UserPropertyTest {
userProperty.update(properties);
Assert.assertEquals(3, userProperty.getSqlBlockRules().length);
}
+
+ @Test
+ public void testValidation() throws UserException {
+ List<Pair<String, String>> properties = Lists.newArrayList();
+ properties.add(Pair.create("cpu_resource_limit", "-1"));
+ UserProperty userProperty = new UserProperty();
+ userProperty.update(properties);
+ Assert.assertEquals(-1, userProperty.getCpuResourceLimit());
+
+ properties = Lists.newArrayList();
+ properties.add(Pair.create("cpu_resource_limit", "-2"));
+ userProperty = new UserProperty();
+ try {
+ userProperty.update(properties);
+ Assert.fail();
+ } catch (Exception e) {
+ Assert.assertTrue(e.getMessage().contains("is not valid"));
+ }
+ Assert.assertEquals(-1, userProperty.getCpuResourceLimit());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]