From e29fa34413bcc02cb3980b63b57b18fda745c516 Mon Sep 17 00:00:00 2001 From: deardeng <565620795@qq.com> Date: Tue, 13 Aug 2024 13:33:21 +0800 Subject: [PATCH 1/5] [fix](auth) Fix ResourceTypeEnum Compatibility Upgrade ``` RuntimeLogger 2024-08-12 22:47:37,850 ERROR (replayer|88) [EditLog.loadJournal():1244] replay Operation Type 64, log id: 13752 java.lang.NullPointerException: Cannot invoke "org.apache.doris.analysis.ResourceTypeEnum.ordinal()" because the return value of "org.apache.doris.analysis.ResourcePattern.getResourceType()" is null at org.apache.doris.mysql.privilege.Role.(Role.java:155) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.privilege.Auth.grantInternal(Auth.java:706) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.privilege.Auth.replayGrant(Auth.java:657) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.persist.EditLog.loadJournal(EditLog.java:466) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.catalog.Env.replayJournal(Env.java:2913) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.catalog.Env$4.runOneCycle(Env.java:2675) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.common.util.Daemon.run(Daemon.java:116) ~[doris-fe.jar:1.2-SNAPSHOT] ``` --- .../main/java/org/apache/doris/mysql/privilege/Role.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java index 8354c655e2a7f3..a3424952a4315c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java @@ -152,6 +152,14 @@ public Role(String roleName, TablePattern tablePattern, PrivBitSet privs, public Role(String roleName, ResourcePattern resourcePattern, PrivBitSet privs) throws DdlException { this.roleName = roleName; // grant has trans privs + // 2.1 -> 3.0 compatibility logic + int version = Env.getCurrentEnvJournalVersion(); + LOG.info("current version {}", version); + if (version >= FeMetaVersion.VERSION_129 + && resourcePattern.getResourceType() == null) { + // 2.1 not have cloud auth, so just transfer to ResourceTypeEnum.GENERAL + resourcePattern.setResourceType(ResourceTypeEnum.GENERAL); + } switch (resourcePattern.getResourceType()) { case GENERAL: this.resourcePatternToPrivs.put(resourcePattern, privs); From 7793afa6479e7c3b4272b19432dfc224b9e732ae Mon Sep 17 00:00:00 2001 From: deardeng <565620795@qq.com> Date: Tue, 13 Aug 2024 15:48:07 +0800 Subject: [PATCH 2/5] fix --- .../main/java/org/apache/doris/analysis/ResourcePattern.java | 4 ++++ .../src/main/java/org/apache/doris/mysql/privilege/Role.java | 5 +---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java index ecfcb9806138a4..2052c4e9eb8971 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java @@ -134,5 +134,9 @@ public void gsonPostProcess() throws IOException { if ("*".equals(resourceName)) { resourceName = "%"; } + // 2.x -> 3.0 compatibility logic + if (resourceType == null) { + resourceType = ResourceTypeEnum.GENERAL; + } } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java index a3424952a4315c..a729f21224f6a4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java @@ -153,10 +153,7 @@ public Role(String roleName, ResourcePattern resourcePattern, PrivBitSet privs) this.roleName = roleName; // grant has trans privs // 2.1 -> 3.0 compatibility logic - int version = Env.getCurrentEnvJournalVersion(); - LOG.info("current version {}", version); - if (version >= FeMetaVersion.VERSION_129 - && resourcePattern.getResourceType() == null) { + if (resourcePattern.getResourceType() == null) { // 2.1 not have cloud auth, so just transfer to ResourceTypeEnum.GENERAL resourcePattern.setResourceType(ResourceTypeEnum.GENERAL); } From ab08cd81917e277b3bd66fb79cb0fa7f30fc8f88 Mon Sep 17 00:00:00 2001 From: deardeng <565620795@qq.com> Date: Tue, 13 Aug 2024 15:49:55 +0800 Subject: [PATCH 3/5] fix --- .../src/main/java/org/apache/doris/mysql/privilege/Role.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java index a729f21224f6a4..354d45790551b6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java @@ -152,9 +152,9 @@ public Role(String roleName, TablePattern tablePattern, PrivBitSet privs, public Role(String roleName, ResourcePattern resourcePattern, PrivBitSet privs) throws DdlException { this.roleName = roleName; // grant has trans privs - // 2.1 -> 3.0 compatibility logic + // 2.x -> 3.0 compatibility logic if (resourcePattern.getResourceType() == null) { - // 2.1 not have cloud auth, so just transfer to ResourceTypeEnum.GENERAL + // 2.x not have cloud auth, so just transfer to ResourceTypeEnum.GENERAL resourcePattern.setResourceType(ResourceTypeEnum.GENERAL); } switch (resourcePattern.getResourceType()) { From 4f3173456ee7c5e74eea7f4977cf1fc83c127f9e Mon Sep 17 00:00:00 2001 From: deardeng <565620795@qq.com> Date: Tue, 13 Aug 2024 21:53:47 +0800 Subject: [PATCH 4/5] fix --- .../main/java/org/apache/doris/analysis/ResourcePattern.java | 2 +- .../src/main/java/org/apache/doris/mysql/privilege/Role.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java index 2052c4e9eb8971..8504df117839fe 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java @@ -71,7 +71,7 @@ public ResourcePattern(String resourceName, ResourceTypeEnum type) { resourceName = "%"; } this.resourceName = Strings.isNullOrEmpty(resourceName) ? "%" : resourceName; - resourceType = type; + resourceType = type == null ? ResourceTypeEnum.GENERAL : type; } public void setResourceType(ResourceTypeEnum type) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java index 354d45790551b6..c64a0377e6fce7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java @@ -836,6 +836,11 @@ private void revokeCols(Map> colPrivileges) { public void revokePrivs(ResourcePattern resourcePattern, PrivBitSet privs, boolean errOnNonExist) throws DdlException { PrivBitSet existingPriv; + // 2.x -> 3.0 compatibility logic + if (resourcePattern.getResourceType() == null) { + // 2.x not have cloud auth, so just transfer to ResourceTypeEnum.GENERAL + resourcePattern.setResourceType(ResourceTypeEnum.GENERAL); + } switch (resourcePattern.getResourceType()) { case GENERAL: existingPriv = resourcePatternToPrivs.get(resourcePattern); From f20b48a3613d5a765487f2aeefafde791382660f Mon Sep 17 00:00:00 2001 From: deardeng <565620795@qq.com> Date: Wed, 14 Aug 2024 10:17:28 +0800 Subject: [PATCH 5/5] fix --- .../org/apache/doris/analysis/ResourcePattern.java | 2 +- .../java/org/apache/doris/mysql/privilege/Role.java | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java index 8504df117839fe..2052c4e9eb8971 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ResourcePattern.java @@ -71,7 +71,7 @@ public ResourcePattern(String resourceName, ResourceTypeEnum type) { resourceName = "%"; } this.resourceName = Strings.isNullOrEmpty(resourceName) ? "%" : resourceName; - resourceType = type == null ? ResourceTypeEnum.GENERAL : type; + resourceType = type; } public void setResourceType(ResourceTypeEnum type) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java index c64a0377e6fce7..8354c655e2a7f3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java @@ -152,11 +152,6 @@ public Role(String roleName, TablePattern tablePattern, PrivBitSet privs, public Role(String roleName, ResourcePattern resourcePattern, PrivBitSet privs) throws DdlException { this.roleName = roleName; // grant has trans privs - // 2.x -> 3.0 compatibility logic - if (resourcePattern.getResourceType() == null) { - // 2.x not have cloud auth, so just transfer to ResourceTypeEnum.GENERAL - resourcePattern.setResourceType(ResourceTypeEnum.GENERAL); - } switch (resourcePattern.getResourceType()) { case GENERAL: this.resourcePatternToPrivs.put(resourcePattern, privs); @@ -836,11 +831,6 @@ private void revokeCols(Map> colPrivileges) { public void revokePrivs(ResourcePattern resourcePattern, PrivBitSet privs, boolean errOnNonExist) throws DdlException { PrivBitSet existingPriv; - // 2.x -> 3.0 compatibility logic - if (resourcePattern.getResourceType() == null) { - // 2.x not have cloud auth, so just transfer to ResourceTypeEnum.GENERAL - resourcePattern.setResourceType(ResourceTypeEnum.GENERAL); - } switch (resourcePattern.getResourceType()) { case GENERAL: existingPriv = resourcePatternToPrivs.get(resourcePattern);