Resolving Foreign Constraint Violation on "collab_session_fk3" When Trying to Delete old Courses




 
Resolving Foreign Constraint Violation on "collab_session_fk3" When Trying to Delete old Courses

Date Published: Aug 29,2023 Category: Planned_First_Fix_Release:Will_Not_Fix,Will_Not_Fix_Collaborate; Product:Extensions_Learn,Web_Conferencing_Known_Issues_and_Error_Messages_Web_Conferencing; Version:Learn_9_1_3900_67_0,Learn_9_1_3900_69_0,Learn_9_1_3900_71_0,Learn_9_1_3900_74_0,Web_Conferencing,SaaS   Article No.: 000077894

Product: Blackboard Learn

Release: 9.1;SaaS

Service Pack(s): Learn 9.1 3900.67.0, Learn 9.1 3900.69.0, Learn 9.1 3900.71.0, Learn 9.1 3900.74.0, Web Conferencing, SaaS

Description: In courses that had legacy Collaborate Original, the course sometimes cannot be deleted due to a foreign key constraint violation on collab_session_fk3

Steps to Replicate: The steps to replicate this issue are unknown. All examples shown to the company are very old. Legacy Collaborate has been discontinued and no longer functions in order to perform any potential replication.

 
Symptoms: The delete fails with the following exception recorded in the logs
 
YYYY-MM-DD HH:MM:SS -TZTZ - [ERROR] Failed deleting course COURSE_ID_HERE - blackboard.persist.PersistenceException: A database error occurred.
	at blackboard.persist.impl.AbstractBaseDbPersister.runQuery(AbstractBaseDbPersister.java:199)
	at blackboard.persist.impl.AbstractBaseDbPersister.runQuery(AbstractBaseDbPersister.java:139)
	at blackboard.persist.course.impl.CourseDbPersisterImpl.deleteById(CourseDbPersisterImpl.java:303)
	at blackboard.persist.course.impl.CourseDbPersisterImpl.deleteById(CourseDbPersisterImpl.java:284)
	at blackboard.data.course.impl.CourseManagerImpl.remove(CourseManagerImpl.java:220)
	at blackboard.apps.platform.course.CourseDeleteQueuedOperation.execute(CourseDeleteQueuedOperation.java:137)
	at blackboard.platform.queue.QueuedTaskManager.processTask(QueuedTaskManager.java:488)
	at blackboard.platform.queue.QueuedTaskManager$WorkerThread.doRun(QueuedTaskManager.java:937)
	at blackboard.db.LeakCheckThread.run(LeakCheckThread.java:38)
Caused by: org.postgresql.util.PSQLException: ERROR: update or delete on table "groups" violates foreign key constraint "collab_session_fk3" on table "collab_session"
  Detail: Key (pk1)=(nnnnnn) is still referenced from table "collab_session".
  Where: SQL statement "DELETE FROM groups a WHERE a.crsmain_pk1=v_crsmain_pk1"
PL/pgSQL function groups_rm(bigint,bigint) line 37 at SQL statement
SQL statement "SELECT groups_rm(crsmain_pk1 := p1)"
PL/pgSQL function course_main_rm(bigint,character varying,timestamp without time zone,integer) line 37 at PERFORM
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2676)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2366)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:356)
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:496)
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:413)
	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:190)
	at org.postgresql.jdbc.PgCallableStatement.executeWithFlags(PgCallableStatement.java:84)
	at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:177)
	at jdk.internal.reflect.GeneratedMethodAccessor284.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:118)
	at com.sun.proxy.$Proxy64.execute(Unknown Source)
	at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94)
	at blackboard.db.impl.MonitoringConnectionPool$SQLRecorder.execute(MonitoringConnectionPool.java:225)
	at blackboard.db.impl.MonitoringConnectionPool$MonitoringCallableStatement.execute(MonitoringConnectionPool.java:667)
	at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94)
	at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94)
	at blackboard.db.impl.SafetyNetCallableStatement.execute(SafetyNetCallableStatement.java:58)
	at blackboard.persist.impl.StoredProcedureQuery.doExecute(StoredProcedureQuery.java:319)
	at blackboard.persist.impl.Query.executeQuery(Query.java:143)
	at blackboard.persist.impl.AbstractBaseDbPersister$DbConnectivityPrivilege.run(AbstractBaseDbPersister.java:280)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at blackboard.persist.impl.AbstractBaseDbPersister.runQuery(AbstractBaseDbPersister.java:170)
	... 8 more

 

Resolution/Workaround:
  1. If necessary: re-enable the course
  2. Enter the course
  3. Go to Users & Groups ➔ Groups ➔ Group Sets
  4. Check the boxes on all group sets
  5. Click delete
  6. Retry the course deletion

Information: All issues are important, but some issues naturally take precedence over others. After carefully reviewing this issue we have determined this issue should not be fixed.
  • The issue is reported solely in conjunction with the long-discontinued Original Collaborate product line
  • There is an easy workaround
  • The impact of the issue is minimal.
  • It is not possible for new instances of this issue to be created. Class Collaborate (Formerly: Collaborate Ultra) which is the sole supported product of the Collaborate line is not affected by this issue
  • Anthology, Inc sold the Collaborate product line to Class Technologies, Inc in Q2 2022.
This issue is very old. The last five released versions of Learn are selected as a convenience. In effect, the issue can be treated as not being specific to any version of Learn.
Target Release: Will Not Fix
Patch Available: No