[ https://issues.apache.org/jira/browse/SOLR-11069?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16087076#comment-16087076 ]
Amrit Sarkar commented on SOLR-11069: ------------------------------------- So when we enable buffering in CDCR, {{buffertoggle}} gets initialised via {{newLogReader()}} where :: {code} return new CdcrLogReader(new ArrayList(logs), tlog); {code} {code} private CdcrLogReader(List<TransactionLog> tlogs, TransactionLog tlog) { this.tlogs = new LinkedBlockingDeque<>(); this.tlogs.addAll(tlogs); if (tlog != null) this.tlogs.push(tlog); // ensure that the tlog being written is pushed // Register the pointer in the parent UpdateLog pointer = new CdcrLogPointer(); logPointers.put(this, pointer); // If the reader is initialised while the updates log is empty, do nothing if ((currentTlog = this.tlogs.peekLast()) != null) { tlogReader = currentTlog.getReader(0); pointer.set(currentTlog.tlogFile); numRecordsReadInCurrentTlog = 0; log.debug("Init new tlog reader for {} - tlogReader = {}", currentTlog.tlogFile, tlogReader); } } {code} {{lastVersion}} and {{nextToLastVersion}} initialised as {{-1}} and never changed / modified / updated ever. The recent logs are added into {{tlogs}} and current tlog is maintained though. Now LPV is calculated as: CdcrRequestHandler::handleLastProcessedVersionAction {code} for (CdcrReplicatorState state : replicatorManager.getReplicatorStates()) { long version = Long.MAX_VALUE; if (state.getLogReader() != null) { version = state.getLogReader().getLastVersion(); } lastProcessedVersion = Math.min(lastProcessedVersion, version); } // next check the log reader of the buffer CdcrUpdateLog.CdcrLogReader bufferLogReader = ((CdcrUpdateLog) core.getUpdateHandler().getUpdateLog()).getBufferToggle(); if (bufferLogReader != null) { lastProcessedVersion = Math.min(lastProcessedVersion, bufferLogReader.getLastVersion()); } {code} bufferLogReader.getLastVersion() is calculated {{-1}} and LPV outputs {{-1}}. > LASTPROCESSEDVERSION for CDCR is flawed when buffering is enabled > ----------------------------------------------------------------- > > Key: SOLR-11069 > URL: https://issues.apache.org/jira/browse/SOLR-11069 > Project: Solr > Issue Type: Bug > Security Level: Public(Default Security Level. Issues are Public) > Components: CDCR > Affects Versions: 7.0 > Reporter: Amrit Sarkar > > {{LASTPROCESSEDVERSION}} (a.b.v. LPV) action for CDCR breaks down due to > poorly initialised and maintained buffer log for either source or target > cluster core nodes. > If buffer is enabled for cores of either source or target cluster, it return > {{-1}}, *irrespective of number of entries in tlog read by the {{leader}}* > node of each shard of respective collection of respective cluster. Once > disabled, it starts telling us the correct LPV for each core. > Due to the same flawed behavior, Update Log Synchroniser may doesn't work > properly as expected, i.e. provides correct seek to the {{non-leader}} nodes > to advance at. I am not sure whether this is an intended behavior for sync > but it surely doesn't feel right. -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org