The root cause of flaky attribute processing tests is that a single
appwrite-worker-databases container cannot keep up with attribute
creation jobs when tests run in parallel via paratest.
This fix:
- Scales the databases worker to 4 instances during E2E service tests
- Reverts timeout increases that masked the underlying issue
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Increase all default timeouts in SchemaPolling trait from 5 minutes to
10 minutes. With tests running in parallel via paratest, the attribute
processing worker can become backlogged under heavy CI load, requiring
longer wait times for attributes to transition from 'processing' to
'available' status.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Increase all default timeouts in SchemaPolling trait from 3 minutes to
5 minutes to handle slower attribute processing when running tests in
parallel under heavy CI load.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix OR precheck bug: skip attribute existence check when OR conditions
exist, since OR can match with partial attributes present
- Remove dead code in app/realtime.php (unused $names and $channels variables)
- Add tests for OR queries with missing attributes in one branch
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
RuntimeQuery::filter() now returns null when the query doesn't match,
instead of an empty array. This distinguishes between "no match" and
"match with empty payload", fixing the issue where subscriptions with
empty payloads weren't being delivered.
Updated Realtime::getSubscribers() to check for null instead of using
!empty(), and updated all tests to expect null for non-matches.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add missing isSelectAll() method to RuntimeQuery class
- Update RuntimeQueryTest to use compile() before filter() since filter()
expects pre-compiled query arrays, not Query objects
- Remove incorrect break statement in Realtime::getSubscribers() that was
stopping iteration after the first matching channel, causing subscribers
to not be found for subsequent channels
- Use local variable $subscriptionsByChannel to avoid unused variable warning
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Increase all default timeouts in SchemaPolling trait from 2 minutes to
3 minutes to handle slower attribute processing in CI environments.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove explicit sleep and increase assertEventually timeout from 60s to
180s to account for slower deployment and scheduling in CI. Also use
assertGreaterThanOrEqual to handle cases where multiple executions
may have run.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>