Bugfix
The tl:KBDataProducerTask creates an artificial UpdateChainLink chain to put its session into the revision to be processed. The tl:UpdateChainLink of the last KnowledgBase revision has no successor.
If further changes are committed during processing in the tl:KnowledgeBase, an attempt may be made to navigate the next UpdateChainLink. This leads to a NullPointerException:
Stacktrace
java.lang.NullPointerException at com.top_logic.knowledge.service.db2.DBKnowledgeBase.registerForCleanup(DBKnowledgeBase.java:5303) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.updateWithOlderValues(DBKnowledgeItem.java:774) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.updateValues(DBKnowledgeItem.java:730) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.updateDataForRevision(DBKnowledgeItem.java:370) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.findValues(DBKnowledgeItem.java:329) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.valuesAlive(DBKnowledgeItem.java:585) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.syncCacheLookupCache(DBKnowledgeBase.java:1415) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.cleanupAndLookupCache(DBKnowledgeBase.java:5107) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.getCachedKey(DBKnowledgeBase.java:5095) at com.top_logic.knowledge.service.db2.AbstractDBKnowledgeItem.getKnownKey(AbstractDBKnowledgeItem.java:125) at com.top_logic.knowledge.KnowledgeReferenceStorageImpl.loadObjectKey(KnowledgeReferenceStorageImpl.java:328) at com.top_logic.knowledge.ByIDReferenceStorageImpl.fetchValue(ByIDReferenceStorageImpl.java:88) at com.top_logic.dob.attr.storage.AbstractMOAttributeStorageImpl.loadValue(AbstractMOAttributeStorageImpl.java:73) at com.top_logic.knowledge.service.db2.AbstractDBKnowledgeItem.loadAttributeValues(AbstractDBKnowledgeItem.java:277) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.refetch(DBKnowledgeItem.java:687) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.findOrCreateItem(DBKnowledgeBase.java:5238) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.findOrCreateItem(DBKnowledgeBase.java:5194) at com.top_logic.knowledge.service.db2.MonomorphicSearch$FullObjectResult.findNext(MonomorphicSearch.java:322) at com.top_logic.knowledge.service.db2.MonomorphicSearch$FullObjectResult.getAll(MonomorphicSearch.java:301) at com.top_logic.knowledge.service.db2.MonomorphicSearch.search(MonomorphicSearch.java:73) at com.top_logic.knowledge.search.AbstractCompiledQuery.search(AbstractCompiledQuery.java:70) at com.top_logic.knowledge.service.db2.AbstractAssociationQuery.search(AbstractAssociationQuery.java:147) at com.top_logic.knowledge.service.db2.AssociationCache.query(AssociationCache.java:318) at com.top_logic.knowledge.service.db2.AssociationCache.getOrCreateGlobalCache(AssociationCache.java:124) at com.top_logic.knowledge.service.db2.AssociationCache.lookup(AssociationCache.java:67) at com.top_logic.knowledge.service.db2.AssociationCache.getLinksDirect(AssociationCache.java:53) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.resolveLinks(DBKnowledgeBase.java:4257) at com.top_logic.knowledge.service.AssociationQueryUtil.resolveWrappers(AssociationQueryUtil.java:54) at com.top_logic.knowledge.wrap.AbstractWrapper.resolveWrappersTyped(AbstractWrapper.java:997) at com.top_logic.knowledge.wrap.AbstractWrapper.resolveWrappersTyped(AbstractWrapper.java:968) at com.top_logic.contact.business.PersonContact.getPerson(PersonContact.java:147) [see appendix for the rest of the stack frames].
Test
Not stable reproducible.