Skip to content

Commit 2bed3b5

Browse files
authored
Fix critical Azure VMSS zero-scale bugs (timing, race conditions, SQL) (kevoreilly#2905)
* Fix case-sensitive platform comparison in Azure VMSS Platform comparison was case-sensitive, causing tasks to fail when platform tag used different casing (e.g., 'Windows' vs 'windows'). Fix: Use .lower() on both sides of comparison. File: modules/machinery/az.py Lines: ~660 * Fix SQL NULL handling in options_not_like filter Tasks with NULL or empty 'options' were not scheduled because SQL 'NULL NOT LIKE x' returns NULL (not TRUE). Fix: Import or_() and explicitly check for NULL and empty string. File: lib/cuckoo/core/database.py Lines: ~58 (import), ~2100 (fix) * Fix 7 critical Azure VMSS zero-scale bugs This commit combines 7 interdependent fixes for az.py: 1. VM provisioning timing (retry loop: 12×5s) 2. Scaling-flag race condition (add scaling_lock) 3. Import TASK_RUNNING for task counting 4. VMs deleted while tasks running (count PENDING+RUNNING) 5. Scaling flag deadlock (finally block) 6. Placeholder duplicate key (session.flush) 7. Zero-scale placeholder check (machine.reserved) All fixes tested together in production for 2 weeks. File: modules/machinery/az.py Lines: Multiple locations (~26, ~96, ~444, ~641, ~687, ~1126, ~1381)
1 parent a1c4c1f commit 2bed3b5

File tree

2 files changed

+184
-128
lines changed

2 files changed

+184
-128
lines changed

lib/cuckoo/core/database.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
# event,
5757
func,
5858
not_,
59+
or_,
5960
select,
6061
Select,
6162
delete,
@@ -2097,7 +2098,15 @@ def list_tasks(
20972098
if options_like:
20982099
stmt = stmt.where(Task.options.like(f"%{options_like.replace('*', '%')}%"))
20992100
if options_not_like:
2100-
stmt = stmt.where(Task.options.notlike(f"%{options_not_like.replace('*', '%')}%"))
2101+
# Fix: SQL NULL NOT LIKE returns NULL, not TRUE
2102+
# Must explicitly check for NULL and empty string
2103+
stmt = stmt.where(
2104+
or_(
2105+
Task.options is None,
2106+
Task.options == "",
2107+
not_(Task.options.like(f"%{options_not_like.replace('*', '%')}%"))
2108+
)
2109+
)
21012110
if tags_tasks_like:
21022111
stmt = stmt.where(Task.tags_tasks.like(f"%{tags_tasks_like}%"))
21032112
if task_ids:

0 commit comments

Comments
 (0)