[ https://issues.apache.org/jira/browse/ARTEMIS-3620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17476398#comment-17476398 ]
ASF subversion and git services commented on ARTEMIS-3620: ---------------------------------------------------------- Commit b526c9d0f7964444834e9fc6fe0bc49c794a476f in activemq-artemis's branch refs/heads/2.19.x from franz1981 [ https://gitbox.apache.org/repos/asf?p=activemq-artemis.git;h=b526c9d ] ARTEMIS-3620 Journal blocking delete/update record with no sync (cherry picked from commit 52fcc0c81b84c3f6896b4a7ada97df7ff2831f8c) > Journal blocking delete/update record with no sync > --------------------------------------------------- > > Key: ARTEMIS-3620 > URL: https://issues.apache.org/jira/browse/ARTEMIS-3620 > Project: ActiveMQ Artemis > Issue Type: Bug > Reporter: Francesco Nigro > Assignee: Francesco Nigro > Priority: Minor > Time Spent: 1.5h > Remaining Estimate: 0h > > https://github.com/apache/activemq-artemis/pull/3605, part of ARTEMIS-3327, > has introduced a blocking logic while checking for record's presence on both > delete and update operations, regardless the configured {{sync}} parameter. > Before the mentioned change, the journal was using {{checkKnownRecordID}} to > check for record presence that can save blocking in the happy (and most > common) path: > {code:java} > private boolean checkKnownRecordID(final long id, boolean strict) throws > Exception { > if (records.containsKey(id) || pendingRecords.contains(id) || > (compactor != null && compactor.containsRecord(id))) { > return true; > } > final SimpleFuture<Boolean> known = new SimpleFutureImpl<>(); > // retry on the append thread. maybe the appender thread is not keeping > up. > appendExecutor.execute(new Runnable() { > @Override > public void run() { > journalLock.readLock().lock(); > try { > known.set(records.containsKey(id) > || pendingRecords.contains(id) > || (compactor != null && compactor.containsRecord(id))); > } finally { > journalLock.readLock().unlock(); > } > } > }); > if (!known.get()) { > if (strict) { > throw new IllegalStateException("Cannot find add info " + id + " > on compactor or current records"); > } > return false; > } else { > return true; > } > } > {code} > There are 3 solutions to this issue: > # reintroduce {{checkKnownRecordID}} and save blocking in the common & happy > path > # introduce a smaller semantic change that don't report any error with no > sync and no callback specified > # introduce a bigger semantic change that don't report any error due to > missing record ID to delete/update > -- This message was sent by Atlassian Jira (v8.20.1#820001)