1{ 2 "runOn": [ 3 { 4 "minServerVersion": "4.0", 5 "topology": [ 6 "single", 7 "replicaset" 8 ] 9 }, 10 { 11 "minServerVersion": "4.1.7", 12 "topology": [ 13 "sharded" 14 ] 15 } 16 ], 17 "database_name": "retryable-reads-tests", 18 "bucket_name": "fs", 19 "data": { 20 "fs.files": [ 21 { 22 "_id": { 23 "$oid": "000000000000000000000001" 24 }, 25 "length": 1, 26 "chunkSize": 4, 27 "uploadDate": { 28 "$date": "1970-01-01T00:00:00.000Z" 29 }, 30 "filename": "abc", 31 "metadata": {} 32 } 33 ], 34 "fs.chunks": [ 35 { 36 "_id": { 37 "$oid": "000000000000000000000002" 38 }, 39 "files_id": { 40 "$oid": "000000000000000000000001" 41 }, 42 "n": 0, 43 "data": { 44 "$binary": { 45 "base64": "EQ==", 46 "subType": "00" 47 } 48 } 49 } 50 ] 51 }, 52 "tests": [ 53 { 54 "description": "DownloadByName succeeds after InterruptedAtShutdown", 55 "failPoint": { 56 "configureFailPoint": "failCommand", 57 "mode": { 58 "times": 1 59 }, 60 "data": { 61 "failCommands": [ 62 "find" 63 ], 64 "errorCode": 11600 65 } 66 }, 67 "operations": [ 68 { 69 "name": "download_by_name", 70 "object": "gridfsbucket", 71 "arguments": { 72 "filename": "abc" 73 } 74 } 75 ], 76 "expectations": [ 77 { 78 "command_started_event": { 79 "command": { 80 "find": "fs.files", 81 "filter": { 82 "filename": "abc" 83 } 84 }, 85 "database_name": "retryable-reads-tests" 86 } 87 }, 88 { 89 "command_started_event": { 90 "command": { 91 "find": "fs.files", 92 "filter": { 93 "filename": "abc" 94 } 95 }, 96 "database_name": "retryable-reads-tests" 97 } 98 }, 99 { 100 "command_started_event": { 101 "command": { 102 "find": "fs.chunks", 103 "filter": { 104 "files_id": { 105 "$oid": "000000000000000000000001" 106 } 107 }, 108 "sort": { 109 "n": 1 110 } 111 }, 112 "database_name": "retryable-reads-tests" 113 } 114 } 115 ] 116 }, 117 { 118 "description": "DownloadByName succeeds after InterruptedDueToReplStateChange", 119 "failPoint": { 120 "configureFailPoint": "failCommand", 121 "mode": { 122 "times": 1 123 }, 124 "data": { 125 "failCommands": [ 126 "find" 127 ], 128 "errorCode": 11602 129 } 130 }, 131 "operations": [ 132 { 133 "name": "download_by_name", 134 "object": "gridfsbucket", 135 "arguments": { 136 "filename": "abc" 137 } 138 } 139 ], 140 "expectations": [ 141 { 142 "command_started_event": { 143 "command": { 144 "find": "fs.files", 145 "filter": { 146 "filename": "abc" 147 } 148 }, 149 "database_name": "retryable-reads-tests" 150 } 151 }, 152 { 153 "command_started_event": { 154 "command": { 155 "find": "fs.files", 156 "filter": { 157 "filename": "abc" 158 } 159 }, 160 "database_name": "retryable-reads-tests" 161 } 162 }, 163 { 164 "command_started_event": { 165 "command": { 166 "find": "fs.chunks", 167 "filter": { 168 "files_id": { 169 "$oid": "000000000000000000000001" 170 } 171 }, 172 "sort": { 173 "n": 1 174 } 175 }, 176 "database_name": "retryable-reads-tests" 177 } 178 } 179 ] 180 }, 181 { 182 "description": "DownloadByName succeeds after NotMaster", 183 "failPoint": { 184 "configureFailPoint": "failCommand", 185 "mode": { 186 "times": 1 187 }, 188 "data": { 189 "failCommands": [ 190 "find" 191 ], 192 "errorCode": 10107 193 } 194 }, 195 "operations": [ 196 { 197 "name": "download_by_name", 198 "object": "gridfsbucket", 199 "arguments": { 200 "filename": "abc" 201 } 202 } 203 ], 204 "expectations": [ 205 { 206 "command_started_event": { 207 "command": { 208 "find": "fs.files", 209 "filter": { 210 "filename": "abc" 211 } 212 }, 213 "database_name": "retryable-reads-tests" 214 } 215 }, 216 { 217 "command_started_event": { 218 "command": { 219 "find": "fs.files", 220 "filter": { 221 "filename": "abc" 222 } 223 }, 224 "database_name": "retryable-reads-tests" 225 } 226 }, 227 { 228 "command_started_event": { 229 "command": { 230 "find": "fs.chunks", 231 "filter": { 232 "files_id": { 233 "$oid": "000000000000000000000001" 234 } 235 }, 236 "sort": { 237 "n": 1 238 } 239 }, 240 "database_name": "retryable-reads-tests" 241 } 242 } 243 ] 244 }, 245 { 246 "description": "DownloadByName succeeds after NotMasterNoSlaveOk", 247 "failPoint": { 248 "configureFailPoint": "failCommand", 249 "mode": { 250 "times": 1 251 }, 252 "data": { 253 "failCommands": [ 254 "find" 255 ], 256 "errorCode": 13435 257 } 258 }, 259 "operations": [ 260 { 261 "name": "download_by_name", 262 "object": "gridfsbucket", 263 "arguments": { 264 "filename": "abc" 265 } 266 } 267 ], 268 "expectations": [ 269 { 270 "command_started_event": { 271 "command": { 272 "find": "fs.files", 273 "filter": { 274 "filename": "abc" 275 } 276 }, 277 "database_name": "retryable-reads-tests" 278 } 279 }, 280 { 281 "command_started_event": { 282 "command": { 283 "find": "fs.files", 284 "filter": { 285 "filename": "abc" 286 } 287 }, 288 "database_name": "retryable-reads-tests" 289 } 290 }, 291 { 292 "command_started_event": { 293 "command": { 294 "find": "fs.chunks", 295 "filter": { 296 "files_id": { 297 "$oid": "000000000000000000000001" 298 } 299 }, 300 "sort": { 301 "n": 1 302 } 303 }, 304 "database_name": "retryable-reads-tests" 305 } 306 } 307 ] 308 }, 309 { 310 "description": "DownloadByName succeeds after NotMasterOrSecondary", 311 "failPoint": { 312 "configureFailPoint": "failCommand", 313 "mode": { 314 "times": 1 315 }, 316 "data": { 317 "failCommands": [ 318 "find" 319 ], 320 "errorCode": 13436 321 } 322 }, 323 "operations": [ 324 { 325 "name": "download_by_name", 326 "object": "gridfsbucket", 327 "arguments": { 328 "filename": "abc" 329 } 330 } 331 ], 332 "expectations": [ 333 { 334 "command_started_event": { 335 "command": { 336 "find": "fs.files", 337 "filter": { 338 "filename": "abc" 339 } 340 }, 341 "database_name": "retryable-reads-tests" 342 } 343 }, 344 { 345 "command_started_event": { 346 "command": { 347 "find": "fs.files", 348 "filter": { 349 "filename": "abc" 350 } 351 }, 352 "database_name": "retryable-reads-tests" 353 } 354 }, 355 { 356 "command_started_event": { 357 "command": { 358 "find": "fs.chunks", 359 "filter": { 360 "files_id": { 361 "$oid": "000000000000000000000001" 362 } 363 }, 364 "sort": { 365 "n": 1 366 } 367 }, 368 "database_name": "retryable-reads-tests" 369 } 370 } 371 ] 372 }, 373 { 374 "description": "DownloadByName succeeds after PrimarySteppedDown", 375 "failPoint": { 376 "configureFailPoint": "failCommand", 377 "mode": { 378 "times": 1 379 }, 380 "data": { 381 "failCommands": [ 382 "find" 383 ], 384 "errorCode": 189 385 } 386 }, 387 "operations": [ 388 { 389 "name": "download_by_name", 390 "object": "gridfsbucket", 391 "arguments": { 392 "filename": "abc" 393 } 394 } 395 ], 396 "expectations": [ 397 { 398 "command_started_event": { 399 "command": { 400 "find": "fs.files", 401 "filter": { 402 "filename": "abc" 403 } 404 }, 405 "database_name": "retryable-reads-tests" 406 } 407 }, 408 { 409 "command_started_event": { 410 "command": { 411 "find": "fs.files", 412 "filter": { 413 "filename": "abc" 414 } 415 }, 416 "database_name": "retryable-reads-tests" 417 } 418 }, 419 { 420 "command_started_event": { 421 "command": { 422 "find": "fs.chunks", 423 "filter": { 424 "files_id": { 425 "$oid": "000000000000000000000001" 426 } 427 }, 428 "sort": { 429 "n": 1 430 } 431 }, 432 "database_name": "retryable-reads-tests" 433 } 434 } 435 ] 436 }, 437 { 438 "description": "DownloadByName succeeds after ShutdownInProgress", 439 "failPoint": { 440 "configureFailPoint": "failCommand", 441 "mode": { 442 "times": 1 443 }, 444 "data": { 445 "failCommands": [ 446 "find" 447 ], 448 "errorCode": 91 449 } 450 }, 451 "operations": [ 452 { 453 "name": "download_by_name", 454 "object": "gridfsbucket", 455 "arguments": { 456 "filename": "abc" 457 } 458 } 459 ], 460 "expectations": [ 461 { 462 "command_started_event": { 463 "command": { 464 "find": "fs.files", 465 "filter": { 466 "filename": "abc" 467 } 468 }, 469 "database_name": "retryable-reads-tests" 470 } 471 }, 472 { 473 "command_started_event": { 474 "command": { 475 "find": "fs.files", 476 "filter": { 477 "filename": "abc" 478 } 479 }, 480 "database_name": "retryable-reads-tests" 481 } 482 }, 483 { 484 "command_started_event": { 485 "command": { 486 "find": "fs.chunks", 487 "filter": { 488 "files_id": { 489 "$oid": "000000000000000000000001" 490 } 491 }, 492 "sort": { 493 "n": 1 494 } 495 }, 496 "database_name": "retryable-reads-tests" 497 } 498 } 499 ] 500 }, 501 { 502 "description": "DownloadByName succeeds after HostNotFound", 503 "failPoint": { 504 "configureFailPoint": "failCommand", 505 "mode": { 506 "times": 1 507 }, 508 "data": { 509 "failCommands": [ 510 "find" 511 ], 512 "errorCode": 7 513 } 514 }, 515 "operations": [ 516 { 517 "name": "download_by_name", 518 "object": "gridfsbucket", 519 "arguments": { 520 "filename": "abc" 521 } 522 } 523 ], 524 "expectations": [ 525 { 526 "command_started_event": { 527 "command": { 528 "find": "fs.files", 529 "filter": { 530 "filename": "abc" 531 } 532 }, 533 "database_name": "retryable-reads-tests" 534 } 535 }, 536 { 537 "command_started_event": { 538 "command": { 539 "find": "fs.files", 540 "filter": { 541 "filename": "abc" 542 } 543 }, 544 "database_name": "retryable-reads-tests" 545 } 546 }, 547 { 548 "command_started_event": { 549 "command": { 550 "find": "fs.chunks", 551 "filter": { 552 "files_id": { 553 "$oid": "000000000000000000000001" 554 } 555 }, 556 "sort": { 557 "n": 1 558 } 559 }, 560 "database_name": "retryable-reads-tests" 561 } 562 } 563 ] 564 }, 565 { 566 "description": "DownloadByName succeeds after HostUnreachable", 567 "failPoint": { 568 "configureFailPoint": "failCommand", 569 "mode": { 570 "times": 1 571 }, 572 "data": { 573 "failCommands": [ 574 "find" 575 ], 576 "errorCode": 6 577 } 578 }, 579 "operations": [ 580 { 581 "name": "download_by_name", 582 "object": "gridfsbucket", 583 "arguments": { 584 "filename": "abc" 585 } 586 } 587 ], 588 "expectations": [ 589 { 590 "command_started_event": { 591 "command": { 592 "find": "fs.files", 593 "filter": { 594 "filename": "abc" 595 } 596 }, 597 "database_name": "retryable-reads-tests" 598 } 599 }, 600 { 601 "command_started_event": { 602 "command": { 603 "find": "fs.files", 604 "filter": { 605 "filename": "abc" 606 } 607 }, 608 "database_name": "retryable-reads-tests" 609 } 610 }, 611 { 612 "command_started_event": { 613 "command": { 614 "find": "fs.chunks", 615 "filter": { 616 "files_id": { 617 "$oid": "000000000000000000000001" 618 } 619 }, 620 "sort": { 621 "n": 1 622 } 623 }, 624 "database_name": "retryable-reads-tests" 625 } 626 } 627 ] 628 }, 629 { 630 "description": "DownloadByName succeeds after NetworkTimeout", 631 "failPoint": { 632 "configureFailPoint": "failCommand", 633 "mode": { 634 "times": 1 635 }, 636 "data": { 637 "failCommands": [ 638 "find" 639 ], 640 "errorCode": 89 641 } 642 }, 643 "operations": [ 644 { 645 "name": "download_by_name", 646 "object": "gridfsbucket", 647 "arguments": { 648 "filename": "abc" 649 } 650 } 651 ], 652 "expectations": [ 653 { 654 "command_started_event": { 655 "command": { 656 "find": "fs.files", 657 "filter": { 658 "filename": "abc" 659 } 660 }, 661 "database_name": "retryable-reads-tests" 662 } 663 }, 664 { 665 "command_started_event": { 666 "command": { 667 "find": "fs.files", 668 "filter": { 669 "filename": "abc" 670 } 671 }, 672 "database_name": "retryable-reads-tests" 673 } 674 }, 675 { 676 "command_started_event": { 677 "command": { 678 "find": "fs.chunks", 679 "filter": { 680 "files_id": { 681 "$oid": "000000000000000000000001" 682 } 683 }, 684 "sort": { 685 "n": 1 686 } 687 }, 688 "database_name": "retryable-reads-tests" 689 } 690 } 691 ] 692 }, 693 { 694 "description": "DownloadByName succeeds after SocketException", 695 "failPoint": { 696 "configureFailPoint": "failCommand", 697 "mode": { 698 "times": 1 699 }, 700 "data": { 701 "failCommands": [ 702 "find" 703 ], 704 "errorCode": 9001 705 } 706 }, 707 "operations": [ 708 { 709 "name": "download_by_name", 710 "object": "gridfsbucket", 711 "arguments": { 712 "filename": "abc" 713 } 714 } 715 ], 716 "expectations": [ 717 { 718 "command_started_event": { 719 "command": { 720 "find": "fs.files", 721 "filter": { 722 "filename": "abc" 723 } 724 }, 725 "database_name": "retryable-reads-tests" 726 } 727 }, 728 { 729 "command_started_event": { 730 "command": { 731 "find": "fs.files", 732 "filter": { 733 "filename": "abc" 734 } 735 }, 736 "database_name": "retryable-reads-tests" 737 } 738 }, 739 { 740 "command_started_event": { 741 "command": { 742 "find": "fs.chunks", 743 "filter": { 744 "files_id": { 745 "$oid": "000000000000000000000001" 746 } 747 }, 748 "sort": { 749 "n": 1 750 } 751 }, 752 "database_name": "retryable-reads-tests" 753 } 754 } 755 ] 756 }, 757 { 758 "description": "DownloadByName fails after two NotMaster errors", 759 "failPoint": { 760 "configureFailPoint": "failCommand", 761 "mode": { 762 "times": 2 763 }, 764 "data": { 765 "failCommands": [ 766 "find" 767 ], 768 "errorCode": 10107 769 } 770 }, 771 "operations": [ 772 { 773 "name": "download_by_name", 774 "object": "gridfsbucket", 775 "arguments": { 776 "filename": "abc" 777 }, 778 "error": true 779 } 780 ], 781 "expectations": [ 782 { 783 "command_started_event": { 784 "command": { 785 "find": "fs.files", 786 "filter": { 787 "filename": "abc" 788 } 789 }, 790 "database_name": "retryable-reads-tests" 791 } 792 }, 793 { 794 "command_started_event": { 795 "command": { 796 "find": "fs.files", 797 "filter": { 798 "filename": "abc" 799 } 800 }, 801 "database_name": "retryable-reads-tests" 802 } 803 } 804 ] 805 }, 806 { 807 "description": "DownloadByName fails after NotMaster when retryReads is false", 808 "clientOptions": { 809 "retryReads": false 810 }, 811 "failPoint": { 812 "configureFailPoint": "failCommand", 813 "mode": { 814 "times": 1 815 }, 816 "data": { 817 "failCommands": [ 818 "find" 819 ], 820 "errorCode": 10107 821 } 822 }, 823 "operations": [ 824 { 825 "name": "download_by_name", 826 "object": "gridfsbucket", 827 "arguments": { 828 "filename": "abc" 829 }, 830 "error": true 831 } 832 ], 833 "expectations": [ 834 { 835 "command_started_event": { 836 "command": { 837 "find": "fs.files", 838 "filter": { 839 "filename": "abc" 840 } 841 }, 842 "database_name": "retryable-reads-tests" 843 } 844 } 845 ] 846 } 847 ] 848} 849