From 64cc84f3eefcd9c9d2b7d36f409cbd1afc6b690e Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 18:56:16 +0200 Subject: [PATCH 01/11] [ci] Switch from Temurin to Liberica as it still supports macOS JDK 8 --- .github/workflows/ci-deploy.yml | 4 ++-- .github/workflows/ci-test.yml | 12 ++++++------ .github/workflows/sonarcloud.yml | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci-deploy.yml b/.github/workflows/ci-deploy.yml index d148e04524f..b13ca1390fa 100644 --- a/.github/workflows/ci-deploy.yml +++ b/.github/workflows/ci-deploy.yml @@ -11,9 +11,9 @@ jobs: with: fetch-depth: 1 - name: Set up JDK 8 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - distribution: temurin + distribution: liberica java-version: '8' - name: Make buildkit default uses: docker/setup-buildx-action@v3 diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index 37ace09dad3..aa0a3ac5a01 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -11,9 +11,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: - distribution: temurin + distribution: liberica java-version: ${{ env.DEV_JDK }} cache: 'maven' - run: mvn -V -B license:check @@ -23,9 +23,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: - distribution: temurin + distribution: liberica java-version: ${{ env.DEV_JDK }} cache: 'maven' - run: mvn -V -B install dependency-check:check -DskipTests @@ -40,9 +40,9 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - distribution: temurin + distribution: liberica java-version: ${{ env.DEV_JDK }} cache: 'maven' - name: Install Maven Daemon diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 8809372cdc7..c460c6217f7 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -15,9 +15,9 @@ jobs: with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - distribution: temurin + distribution: liberica java-version: 11 - name: Cache SonarCloud packages uses: actions/cache@v3 From 11959f40340546693e3e604ea12d2c3e9fb7d7a1 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 20:03:32 +0200 Subject: [PATCH 02/11] [bugfix] Make sure Journal Recovery progress bars reach 100% --- .../storage/recovery/RecoveryManager.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java index 99b074d685a..bcd9e797ea4 100644 --- a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java +++ b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java @@ -120,10 +120,10 @@ public boolean recover() throws LogException { Lsn lastLsn = Lsn.LSN_INVALID; Loggable next; try { - final ProgressBar progress = new ProgressBar("Scanning journal ", FileUtils.sizeQuietly(last)); + final long lastSize = FileUtils.sizeQuietly(last); + final ProgressBar scanProgressBar = new ProgressBar("Scanning journal ", lastSize); while ((next = reader.nextEntry()) != null) { // LOG.debug(next.dump()); - progress.set(next.getLsn().getOffset()); if (next.getLogType() == LogEntryTypes.TXN_START) { // new transaction starts: add it to the transactions table txnsStarted.put(next.getTransactionId(), next); @@ -135,7 +135,10 @@ public boolean recover() throws LogException { lastCheckpoint = (Checkpoint) next; } lastLsn = next.getLsn(); + + scanProgressBar.set(next.getLsn().getOffset()); } + scanProgressBar.set(lastSize); // 100% } catch (final LogException e) { if (LOG.isDebugEnabled()) { LOG.debug("Caught exception while reading log", e); @@ -250,10 +253,11 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader if (LOG.isInfoEnabled()) { LOG.info("First pass: redoing {} transactions...", txnCount);} - final ProgressBar progress = new ProgressBar("Redo ", FileUtils.sizeQuietly(last)); Loggable next = null; int redoCnt = 0; try { + final long lastSize = FileUtils.sizeQuietly(last); + final ProgressBar redoProgressBar = new ProgressBar("Redo ", lastSize); while ((next = reader.nextEntry()) != null) { SanityCheck.ASSERT(next.getLogType() != LogEntryTypes.CHECKPOINT, "Found a checkpoint during recovery run! This should not ever happen."); @@ -271,10 +275,13 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader // LOG.debug("Redo: " + next.dump()); // redo the log entry next.redo(); - progress.set(next.getLsn().getOffset()); - if (next.getLsn().equals(lastLsn)) - {break;} // last readable entry reached. Stop here. + redoProgressBar.set(next.getLsn().getOffset()); + if (next.getLsn().equals(lastLsn)) { + // last readable entry reached. Stop here. + break; + } } + redoProgressBar.set(lastSize); // 100% done } catch (final Exception e) { LOG.error("Exception caught while redoing transactions. Aborting recovery to avoid possible damage. " + "Before starting again, make sure to run a check via the emergency export tool.", e); From 9d3ff2f48e355d11a6c5f454bf4e33c0f2e9b1db Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 20:04:19 +0200 Subject: [PATCH 03/11] [bugfix] Add missing Undo progress bar for Journal Recovery --- .../java/org/exist/storage/recovery/RecoveryManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java index bcd9e797ea4..c5f82a30512 100644 --- a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java +++ b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java @@ -301,6 +301,8 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader if (runningTxns.size() > 0) { // do a reverse scan of the log, undoing all uncommitted transactions try { + final long lastSize = FileUtils.sizeQuietly(last); + final ProgressBar undoProgressBar = new ProgressBar("Undo ", lastSize); while((next = reader.previousEntry()) != null) { if (next.getLogType() == LogEntryTypes.TXN_START) { if (runningTxns.get(next.getTransactionId()) != null) { @@ -321,7 +323,10 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader // LOG.debug("Undo: " + next.dump()); next.undo(); } + + undoProgressBar.set(lastSize - next.getLsn().getOffset()); } + undoProgressBar.set(lastSize); // 100% done } catch (final Exception e) { LOG.warn("Exception caught while undoing dirty transactions. Remaining transactions to be undone: {}. Aborting recovery to avoid possible damage. Before starting again, make sure to run a check via the emergency export tool.", runningTxns.size(), e); if (next != null) From 694b1b898d4e5b2e8174bb04ad4b12ed52aa7a8f Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 20:04:47 +0200 Subject: [PATCH 04/11] [ignore] Small code cleanup --- .../java/org/exist/storage/recovery/RecoveryManager.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java index c5f82a30512..6d44a3a8dfc 100644 --- a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java +++ b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java @@ -149,7 +149,7 @@ public boolean recover() throws LogException { // if the last checkpoint record is not the last record in the file // we need a recovery. if ((lastCheckpoint == null || !lastCheckpoint.getLsn().equals(lastLsn)) && - txnsStarted.size() > 0) { + !txnsStarted.isEmpty()) { LOG.info("Dirty transactions: {}", txnsStarted.size()); // starting recovery: reposition the log reader to the last checkpoint if (lastCheckpoint == null) { @@ -298,7 +298,7 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader { LOG.info("Second pass: undoing dirty transactions. Uncommitted transactions: {}", runningTxns.size());} // see if there are uncommitted transactions pending - if (runningTxns.size() > 0) { + if (!runningTxns.isEmpty()) { // do a reverse scan of the log, undoing all uncommitted transactions try { final long lastSize = FileUtils.sizeQuietly(last); @@ -307,9 +307,10 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader if (next.getLogType() == LogEntryTypes.TXN_START) { if (runningTxns.get(next.getTransactionId()) != null) { runningTxns.remove(next.getTransactionId()); - if (runningTxns.size() == 0) + if (runningTxns.isEmpty()) { // all dirty transactions undone - {break;} + break; + } } } else if (next.getLogType() == LogEntryTypes.TXN_COMMIT) { // ignore already committed transaction From b289bd4b2e832a55a91f03332b772b096304e119 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 20:12:47 +0200 Subject: [PATCH 05/11] [feature] Add the System Property 'exist.recovery.progressbar.hide' to hide the Journal Recovery progress bars --- .../storage/recovery/RecoveryManager.java | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java index 6d44a3a8dfc..1822c9e0439 100644 --- a/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java +++ b/exist-core/src/main/java/org/exist/storage/recovery/RecoveryManager.java @@ -45,6 +45,8 @@ import com.evolvedbinary.j8fu.function.SupplierE; import org.exist.util.sanity.SanityCheck; +import javax.annotation.Nullable; + /** * Database recovery. This class is used once during startup to check * if the database is in a consistent state. If not, the class attempts to recover @@ -59,11 +61,13 @@ public class RecoveryManager { private final DBBroker broker; private final JournalRecoveryAccessor journalRecovery; private final boolean restartOnError; + private final boolean hideProgressBar; public RecoveryManager(final DBBroker broker, final JournalManager journalManager, final boolean restartOnError) { this.broker = broker; this.journalRecovery = journalManager.getRecoveryAccessor(this); this.restartOnError = restartOnError; + this.hideProgressBar = Boolean.getBoolean("exist.recovery.progressbar.hide"); } /** @@ -121,7 +125,7 @@ public boolean recover() throws LogException { Loggable next; try { final long lastSize = FileUtils.sizeQuietly(last); - final ProgressBar scanProgressBar = new ProgressBar("Scanning journal ", lastSize); + @Nullable final ProgressBar scanProgressBar = hideProgressBar ? null : new ProgressBar("Scanning journal ", lastSize); while ((next = reader.nextEntry()) != null) { // LOG.debug(next.dump()); if (next.getLogType() == LogEntryTypes.TXN_START) { @@ -136,9 +140,14 @@ public boolean recover() throws LogException { } lastLsn = next.getLsn(); - scanProgressBar.set(next.getLsn().getOffset()); + if (scanProgressBar != null) { + scanProgressBar.set(next.getLsn().getOffset()); + } + } + + if (scanProgressBar != null) { + scanProgressBar.set(lastSize); // 100% } - scanProgressBar.set(lastSize); // 100% } catch (final LogException e) { if (LOG.isDebugEnabled()) { LOG.debug("Caught exception while reading log", e); @@ -257,7 +266,7 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader int redoCnt = 0; try { final long lastSize = FileUtils.sizeQuietly(last); - final ProgressBar redoProgressBar = new ProgressBar("Redo ", lastSize); + @Nullable final ProgressBar redoProgressBar = hideProgressBar ? null : new ProgressBar("Redo ", lastSize); while ((next = reader.nextEntry()) != null) { SanityCheck.ASSERT(next.getLogType() != LogEntryTypes.CHECKPOINT, "Found a checkpoint during recovery run! This should not ever happen."); @@ -275,13 +284,20 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader // LOG.debug("Redo: " + next.dump()); // redo the log entry next.redo(); - redoProgressBar.set(next.getLsn().getOffset()); + + if (redoProgressBar != null) { + redoProgressBar.set(next.getLsn().getOffset()); + } + if (next.getLsn().equals(lastLsn)) { // last readable entry reached. Stop here. break; } } - redoProgressBar.set(lastSize); // 100% done + + if (redoProgressBar != null) { + redoProgressBar.set(lastSize); // 100% done + } } catch (final Exception e) { LOG.error("Exception caught while redoing transactions. Aborting recovery to avoid possible damage. " + "Before starting again, make sure to run a check via the emergency export tool.", e); @@ -302,8 +318,8 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader // do a reverse scan of the log, undoing all uncommitted transactions try { final long lastSize = FileUtils.sizeQuietly(last); - final ProgressBar undoProgressBar = new ProgressBar("Undo ", lastSize); - while((next = reader.previousEntry()) != null) { + final ProgressBar undoProgressBar = hideProgressBar ? null : new ProgressBar("Undo ", lastSize); + while ((next = reader.previousEntry()) != null) { if (next.getLogType() == LogEntryTypes.TXN_START) { if (runningTxns.get(next.getTransactionId()) != null) { runningTxns.remove(next.getTransactionId()); @@ -325,9 +341,14 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader next.undo(); } - undoProgressBar.set(lastSize - next.getLsn().getOffset()); + if (undoProgressBar != null) { + undoProgressBar.set(lastSize - next.getLsn().getOffset()); + } + } + + if (undoProgressBar != null) { + undoProgressBar.set(lastSize); // 100% done } - undoProgressBar.set(lastSize); // 100% done } catch (final Exception e) { LOG.warn("Exception caught while undoing dirty transactions. Remaining transactions to be undone: {}. Aborting recovery to avoid possible damage. Before starting again, make sure to run a check via the emergency export tool.", runningTxns.size(), e); if (next != null) From d4bc992de6f119d0460f3178752d2574d8345ffd Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 20:14:27 +0200 Subject: [PATCH 06/11] [refactor] Hide the Journal Recovery progress bars when running the test suite so as not to pollute the output --- exist-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exist-core/pom.xml b/exist-core/pom.xml index e74c9c64919..ac19e22c172 100644 --- a/exist-core/pom.xml +++ b/exist-core/pom.xml @@ -1058,7 +1058,7 @@ The BaseX Team. The original license statement is also included below.]]> - @{jacocoArgLine} -Dfile.encoding=${project.build.sourceEncoding} + @{jacocoArgLine} -Dfile.encoding=${project.build.sourceEncoding} -Dexist.recovery.progressbar.hide=true ${project.basedir}/../exist-jetty-config/target/classes/org/exist/jetty ${project.build.testOutputDirectory}/conf.xml From 49a521f9f3f5c3be3ac8fedd8132fbacd7cfd008 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 21:04:21 +0200 Subject: [PATCH 07/11] [ci] Use latest version of mvnd --- .github/workflows/ci-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index aa0a3ac5a01..bce44e1cbfb 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -49,8 +49,8 @@ jobs: id: install-mvnd uses: ./.github/actions/install-mvnd with: - version: '1.0-m7' - file-version-suffix: '-m39' + version: '1.0.2' + file-version-suffix: '' cache: 'true' - name: Maven Build timeout-minutes: 10 From 1cc2d0a8b9a259ed4f6439a6be9c2af402fc7248 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 21:10:57 +0200 Subject: [PATCH 08/11] [ci] Update GitHub Actions plugins --- .github/actions/install-mvnd/action.yml | 2 +- .github/workflows/ci-deploy.yml | 2 +- .github/workflows/ci-test.yml | 2 +- .github/workflows/sonarcloud.yml | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/actions/install-mvnd/action.yml b/.github/actions/install-mvnd/action.yml index 9769860c218..a0dc3bdf1ff 100644 --- a/.github/actions/install-mvnd/action.yml +++ b/.github/actions/install-mvnd/action.yml @@ -48,7 +48,7 @@ runs: - name: Cache mvnd if: inputs.cache == 'true' id: cache-mvnd - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ inputs.install-path }}/${{ env.MVND_NAME }}.zip diff --git a/.github/workflows/ci-deploy.yml b/.github/workflows/ci-deploy.yml index b13ca1390fa..7b01ad93dfa 100644 --- a/.github/workflows/ci-deploy.yml +++ b/.github/workflows/ci-deploy.yml @@ -21,7 +21,7 @@ jobs: with: install: true - name: Cache Maven packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2 key: deploy-${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index bce44e1cbfb..0f638d6dea4 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -72,7 +72,7 @@ jobs: run: ${{ steps.install-mvnd.outputs.mvnd-dir }}/mvnd -V -B jacoco:report coveralls:report - name: Archive build logs if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ runner.os }}-build-logs retention-days: 5 diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index c460c6217f7..cf16c476fe7 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -20,13 +20,13 @@ jobs: distribution: liberica java-version: 11 - name: Cache SonarCloud packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: sonarcloud-${{ runner.os }}-cache-${{ hashFiles('**/pom.xml') }} restore-keys: sonarcloud-${{ runner.os }}-cache - name: Cache Maven packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2 key: sonarcloud-${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} From 4c6d9d5a25ba0a6ba803561ed1d552dee1dcc967 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 2 Oct 2024 21:46:46 +0200 Subject: [PATCH 09/11] [feature] Update to the latest version of the sonar-maven-plugin --- exist-parent/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/exist-parent/pom.xml b/exist-parent/pom.xml index 2458482a81a..34d3bdcae11 100644 --- a/exist-parent/pom.xml +++ b/exist-parent/pom.xml @@ -863,6 +863,11 @@ ${env.COVERALLS_TOKEN} + + org.sonarsource.scanner.maven + sonar-maven-plugin + 4.0.0.4121 + From 5e32fff587cda133b9aca8ac955e77bb72ded0c0 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Thu, 3 Oct 2024 12:17:28 +0200 Subject: [PATCH 10/11] [bugfix] As these are plugins log a Warning and not an Error if the plugin is unavailable --- .../src/main/java/org/exist/plugin/PluginsManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exist-core/src/main/java/org/exist/plugin/PluginsManagerImpl.java b/exist-core/src/main/java/org/exist/plugin/PluginsManagerImpl.java index 94d57e4a079..3dbbbbd3f58 100644 --- a/exist-core/src/main/java/org/exist/plugin/PluginsManagerImpl.java +++ b/exist-core/src/main/java/org/exist/plugin/PluginsManagerImpl.java @@ -241,7 +241,7 @@ public void addPlugin(final String className) { // NOTE: must set interrupted flag Thread.currentThread().interrupt(); } - LOG.error(e); + LOG.warn(e); } } From 2a19c703e1d71f1bc2d38c96b3e5d7540a434b74 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Tue, 8 Oct 2024 21:04:29 +0200 Subject: [PATCH 11/11] [ci] Sonarcloud now seems to require Java 17 to run, but eXist-db 5.x.x only supports Java 8, so remove that CI job. --- .github/workflows/sonarcloud.yml | 38 -------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 .github/workflows/sonarcloud.yml diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml deleted file mode 100644 index cf16c476fe7..00000000000 --- a/.github/workflows/sonarcloud.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: SonarCloud -on: - push: - branches: - - develop - - master - pull_request: - types: [opened, synchronize, reopened] -jobs: - build: - name: SonarCloud Analysis - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 11 - uses: actions/setup-java@v4 - with: - distribution: liberica - java-version: 11 - - name: Cache SonarCloud packages - uses: actions/cache@v4 - with: - path: ~/.sonar/cache - key: sonarcloud-${{ runner.os }}-cache-${{ hashFiles('**/pom.xml') }} - restore-keys: sonarcloud-${{ runner.os }}-cache - - name: Cache Maven packages - uses: actions/cache@v4 - with: - path: ~/.m2 - key: sonarcloud-${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: sonarcloud-${{ runner.os }}-maven - - name: Analyze - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -V -B -Dsurefire.useFile=false -DtrimStackTrace=false -Ddependency-check.skip=true -Ddocker=false -P \!mac-dmg-on-mac,\!codesign-mac-dmg,\!mac-dmg-on-unix,\!installer,\!concurrency-stress-tests,\!micro-benchmarks,\!build-dist-archives verify site org.sonarsource.scanner.maven:sonar-maven-plugin:sonar