Home / Cardano Foundation / cardano-rosetta-java
Jan 14, 11-12 AM (0)
Jan 15, 12-1 AM (0)
Jan 15, 1-2 AM (0)
Jan 15, 2-3 AM (0)
Jan 15, 3-4 AM (0)
Jan 15, 4-5 AM (0)
Jan 15, 5-6 AM (0)
Jan 15, 6-7 AM (0)
Jan 15, 7-8 AM (0)
Jan 15, 8-9 AM (3)
Jan 15, 9-10 AM (4)
Jan 15, 10-11 AM (0)
Jan 15, 11-12 PM (2)
Jan 15, 12-1 PM (1)
Jan 15, 1-2 PM (1)
Jan 15, 2-3 PM (2)
Jan 15, 3-4 PM (0)
Jan 15, 4-5 PM (0)
Jan 15, 5-6 PM (0)
Jan 15, 6-7 PM (0)
Jan 15, 7-8 PM (0)
Jan 15, 8-9 PM (0)
Jan 15, 9-10 PM (0)
Jan 15, 10-11 PM (1)
Jan 15, 11-12 AM (0)
Jan 16, 12-1 AM (0)
Jan 16, 1-2 AM (0)
Jan 16, 2-3 AM (0)
Jan 16, 3-4 AM (0)
Jan 16, 4-5 AM (0)
Jan 16, 5-6 AM (0)
Jan 16, 6-7 AM (0)
Jan 16, 7-8 AM (0)
Jan 16, 8-9 AM (0)
Jan 16, 9-10 AM (0)
Jan 16, 10-11 AM (1)
Jan 16, 11-12 PM (1)
Jan 16, 12-1 PM (0)
Jan 16, 1-2 PM (0)
Jan 16, 2-3 PM (1)
Jan 16, 3-4 PM (3)
Jan 16, 4-5 PM (0)
Jan 16, 5-6 PM (0)
Jan 16, 6-7 PM (0)
Jan 16, 7-8 PM (0)
Jan 16, 8-9 PM (0)
Jan 16, 9-10 PM (0)
Jan 16, 10-11 PM (0)
Jan 16, 11-12 AM (0)
Jan 17, 12-1 AM (0)
Jan 17, 1-2 AM (0)
Jan 17, 2-3 AM (0)
Jan 17, 3-4 AM (0)
Jan 17, 4-5 AM (0)
Jan 17, 5-6 AM (0)
Jan 17, 6-7 AM (0)
Jan 17, 7-8 AM (0)
Jan 17, 8-9 AM (0)
Jan 17, 9-10 AM (0)
Jan 17, 10-11 AM (0)
Jan 17, 11-12 PM (0)
Jan 17, 12-1 PM (0)
Jan 17, 1-2 PM (0)
Jan 17, 2-3 PM (0)
Jan 17, 3-4 PM (0)
Jan 17, 4-5 PM (0)
Jan 17, 5-6 PM (0)
Jan 17, 6-7 PM (0)
Jan 17, 7-8 PM (0)
Jan 17, 8-9 PM (0)
Jan 17, 9-10 PM (0)
Jan 17, 10-11 PM (0)
Jan 17, 11-12 AM (0)
Jan 18, 12-1 AM (0)
Jan 18, 1-2 AM (0)
Jan 18, 2-3 AM (0)
Jan 18, 3-4 AM (0)
Jan 18, 4-5 AM (0)
Jan 18, 5-6 AM (0)
Jan 18, 6-7 AM (0)
Jan 18, 7-8 AM (0)
Jan 18, 8-9 AM (0)
Jan 18, 9-10 AM (0)
Jan 18, 10-11 AM (0)
Jan 18, 11-12 PM (0)
Jan 18, 12-1 PM (0)
Jan 18, 1-2 PM (0)
Jan 18, 2-3 PM (0)
Jan 18, 3-4 PM (0)
Jan 18, 4-5 PM (0)
Jan 18, 5-6 PM (0)
Jan 18, 6-7 PM (0)
Jan 18, 7-8 PM (0)
Jan 18, 8-9 PM (0)
Jan 18, 9-10 PM (0)
Jan 18, 10-11 PM (0)
Jan 18, 11-12 AM (0)
Jan 19, 12-1 AM (0)
Jan 19, 1-2 AM (0)
Jan 19, 2-3 AM (0)
Jan 19, 3-4 AM (0)
Jan 19, 4-5 AM (0)
Jan 19, 5-6 AM (0)
Jan 19, 6-7 AM (0)
Jan 19, 7-8 AM (0)
Jan 19, 8-9 AM (0)
Jan 19, 9-10 AM (0)
Jan 19, 10-11 AM (0)
Jan 19, 11-12 PM (0)
Jan 19, 12-1 PM (0)
Jan 19, 1-2 PM (0)
Jan 19, 2-3 PM (0)
Jan 19, 3-4 PM (0)
Jan 19, 4-5 PM (0)
Jan 19, 5-6 PM (0)
Jan 19, 6-7 PM (0)
Jan 19, 7-8 PM (0)
Jan 19, 8-9 PM (0)
Jan 19, 9-10 PM (0)
Jan 19, 10-11 PM (0)
Jan 19, 11-12 AM (0)
Jan 20, 12-1 AM (0)
Jan 20, 1-2 AM (0)
Jan 20, 2-3 AM (0)
Jan 20, 3-4 AM (0)
Jan 20, 4-5 AM (0)
Jan 20, 5-6 AM (0)
Jan 20, 6-7 AM (0)
Jan 20, 7-8 AM (0)
Jan 20, 8-9 AM (0)
Jan 20, 9-10 AM (0)
Jan 20, 10-11 AM (0)
Jan 20, 11-12 PM (0)
Jan 20, 12-1 PM (1)
Jan 20, 1-2 PM (4)
Jan 20, 2-3 PM (3)
Jan 20, 3-4 PM (0)
Jan 20, 4-5 PM (0)
Jan 20, 5-6 PM (0)
Jan 20, 6-7 PM (0)
Jan 20, 7-8 PM (0)
Jan 20, 8-9 PM (0)
Jan 20, 9-10 PM (0)
Jan 20, 10-11 PM (0)
Jan 20, 11-12 AM (0)
Jan 21, 12-1 AM (0)
Jan 21, 1-2 AM (0)
Jan 21, 2-3 AM (0)
Jan 21, 3-4 AM (0)
Jan 21, 4-5 AM (0)
Jan 21, 5-6 AM (0)
Jan 21, 6-7 AM (0)
Jan 21, 7-8 AM (0)
Jan 21, 8-9 AM (0)
Jan 21, 9-10 AM (0)
Jan 21, 10-11 AM (0)
Jan 21, 11-12 PM (0)
Jan 21, 12-1 PM (0)
Jan 21, 1-2 PM (2)
Jan 21, 2-3 PM (2)
Jan 21, 3-4 PM (0)
Jan 21, 4-5 PM (0)
Jan 21, 5-6 PM (0)
Jan 21, 6-7 PM (0)
Jan 21, 7-8 PM (0)
Jan 21, 8-9 PM (0)
Jan 21, 9-10 PM (0)
Jan 21, 10-11 PM (0)
Jan 21, 11-12 AM (0)
32 commits this week Jan 15, 2026 - Jan 22, 2026
refactor: remove optional index migrations for deferred application
Removes Flyway migration files containing optional database indices that
were previously commented out. These indices will now be applied by an
external watchdog service after the node reaches the blockchain tip,
rather than during the initial sync process.

