Skip to content

Development#25

Open
elpete wants to merge 24 commits intomainfrom
development
Open

Development#25
elpete wants to merge 24 commits intomainfrom
development

Conversation

@elpete
Copy link
Copy Markdown
Contributor

@elpete elpete commented Apr 6, 2026

No description provided.

elpete and others added 24 commits February 12, 2026 10:26
Lucee can return the `stackTrace` property on an exception as a Java array
of StackTraceElement objects rather than a simple string. Guard against
this by checking isSimpleValue() before comparing to "" and by serializing
complex values to JSON before inserting.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
reservedDate compared against pool.getTimeout() always used the pool's
fixed 60s window, causing jobs with longer per-job timeouts (e.g. 300s) to
be re-grabbed and have attempts incremented while still running.
availableDate is already set to now + jobTimeout at reservation time, so
comparing it against now correctly respects each job's actual timeout.

Fixes both fetchPotentiallyOpenRecords and tryToLockRecords.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…timeout

Three specs covering the core bug fix in DBProvider:
- A reserved job within its own timeout is not re-grabbed
- A reserved job whose timeout has expired is re-grabbed
- A job past the pool timeout but within the job timeout is not re-grabbed

Uses TestBox makePublic() to expose fetchPotentiallyOpenRecords for
direct testing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ockRecords guard

ColdBoxAsyncProvider: The thenCompose closure referenced
arguments.currentAttempt which does not exist in the closure scope,
so setCurrentAttempt() never executed for retried jobs. Changed to
check the captured attempts variable instead.

DBProvider.tryToLockRecords: Added whereNotNull(reservedDate) guard
to the availableDate OR branch, consistent with the same fix already
applied to fetchPotentiallyOpenRecords. Ensures only genuinely
timed-out reserved jobs are re-locked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
If dispatchThenJobIfNeeded or dispatchCatchJobIfNeeded threw an
exception (e.g. missing WireBox mapping, connection error), the
finally job would never be dispatched. Wrap both in try/catch so
dispatchFinallyJobIfNeeded always runs, matching the semantic
contract of "finally".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The exception was passed to the job onFailure handler under the
misspelled key "excpetion" instead of "exception", so any job
defining onFailure( exception ) would receive an undefined argument.
Aligns SyncProvider with the AbstractQueueProvider behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant