Commit 9284908
authored
fix(llmobs): stop failing dataset pushes that delete and insert together (#5180)
### What does this PR do?
Fixes `Dataset.Push` returning an error for any push that deletes and inserts in the same batch, even though the backend applied the change. Deleting every record and appending a replacement set, which is the natural way to overwrite a dataset, always failed:
```
push dataset: received a different number of new records than what it was sent (want: 7, got :0)
```
Inserted records now carry the id the client already generates in `Append`, and that id survives the push, so callers can keep using it to update or delete the record later.
### Motivation
The client asserted that the batch_update response contains exactly `len(insert) + len(update)` entries. The response actually contains one entry per affected record, deletions included, so 7 inserts plus 7 deletes came back as 14. The assertion failed, the new record ids were dropped, and the push reported failure after the server had already committed it. A delete-only batch would have failed the same check from the other direction.
The same assumption also made the code read `data[len(update):]` as the inserted records, which on a mixed batch is a slice of deletion entries.
Neither of the other clients for this endpoint validates that count. The Python tracer takes the ids straight from the response and matches them by lookup, never by position, and `ddeval` reads only the new version and ignores the rest. Both send a client-generated id on inserts, which is what removes the need to correlate the response at all; this change does the same. `Append` already minted a UUID for local tracking, so the id simply stops being thrown away.
Verified against the API: a dataset created through this path comes back with exactly the ids the client sent, and a mixed delete-plus-insert push now succeeds.
### Reviewer's Checklist
- [ ] Changed code has unit tests for its functionality at or near 100% coverage.
- [ ] [System-Tests](https://github.com/DataDog/system-tests/) covering this feature have been added and enabled with the va.b.c-dev version tag.
- [ ] There is a benchmark for any new code, or changes to existing code.
- [ ] If this interacts with the agent in a new way, a system test has been added.
- [ ] New code is free of linting errors. You can check this by running `make lint` locally.
- [ ] New code doesn't break existing tests. You can check this by running `make test` locally.
- [ ] Add an appropriate team label so this PR gets put in the right place for the release notes.
- [ ] All generated files are up to date. You can check this by running `make generate` locally.
- [ ] Non-trivial go.mod changes, e.g. adding new modules, are reviewed by @DataDog/dd-trace-go-guild. Make sure all nested modules are up to date by running `make fix-modules` locally.
Co-authored-by: rodrigo.arguello <rodrigo.arguello@datadoghq.com>1 parent 472fe69 commit 9284908
3 files changed
Lines changed: 98 additions & 60 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | | - | |
71 | | - | |
72 | | - | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
73 | 77 | | |
74 | 78 | | |
75 | 79 | | |
| |||
303 | 307 | | |
304 | 308 | | |
305 | 309 | | |
306 | | - | |
| 310 | + | |
307 | 311 | | |
308 | 312 | | |
309 | 313 | | |
| |||
320 | 324 | | |
321 | 325 | | |
322 | 326 | | |
323 | | - | |
| 327 | + | |
324 | 328 | | |
325 | 329 | | |
326 | | - | |
| 330 | + | |
327 | 331 | | |
328 | 332 | | |
329 | 333 | | |
330 | 334 | | |
331 | | - | |
332 | | - | |
333 | | - | |
334 | | - | |
335 | | - | |
336 | | - | |
337 | | - | |
338 | | - | |
339 | | - | |
340 | | - | |
341 | | - | |
342 | | - | |
343 | | - | |
344 | | - | |
345 | | - | |
346 | | - | |
347 | | - | |
348 | | - | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | | - | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
354 | 351 | | |
355 | 352 | | |
356 | 353 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
379 | 379 | | |
380 | 380 | | |
381 | 381 | | |
382 | | - | |
383 | | - | |
| 382 | + | |
| 383 | + | |
384 | 384 | | |
385 | 385 | | |
386 | 386 | | |
| |||
484 | 484 | | |
485 | 485 | | |
486 | 486 | | |
487 | | - | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
488 | 490 | | |
489 | 491 | | |
490 | | - | |
491 | 492 | | |
| 493 | + | |
492 | 494 | | |
493 | 495 | | |
494 | 496 | | |
| |||
522 | 524 | | |
523 | 525 | | |
524 | 526 | | |
525 | | - | |
526 | 527 | | |
527 | 528 | | |
528 | 529 | | |
| |||
535 | 536 | | |
536 | 537 | | |
537 | 538 | | |
538 | | - | |
| 539 | + | |
539 | 540 | | |
540 | 541 | | |
541 | 542 | | |
542 | 543 | | |
543 | | - | |
544 | | - | |
545 | | - | |
546 | | - | |
547 | | - | |
548 | | - | |
549 | 544 | | |
550 | 545 | | |
551 | 546 | | |
| |||
565 | 560 | | |
566 | 561 | | |
567 | 562 | | |
568 | | - | |
569 | | - | |
| 563 | + | |
570 | 564 | | |
571 | 565 | | |
572 | 566 | | |
573 | 567 | | |
574 | | - | |
575 | | - | |
576 | | - | |
577 | | - | |
578 | | - | |
579 | | - | |
| 568 | + | |
580 | 569 | | |
581 | 570 | | |
582 | 571 | | |
583 | 572 | | |
584 | 573 | | |
585 | | - | |
586 | | - | |
587 | | - | |
588 | | - | |
589 | | - | |
590 | | - | |
591 | 574 | | |
592 | 575 | | |
593 | 576 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1559 | 1559 | | |
1560 | 1560 | | |
1561 | 1561 | | |
1562 | | - | |
1563 | | - | |
1564 | | - | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
1565 | 1565 | | |
1566 | | - | |
| 1566 | + | |
1567 | 1567 | | |
1568 | 1568 | | |
1569 | | - | |
| 1569 | + | |
1570 | 1570 | | |
1571 | 1571 | | |
1572 | 1572 | | |
1573 | 1573 | | |
1574 | 1574 | | |
1575 | 1575 | | |
1576 | 1576 | | |
| 1577 | + | |
| 1578 | + | |
| 1579 | + | |
| 1580 | + | |
| 1581 | + | |
| 1582 | + | |
| 1583 | + | |
| 1584 | + | |
| 1585 | + | |
| 1586 | + | |
| 1587 | + | |
| 1588 | + | |
| 1589 | + | |
| 1590 | + | |
1577 | 1591 | | |
1578 | 1592 | | |
1579 | 1593 | | |
| |||
1716 | 1730 | | |
1717 | 1731 | | |
1718 | 1732 | | |
| 1733 | + | |
| 1734 | + | |
| 1735 | + | |
| 1736 | + | |
| 1737 | + | |
| 1738 | + | |
| 1739 | + | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
| 1743 | + | |
| 1744 | + | |
| 1745 | + | |
| 1746 | + | |
| 1747 | + | |
| 1748 | + | |
| 1749 | + | |
| 1750 | + | |
| 1751 | + | |
| 1752 | + | |
| 1753 | + | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
| 1757 | + | |
| 1758 | + | |
| 1759 | + | |
| 1760 | + | |
| 1761 | + | |
| 1762 | + | |
| 1763 | + | |
| 1764 | + | |
| 1765 | + | |
| 1766 | + | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
| 1772 | + | |
| 1773 | + | |
| 1774 | + | |
| 1775 | + | |
| 1776 | + | |
0 commit comments