Removed migration files:
- V1.0_2500_0__search_indices.sql (6 search optimization indices)
- V1.0_500_0__rosetta_app_transaction.sql (2 transaction indices)
- V1.0_600_0__rosetta_app_withdrawal.sql (2 withdrawal indices)
- V1.0_900_0__rosetta_app_address_utxo.sql (1 address_utxo index)

Rationale:
These indices improve query performance but significantly slow down the
initial blockchain sync when applied early. By deferring their creation
until after sync completion, we achieve faster time-to-tip while still
maintaining optimal query performance once the system is operational.

The PostgreSQLIndexCreationMonitor tracks index creation progress via
pg_stat_progress_create_index, ensuring the sync status accurately
reflects the APPLYING_INDEXES stage when the watchdog applies these
indices post-sync.

Related to sync status monitoring implementation that reports three stages:
- SYNCING: Initial blockchain sync
- APPLYING_INDEXES: Tip reached, indices being created
- LIVE: Fully operational with all indices applied
feat: add database-aware sync status monitoring with index creation tracking
Introduces enhanced sync status reporting that monitors both blockchain
synchronization and database index creation progress. This ensures accurate
operational readiness reporting for load balancers and external clients.

Key changes:
- Add IndexCreationMonitor interface with PostgreSQL and H2 implementations
- PostgreSQL monitor queries pg_stat_progress_create_index system view
- H2 monitor provides NOOP implementation for development/testing
- Extract sync status logic into dedicated SyncStatusService
- Add SyncStage enum with three stages: SYNCING, APPLYING_INDEXES, LIVE
- Update NetworkServiceImpl to use new SyncStatusService

Sync status behavior:
- SYNCING: Node has not reached blockchain tip yet (synced=false)
- APPLYING_INDEXES: Node at tip but indexes being created (synced=false)
- LIVE: Fully synced with all indexes applied (synced=true)

The service reports synced=true only when both conditions are met:
1. Node reached blockchain tip (within allowed slot delta)
2. No database indexes are currently being created

This allows external watchdog services to monitor currentIndex vs targetIndex
to trigger index creation, while load balancers use the synced field to
determine when the service is ready for production traffic.
test: standardize network_identifier handling and require CARDANO_NETWORK
- Make CARDANO_NETWORK env var required (no silent fallback to preprod)
- Refactor RosettaClient to use explicit network_identifier parameter
- Use typed parameters for all API methods
- Consolidate network_identifier error tests in test_error_handling.py
- Standardize all tests to use network_identifier dict pattern