Skip to content

Refactor/journal event foundation 2 - #944

Merged
dieppa merged 10 commits into
masterfrom
refactor/journal_event_foundation_2
Jul 30, 2026
Merged

Refactor/journal event foundation 2#944
dieppa merged 10 commits into
masterfrom
refactor/journal_event_foundation_2

Conversation

@dieppa

@dieppa dieppa commented Jul 28, 2026

Copy link
Copy Markdown
Member

No description provided.

@dieppa
dieppa force-pushed the refactor/journal_event_foundation_2 branch from dba3eec to 95c7054 Compare July 29, 2026 16:49
@dieppa
dieppa requested a review from Copilot July 29, 2026 17:44
@dieppa
dieppa marked this pull request as ready for review July 29, 2026 17:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the audit-store “audit persistence” surface toward a per-stage factory model (enabling stage-scoped journal sequencing) and introduces the initial local journal abstractions + MongoDB-sync implementation gated by a feature flag.

Changes:

  • Introduces AuditPersistenceFactory and updates core execution/operations wiring to resolve per-stage AuditWriter/persistence via AuditStore.
  • Adds local journal primitives (JournalEventReader/Store, sequencer + factory) and MongoDB-sync journal persistence with feature-flagged behavior.
  • Adds/updates tests and design docs for the journal and per-stage writer approach; bumps generalUtilVersion.

Reviewed changes

Copilot reviewed 44 out of 45 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
platform-plugins/flamingock-springboot-integration/src/test/java/io/flamingock/springboot/ValidationOnlyIntegrationTest.java Updates Spring Boot validation-only integration test to the new AuditStore/factory wiring.
legacy/mongock-support/src/main/java/io/flamingock/support/mongock/MongockImportChange.java Switches importer to request per-stage AuditWriter via AuditPersistenceFactory.
docs/THIN_PER_STAGE_WRITER_EXPLAINED.md New design doc explaining the “thin per-stage writer” approach.
docs/CHANGE_STATE_JOURNAL_WRITE_DESIGN.md New proposal doc for atomic ChangeState+JournalEvent writes and sequencing.
core/target-systems/flamingock-mongodb-sync-targetsystem/src/main/java/io/flamingock/targetsystem/mongodb/sync/MongoDBSyncTxWrapper.java Minor log message tweak in MongoDB transaction wrapper.
core/target-systems/flamingock-mongodb-sync-targetsystem/src/main/java/io/flamingock/targetsystem/mongodb/sync/MongoDBSyncTargetSystem.java Lazily initializes tx wrapper to support audit-store usage without full target-system initialization.
core/flamingock-core/src/test/java/io/flamingock/internal/core/operation/OperationResolverTest.java Updates operation routing test to pass AuditStore instead of raw persistence.
core/flamingock-core/src/test/java/io/flamingock/internal/core/operation/AuditListOperationTest.java Adjusts imports/types for moved AuditPersistence.
core/flamingock-core/src/test/java/io/flamingock/internal/core/context/BasicRuntimeContextTest.java New tests for BasicRuntimeContext layering and transaction-wrapper dependency injection.
core/flamingock-core/src/main/java/io/flamingock/internal/core/plan/community/CommunityExecutionPlanner.java Generalizes planner to consume AuditReader (not community-specific reader).
core/flamingock-core/src/main/java/io/flamingock/internal/core/pipeline/execution/StageExecutor.java Resolves stage-scoped AuditWriter from AuditPersistenceFactory per stage execution.
core/flamingock-core/src/main/java/io/flamingock/internal/core/operation/OperationResolver.java Routes audit/issue operations through AuditStore faces and per-stage persistence factory.
core/flamingock-core/src/main/java/io/flamingock/internal/core/operation/issue/IssueListOperation.java Switches issue listing to use AuditReader.
core/flamingock-core/src/main/java/io/flamingock/internal/core/operation/issue/IssueGetOperation.java Switches issue lookup to use AuditReader.
core/flamingock-core/src/main/java/io/flamingock/internal/core/operation/audit/AuditListOperation.java Switches audit listing to use AuditReader.
core/flamingock-core/src/main/java/io/flamingock/internal/core/operation/audit/AuditFixOperation.java Writes audit fixes via per-stage AuditWriter from AuditPersistenceFactory, reads issues via AuditReader.
core/flamingock-core/src/main/java/io/flamingock/internal/core/journal/JournalEventStore.java New core journal store abstraction (read + acknowledge).
core/flamingock-core/src/main/java/io/flamingock/internal/core/journal/JournalEventSequencerFactory.java New factory to seed per-stream sequencers from persisted journal tail.
core/flamingock-core/src/main/java/io/flamingock/internal/core/journal/JournalEventSequencer.java New in-memory sequencer for stream ordering + event envelope creation.
core/flamingock-core/src/main/java/io/flamingock/internal/core/journal/JournalEventReader.java Renames/moves the read-only journal interface into core journal package.
core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/AuditStore.java Adds default AuditReader, per-stage persistence factory, closer, and non-guarded types to AuditStore.
core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/audit/community/CommunityAuditReader.java Moves snapshot-by-change-id default to shared AuditReader.
core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/audit/community/CommunityAuditPersistence.java Aligns community persistence to shared AuditPersistence type.
core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/audit/cloud/CloudAuditPersistence.java Aligns cloud persistence to shared AuditPersistence type and trims unused getters.
core/flamingock-core/src/main/java/io/flamingock/internal/core/context/BasicRuntimeContext.java New minimal RuntimeContext implementation for transaction wrapper usage outside change execution.
core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/CommunityChangeRunnerBuilder.java Uses auditStore.getAuditReader() for execution planner construction.
core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/AbstractChangeRunnerBuilder.java Registers AuditPersistenceFactory in context and passes AuditStore through to operation resolution.
core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/AbstractBuilder.java Removes old “extract persistence + register writer” helper.
core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/transaction/TransactionWrapper.java Heavily expands/clarifies contract docs and renames parameter for clarity.
core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/feature/Features.java New feature-flag name registry (adds JOURNAL_EVENTS).
core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditReader.java Adds shared default getAuditSnapshotByChangeId() implementation.
core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditPersistenceFactory.java New per-stage persistence factory interface.
core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditPersistence.java Moves AuditPersistence to common module/package and narrows it to writer+reader only.
core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditIssueResolver.java Removes old issue-resolver interface.
community/flamingock-mongodb-sync-auditstore/src/test/java/io/flamingock/store/mongodb/sync/MongoDBSyncJournalFeatureFlagE2ETest.java New E2E test verifying feature flag gates journal writes through a full runner pass.
community/flamingock-mongodb-sync-auditstore/src/test/java/io/flamingock/store/mongodb/sync/internal/MongoDBSyncJournalEventStoreE2ETest.java Extends E2E coverage for transactional journal appends and uniqueness constraints.
community/flamingock-mongodb-sync-auditstore/src/test/java/io/flamingock/store/mongodb/sync/internal/MongoDBSyncAuditPersistenceJournalTest.java New persistence-level tests for atomic audit+journal behavior and feature flag gating.
community/flamingock-mongodb-sync-auditstore/src/main/java/io/flamingock/store/mongodb/sync/MongoDBSyncAuditStore.java Reworks MongoDB sync audit store to build per-stage persistence with sequencers and journal store.
community/flamingock-mongodb-sync-auditstore/src/main/java/io/flamingock/store/mongodb/sync/internal/MongoDBSyncJournalEventStore.java Adds transactional append API (package-private) and clarifies responsibilities.
community/flamingock-mongodb-sync-auditstore/src/main/java/io/flamingock/store/mongodb/sync/internal/MongoDBSyncAuditRepository.java Splits “audit repository” from writer/reader interfaces; adds current-state vs history write modes.
community/flamingock-mongodb-sync-auditstore/src/main/java/io/flamingock/store/mongodb/sync/internal/MongoDBSyncAuditPersistence.java Implements atomic audit+journal write path under transaction wrapper with feature-flagged behavior.
community/flamingock-mongodb-reactive-auditstore/src/main/java/io/flamingock/store/mongodb/reactive/MongoDBReactiveAuditStore.java Moves non-guarded types to store level for reactive Mongo.
community/flamingock-mongodb-reactive-auditstore/src/main/java/io/flamingock/store/mongodb/reactive/internal/MongoDBReactiveAuditPersistence.java Removes deprecated getNonGuardedTypes() from persistence.
cloud/flamingock-cloud/src/main/java/io/flamingock/cloud/CloudAuditPersistenceImpl.java Removes unused getters in cloud persistence impl.
build.gradle.kts Bumps generalUtilVersion to 1.6.0.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

