Skip to content

Synchronizer: Add local docker-compose harness for manual sync testing - #257

Open
saidixith002 wants to merge 1 commit into
apache:mainfrom
saidixith002:polaris-synchronizer/manual-test-docker-setup
Open

Synchronizer: Add local docker-compose harness for manual sync testing#257
saidixith002 wants to merge 1 commit into
apache:mainfrom
saidixith002:polaris-synchronizer/manual-test-docker-setup

Conversation

@saidixith002

@saidixith002 saidixith002 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds polaris-synchronizer/manual-test/: a self-contained docker-compose setup that brings up a source and target Apache Polaris instance (in-memory metastore, no
    Postgres/S3 needed) to manually exercise sync-polaris end-to-end.
  • Source and target share a single FILE storage volume mounted at the same path, so a full sync (namespace/table content included) actually succeeds — this lets both the full
    sync and a --skip-iceberg-content sync be run back-to-back in one session and compared.
  • Documents --skip-iceberg-content in the main polaris-synchronizer/README.md (previously undocumented there) and links to the new harness under a "Testing Locally"
    section.
  • Ignores the harness's generated seed/credentials.json (bind-mounted volume, persists across docker compose down).

Related

Depends on / references #256. The manual-test walkthrough documents and exercises --skip-iceberg-content, which is only implemented on that branch — until
#256 merges, following the harness's --skip-iceberg-content steps against a jar built from main won't work, since the flag doesn't exist yet on main. Everything else
(docker-compose harness, seeding, full-sync steps) works independently of #256.

Test plan

  • docker compose up --build -d from polaris-synchronizer/manual-test/ — source, target, and polaris-init all come up healthy.
  • Ran create-omnipotent-principal against source (read-only) and target (--write-access).
  • Ran sync-polaris with --skip-iceberg-content — catalog/catalog-role/grant sync succeeds, target namespaces empty.
  • Re-ran sync-polaris without the flag — namespace/table sync succeeds (shared storage), target ends up with test_ns/test_table.
  • Verified via curl against target's management/catalog APIs at each step.

Brings up a source and target Apache Polaris instance with shared FILE
storage so sync-polaris (including --skip-iceberg-content from PR apache#256)
can be exercised end-to-end without a real Polaris deployment. Documents
the flag and links to the harness from the main README.

@dimas-b dimas-b 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.

Thanks for continuing your contributions, @saidixith002 !

- polaris-net

polaris-target:
image: apache/polaris:1.1.0-incubating

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Why not 1.6.0? 😉

cd polaris-synchronizer/manual-test
docker compose up --build -d
docker compose ps # wait for polaris-init to show "Exited (0)"
cat seed/credentials.json

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Why advise users to dump credentials to STDOUT?


# ── SOURCE: principal role ────────────────────────────────────────────────────

mgmt_post "$SOURCE" "$SRC_TOKEN" "/principal-roles" '{"principalRole": {"name": "analyst-role"}}'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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