We found a strange edge-case issue where a student launched several widget instances simultaneously, resulting in some LTI passbacks failing to occur. We suspect it may have been due to the intrinsic fragility of session data, since all the LTI launch information is stored in a session data, and that's where the system looks to determine if a passback to Canvas should occur.
Instead, since we already keep the LTI environment data in a play in the log_play table, let's just use that to determine whether or not a passback is needed, and keep from storing launch data in the session, while is known to be volatile. As an added bonus, we should consider adding logs to log_activity indicating if a passback has occurred.
We found a strange edge-case issue where a student launched several widget instances simultaneously, resulting in some LTI passbacks failing to occur. We suspect it may have been due to the intrinsic fragility of session data, since all the LTI launch information is stored in a session data, and that's where the system looks to determine if a passback to Canvas should occur.
Instead, since we already keep the LTI environment data in a play in the
log_play
table, let's just use that to determine whether or not a passback is needed, and keep from storing launch data in the session, while is known to be volatile. As an added bonus, we should consider adding logs tolog_activity
indicating if a passback has occurred.