import io.flamingock.internal.common.core.pipeline.StageDescriptor;
import io.flamingock.internal.common.core.response.data.StageResult;
import io.flamingock.internal.core.context.PriorityContext;
import io.flamingock.internal.core.external.store.audit.community.CommunityAuditPersistence;
import io.flamingock.api.external.TargetSystem;
import io.flamingock.internal.common.core.audit.AuditEntry;
import io.flamingock.internal.common.core.error.PendingChangesException;
import io.flamingock.internal.core.external.store.AuditStore;
Comment on lines +26 to 30
private final AuditReader persistence;

public IssueGetOperation(AuditPersistence persistence) {
this.persistence = persistence;
public IssueGetOperation(AuditReader auditReader) {
this.persistence = auditReader;
}
return getPersistence();
}

//TODO temporally default, until we implement the other DB stores
Comment on lines +74 to +81
public Result writeEntry(AuditEntry auditEntry) {
return auditor.writeEntry(auditEntry);
RuntimeContext baseContext = new BasicRuntimeContext("write-changeState-" + auditEntry.getChangeId());
// The transaction is kept unconditionally, even when the journal is disabled. It exists for the
// journal — the audit entry and its event must be atomic — and the audit write on its own is a single
// upsert that needs no transaction. Consequence: this store requires a replica set (or mongos) either
// way, whereas before the journal an unsessioned replaceOne also worked on a standalone mongod.
return txWrapper.wrapInTransaction(baseContext, runtimeContext -> {
ClientSession clientSession = runtimeContext.getContext().getRequiredDependencyValue(ClientSession.class);
@dieppa
dieppa merged commit 33e73d7 into master Jul 30, 2026
4 checks passed
@dieppa
dieppa deleted the refactor/journal_event_foundation_2 branch July 30, 2026 12:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants