We encountered a vexing issue where sections did not appear for the class list for students. We confirmed the students were properly enrolled. We confirmed the current date was between the dates for learning contexts and terms. We confirmed the access was granted to the students. Still, the sections were not showing, but the usual suspects of administrator or instructor error we not the culprits. Someone eventually figured out that the sections showed up in a student’s editor for showing hidden classes, but not on the classlist. Moving the section higher in the list caused other sections to disappear.
We found strange errors in the webct.log about: “com.webct….SettingsDAOException: Generic DB exception(SMS)-SettingsDAOImpl::loadSettingValue java.sql.SQLException: Numeric Overflow”. The stack trace talked about oracle.jdbc.driver.NumberCommonAccessor.getLong which for the Oracle JDBC driver to react like this… We knew was bad. Open a ticket ASAP with Blackboard with a high severity bad.
Then we noticed these errors: “com.webct….NewMemberEJB METHOD: isRoleHasAccessToLc Failed to get sms setting for lcId =9999999999999 and setting = restrictAccessSection_SSTU”. This restrict access had to be related to the students not being able to get into their sections. Failing to look up the value was the curious part.
In Java’s primitive data types, there is one called the long data type. It has a maximum value of 263-1, aka 9,223,372,036,854,775,807. (Yeah, 9 quintillion.) According to Blackboard, Inc., it should take a hundred years to use up the possible values. This supposes that values are added by incrementing them by 1.
It turns out the section copy tool adds a digit each time the section is copied. So the original has about ten digits. The copy has eleven. The copy of the copy has twelve digits. This is our third year in the product with the capability. We have three terms a year. So that is nine potential generations. So ten digit values become nineteen in three years not a hundred. Doh!
Blackboard’s workaround is to divide the numbers exceeding Long by a thousand. Of course, there is a sanity check to make sure none will conflict with existing values. Ugh. In testing I found changing any setting different than a higher context adds a new value to the database. So basically we have to fix every setting change our clients make not just access to sections for students.
Our legendary analyst figured out changing the setting at the institution level and applying to child contexts removes the settings. Of course, that removes the customization of each course or section.