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