1{ 2 "runOn": [ 3 { 4 "minServerVersion": "4.1.8", 5 "topology": [ 6 "sharded" 7 ] 8 } 9 ], 10 "database_name": "transaction-tests", 11 "collection_name": "test", 12 "data": [ 13 { 14 "_id": 1 15 }, 16 { 17 "_id": 2 18 } 19 ], 20 "tests": [ 21 { 22 "description": "countDocuments", 23 "useMultipleMongoses": true, 24 "operations": [ 25 { 26 "name": "startTransaction", 27 "object": "session0" 28 }, 29 { 30 "name": "countDocuments", 31 "object": "collection", 32 "arguments": { 33 "filter": { 34 "_id": 2 35 }, 36 "session": "session0" 37 }, 38 "result": 1 39 }, 40 { 41 "name": "countDocuments", 42 "object": "collection", 43 "arguments": { 44 "filter": { 45 "_id": 2 46 }, 47 "session": "session0" 48 }, 49 "result": 1 50 }, 51 { 52 "name": "countDocuments", 53 "object": "collection", 54 "arguments": { 55 "filter": { 56 "_id": 2 57 }, 58 "session": "session0" 59 }, 60 "result": 1 61 }, 62 { 63 "name": "countDocuments", 64 "object": "collection", 65 "arguments": { 66 "filter": { 67 "_id": 2 68 }, 69 "session": "session0" 70 }, 71 "result": 1 72 }, 73 { 74 "name": "countDocuments", 75 "object": "collection", 76 "arguments": { 77 "filter": { 78 "_id": 2 79 }, 80 "session": "session0" 81 }, 82 "result": 1 83 }, 84 { 85 "name": "countDocuments", 86 "object": "collection", 87 "arguments": { 88 "filter": { 89 "_id": 2 90 }, 91 "session": "session0" 92 }, 93 "result": 1 94 }, 95 { 96 "name": "countDocuments", 97 "object": "collection", 98 "arguments": { 99 "filter": { 100 "_id": 2 101 }, 102 "session": "session0" 103 }, 104 "result": 1 105 }, 106 { 107 "name": "countDocuments", 108 "object": "collection", 109 "arguments": { 110 "filter": { 111 "_id": 2 112 }, 113 "session": "session0" 114 }, 115 "result": 1 116 }, 117 { 118 "name": "commitTransaction", 119 "object": "session0" 120 } 121 ], 122 "outcome": { 123 "collection": { 124 "data": [ 125 { 126 "_id": 1 127 }, 128 { 129 "_id": 2 130 } 131 ] 132 } 133 } 134 }, 135 { 136 "description": "distinct", 137 "useMultipleMongoses": true, 138 "operations": [ 139 { 140 "name": "startTransaction", 141 "object": "session0" 142 }, 143 { 144 "name": "distinct", 145 "object": "collection", 146 "arguments": { 147 "fieldName": "_id", 148 "session": "session0" 149 }, 150 "result": [ 151 1, 152 2 153 ] 154 }, 155 { 156 "name": "distinct", 157 "object": "collection", 158 "arguments": { 159 "fieldName": "_id", 160 "session": "session0" 161 }, 162 "result": [ 163 1, 164 2 165 ] 166 }, 167 { 168 "name": "distinct", 169 "object": "collection", 170 "arguments": { 171 "fieldName": "_id", 172 "session": "session0" 173 }, 174 "result": [ 175 1, 176 2 177 ] 178 }, 179 { 180 "name": "distinct", 181 "object": "collection", 182 "arguments": { 183 "fieldName": "_id", 184 "session": "session0" 185 }, 186 "result": [ 187 1, 188 2 189 ] 190 }, 191 { 192 "name": "distinct", 193 "object": "collection", 194 "arguments": { 195 "fieldName": "_id", 196 "session": "session0" 197 }, 198 "result": [ 199 1, 200 2 201 ] 202 }, 203 { 204 "name": "distinct", 205 "object": "collection", 206 "arguments": { 207 "fieldName": "_id", 208 "session": "session0" 209 }, 210 "result": [ 211 1, 212 2 213 ] 214 }, 215 { 216 "name": "distinct", 217 "object": "collection", 218 "arguments": { 219 "fieldName": "_id", 220 "session": "session0" 221 }, 222 "result": [ 223 1, 224 2 225 ] 226 }, 227 { 228 "name": "distinct", 229 "object": "collection", 230 "arguments": { 231 "fieldName": "_id", 232 "session": "session0" 233 }, 234 "result": [ 235 1, 236 2 237 ] 238 }, 239 { 240 "name": "commitTransaction", 241 "object": "session0" 242 } 243 ], 244 "outcome": { 245 "collection": { 246 "data": [ 247 { 248 "_id": 1 249 }, 250 { 251 "_id": 2 252 } 253 ] 254 } 255 } 256 }, 257 { 258 "description": "find", 259 "useMultipleMongoses": true, 260 "operations": [ 261 { 262 "name": "startTransaction", 263 "object": "session0" 264 }, 265 { 266 "name": "find", 267 "object": "collection", 268 "arguments": { 269 "filter": { 270 "_id": 2 271 }, 272 "session": "session0" 273 }, 274 "result": [ 275 { 276 "_id": 2 277 } 278 ] 279 }, 280 { 281 "name": "find", 282 "object": "collection", 283 "arguments": { 284 "filter": { 285 "_id": 2 286 }, 287 "session": "session0" 288 }, 289 "result": [ 290 { 291 "_id": 2 292 } 293 ] 294 }, 295 { 296 "name": "find", 297 "object": "collection", 298 "arguments": { 299 "filter": { 300 "_id": 2 301 }, 302 "session": "session0" 303 }, 304 "result": [ 305 { 306 "_id": 2 307 } 308 ] 309 }, 310 { 311 "name": "find", 312 "object": "collection", 313 "arguments": { 314 "filter": { 315 "_id": 2 316 }, 317 "session": "session0" 318 }, 319 "result": [ 320 { 321 "_id": 2 322 } 323 ] 324 }, 325 { 326 "name": "find", 327 "object": "collection", 328 "arguments": { 329 "filter": { 330 "_id": 2 331 }, 332 "session": "session0" 333 }, 334 "result": [ 335 { 336 "_id": 2 337 } 338 ] 339 }, 340 { 341 "name": "find", 342 "object": "collection", 343 "arguments": { 344 "filter": { 345 "_id": 2 346 }, 347 "session": "session0" 348 }, 349 "result": [ 350 { 351 "_id": 2 352 } 353 ] 354 }, 355 { 356 "name": "find", 357 "object": "collection", 358 "arguments": { 359 "filter": { 360 "_id": 2 361 }, 362 "session": "session0" 363 }, 364 "result": [ 365 { 366 "_id": 2 367 } 368 ] 369 }, 370 { 371 "name": "find", 372 "object": "collection", 373 "arguments": { 374 "filter": { 375 "_id": 2 376 }, 377 "session": "session0" 378 }, 379 "result": [ 380 { 381 "_id": 2 382 } 383 ] 384 }, 385 { 386 "name": "commitTransaction", 387 "object": "session0" 388 } 389 ], 390 "outcome": { 391 "collection": { 392 "data": [ 393 { 394 "_id": 1 395 }, 396 { 397 "_id": 2 398 } 399 ] 400 } 401 } 402 }, 403 { 404 "description": "insertOne", 405 "useMultipleMongoses": true, 406 "operations": [ 407 { 408 "name": "startTransaction", 409 "object": "session0" 410 }, 411 { 412 "name": "insertOne", 413 "object": "collection", 414 "arguments": { 415 "document": { 416 "_id": 3 417 }, 418 "session": "session0" 419 }, 420 "result": { 421 "insertedId": 3 422 } 423 }, 424 { 425 "name": "insertOne", 426 "object": "collection", 427 "arguments": { 428 "document": { 429 "_id": 4 430 }, 431 "session": "session0" 432 }, 433 "result": { 434 "insertedId": 4 435 } 436 }, 437 { 438 "name": "insertOne", 439 "object": "collection", 440 "arguments": { 441 "document": { 442 "_id": 5 443 }, 444 "session": "session0" 445 }, 446 "result": { 447 "insertedId": 5 448 } 449 }, 450 { 451 "name": "insertOne", 452 "object": "collection", 453 "arguments": { 454 "document": { 455 "_id": 6 456 }, 457 "session": "session0" 458 }, 459 "result": { 460 "insertedId": 6 461 } 462 }, 463 { 464 "name": "insertOne", 465 "object": "collection", 466 "arguments": { 467 "document": { 468 "_id": 7 469 }, 470 "session": "session0" 471 }, 472 "result": { 473 "insertedId": 7 474 } 475 }, 476 { 477 "name": "insertOne", 478 "object": "collection", 479 "arguments": { 480 "document": { 481 "_id": 8 482 }, 483 "session": "session0" 484 }, 485 "result": { 486 "insertedId": 8 487 } 488 }, 489 { 490 "name": "insertOne", 491 "object": "collection", 492 "arguments": { 493 "document": { 494 "_id": 9 495 }, 496 "session": "session0" 497 }, 498 "result": { 499 "insertedId": 9 500 } 501 }, 502 { 503 "name": "insertOne", 504 "object": "collection", 505 "arguments": { 506 "document": { 507 "_id": 10 508 }, 509 "session": "session0" 510 }, 511 "result": { 512 "insertedId": 10 513 } 514 }, 515 { 516 "name": "commitTransaction", 517 "object": "session0" 518 } 519 ], 520 "outcome": { 521 "collection": { 522 "data": [ 523 { 524 "_id": 1 525 }, 526 { 527 "_id": 2 528 }, 529 { 530 "_id": 3 531 }, 532 { 533 "_id": 4 534 }, 535 { 536 "_id": 5 537 }, 538 { 539 "_id": 6 540 }, 541 { 542 "_id": 7 543 }, 544 { 545 "_id": 8 546 }, 547 { 548 "_id": 9 549 }, 550 { 551 "_id": 10 552 } 553 ] 554 } 555 } 556 }, 557 { 558 "description": "mixed read write operations", 559 "useMultipleMongoses": true, 560 "operations": [ 561 { 562 "name": "startTransaction", 563 "object": "session0" 564 }, 565 { 566 "name": "insertOne", 567 "object": "collection", 568 "arguments": { 569 "document": { 570 "_id": 3 571 }, 572 "session": "session0" 573 }, 574 "result": { 575 "insertedId": 3 576 } 577 }, 578 { 579 "name": "countDocuments", 580 "object": "collection", 581 "arguments": { 582 "filter": { 583 "_id": 3 584 }, 585 "session": "session0" 586 }, 587 "result": 1 588 }, 589 { 590 "name": "countDocuments", 591 "object": "collection", 592 "arguments": { 593 "filter": { 594 "_id": 3 595 }, 596 "session": "session0" 597 }, 598 "result": 1 599 }, 600 { 601 "name": "countDocuments", 602 "object": "collection", 603 "arguments": { 604 "filter": { 605 "_id": 3 606 }, 607 "session": "session0" 608 }, 609 "result": 1 610 }, 611 { 612 "name": "countDocuments", 613 "object": "collection", 614 "arguments": { 615 "filter": { 616 "_id": 3 617 }, 618 "session": "session0" 619 }, 620 "result": 1 621 }, 622 { 623 "name": "countDocuments", 624 "object": "collection", 625 "arguments": { 626 "filter": { 627 "_id": 3 628 }, 629 "session": "session0" 630 }, 631 "result": 1 632 }, 633 { 634 "name": "insertOne", 635 "object": "collection", 636 "arguments": { 637 "document": { 638 "_id": 4 639 }, 640 "session": "session0" 641 }, 642 "result": { 643 "insertedId": 4 644 } 645 }, 646 { 647 "name": "insertOne", 648 "object": "collection", 649 "arguments": { 650 "document": { 651 "_id": 5 652 }, 653 "session": "session0" 654 }, 655 "result": { 656 "insertedId": 5 657 } 658 }, 659 { 660 "name": "insertOne", 661 "object": "collection", 662 "arguments": { 663 "document": { 664 "_id": 6 665 }, 666 "session": "session0" 667 }, 668 "result": { 669 "insertedId": 6 670 } 671 }, 672 { 673 "name": "insertOne", 674 "object": "collection", 675 "arguments": { 676 "document": { 677 "_id": 7 678 }, 679 "session": "session0" 680 }, 681 "result": { 682 "insertedId": 7 683 } 684 }, 685 { 686 "name": "commitTransaction", 687 "object": "session0" 688 } 689 ], 690 "outcome": { 691 "collection": { 692 "data": [ 693 { 694 "_id": 1 695 }, 696 { 697 "_id": 2 698 }, 699 { 700 "_id": 3 701 }, 702 { 703 "_id": 4 704 }, 705 { 706 "_id": 5 707 }, 708 { 709 "_id": 6 710 }, 711 { 712 "_id": 7 713 } 714 ] 715 } 716 } 717 }, 718 { 719 "description": "multiple commits", 720 "useMultipleMongoses": true, 721 "operations": [ 722 { 723 "name": "startTransaction", 724 "object": "session0" 725 }, 726 { 727 "name": "insertMany", 728 "object": "collection", 729 "arguments": { 730 "documents": [ 731 { 732 "_id": 3 733 }, 734 { 735 "_id": 4 736 } 737 ], 738 "session": "session0" 739 }, 740 "result": { 741 "insertedIds": { 742 "0": 3, 743 "1": 4 744 } 745 } 746 }, 747 { 748 "name": "assertSessionPinned", 749 "object": "testRunner", 750 "arguments": { 751 "session": "session0" 752 } 753 }, 754 { 755 "name": "commitTransaction", 756 "object": "session0" 757 }, 758 { 759 "name": "assertSessionPinned", 760 "object": "testRunner", 761 "arguments": { 762 "session": "session0" 763 } 764 }, 765 { 766 "name": "commitTransaction", 767 "object": "session0" 768 }, 769 { 770 "name": "commitTransaction", 771 "object": "session0" 772 }, 773 { 774 "name": "commitTransaction", 775 "object": "session0" 776 }, 777 { 778 "name": "commitTransaction", 779 "object": "session0" 780 }, 781 { 782 "name": "commitTransaction", 783 "object": "session0" 784 }, 785 { 786 "name": "commitTransaction", 787 "object": "session0" 788 }, 789 { 790 "name": "commitTransaction", 791 "object": "session0" 792 }, 793 { 794 "name": "commitTransaction", 795 "object": "session0" 796 }, 797 { 798 "name": "commitTransaction", 799 "object": "session0" 800 }, 801 { 802 "name": "assertSessionPinned", 803 "object": "testRunner", 804 "arguments": { 805 "session": "session0" 806 } 807 } 808 ], 809 "outcome": { 810 "collection": { 811 "data": [ 812 { 813 "_id": 1 814 }, 815 { 816 "_id": 2 817 }, 818 { 819 "_id": 3 820 }, 821 { 822 "_id": 4 823 } 824 ] 825 } 826 } 827 }, 828 { 829 "description": "remain pinned after non-transient error on commit", 830 "useMultipleMongoses": true, 831 "operations": [ 832 { 833 "name": "startTransaction", 834 "object": "session0" 835 }, 836 { 837 "name": "insertMany", 838 "object": "collection", 839 "arguments": { 840 "documents": [ 841 { 842 "_id": 3 843 }, 844 { 845 "_id": 4 846 } 847 ], 848 "session": "session0" 849 }, 850 "result": { 851 "insertedIds": { 852 "0": 3, 853 "1": 4 854 } 855 } 856 }, 857 { 858 "name": "assertSessionPinned", 859 "object": "testRunner", 860 "arguments": { 861 "session": "session0" 862 } 863 }, 864 { 865 "name": "targetedFailPoint", 866 "object": "testRunner", 867 "arguments": { 868 "session": "session0", 869 "failPoint": { 870 "configureFailPoint": "failCommand", 871 "mode": { 872 "times": 1 873 }, 874 "data": { 875 "failCommands": [ 876 "commitTransaction" 877 ], 878 "errorCode": 51 879 } 880 } 881 } 882 }, 883 { 884 "name": "commitTransaction", 885 "object": "session0", 886 "result": { 887 "errorLabelsOmit": [ 888 "TransientTransactionError" 889 ], 890 "errorCode": 51 891 } 892 }, 893 { 894 "name": "assertSessionPinned", 895 "object": "testRunner", 896 "arguments": { 897 "session": "session0" 898 } 899 }, 900 { 901 "name": "commitTransaction", 902 "object": "session0" 903 }, 904 { 905 "name": "assertSessionPinned", 906 "object": "testRunner", 907 "arguments": { 908 "session": "session0" 909 } 910 } 911 ], 912 "outcome": { 913 "collection": { 914 "data": [ 915 { 916 "_id": 1 917 }, 918 { 919 "_id": 2 920 }, 921 { 922 "_id": 3 923 }, 924 { 925 "_id": 4 926 } 927 ] 928 } 929 } 930 }, 931 { 932 "description": "unpin after transient error within a transaction", 933 "useMultipleMongoses": true, 934 "operations": [ 935 { 936 "name": "startTransaction", 937 "object": "session0" 938 }, 939 { 940 "name": "insertOne", 941 "object": "collection", 942 "arguments": { 943 "session": "session0", 944 "document": { 945 "_id": 3 946 } 947 }, 948 "result": { 949 "insertedId": 3 950 } 951 }, 952 { 953 "name": "targetedFailPoint", 954 "object": "testRunner", 955 "arguments": { 956 "session": "session0", 957 "failPoint": { 958 "configureFailPoint": "failCommand", 959 "mode": { 960 "times": 1 961 }, 962 "data": { 963 "failCommands": [ 964 "insert" 965 ], 966 "closeConnection": true 967 } 968 } 969 } 970 }, 971 { 972 "name": "insertOne", 973 "object": "collection", 974 "arguments": { 975 "session": "session0", 976 "document": { 977 "_id": 4 978 } 979 }, 980 "result": { 981 "errorLabelsContain": [ 982 "TransientTransactionError" 983 ], 984 "errorLabelsOmit": [ 985 "UnknownTransactionCommitResult" 986 ] 987 } 988 }, 989 { 990 "name": "abortTransaction", 991 "object": "session0" 992 } 993 ], 994 "expectations": [ 995 { 996 "command_started_event": { 997 "command": { 998 "insert": "test", 999 "documents": [ 1000 { 1001 "_id": 3 1002 } 1003 ], 1004 "ordered": true, 1005 "readConcern": null, 1006 "lsid": "session0", 1007 "txnNumber": { 1008 "$numberLong": "1" 1009 }, 1010 "startTransaction": true, 1011 "autocommit": false, 1012 "writeConcern": null 1013 }, 1014 "command_name": "insert", 1015 "database_name": "transaction-tests" 1016 } 1017 }, 1018 { 1019 "command_started_event": { 1020 "command": { 1021 "insert": "test", 1022 "documents": [ 1023 { 1024 "_id": 4 1025 } 1026 ], 1027 "ordered": true, 1028 "readConcern": null, 1029 "lsid": "session0", 1030 "txnNumber": { 1031 "$numberLong": "1" 1032 }, 1033 "startTransaction": null, 1034 "autocommit": false, 1035 "writeConcern": null 1036 }, 1037 "command_name": "insert", 1038 "database_name": "transaction-tests" 1039 } 1040 }, 1041 { 1042 "command_started_event": { 1043 "command": { 1044 "abortTransaction": 1, 1045 "lsid": "session0", 1046 "txnNumber": { 1047 "$numberLong": "1" 1048 }, 1049 "startTransaction": null, 1050 "autocommit": false, 1051 "writeConcern": null, 1052 "recoveryToken": 42 1053 }, 1054 "command_name": "abortTransaction", 1055 "database_name": "admin" 1056 } 1057 } 1058 ], 1059 "outcome": { 1060 "collection": { 1061 "data": [ 1062 { 1063 "_id": 1 1064 }, 1065 { 1066 "_id": 2 1067 } 1068 ] 1069 } 1070 } 1071 }, 1072 { 1073 "description": "unpin after transient error within a transaction and commit", 1074 "useMultipleMongoses": true, 1075 "clientOptions": { 1076 "heartbeatFrequencyMS": 30000 1077 }, 1078 "operations": [ 1079 { 1080 "name": "startTransaction", 1081 "object": "session0" 1082 }, 1083 { 1084 "name": "insertOne", 1085 "object": "collection", 1086 "arguments": { 1087 "session": "session0", 1088 "document": { 1089 "_id": 3 1090 } 1091 }, 1092 "result": { 1093 "insertedId": 3 1094 } 1095 }, 1096 { 1097 "name": "targetedFailPoint", 1098 "object": "testRunner", 1099 "arguments": { 1100 "session": "session0", 1101 "failPoint": { 1102 "configureFailPoint": "failCommand", 1103 "mode": { 1104 "times": 7 1105 }, 1106 "data": { 1107 "failCommands": [ 1108 "insert", 1109 "isMaster" 1110 ], 1111 "closeConnection": true 1112 } 1113 } 1114 } 1115 }, 1116 { 1117 "name": "insertOne", 1118 "object": "collection", 1119 "arguments": { 1120 "session": "session0", 1121 "document": { 1122 "_id": 4 1123 } 1124 }, 1125 "result": { 1126 "errorLabelsContain": [ 1127 "TransientTransactionError" 1128 ], 1129 "errorLabelsOmit": [ 1130 "UnknownTransactionCommitResult" 1131 ] 1132 } 1133 }, 1134 { 1135 "name": "commitTransaction", 1136 "object": "session0", 1137 "result": { 1138 "errorLabelsContain": [ 1139 "TransientTransactionError" 1140 ], 1141 "errorLabelsOmit": [ 1142 "UnknownTransactionCommitResult" 1143 ], 1144 "errorCodeName": "NoSuchTransaction" 1145 } 1146 } 1147 ], 1148 "expectations": [ 1149 { 1150 "command_started_event": { 1151 "command": { 1152 "insert": "test", 1153 "documents": [ 1154 { 1155 "_id": 3 1156 } 1157 ], 1158 "ordered": true, 1159 "readConcern": null, 1160 "lsid": "session0", 1161 "txnNumber": { 1162 "$numberLong": "1" 1163 }, 1164 "startTransaction": true, 1165 "autocommit": false, 1166 "writeConcern": null 1167 }, 1168 "command_name": "insert", 1169 "database_name": "transaction-tests" 1170 } 1171 }, 1172 { 1173 "command_started_event": { 1174 "command": { 1175 "insert": "test", 1176 "documents": [ 1177 { 1178 "_id": 4 1179 } 1180 ], 1181 "ordered": true, 1182 "readConcern": null, 1183 "lsid": "session0", 1184 "txnNumber": { 1185 "$numberLong": "1" 1186 }, 1187 "startTransaction": null, 1188 "autocommit": false, 1189 "writeConcern": null 1190 }, 1191 "command_name": "insert", 1192 "database_name": "transaction-tests" 1193 } 1194 }, 1195 { 1196 "command_started_event": { 1197 "command": { 1198 "commitTransaction": 1, 1199 "lsid": "session0", 1200 "txnNumber": { 1201 "$numberLong": "1" 1202 }, 1203 "startTransaction": null, 1204 "autocommit": false, 1205 "writeConcern": null, 1206 "recoveryToken": 42 1207 }, 1208 "command_name": "commitTransaction", 1209 "database_name": "admin" 1210 } 1211 } 1212 ], 1213 "outcome": { 1214 "collection": { 1215 "data": [ 1216 { 1217 "_id": 1 1218 }, 1219 { 1220 "_id": 2 1221 } 1222 ] 1223 } 1224 } 1225 } 1226 ] 1227} 1228