Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[6.x.x] Switch CI from Temurin to Liberica #5466

Merged
2 changes: 1 addition & 1 deletion .github/actions/install-mvnd/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
distribution: temurin
distribution: liberica
java-version: '8'
- name: Make buildkit default
uses: docker/setup-buildx-action@v3
Expand Down
14 changes: 4 additions & 10 deletions .github/workflows/ci-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
distribution: liberica
java-version: ${{ env.DEV_JDK }}
cache: 'maven'
- run: mvn -V -B license:check
Expand All @@ -25,7 +25,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
distribution: liberica
java-version: ${{ env.DEV_JDK }}
cache: 'maven'
- name: OWASP dependency check
Expand All @@ -40,26 +40,20 @@ jobs:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
jvm: ['8']
exclude:
- os: macOS-latest
jvm: '8'
include:
- os: macOS-latest
jvm: '11'
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
distribution: liberica
java-version: ${{ matrix.jvm }}
cache: 'maven'
- name: Install Maven Daemon
id: install-mvnd
uses: ./.github/actions/install-mvnd
with:
version: '1.0.1'
version: '1.0.2'
file-version-suffix: ''
cache: 'true'
- name: Maven Build
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-xqts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
distribution: temurin
distribution: liberica
java-version: '8'
- name: Cache Maven packages
uses: actions/cache@v4
Expand Down
2 changes: 1 addition & 1 deletion exist-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1097,7 +1097,7 @@ The BaseX Team. The original license statement is also included below.]]></pream
</dependency>
</dependencies>
<configuration>
<argLine>@{jacocoArgLine} -Dfile.encoding=${project.build.sourceEncoding}</argLine>
<argLine>@{jacocoArgLine} -Dfile.encoding=${project.build.sourceEncoding} -Dexist.recovery.progressbar.hide=true</argLine>
<systemPropertyVariables>
<jetty.home>${project.basedir}/../exist-jetty-config/target/classes/org/exist/jetty</jetty.home>
<exist.configurationFile>${project.build.testOutputDirectory}/conf.xml</exist.configurationFile>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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");
}

/**
Expand Down Expand Up @@ -120,10 +124,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);
@Nullable final ProgressBar scanProgressBar = hideProgressBar ? null : 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);
Expand All @@ -135,6 +139,14 @@ public boolean recover() throws LogException {
lastCheckpoint = (Checkpoint) next;
}
lastLsn = next.getLsn();

if (scanProgressBar != null) {
scanProgressBar.set(next.getLsn().getOffset());
}
}

if (scanProgressBar != null) {
scanProgressBar.set(lastSize); // 100%
}
} catch (final LogException e) {
if (LOG.isDebugEnabled()) {
Expand All @@ -146,7 +158,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) {
Expand Down Expand Up @@ -250,10 +262,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);
@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.");
Expand All @@ -271,9 +284,19 @@ 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.

if (redoProgressBar != null) {
redoProgressBar.set(next.getLsn().getOffset());
}

if (next.getLsn().equals(lastLsn)) {
// last readable entry reached. Stop here.
break;
}
}

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. " +
Expand All @@ -291,16 +314,19 @@ 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 {
while((next = reader.previousEntry()) != null) {
final long lastSize = FileUtils.sizeQuietly(last);
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());
if (runningTxns.size() == 0)
if (runningTxns.isEmpty()) {
// all dirty transactions undone
{break;}
break;
}
}
} else if (next.getLogType() == LogEntryTypes.TXN_COMMIT) {
// ignore already committed transaction
Expand All @@ -314,6 +340,14 @@ private void doRecovery(final int txnCount, final Path last, final JournalReader
// LOG.debug("Undo: " + next.dump());
next.undo();
}

if (undoProgressBar != null) {
undoProgressBar.set(lastSize - next.getLsn().getOffset());
}
}

if (undoProgressBar != null) {
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);
Expand Down
Loading