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

Reply via email to