Lewati ke isi

T4 W05 SESSION-UNIQ RESIDUAL CLOSED

Label: T4 W05 SESSION-UNIQ RESIDUAL CLOSED
When (UTC): 2026-08-11T22:37:52Z
Mode: server development (/home/scola/odoo)
BE tip (unchanged app code this step): 528873e3d31aa5bd1b932bf437b64bea739a7a44
Related BE savepoint fix: 528873e (index create no longer blocks -u)
W05 surface: Core per-lesson only (unchanged)

Problem

Residual from W05 rollout: op_session_faculty_start_uniq missing on prod / demo due to historical duplicate (faculty_id, start_datetime) rows.

Other live tenants already had dup_groups=0 and idx=1 after rollout upgrade.

Method (keep MIN(id))

Per affected DB, with service stopped briefly:

  1. Snapshot dup group / extra row counts
  2. Build loser set = all ids except MIN(id) per (faculty_id, start_datetime)
  3. Relink/preserve refs before delete:
  4. op_session_res_users_rel → merge onto keeper, drop loser links
  5. op_attendance_sheet → relink to keeper; on unique (register_id, session_id, attendance_date) collision: move non-duplicate op_attendance_line to keeper sheet, drop duplicate lines + colliding lose sheet
  6. scola_class_daily_report_activity.session_id → remap
  7. mail_message / mail_followers for op.session → remap (drop follower dup partners)
  8. DELETE loser op_session rows
  9. CREATE UNIQUE INDEX IF NOT EXISTS op_session_faculty_start_uniq ...
  10. Restart service + HTTP smoke

Results

Tenant Conf DB before_dup_groups deleted_rows after_dup_groups index_ok smoke
demo config/odoo-demo.conf scoladev_demo 36 281 0 yes /web/login 200; odoo-demo active
prod config/scola-prod.conf scola_goldenbabyntree 385 479 0 yes /web/login 200; odoo-prod active

Session totals: demo 1081→800; prod 18253→17774.

Risk notes

  • Demo had 1 attendance-sheet collision on relink (keep_id=30, lose_id=31, date 2026-01-15): non-duplicate lines moved to keeper sheet; duplicate student lines on lose sheet discarded; colliding lose sheet removed.
  • Prod had 0 sheet collisions; 17 loser sessions had sheets (all relinked cleanly).
  • Chatter messages on loser sessions remapped to keeper (mail_message.res_id).
  • No BE application code change in this closure step (data + index only).

Evidence

  • execution/T4-W05-evidence/T4-W05-session-uniq-demo.txt
  • execution/T4-W05-evidence/T4-W05-session-uniq-prod.txt
  • execution/T4-W05-evidence/T4-W05-session-uniq-verify.txt

Parent doc

Updates residual section in T4-W05-rollout.md → CLOSED (see companion note below).