Hi Geode devs,
I opened a new ticket https://issues.apache.org/jira/browse/GEODE-9409
regarding NullPointerException on creating region while one of the servers is
restarting.
If we run the "create region" command through gfsh while the server is starting
it passed, but if the server is restarted then it fails. The difference is that
when we restarted the server, we kill them and start again. As it has already a
server directory, it takes more time to get the server up as expected.
In that case, if we run the "create region" command it can happen that the
cache is not fully created and we are trying to do something on that. That can
lead to the NullPointerException, as creating region catches pdxRegistry from
the cache while doing findDiskStore, but sometimes it is not initialized in the
cache yet. So every method run against that will throw NullPoniterException.
There is a part of the code where the exception is thrown:
DiskStoreImpl findDiskStore(RegionAttributes regionAttributes,
InternalRegionArguments internalRegionArgs) {
// validate that persistent type registry is persistent
if (getAttributes().getDataPolicy().withPersistence()) {
getCache().getPdxRegistry().creatingPersistentRegion();
}
As I already mention, getPdxRegistry(LocalRegion.java) will be null if it is
not yet initialized in create(CacheCreation.java):
DiskStoreAttributesCreation pdxRegDSC = initializePdxDiskStore(cache);
cache.initializePdxRegistry();
createDiskStores(cache, pdxRegDSC);
I tried to do some fixes, but without a success. 🙁
It can be passed if we add some retry and sleep, but that is not acceptable.
So if someone has some idea how to do some wait until pdxRegistry is
initialized or something else what will help us to avoid this problem?
BR,
Mario