From cb88334e34b8c53fe0234dab15e45516bf21ad31 Mon Sep 17 00:00:00 2001 From: Mingyu Chen Date: Thu, 30 May 2024 12:32:36 +0800 Subject: [PATCH] [fix](meta) fix catalog replay error (#35532) ``` Caused by: java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) ~[?:1.8.0_301] at org.apache.doris.catalog.ResourceMgr.getResource(ResourceMgr.java:166) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.datasource.CatalogProperty.catalogResource(CatalogProperty.java:67) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.datasource.CatalogProperty.getOrDefault(CatalogProperty.java:77) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.datasource.ExternalCatalog.setDefaultPropsIfMissing(ExternalCatalog.java:173) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.datasource.hive.HMSExternalCatalog.setDefaultPropsIfMissing(HMSExternalCatalog.java:238) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.datasource.ExternalCatalog.gsonPostProcess(ExternalCatalog.java:687) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.persist.gson.GsonUtils$PostProcessTypeAdapterFactory$1.read(GsonUtils.java:640) ~[doris-fe.jar:1.2-SNAPSHOT] at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:299) ~[gson-2.10.1.jar:?] at org.apache.doris.persist.gson.RuntimeTypeAdapterFactory$1.read(RuntimeTypeAdapterFactory.java:289) ~[doris-fe.jar:1.2-SNAPSHOT] ``` Introduced from #33610. When read meta image, the `resource` maybe null, we should ignore it. --- .../src/main/java/org/apache/doris/catalog/ResourceMgr.java | 5 +++++ .../java/org/apache/doris/datasource/CatalogProperty.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/ResourceMgr.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/ResourceMgr.java index 93cb194c90..e6fac7f07d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ResourceMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/ResourceMgr.java @@ -163,6 +163,11 @@ public class ResourceMgr implements Writable { } public Resource getResource(String name) { + // nameToResource == null iff this is in replay thread + // just return null to ignore this. + if (nameToResource == null) { + return null; + } return nameToResource.get(name); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java index 536ab74b28..50aea847e8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java @@ -61,7 +61,7 @@ public class CatalogProperty implements Writable { } private Resource catalogResource() { - if (catalogResource == null) { + if (!Strings.isNullOrEmpty(resource) && catalogResource == null) { synchronized (this) { if (catalogResource == null) { catalogResource = Env.getCurrentEnv().getResourceMgr().getResource(resource);