Hi Geode devs, We received a comment of a Geode user saying that he got an error during a cache initialization and he found the error message was not too descriptive for him. The message was the following:
""Cache initialization for GemFireCache[id = 1081136680; isClosing = false; isShutDownAll = false; created = Fri Jun 19 11:42:29 UTC 2020; server = false; copyOnRead = false; lockLease = 120; lockTimeout = 60] failed because: org.apache.geode.GemFireIOException: While starting cache server CacheServer on port=40404 client subscription config policy=none client subscription config capacity=1 client subscription config overflow directory=."" The message was logged by GemFireCacheImpl as: logger.error("Cache initialization for " + toString() + " failed because:", throwable); As you can see, the "throwable" object was a GemFireIOException, which was thrown by CacheCreation. GemFireIOException wraps other exceptions (I have checked the code and they are mostly IOExceptions, but also MessageTooLargeException, FileNotFoundException, SerializationException or just Exception) and it could be the case that useful information about the cause of the exception is hidden, depending on how meaningful is the message used in the constructor: public GemFireIOException(String message, Throwable cause) { super(message, cause); } With this constructor, the "cause" message is not included in the GemFireIOException message. I was thinking about changing the constructor to something like: public GemFireIOException(String message, Throwable cause) { super(message + ( (cause != null) ? " ( " + cause.getMessage() + " )" : ""), cause); } Whats your opinion about this? Thanks in advance, Alberto B.