[{"data":1,"prerenderedAt":2308},["ShallowReactive",2],{"docs:\u002Fen\u002Fguide\u002Fexecution":3},{"page":4,"untranslated":2307,"translated":1521},{"id":5,"title":6,"body":7,"description":2298,"extension":2299,"meta":2300,"navigation":1521,"path":2301,"publishedAt":2302,"seo":2303,"stem":2304,"updatedAt":2305,"__hash__":2306},"docs_en\u002Fen\u002Fguide\u002Fexecution.md","Controlling Execution",{"type":8,"value":9,"toc":2273},"minimark",[10,14,19,114,143,148,174,178,208,218,222,225,299,307,374,388,392,408,446,488,500,504,531,566,570,593,611,669,692,719,723,726,813,929,947,951,964,968,987,1036,1039,1046,1071,1103,1132,1136,1157,1160,1166,1201,1226,1243,1247,1250,1296,1304,1381,1397,1411,1415,1436,1471,1478,1724,1727,1837,1858,1862,1893,1963,1978,1981,2096,2122,2126,2135,2205,2251,2269],[11,12,6],"h1",{"id":13},"実行の制御",[15,16,18],"h2",{"id":17},"状態","States",[20,21,22,35],"table",{},[23,24,25],"thead",{},[26,27,28,32],"tr",{},[29,30,31],"th",{},"State",[29,33,34],{},"Meaning",[36,37,38,50,60,70,80,92,102],"tbody",{},[26,39,40,47],{},[41,42,43],"td",{},[44,45,46],"code",{},"SCHEDULED",[41,48,49],{},"Waiting for the first run or a retry",[26,51,52,57],{},[41,53,54],{},[44,55,56],{},"QUEUED",[41,58,59],{},"Eligible to run, before the performer starts",[26,61,62,67],{},[41,63,64],{},[44,65,66],{},"RUNNING",[41,68,69],{},"The performer is running",[26,71,72,77],{},[41,73,74],{},[44,75,76],{},"COMPLETED",[41,78,79],{},"Succeeded. A terminal state with no transitions to other states",[26,81,82,87],{},[41,83,84],{},[44,85,86],{},"FAILED",[41,88,89,90],{},"Failed up to the attempt limit. A manual retry moves it to ",[44,91,46],{},[26,93,94,99],{},[41,95,96],{},[44,97,98],{},"CANCELLED",[41,100,101],{},"Cancelled. A terminal state with no transitions to other states",[26,103,104,109],{},[41,105,106],{},[44,107,108],{},"STALLED",[41,110,111,112],{},"Stopped without a reported result. Only a manual retry moves it to ",[44,113,46],{},[115,116,117,120,121,124,125,127,128,130,131,133,134,136,137,139,140,142],"p",{},[44,118,119],{},"attempts"," is the number of finished attempts.",[122,123],"br",{},"\nA ",[44,126,46],{}," job with ",[44,129,119],{}," of 0 is waiting for its first run, and one with ",[44,132,119],{}," of 1 or more is waiting for a retry.",[122,135],{},"\nRetry ",[44,138,86],{}," and ",[44,141,108],{}," jobs manually from the dashboard or the REST API.",[144,145,147],"h3",{"id":146},"遷移","Transitions",[115,149,150,151,153,154,156,157,124,159,161,162,164,165,167,168,173],{},"Cancelling a ",[44,152,46],{}," job moves it to ",[44,155,98],{}," immediately.",[122,158],{},[44,160,56],{}," or ",[44,163,66],{}," job moves to ",[44,166,98],{}," when its deadline passes or when a ",[169,170,172],"a",{"href":171},"#%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%AE%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%97","cancellation during execution"," is confirmed.",[15,175,177],{"id":176},"リトライ","Retries",[115,179,180,181,184,185,188,189,191,192,188,194,196,197,199,200,203,204,207],{},"Set the retry limit with ",[44,182,183],{},"maxAttempts"," and the retry interval with ",[44,186,187],{},"backoff",".",[122,190],{},"\nSpecify an integer of 1 or more for ",[44,193,183],{},[122,195],{},"\nSpecify ",[44,198,187],{}," in one of two forms: ",[44,201,202],{},"fixed"," for a fixed interval or ",[44,205,206],{},"exponential"," for exponential backoff.",[209,210,212],"callout",{"type":211},"info",[115,213,214,217],{},[44,215,216],{},"max_retries"," in wrangler.jsonc is a Queues setting. It does not affect Tsumugi retries.",[144,219,221],{"id":220},"バックオフ","Backoff",[115,223,224],{},"The default is the following exponential backoff.",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-ts shiki shiki-themes github-light github-dark","{ kind: 'exponential', baseMs: 1_000, factor: 2, maxMs: 3_600_000, jitter: true }\n","ts","",[44,233,234],{"__ignoreMap":231},[235,236,239,243,247,250,254,257,260,262,266,268,271,273,276,278,281,283,286,288,291,293,296],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"sVt8B","{ ",[235,244,246],{"class":245},"sScJk","kind",[235,248,249],{"class":241},": ",[235,251,253],{"class":252},"sZZnC","'exponential'",[235,255,256],{"class":241},", ",[235,258,259],{"class":245},"baseMs",[235,261,249],{"class":241},[235,263,265],{"class":264},"sj4cs","1_000",[235,267,256],{"class":241},[235,269,270],{"class":245},"factor",[235,272,249],{"class":241},[235,274,275],{"class":264},"2",[235,277,256],{"class":241},[235,279,280],{"class":245},"maxMs",[235,282,249],{"class":241},[235,284,285],{"class":264},"3_600_000",[235,287,256],{"class":241},[235,289,290],{"class":245},"jitter",[235,292,249],{"class":241},[235,294,295],{"class":264},"true",[235,297,298],{"class":241}," }\n",[115,300,301,302,304,305,188],{},"To use a fixed interval, specify ",[44,303,202],{}," for ",[44,306,246],{},[226,308,310],{"className":228,"code":309,"language":230,"meta":231,"style":231},"await tsumugi.enqueue(env, {\n  binding: 'MAIL',\n  payload,\n  backoff: { kind: 'fixed', delayMs: 30_000, jitter: true },\n});\n",[44,311,312,327,339,345,368],{"__ignoreMap":231},[235,313,314,318,321,324],{"class":237,"line":238},[235,315,317],{"class":316},"szBVR","await",[235,319,320],{"class":241}," tsumugi.",[235,322,323],{"class":245},"enqueue",[235,325,326],{"class":241},"(env, {\n",[235,328,330,333,336],{"class":237,"line":329},2,[235,331,332],{"class":241},"  binding: ",[235,334,335],{"class":252},"'MAIL'",[235,337,338],{"class":241},",\n",[235,340,342],{"class":237,"line":341},3,[235,343,344],{"class":241},"  payload,\n",[235,346,348,351,354,357,360,363,365],{"class":237,"line":347},4,[235,349,350],{"class":241},"  backoff: { kind: ",[235,352,353],{"class":252},"'fixed'",[235,355,356],{"class":241},", delayMs: ",[235,358,359],{"class":264},"30_000",[235,361,362],{"class":241},", jitter: ",[235,364,295],{"class":264},[235,366,367],{"class":241}," },\n",[235,369,371],{"class":237,"line":370},5,[235,372,373],{"class":241},"});\n",[115,375,376,377,380,381,383,384,188],{},"With ",[44,378,379],{},"jitter: true",", the retry times of many jobs that failed at the same moment are spread out.",[122,382],{},"\nTo specify from the performer whether to retry and when to retry next, see ",[169,385,387],{"href":386},"\u002Fen\u002Fguide\u002Fperformer#%E5%86%8D%E8%A9%A6%E8%A1%8C%E3%81%AE%E6%8C%87%E5%AE%9A","Specifying a retry",[15,389,391],{"id":390},"実行保証","Execution Guarantees",[115,393,394,397,398,401,402,188,405,407],{},[44,395,396],{},"guarantee"," is either ",[44,399,400],{},"at-least-once"," (default) or ",[44,403,404],{},"at-most-once",[122,406],{},"\nThe behavior for a job whose result is not reported depends on the value you choose.",[20,409,410,420],{},[23,411,412],{},[26,413,414,417],{},[29,415,416],{},"Guarantee",[29,418,419],{},"Behavior when no result is reported",[36,421,422,434],{},[26,423,424,429],{},[41,425,426,428],{},[44,427,400],{}," (default)",[41,430,431,432],{},"Re-enqueued as ",[44,433,46],{},[26,435,436,440],{},[41,437,438],{},[44,439,404],{},[41,441,442,443,445],{},"Moves to ",[44,444,108],{}," without being re-enqueued. Re-running is limited to manual retries",[226,447,449],{"className":228,"code":448,"language":230,"meta":231,"style":231},"await tsumugi.enqueue(env, {\n  binding: 'CHARGE',\n  payload,\n  guarantee: 'at-most-once',\n});\n",[44,450,451,461,470,474,484],{"__ignoreMap":231},[235,452,453,455,457,459],{"class":237,"line":238},[235,454,317],{"class":316},[235,456,320],{"class":241},[235,458,323],{"class":245},[235,460,326],{"class":241},[235,462,463,465,468],{"class":237,"line":329},[235,464,332],{"class":241},[235,466,467],{"class":252},"'CHARGE'",[235,469,338],{"class":241},[235,471,472],{"class":237,"line":341},[235,473,344],{"class":241},[235,475,476,479,482],{"class":237,"line":347},[235,477,478],{"class":241},"  guarantee: ",[235,480,481],{"class":252},"'at-most-once'",[235,483,338],{"class":241},[235,485,486],{"class":237,"line":370},[235,487,373],{"class":241},[115,489,490,491,493,494,496,497,499],{},"An ",[44,492,404],{}," job is never executed twice.",[122,495],{},"\nIn exchange, it takes longer to start running than an ",[44,498,400],{}," job.",[15,501,503],{"id":502},"タイムアウトと無応答","Timeouts and Unresponsive Jobs",[115,505,506,507,510,511,124,513,516,517,520,521,523,524,526,527,188],{},"An attempt that exceeds ",[44,508,509],{},"timeoutMs"," is treated as failed.",[122,512],{},[44,514,515],{},"TsumugiTimeoutError"," (",[44,518,519],{},"job timed out (\u003CjobId>, \u003CtimeoutMs>ms)",") is recorded as the attempt's error.",[122,522],{},"\nThe performer is not stopped after the timeout.",[122,525],{},"\nTo abort the processing, see ",[169,528,530],{"href":529},"\u002Fen\u002Fguide\u002Fperformer#%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AB%E3%82%88%E3%82%8B%E4%B8%AD%E6%96%AD","Aborting on timeout",[115,532,533,534,161,536,538,539,541,542,545,546,549,550,552,553,164,555,557,558,552,560,562,563,565],{},"A ",[44,535,56],{},[44,537,66],{}," job is judged unresponsive when no attempt result is recorded within ",[44,540,509],{}," plus ",[44,543,544],{},"reaperGraceMs"," (default 30 seconds) from the start of execution (or from the last ",[44,547,548],{},"heartbeat",").",[122,551],{},"\nAn ",[44,554,404],{},[44,556,108],{}," regardless of the number of attempts.",[122,559],{},[44,561,400],{}," job is re-enqueued if the number of attempts has not reached the limit, and moves to ",[44,564,86],{}," if it has.",[15,567,569],{"id":568},"実行中の取り消し","Cancelling a Running Job",[115,571,572,573,161,575,577,578,580,581,188,587,589,590,188],{},"When you cancel a ",[44,574,56],{},[44,576,66],{}," job, a cancellation request to the performer is recorded.",[122,579],{},"\nCancel from the dashboard or with ",[169,582,584],{"href":583},"\u002Fen\u002Freference\u002Frest-api#post-apijobsidcancel",[44,585,586],{},"POST \u002Fapi\u002Fjobs\u002F:id\u002Fcancel",[122,588],{},"\nThe response from this endpoint includes ",[44,591,592],{},"requested: true",[115,594,595,596,599,600,188,603,605,606,608,609,188],{},"The performer checks for the request through ",[44,597,598],{},"cancelRequested",", the return value of ",[44,601,602],{},"ctx.heartbeat()",[122,604],{},"\nTo abort the processing, throw an exception and exit.",[122,607],{},"\nAn attempt that fails after the request is not retried, and the job moves to ",[44,610,98],{},[226,612,614],{"className":228,"code":613,"language":230,"meta":231,"style":231},"const { cancelRequested } = await ctx.heartbeat(progress);\nif (cancelRequested) throw new Error('cancelled');\n",[44,615,616,643],{"__ignoreMap":231},[235,617,618,621,624,626,629,632,635,638,640],{"class":237,"line":238},[235,619,620],{"class":316},"const",[235,622,623],{"class":241}," { ",[235,625,598],{"class":264},[235,627,628],{"class":241}," } ",[235,630,631],{"class":316},"=",[235,633,634],{"class":316}," await",[235,636,637],{"class":241}," ctx.",[235,639,548],{"class":245},[235,641,642],{"class":241},"(progress);\n",[235,644,645,648,651,654,657,660,663,666],{"class":237,"line":329},[235,646,647],{"class":316},"if",[235,649,650],{"class":241}," (cancelRequested) ",[235,652,653],{"class":316},"throw",[235,655,656],{"class":316}," new",[235,658,659],{"class":245}," Error",[235,661,662],{"class":241},"(",[235,664,665],{"class":252},"'cancelled'",[235,667,668],{"class":241},");\n",[115,670,671,672,674,675,677,678,680,681,188,683,685,686,688,689,691],{},"If a success is reported before the request, the job stays ",[44,673,76],{}," and its result is also saved.",[122,676],{},"\nIf no result is reported within ",[44,679,544],{}," (default 30 seconds) of the request, the job moves to ",[44,682,98],{},[122,684],{},"\nThe performer is not stopped, so a performer that does not check for the request keeps running.",[122,687],{},"\nReports received after the job moves to ",[44,690,98],{}," are discarded.",[115,693,694,695,697,698,552,700,702,703,705,706,708,709,712,713,715,716,718],{},"A job waiting for a retry moves to ",[44,696,98],{}," without being re-enqueued.",[122,699],{},[44,701,404],{}," job that has not yet run also moves to ",[44,704,98],{}," without being executed.",[122,707],{},"\nIf you request ",[44,710,711],{},"reschedule"," for a job that already has a cancellation request, the REST API responds with 409.",[122,714],{},"\nA performer that does not call ",[44,717,548],{}," never checks for the request.",[15,720,722],{"id":721},"実行量の制限","Limiting Execution Volume",[115,724,725],{},"Four settings limit execution volume for each binding.",[20,727,728,741],{},[23,729,730],{},[26,731,732,735,738],{},[29,733,734],{},"Setting",[29,736,737],{},"Default",[29,739,740],{},"Description",[36,742,743,758,776,794],{},[26,744,745,750,755],{},[41,746,747],{},[44,748,749],{},"concurrency",[41,751,752],{},[44,753,754],{},"100",[41,756,757],{},"Upper limit on the number of jobs running at the same time",[26,759,760,765,770],{},[41,761,762],{},[44,763,764],{},"rate",[41,766,767],{},[44,768,769],{},"null",[41,771,772,773,775],{},"Upper limit on the number of jobs run per unit of time. ",[44,774,769],{}," means no limit",[26,777,778,783,788],{},[41,779,780],{},[44,781,782],{},"perKeyConcurrency",[41,784,785],{},[44,786,787],{},"1",[41,789,790,791],{},"Upper limit on concurrent runs for each ",[44,792,793],{},"concurrencyKey",[26,795,796,801,805],{},[41,797,798],{},[44,799,800],{},"perKeyRate",[41,802,803],{},[44,804,769],{},[41,806,807,808,810,811,775],{},"Upper limit on the number of runs per unit of time for each ",[44,809,793],{},". ",[44,812,769],{},[226,814,816],{"className":228,"code":815,"language":230,"meta":231,"style":231},"const tsumugi = defineTsumugi({\n  performers,\n  bindings: {\n    MAIL: {\n      policy: {\n        concurrency: 20,\n        rate: { tokens: 100, intervalMs: 60_000 },\n        perKeyConcurrency: 1,\n        perKeyRate: { tokens: 10, intervalMs: 60_000 },\n      },\n    },\n  },\n});\n",[44,817,818,834,839,844,849,854,865,881,891,906,912,918,924],{"__ignoreMap":231},[235,819,820,822,825,828,831],{"class":237,"line":238},[235,821,620],{"class":316},[235,823,824],{"class":264}," tsumugi",[235,826,827],{"class":316}," =",[235,829,830],{"class":245}," defineTsumugi",[235,832,833],{"class":241},"({\n",[235,835,836],{"class":237,"line":329},[235,837,838],{"class":241},"  performers,\n",[235,840,841],{"class":237,"line":341},[235,842,843],{"class":241},"  bindings: {\n",[235,845,846],{"class":237,"line":347},[235,847,848],{"class":241},"    MAIL: {\n",[235,850,851],{"class":237,"line":370},[235,852,853],{"class":241},"      policy: {\n",[235,855,857,860,863],{"class":237,"line":856},6,[235,858,859],{"class":241},"        concurrency: ",[235,861,862],{"class":264},"20",[235,864,338],{"class":241},[235,866,868,871,873,876,879],{"class":237,"line":867},7,[235,869,870],{"class":241},"        rate: { tokens: ",[235,872,754],{"class":264},[235,874,875],{"class":241},", intervalMs: ",[235,877,878],{"class":264},"60_000",[235,880,367],{"class":241},[235,882,884,887,889],{"class":237,"line":883},8,[235,885,886],{"class":241},"        perKeyConcurrency: ",[235,888,787],{"class":264},[235,890,338],{"class":241},[235,892,894,897,900,902,904],{"class":237,"line":893},9,[235,895,896],{"class":241},"        perKeyRate: { tokens: ",[235,898,899],{"class":264},"10",[235,901,875],{"class":241},[235,903,878],{"class":264},[235,905,367],{"class":241},[235,907,909],{"class":237,"line":908},10,[235,910,911],{"class":241},"      },\n",[235,913,915],{"class":237,"line":914},11,[235,916,917],{"class":241},"    },\n",[235,919,921],{"class":237,"line":920},12,[235,922,923],{"class":241},"  },\n",[235,925,927],{"class":237,"line":926},13,[235,928,373],{"class":241},[115,930,931,933,934,936,937,939,139,941,943,944,946],{},[44,932,800],{}," applies the same value to every key.",[122,935],{},"\nThere is no setting for assigning a different value to each key.",[122,938],{},[44,940,782],{},[44,942,800],{}," do not apply to jobs whose ",[44,945,793],{}," is null.",[144,948,950],{"id":949},"実行されない原因の確認","Finding Why a Job Is Not Running",[115,952,953,954,960,961,963],{},"If an enqueued job does not run, check the response of ",[169,955,957],{"href":956},"\u002Fen\u002Freference\u002Frest-api#get-apidiagnostics",[44,958,959],{},"GET \u002Fapi\u002Fdiagnostics"," to see which setting is limiting execution.",[122,962],{},"\nThe response shows whether the cause is a pause, the concurrency limit, or the rate limit.",[144,965,967],{"id":966},"実行時の変更","Changing Settings at Runtime",[115,969,970,971,974,975,977,978,980,981,188],{},"In the ",[44,972,973],{},"bindings"," tab of the dashboard, you can change the concurrency and pause enqueueing.",[122,976],{},"\nChanges do not require a deploy and apply to all shards of the binding.",[122,979],{},"\nThis operation is equivalent to calling ",[169,982,984],{"href":983},"\u002Fen\u002Freference\u002Frest-api#post-apibindingsbindingpolicy",[44,985,986],{},"POST \u002Fapi\u002Fbindings\u002F:binding\u002Fpolicy",[226,988,992],{"className":989,"code":990,"language":991,"meta":231,"style":231},"language-bash shiki shiki-themes github-light github-dark","curl -X POST -H \"authorization: Bearer $TOKEN\" -H 'content-type: application\u002Fjson' \\\n  -d '{\"paused\": true}' https:\u002F\u002Fexample.com\u002Fapi\u002Fbindings\u002FMAIL\u002Fpolicy\n","bash",[44,993,994,1025],{"__ignoreMap":231},[235,995,996,999,1002,1005,1008,1011,1014,1017,1019,1022],{"class":237,"line":238},[235,997,998],{"class":245},"curl",[235,1000,1001],{"class":264}," -X",[235,1003,1004],{"class":252}," POST",[235,1006,1007],{"class":264}," -H",[235,1009,1010],{"class":252}," \"authorization: Bearer ",[235,1012,1013],{"class":241},"$TOKEN",[235,1015,1016],{"class":252},"\"",[235,1018,1007],{"class":264},[235,1020,1021],{"class":252}," 'content-type: application\u002Fjson'",[235,1023,1024],{"class":264}," \\\n",[235,1026,1027,1030,1033],{"class":237,"line":329},[235,1028,1029],{"class":264},"  -d",[235,1031,1032],{"class":252}," '{\"paused\": true}'",[235,1034,1035],{"class":252}," https:\u002F\u002Fexample.com\u002Fapi\u002Fbindings\u002FMAIL\u002Fpolicy\n",[115,1037,1038],{},"After you resume, a lower-priority job that was waiting before the pause may run ahead of a higher-priority job enqueued later.",[115,1040,1041],{},[1042,1043],"img",{"alt":1044,"src":1045},"The bindings tab","\u002Fdashboard-bindings.jpg",[115,1047,1048,1049,1052,1053,188,1056,1058,1060,1061,1064,1065,139,1068,188],{},"To change settings from code, call ",[44,1050,1051],{},"configure"," on the stub obtained with ",[44,1054,1055],{},"tsumugi.shardFor",[122,1057],{},[44,1059,1051],{}," changes the execution limits with ",[44,1062,1063],{},"policy",", and the retention periods with ",[44,1066,1067],{},"sweepAfterMs",[44,1069,1070],{},"failedRetentionMs",[226,1072,1074],{"className":228,"code":1073,"language":230,"meta":231,"style":231},"await tsumugi.shardFor(env, 'MAIL').configure({ policy: { concurrency: 5 } });\n",[44,1075,1076],{"__ignoreMap":231},[235,1077,1078,1080,1082,1085,1088,1090,1092,1094,1097,1100],{"class":237,"line":238},[235,1079,317],{"class":316},[235,1081,320],{"class":241},[235,1083,1084],{"class":245},"shardFor",[235,1086,1087],{"class":241},"(env, ",[235,1089,335],{"class":252},[235,1091,549],{"class":241},[235,1093,1051],{"class":245},[235,1095,1096],{"class":241},"({ policy: { concurrency: ",[235,1098,1099],{"class":264},"5",[235,1101,1102],{"class":241}," } });\n",[115,1104,1105,1106,1108,1109,1111,1112,1114,1115,1117,1118,1120,1121,188,1127,1129,1130,188],{},"Settings changed at runtime take precedence over the ",[44,1107,973],{}," settings.",[122,1110],{},"\nAfter that, the ",[44,1113,973],{}," settings are no longer applied.",[122,1116],{},"\nTo return to the ",[44,1119,973],{}," settings, call ",[169,1122,1124],{"href":1123},"\u002Fen\u002Freference\u002Frest-api#post-apibindingsbindingpolicyreset",[44,1125,1126],{},"POST \u002Fapi\u002Fbindings\u002F:binding\u002Fpolicy\u002Freset",[122,1128],{},"\nAlternatively, specify the original values again with ",[44,1131,1051],{},[15,1133,1135],{"id":1134},"エージング","Aging",[115,1137,1138,1139,1141,1142,1144,1145,1147,1150,1151,1153,1154,1156],{},"If higher-priority jobs keep being enqueued, lower-priority jobs may never run.",[122,1140],{},"\nTo prevent this, the effective priority rises with waiting time.",[122,1143],{},"\nThis behavior is called aging, and it is applied by default.",[122,1146],{},[44,1148,1149],{},"agingIntervalMs"," sets the interval at which priority rises, and its default is 60 seconds.",[122,1152],{},"\nIf you specify ",[44,1155,769],{},", aging is not applied and jobs run strictly in priority order.",[15,1158,1159],{"id":1159},"shard",[115,1161,1162,1163,1165],{},"A shard is a unit into which a binding's jobs are divided and managed.",[122,1164],{},"\nThe default number of shards is 1.",[226,1167,1169],{"className":228,"code":1168,"language":230,"meta":231,"style":231},"bindings: {\n  MAIL: { shards: 4 },\n}\n",[44,1170,1171,1178,1196],{"__ignoreMap":231},[235,1172,1173,1175],{"class":237,"line":238},[235,1174,973],{"class":245},[235,1176,1177],{"class":241},": {\n",[235,1179,1180,1183,1186,1189,1191,1194],{"class":237,"line":329},[235,1181,1182],{"class":245},"  MAIL",[235,1184,1185],{"class":241},": { ",[235,1187,1188],{"class":245},"shards",[235,1190,249],{"class":241},[235,1192,1193],{"class":264},"4",[235,1195,367],{"class":241},[235,1197,1198],{"class":237,"line":341},[235,1199,1200],{"class":241},"}\n",[115,1202,1203,1204,1207,1208,1210,1211,139,1213,1216,1217,1219,1220,1222,1223,1225],{},"If the number of shards is 2 or more, ",[44,1205,1206],{},"partitionKey"," is required, and omitting it raises an exception.",[122,1209],{},"\nThe scope of control by ",[44,1212,793],{},[44,1214,1215],{},"uniqueKey"," depends on the number of shards.",[122,1218],{},"\nWith one shard, all jobs in the binding are covered.",[122,1221],{},"\nWith two or more, only jobs in the same shard, selected by ",[44,1224,1206],{},", are covered.",[115,1227,1228,1229,161,1231,1233,1234,1236,1237,1239,1240,1242],{},"When you use ",[44,1230,793],{},[44,1232,1215],{},", specify the same key for ",[44,1235,1206],{}," as well.",[122,1238],{},"\nSetting different values does not cause an error, but jobs with the same key may be assigned to different shards.",[122,1241],{},"\nAs a result, concurrent execution or duplicate creation can occur.",[15,1244,1246],{"id":1245},"保持期間","Retention Periods",[115,1248,1249],{},"Finished jobs are deleted after a certain period.",[20,1251,1252,1263],{},[23,1253,1254],{},[26,1255,1256,1259,1261],{},[29,1257,1258],{},"Target",[29,1260,734],{},[29,1262,737],{},[36,1264,1265,1281],{},[26,1266,1267,1274,1278],{},[41,1268,1269,1271,1272],{},[44,1270,76],{}," \u002F ",[44,1273,98],{},[41,1275,1276],{},[44,1277,1067],{},[41,1279,1280],{},"5 minutes",[26,1282,1283,1289,1293],{},[41,1284,1285,1271,1287],{},[44,1286,86],{},[44,1288,108],{},[41,1290,1291],{},[44,1292,1070],{},[41,1294,1295],{},"7 days",[115,1297,1298,1299,1301,1302,188],{},"A deleted job cannot be retried.",[122,1300],{},"\nSpecify both settings for each binding in ",[44,1303,973],{},[226,1305,1307],{"className":228,"code":1306,"language":230,"meta":231,"style":231},"const tsumugi = defineTsumugi({\n  performers,\n  bindings: {\n    MAIL: { sweepAfterMs: 60 * 60 * 1000, failedRetentionMs: 14 * 24 * 60 * 60 * 1000 },\n  },\n});\n",[44,1308,1309,1321,1325,1329,1373,1377],{"__ignoreMap":231},[235,1310,1311,1313,1315,1317,1319],{"class":237,"line":238},[235,1312,620],{"class":316},[235,1314,824],{"class":264},[235,1316,827],{"class":316},[235,1318,830],{"class":245},[235,1320,833],{"class":241},[235,1322,1323],{"class":237,"line":329},[235,1324,838],{"class":241},[235,1326,1327],{"class":237,"line":341},[235,1328,843],{"class":241},[235,1330,1331,1334,1337,1340,1343,1345,1348,1351,1354,1356,1359,1361,1363,1365,1367,1369,1371],{"class":237,"line":347},[235,1332,1333],{"class":241},"    MAIL: { sweepAfterMs: ",[235,1335,1336],{"class":264},"60",[235,1338,1339],{"class":316}," *",[235,1341,1342],{"class":264}," 60",[235,1344,1339],{"class":316},[235,1346,1347],{"class":264}," 1000",[235,1349,1350],{"class":241},", failedRetentionMs: ",[235,1352,1353],{"class":264},"14",[235,1355,1339],{"class":316},[235,1357,1358],{"class":264}," 24",[235,1360,1339],{"class":316},[235,1362,1342],{"class":264},[235,1364,1339],{"class":316},[235,1366,1342],{"class":264},[235,1368,1339],{"class":316},[235,1370,1347],{"class":264},[235,1372,367],{"class":241},[235,1374,1375],{"class":237,"line":370},[235,1376,923],{"class":241},[235,1378,1379],{"class":237,"line":856},[235,1380,373],{"class":241},[115,1382,1383,1384,188,1387,1389,1390,1392,1393,188],{},"The period for which jobs appear in the dashboard and REST API lists is set separately from the retention periods, with ",[44,1385,1386],{},"retention",[122,1388],{},"\nWhen a cron trigger is configured, finished jobs and Runs older than that period are removed from the lists.",[122,1391],{},"\nFor details, see ",[169,1394,1396],{"href":1395},"\u002Fen\u002Freference\u002Fconfig#sweepoptions","SweepOptions",[115,1398,1399,1400,1402,1403,139,1405,1407,1408,1410],{},"By default, the two periods match.",[122,1401],{},"\nAs a result, ",[44,1404,86],{},[44,1406,108],{}," jobs shown in the list can be retried.",[122,1409],{},"\nIf you change only one of the periods, the REST API may respond with 410 to a retry request even for a job shown in the list.",[15,1412,1414],{"id":1413},"失敗の通知","Failure Notifications",[115,1416,1417,1418,256,1421,139,1423,1425,1426,1428,1430,1431,1433,1435],{},"If you specify the name of the destination binding in ",[44,1419,1420],{},"onFailure",[44,1422,86],{},[44,1424,108],{}," jobs are notified to the specified performer.",[122,1427],{},[44,1429,86],{}," means a job that failed up to the attempt limit.",[122,1432],{},[44,1434,108],{}," means a job that stopped without a reported result.",[226,1437,1439],{"className":228,"code":1438,"language":230,"meta":231,"style":231},"const tsumugi = defineTsumugi({\n  performers,\n  onFailure: 'NotifyFailure',\n});\n",[44,1440,1441,1453,1457,1467],{"__ignoreMap":231},[235,1442,1443,1445,1447,1449,1451],{"class":237,"line":238},[235,1444,620],{"class":316},[235,1446,824],{"class":264},[235,1448,827],{"class":316},[235,1450,830],{"class":245},[235,1452,833],{"class":241},[235,1454,1455],{"class":237,"line":329},[235,1456,838],{"class":241},[235,1458,1459,1462,1465],{"class":237,"line":341},[235,1460,1461],{"class":241},"  onFailure: ",[235,1463,1464],{"class":252},"'NotifyFailure'",[235,1466,338],{"class":241},[235,1468,1469],{"class":237,"line":347},[235,1470,373],{"class":241},[115,1472,1473,1474,1477],{},"The destination performer receives a ",[44,1475,1476],{},"FailureNotice"," as its argument.",[226,1479,1481],{"className":228,"code":1480,"language":230,"meta":231,"style":231},"import { Performer } from 'tsumugi\u002Fperformer';\nimport type { FailureNotice } from 'tsumugi';\n\nexport class NotifyFailure extends Performer\u003CFailureNotice, void, {}, Env> {\n  async perform(notice: FailureNotice): Promise\u003Cvoid> {\n    const res = await fetch(this.env.SLACK_WEBHOOK, {\n      method: 'POST',\n      body: JSON.stringify({ text: `${notice.binding} が失敗しました: ${notice.error}` }),\n    });\n    if (!res.ok) throw new Error(`notification failed: ${res.status}`);\n  }\n}\n",[44,1482,1483,1500,1517,1523,1559,1593,1622,1632,1674,1679,1715,1720],{"__ignoreMap":231},[235,1484,1485,1488,1491,1494,1497],{"class":237,"line":238},[235,1486,1487],{"class":316},"import",[235,1489,1490],{"class":241}," { Performer } ",[235,1492,1493],{"class":316},"from",[235,1495,1496],{"class":252}," 'tsumugi\u002Fperformer'",[235,1498,1499],{"class":241},";\n",[235,1501,1502,1504,1507,1510,1512,1515],{"class":237,"line":329},[235,1503,1487],{"class":316},[235,1505,1506],{"class":316}," type",[235,1508,1509],{"class":241}," { FailureNotice } ",[235,1511,1493],{"class":316},[235,1513,1514],{"class":252}," 'tsumugi'",[235,1516,1499],{"class":241},[235,1518,1519],{"class":237,"line":341},[235,1520,1522],{"emptyLinePlaceholder":1521},true,"\n",[235,1524,1525,1528,1531,1534,1537,1540,1543,1545,1547,1550,1553,1556],{"class":237,"line":347},[235,1526,1527],{"class":316},"export",[235,1529,1530],{"class":316}," class",[235,1532,1533],{"class":245}," NotifyFailure",[235,1535,1536],{"class":316}," extends",[235,1538,1539],{"class":245}," Performer",[235,1541,1542],{"class":241},"\u003C",[235,1544,1476],{"class":245},[235,1546,256],{"class":241},[235,1548,1549],{"class":264},"void",[235,1551,1552],{"class":241},", {}, ",[235,1554,1555],{"class":245},"Env",[235,1557,1558],{"class":241},"> {\n",[235,1560,1561,1564,1567,1569,1573,1576,1579,1582,1584,1587,1589,1591],{"class":237,"line":370},[235,1562,1563],{"class":316},"  async",[235,1565,1566],{"class":245}," perform",[235,1568,662],{"class":241},[235,1570,1572],{"class":1571},"s4XuR","notice",[235,1574,1575],{"class":316},":",[235,1577,1578],{"class":245}," FailureNotice",[235,1580,1581],{"class":241},")",[235,1583,1575],{"class":316},[235,1585,1586],{"class":245}," Promise",[235,1588,1542],{"class":241},[235,1590,1549],{"class":264},[235,1592,1558],{"class":241},[235,1594,1595,1598,1601,1603,1605,1608,1610,1613,1616,1619],{"class":237,"line":856},[235,1596,1597],{"class":316},"    const",[235,1599,1600],{"class":264}," res",[235,1602,827],{"class":316},[235,1604,634],{"class":316},[235,1606,1607],{"class":245}," fetch",[235,1609,662],{"class":241},[235,1611,1612],{"class":264},"this",[235,1614,1615],{"class":241},".env.",[235,1617,1618],{"class":264},"SLACK_WEBHOOK",[235,1620,1621],{"class":241},", {\n",[235,1623,1624,1627,1630],{"class":237,"line":867},[235,1625,1626],{"class":241},"      method: ",[235,1628,1629],{"class":252},"'POST'",[235,1631,338],{"class":241},[235,1633,1634,1637,1640,1642,1645,1648,1651,1653,1655,1658,1661,1663,1665,1668,1671],{"class":237,"line":883},[235,1635,1636],{"class":241},"      body: ",[235,1638,1639],{"class":264},"JSON",[235,1641,188],{"class":241},[235,1643,1644],{"class":245},"stringify",[235,1646,1647],{"class":241},"({ text: ",[235,1649,1650],{"class":252},"`${",[235,1652,1572],{"class":241},[235,1654,188],{"class":252},[235,1656,1657],{"class":241},"binding",[235,1659,1660],{"class":252},"} が失敗しました: ${",[235,1662,1572],{"class":241},[235,1664,188],{"class":252},[235,1666,1667],{"class":241},"error",[235,1669,1670],{"class":252},"}`",[235,1672,1673],{"class":241}," }),\n",[235,1675,1676],{"class":237,"line":893},[235,1677,1678],{"class":241},"    });\n",[235,1680,1681,1684,1686,1689,1692,1694,1696,1698,1700,1703,1706,1708,1711,1713],{"class":237,"line":908},[235,1682,1683],{"class":316},"    if",[235,1685,516],{"class":241},[235,1687,1688],{"class":316},"!",[235,1690,1691],{"class":241},"res.ok) ",[235,1693,653],{"class":316},[235,1695,656],{"class":316},[235,1697,659],{"class":245},[235,1699,662],{"class":241},[235,1701,1702],{"class":252},"`notification failed: ${",[235,1704,1705],{"class":241},"res",[235,1707,188],{"class":252},[235,1709,1710],{"class":241},"status",[235,1712,1670],{"class":252},[235,1714,668],{"class":241},[235,1716,1717],{"class":237,"line":914},[235,1718,1719],{"class":241},"  }\n",[235,1721,1722],{"class":237,"line":920},[235,1723,1200],{"class":241},[144,1725,1476],{"id":1726},"failurenotice",[20,1728,1729,1738],{},[23,1730,1731],{},[26,1732,1733,1736],{},[29,1734,1735],{},"Name",[29,1737,740],{},[36,1739,1740,1750,1759,1772,1781,1790,1802,1815,1827],{},[26,1741,1742,1747],{},[41,1743,1744],{},[44,1745,1746],{},"jobId",[41,1748,1749],{},"ID of the failed job",[26,1751,1752,1756],{},[41,1753,1754],{},[44,1755,1657],{},[41,1757,1758],{},"binding of the failed job",[26,1760,1761,1766],{},[41,1762,1763],{},[44,1764,1765],{},"state",[41,1767,1768,161,1770],{},[44,1769,86],{},[44,1771,108],{},[26,1773,1774,1778],{},[41,1775,1776],{},[44,1777,119],{},[41,1779,1780],{},"Number of attempts made",[26,1782,1783,1787],{},[41,1784,1785],{},[44,1786,183],{},[41,1788,1789],{},"Upper limit on the number of attempts",[26,1791,1792,1796],{},[41,1793,1794],{},[44,1795,1667],{},[41,1797,1798,1799,1801],{},"Error from the last attempt. ",[44,1800,769],{}," if none was recorded",[26,1803,1804,1809],{},[41,1805,1806],{},[44,1807,1808],{},"runId",[41,1810,1811,1812,1814],{},"Run that enqueued the job. ",[44,1813,769],{}," for a job enqueued on its own",[26,1816,1817,1822],{},[41,1818,1819],{},[44,1820,1821],{},"nodeId",[41,1823,1824,1825,1814],{},"node that enqueued the job. ",[44,1826,769],{},[26,1828,1829,1834],{},[41,1830,1831],{},[44,1832,1833],{},"failedAt",[41,1835,1836],{},"Time of failure, in epoch milliseconds",[115,1838,1839,1840,1842,1843,1845,1846,1848,1849,1851,1852,1854,1855,1857],{},"Jobs of all bindings are subject to notification.",[122,1841],{},"\nEach notification runs as one job.",[122,1844],{},"\nIf a notification job fails, that job appears in the list.",[122,1847],{},"\nA notification job is also retried like any other job.",[122,1850],{},"\nFailures of jobs in the destination binding itself are not notified.",[122,1853],{},"\nJobs that failed before ",[44,1856,1420],{}," was specified are not covered.",[15,1859,1861],{"id":1860},"終了の通知","Settlement Notifications",[115,1863,1864,1865,1868,1869,1871,1872,1875,1876,256,1878,256,1880,1882,1883,188,1885,1887,1889,1890,188],{},"If you specify ",[44,1866,1867],{},"onSettled",", jobs that have finished, not only failed ones, are notified to the specified performer.",[122,1870],{},"\nSpecify the states to notify in ",[44,1873,1874],{},"states",", choosing from ",[44,1877,76],{},[44,1879,86],{},[44,1881,98],{},", and ",[44,1884,108],{},[122,1886],{},[44,1888,1874],{}," is required. An empty array or an invalid state raises an exception in ",[44,1891,1892],{},"defineTsumugi",[226,1894,1896],{"className":228,"code":1895,"language":230,"meta":231,"style":231},"const tsumugi = defineTsumugi({\n  performers,\n  onSettled: {\n    binding: 'NotifySettled',\n    states: ['COMPLETED', 'FAILED', 'CANCELLED', 'STALLED'],\n  },\n});\n",[44,1897,1898,1910,1914,1919,1929,1955,1959],{"__ignoreMap":231},[235,1899,1900,1902,1904,1906,1908],{"class":237,"line":238},[235,1901,620],{"class":316},[235,1903,824],{"class":264},[235,1905,827],{"class":316},[235,1907,830],{"class":245},[235,1909,833],{"class":241},[235,1911,1912],{"class":237,"line":329},[235,1913,838],{"class":241},[235,1915,1916],{"class":237,"line":341},[235,1917,1918],{"class":241},"  onSettled: {\n",[235,1920,1921,1924,1927],{"class":237,"line":347},[235,1922,1923],{"class":241},"    binding: ",[235,1925,1926],{"class":252},"'NotifySettled'",[235,1928,338],{"class":241},[235,1930,1931,1934,1937,1939,1942,1944,1947,1949,1952],{"class":237,"line":370},[235,1932,1933],{"class":241},"    states: [",[235,1935,1936],{"class":252},"'COMPLETED'",[235,1938,256],{"class":241},[235,1940,1941],{"class":252},"'FAILED'",[235,1943,256],{"class":241},[235,1945,1946],{"class":252},"'CANCELLED'",[235,1948,256],{"class":241},[235,1950,1951],{"class":252},"'STALLED'",[235,1953,1954],{"class":241},"],\n",[235,1956,1957],{"class":237,"line":856},[235,1958,923],{"class":241},[235,1960,1961],{"class":237,"line":867},[235,1962,373],{"class":241},[115,1964,1965,1966,1968,1969,1971,1972,1974,1975,1477],{},"If you include ",[44,1967,76],{},", as many notification jobs are enqueued as there are completed jobs.",[122,1970],{},"\nCheck the number of jobs before you specify it.",[122,1973],{},"\nThe destination performer receives a ",[44,1976,1977],{},"SettledNotice",[144,1979,1977],{"id":1980},"settlednotice",[20,1982,1983,1991],{},[23,1984,1985],{},[26,1986,1987,1989],{},[29,1988,1735],{},[29,1990,740],{},[36,1992,1993,2002,2011,2020,2028,2036,2047,2066,2076,2086],{},[26,1994,1995,1999],{},[41,1996,1997],{},[44,1998,1746],{},[41,2000,2001],{},"ID of the finished job",[26,2003,2004,2008],{},[41,2005,2006],{},[44,2007,1657],{},[41,2009,2010],{},"binding of the finished job",[26,2012,2013,2017],{},[41,2014,2015],{},[44,2016,1765],{},[41,2018,2019],{},"State at the time it finished",[26,2021,2022,2026],{},[41,2023,2024],{},[44,2025,119],{},[41,2027,1780],{},[26,2029,2030,2034],{},[41,2031,2032],{},[44,2033,183],{},[41,2035,1789],{},[26,2037,2038,2042],{},[41,2039,2040],{},[44,2041,1667],{},[41,2043,1798,2044,2046],{},[44,2045,769],{}," if the job finished in a state other than failure, or if none was recorded",[26,2048,2049,2054],{},[41,2050,2051],{},[44,2052,2053],{},"result",[41,2055,2056,2057,810,2060,2062,2063,2065],{},"Return value of ",[44,2058,2059],{},"perform",[44,2061,769],{}," for states other than ",[44,2064,76],{},", or if the storage limit was exceeded",[26,2067,2068,2072],{},[41,2069,2070],{},[44,2071,1808],{},[41,2073,1811,2074,1814],{},[44,2075,769],{},[26,2077,2078,2082],{},[41,2079,2080],{},[44,2081,1821],{},[41,2083,1824,2084,1814],{},[44,2085,769],{},[26,2087,2088,2093],{},[41,2089,2090],{},[44,2091,2092],{},"settledAt",[41,2094,2095],{},"Time the job finished, in epoch milliseconds",[115,2097,2098,2099,2101,2102,2104,2105,139,2107,256,2109,139,2111,2113,2114,2116,2117,2119,2120,1857],{},"Jobs in the destination binding itself and jobs in the ",[44,2100,1420],{}," destination binding are not notified.",[122,2103],{},"\nIf you specify both ",[44,2106,1420],{},[44,2108,1867],{},[44,2110,86],{},[44,2112,108],{}," jobs included in ",[44,2115,1874],{}," are notified to both destinations.",[122,2118],{},"\nJobs that finished before ",[44,2121,1867],{},[15,2123,2125],{"id":2124},"投入時の既定値","Defaults at Enqueue Time",[115,2127,1864,2128,2131,2132,2134],{},[44,2129,2130],{},"onEnqueue",", it is called each time a job is enqueued, and its return value is used as the default execution options.",[122,2133],{},"\nValues specified by the caller always take precedence, and the defaults apply only to options that are not explicitly set.",[226,2136,2138],{"className":228,"code":2137,"language":230,"meta":231,"style":231},"const tsumugi = defineTsumugi({\n  performers,\n  onEnqueue: (input) => (input.binding === 'SlowJob' ? { timeoutMs: 300_000 } : undefined),\n});\n",[44,2139,2140,2152,2156,2201],{"__ignoreMap":231},[235,2141,2142,2144,2146,2148,2150],{"class":237,"line":238},[235,2143,620],{"class":316},[235,2145,824],{"class":264},[235,2147,827],{"class":316},[235,2149,830],{"class":245},[235,2151,833],{"class":241},[235,2153,2154],{"class":237,"line":329},[235,2155,838],{"class":241},[235,2157,2158,2161,2164,2167,2170,2173,2176,2179,2182,2185,2188,2191,2193,2195,2198],{"class":237,"line":341},[235,2159,2160],{"class":245},"  onEnqueue",[235,2162,2163],{"class":241},": (",[235,2165,2166],{"class":1571},"input",[235,2168,2169],{"class":241},") ",[235,2171,2172],{"class":316},"=>",[235,2174,2175],{"class":241}," (input.binding ",[235,2177,2178],{"class":316},"===",[235,2180,2181],{"class":252}," 'SlowJob'",[235,2183,2184],{"class":316}," ?",[235,2186,2187],{"class":241}," { timeoutMs: ",[235,2189,2190],{"class":264},"300_000",[235,2192,628],{"class":241},[235,2194,1575],{"class":316},[235,2196,2197],{"class":264}," undefined",[235,2199,2200],{"class":241},"),\n",[235,2202,2203],{"class":237,"line":347},[235,2204,373],{"class":241},[115,2206,2207,2208,256,2211,256,2214,256,2216,256,2218,256,2220,256,2222,256,2225,256,2228,256,2231,1882,2234,188,2236,2238,256,2240,256,2243,256,2245,1882,2248,2250],{},"The execution options that can have defaults are ",[44,2209,2210],{},"traceparent",[44,2212,2213],{},"priority",[44,2215,183],{},[44,2217,187],{},[44,2219,509],{},[44,2221,396],{},[44,2223,2224],{},"delayMs",[44,2226,2227],{},"runAt",[44,2229,2230],{},"expiresAt",[44,2232,2233],{},"expiresInMs",[44,2235,793],{},[122,2237],{},[44,2239,1657],{},[44,2241,2242],{},"payload",[44,2244,1215],{},[44,2246,2247],{},"uniqueForMs",[44,2249,1206],{}," are not covered.",[115,2252,2253,2255,2256,139,2258,188,2260,2262,2263,188],{},[44,2254,2130],{}," is not applied to the notification jobs of ",[44,2257,1420],{},[44,2259,1867],{},[122,2261],{},"\nTo apply it to jobs enqueued from another Worker as well, pass the same function to ",[169,2264,2266],{"href":2265},"\u002Fen\u002Fguide\u002Fclient#%E6%8A%95%E5%85%A5%E6%99%82%E3%81%AE%E6%97%A2%E5%AE%9A%E5%80%A4",[44,2267,2268],{},"createClient",[2270,2271,2272],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":231,"searchDepth":341,"depth":341,"links":2274},[2275,2278,2281,2282,2283,2284,2288,2289,2290,2291,2294,2297],{"id":17,"depth":329,"text":18,"children":2276},[2277],{"id":146,"depth":341,"text":147},{"id":176,"depth":329,"text":177,"children":2279},[2280],{"id":220,"depth":341,"text":221},{"id":390,"depth":329,"text":391},{"id":502,"depth":329,"text":503},{"id":568,"depth":329,"text":569},{"id":721,"depth":329,"text":722,"children":2285},[2286,2287],{"id":949,"depth":341,"text":950},{"id":966,"depth":341,"text":967},{"id":1134,"depth":329,"text":1135},{"id":1159,"depth":329,"text":1159},{"id":1245,"depth":329,"text":1246},{"id":1413,"depth":329,"text":1414,"children":2292},[2293],{"id":1726,"depth":341,"text":1476},{"id":1860,"depth":329,"text":1861,"children":2295},[2296],{"id":1980,"depth":341,"text":1977},{"id":2124,"depth":329,"text":2125},"Job states and transitions, retries and backoff, execution guarantees, timeouts, execution limits, retention periods, and failure and settlement notifications","md",{},"\u002Fen\u002Fguide\u002Fexecution","2026-07-22",{"title":6,"description":2298},"en\u002Fguide\u002Fexecution","2026-10-25","hQR08my4yVlywHBDbAtItB9z2jVInlVUnDYTdXD88ak",false,1794027576243]