Yicong-Huang opened a new issue, #7064:
URL: https://github.com/apache/texera/issues/7064

   ### What happened?
   
   `bin/local-dev.sh up` against a **fresh** docker volume always aborts before
   the sbt build, on the last `sql/updates` changeSet.
   
   Root cause: two bootstrappers write the same schema, and the seed-vs-replay
   probe can't tell them apart.
   
   ```
   bin/single-node/docker-compose.yml mounts ../../sql -> 
/docker-entrypoint-initdb.d
     postgres first-init runs texera_ddl.sql, which is kept in sync with
     sql/updates/* and therefore already contains every changeSet
           |
           v
   infra_ensure_db_schema() picks seed-vs-replay by probing for the `feedback`
   table.  It exists -- the entrypoint just created it -- so the REPLAY path
   re-runs changeSets 23-28 against a DB that already has all of them.
     23-27 happen to be idempotent  -> pass
     28 is not                      -> ERROR, up() returns non-zero
   ```
   
   `sql/updates/28.sql` adds `dataset_owner_uid_name_key`, which
   `sql/texera_ddl.sql:291` (`UNIQUE (owner_uid, name)`) already created under
   that auto-generated name.
   
   The `seed` branch of `infra_apply_sql_updates` — record every changeSet as
   applied without executing it — exists for exactly this fresh-DB case, but is
   unreachable, because the container entrypoint always wins the race.
   
   ```
   Before:  fresh volume -> entrypoint applies full DDL -> local-dev replays 
23-28 -> 28 fails -> no build
   After:   fresh volume -> entrypoint applies full DDL -> local-dev seeds 
23-28 as applied -> build runs
   ```
   
   The failure isn't specific to `28.sql`; it will recur on the next
   `sql/updates/N.sql` that isn't accidentally idempotent.
   
   ### How to reproduce?
   
   ```sh
   bin/local-dev.sh down
   docker volume rm texera-local-dev_postgres_data
   bin/local-dev.sh up
   ```
   
   Workaround — record the changeSet as applied by hand, since the constraint
   really is present:
   
   ```sh
   docker exec texera-postgres psql -U texera -d texera_db -qc "
     INSERT INTO public.databasechangelog
       (id, author, filename, dateexecuted, orderexecuted, exectype)
     VALUES ('28','kunwp1','changelog.xml', now(),
       (SELECT COALESCE(MAX(orderexecuted),0)+1 FROM public.databasechangelog),
       'EXECUTED')"
   ```
   
   ### Version/Branch
   
   1.3.0-incubating-SNAPSHOT (main)
   
   ### Relevant log output
   
   ```shell
     ✓  infra: 5 containers up
     →  postgres: applying sql/updates/23.sql (changeSet 23)
     →  postgres: applying sql/updates/24.sql (changeSet 24)
     →  postgres: applying sql/updates/25.sql (changeSet 25)
     →  postgres: applying sql/updates/26.sql (changeSet 26)
     →  postgres: applying sql/updates/27.sql (changeSet 27)
     →  postgres: applying sql/updates/28.sql (changeSet 28)
     ✗  postgres: sql/updates/28.sql failed -- inspect with: docker exec -i 
texera-postgres psql -U texera -d texera_db < sql/updates/28.sql
   
   $ docker exec -i texera-postgres psql -U texera -d texera_db < 
sql/updates/28.sql
   SET
   BEGIN
   DO
   ERROR:  relation "dataset_owner_uid_name_key" already exists
   ROLLBACK
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to