[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.
This commit is contained in:
Mingyu Chen
2024-05-30 12:32:36 +08:00
committed by yiguolei
parent 373d9ab988
commit cb88334e34
2 changed files with 6 additions and 1 deletions

View File

@ -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);
}

View File

@ -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);