Skip to content

Commit

Permalink
test: EXPOSED-191 Flaky Oracle test on TC build
Browse files Browse the repository at this point in the history
  • Loading branch information
obabichevjb committed May 27, 2024
1 parent 2380109 commit 5abde5d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ open class InsertStatement<Key : Any>(
*/
fun <T> getOrNull(column: Column<T>): T? = resultedValues?.firstOrNull()?.getOrNull(column)

@Suppress("NestedBlockDepth", "ComplexMethod")
@Suppress("NestedBlockDepth", "ComplexMethod", "TooGenericExceptionCaught")
private fun processResults(rs: ResultSet?, inserted: Int): List<ResultRow> {
val autoGeneratedKeys = arrayListOf<MutableMap<Column<*>, Any?>>()

Expand All @@ -69,7 +69,23 @@ open class InsertStatement<Key : Any>(
if (firstAutoIncColumn != null || returnedColumns.isNotEmpty()) {
while (rs?.next() == true) {
val returnedValues = returnedColumns.associateTo(mutableMapOf()) { it.first to rs.getObject(it.second) }
if (returnedValues.isEmpty() && firstAutoIncColumn != null) returnedValues[firstAutoIncColumn] = rs.getObject(1)
if (returnedValues.isEmpty() && firstAutoIncColumn != null) {
try {
returnedValues[firstAutoIncColumn] = rs.getObject(1)
} catch (e: ArrayIndexOutOfBoundsException) {
// EXPOSED-191 Flaky Oracle test on TC build
// this try/catch should help to get information about the flaky test.
// try/catch can be safely removed after the fixing the issue.
// TooGenericExceptionCaught suppress also can be removed

exposedLogger.error(
"ArrayIndexOutOfBoundsException on processResults. " +
"Table: ${table.tableName}, firstAutoIncColumn: ${firstAutoIncColumn.name}, inserted: $inserted",
e
)
throw e
}
}
autoGeneratedKeys.add(returnedValues)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ class EntityCache(private val transaction: Transaction) {
}
}

@Suppress("TooGenericExceptionCaught")
internal fun flushInserts(table: IdTable<*>) {
var toFlush: List<Entity<*>> = inserts.remove(table)?.toList().orEmpty()
while (toFlush.isNotEmpty()) {
Expand All @@ -236,12 +237,26 @@ class EntityCache(private val transaction: Transaction) {
}
}
toFlush = partition.first
val ids = executeAsPartOfEntityLifecycle {
table.batchInsert(toFlush) { entry ->
for ((c, v) in entry.writeValues) {
this[c] = v
val ids = try {
executeAsPartOfEntityLifecycle {
table.batchInsert(toFlush) { entry ->
for ((c, v) in entry.writeValues) {
this[c] = v
}
}
}
} catch (e: ArrayIndexOutOfBoundsException) {
// EXPOSED-191 Flaky Oracle test on TC build
// this try/catch should help to get information about the flaky test.
// try/catch can be safely removed after the fixing the issue
// TooGenericExceptionCaught suppress also can be removed
val toFlushString = toFlush.joinToString("; ") {
entry ->
entry.writeValues.map { writeValue -> "${writeValue.key.name}=${writeValue.value}" }.joinToString { ", " }
}

exposedLogger.error("ArrayIndexOutOfBoundsException on attempt to make flush inserts. Table: ${table.tableName}, entries: ($toFlushString)", e)
throw e
}

for ((entry, genValues) in toFlush.zip(ids)) {
Expand Down

0 comments on commit 5abde5d

Please sign in to comment.