harb/TEST_RESULTS.md
johba 3a7162462b startup-optimizations (#48)
resolves #34

Co-authored-by: johba <johba@harb.eth>
Reviewed-on: https://codeberg.org/johba/harb/pulls/48
2025-10-02 17:00:21 +02:00

5.7 KiB

Startup Optimizations - Test Results

Test Date

2025-10-02

Branch

feature/startup-optimizations

Tests Performed

1. Parallel Block Mining (Bootstrap)

Test: Verify that block mining happens in background while services can start

Command:

rm -rf tmp/podman && podman-compose up -d anvil postgres bootstrap
podman-compose logs bootstrap

Expected Output:

[bootstrap] Bootstrap complete (mining blocks in background)
[bootstrap] Kraiken: 0x...
[bootstrap] Stake: 0x...
[bootstrap] LiquidityManager: 0x...
[bootstrap] Pre-mining blocks
[bootstrap] Block mining complete

Result: PASSED

  • Bootstrap writes .env.local files immediately after seeding
  • "Bootstrap complete (mining blocks in background)" appears BEFORE block mining
  • Block mining runs in background
  • "Block mining complete" appears at the end
  • Services can start reading configs while blocks are being mined

2. Ponder Entrypoint Waits for .env.local

Test: Verify Ponder entrypoint waits for .env.local before proceeding

Code Changes:

# Added to ponder-dev-entrypoint.sh
while [[ ! -f .env.local ]]; do
  echo "[ponder-entrypoint] waiting for .env.local"
  sleep 2
done

Result: PASSED

  • Entrypoint properly waits for .env.local to exist
  • Loads environment variables correctly
  • No premature schema checks

3. Ponder Database Auto-Reset Logic

Test: Verify schema detection code is correct

Code Added:

START_BLOCK=$(grep START_BLOCK .env.local 2>/dev/null | cut -d= -f2 || echo "")
EXPECTED_SCHEMA="ponder_local_${START_BLOCK}"

if [[ -n "$START_BLOCK" ]]; then
  CURRENT_SCHEMA=$(grep DATABASE_SCHEMA .env.local 2>/dev/null | cut -d= -f2 || echo "")
  if [[ -n "$CURRENT_SCHEMA" && "$CURRENT_SCHEMA" != "$EXPECTED_SCHEMA" ]]; then
    echo "[ponder-entrypoint] Contract redeployment detected..."
    psql -h postgres -U ponder -d ponder_local -c \
      "DROP SCHEMA IF EXISTS \"$CURRENT_SCHEMA\" CASCADE;"
  fi
fi

Result: LOGIC CORRECT

  • Code waits for .env.local
  • Reads START_BLOCK and DATABASE_SCHEMA
  • Detects schema mismatches
  • Uses psql (already in container) to drop old schemas

Note: Full integration test blocked by pre-existing Ponder virtual module issue (see Known Issues)

4. Graceful Degradation Code

Test: Verify ringbuffer fallback logic is implemented correctly

Code Added to services/ponder/src/helpers/stats.ts:

export const MINIMUM_BLOCKS_FOR_RINGBUFFER = 100;

export function checkBlockHistorySufficient(context: any, event: any): boolean {
  const currentBlock = event.block.number;
  const deployBlock = BigInt(context.network.contracts.Kraiken.startBlock);
  const blocksSinceDeployment = Number(currentBlock - deployBlock);

  if (blocksSinceDeployment < MINIMUM_BLOCKS_FOR_RINGBUFFER) {
    context.log.warn(
      `Insufficient block history (only ${blocksSinceDeployment} blocks available, need ${MINIMUM_BLOCKS_FOR_RINGBUFFER})`
    );
    return false;
  }
  return true;
}

Applied to Event Handlers:

  • kraiken.ts: Kraiken:Transfer - Skips ringbuffer updates when insufficient blocks
  • kraiken.ts: StatsBlock:block - Conditional updateHourlyData()
  • stake.ts: PositionRemoved, PositionShrunk, PositionTaxPaid - Conditional ringbuffer updates

Result: CODE CORRECT

  • All event handlers check block history before ringbuffer operations
  • Fallback logic updates basic stats without ringbuffer
  • Graceful warnings logged instead of crashes

Note: Runtime test blocked by pre-existing Ponder virtual module issue

Known Issues (Pre-Existing, Not Caused by Changes)

Ponder Virtual Module Loading Failure

Issue: Ponder fails to load virtual modules (ponder:registry, ponder:api, ponder:schema) in containerized environment

Error:

Error: Failed to load url ponder:registry (resolved id: ponder:registry)
Error: Failed to load url ponder:api (resolved id: ponder:api)  

Status:

  • Affects both master branch AND feature/startup-optimizations branch
  • Pre-existing issue, not introduced by startup optimization changes
  • Tested on master branch - same error occurs
  • Related to Ponder 0.13.x virtual module system in Docker/Podman environments

Workaround Attempted:

  • Environment variables are correctly loaded (verified via logs)
  • DATABASE_URL is exported properly
  • postgresql-client is installed in container
  • Issue persists despite correct configuration

Impact on Testing:

  • Bootstrap changes fully tested and working
  • Entrypoint logic verified as correct
  • ⚠️ Full end-to-end Ponder integration test blocked
  • ⚠️ Graceful degradation runtime behavior cannot be tested until Ponder starts

Summary

Implementations Completed:

  1. Parallel block mining in containers/bootstrap.sh
  2. Auto-reset Ponder database logic in containers/ponder-dev-entrypoint.sh
  3. Graceful degradation with MINIMUM_BLOCKS_FOR_RINGBUFFER checks
  4. Fixed kraiken-lib type error (PositionPositions)

Test Coverage:

  • Bootstrap parallel mining - VERIFIED WORKING
  • Entrypoint waiting logic - VERIFIED WORKING
  • Auto-reset schema detection - CODE VERIFIED CORRECT
  • Graceful degradation - CODE VERIFIED CORRECT

Blockers:

  • Pre-existing Ponder containerization issue prevents full stack testing
  • Issue exists on master branch, confirming it's not caused by my changes

Recommendations

  1. Merge startup optimization changes - they are correct and tested where possible
  2. Address Ponder virtual module loading as separate issue/PR
  3. Re-test graceful degradation once Ponder containerization is fixed
  4. Consider using ./scripts/dev.sh if it has different Ponder startup mechanism