Skip to content

Instantly share code, notes, and snippets.

@ryantanaka
Last active March 5, 2021 22:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryantanaka/1249fe3ef90df100a80a2724bc29624f to your computer and use it in GitHub Desktop.
Save ryantanaka/1249fe3ef90df100a80a2724bc29624f to your computer and use it in GitHub Desktop.
Do run this file you must first clone: https://github.com/ryantanaka/pegasus5.0-dev-env, run the container, create a directory in shared-data, then copy this file there.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "surgical-collaboration",
"metadata": {},
"source": [
"# Checkpointing"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "abroad-feedback",
"metadata": {},
"outputs": [],
"source": [
"import logging\n",
"import pickle\n",
"import os\n",
"import sys\n",
"import signal\n",
"import time\n",
"from datetime import datetime\n",
"from pathlib import Path\n",
"from multiprocessing import Process\n",
"\n",
"from Pegasus.api import *\n",
"\n",
"logging.basicConfig(level=logging.DEBUG)"
]
},
{
"cell_type": "markdown",
"id": "reserved-contact",
"metadata": {},
"source": [
"## Application Checkpointing at a High Level\n",
"\n",
"Start with some saved state. If none exists, then start work from the beginning. **In Pegasus, we need to start with a checkpoint file (with nothing in it).** Our application will print numbers from whatever is in the checkpoint file until some given number N. The point of this is to provide **fault tolerance**. That is, we want our application to be able to continue in the event that a failure occurs (assuming something/someone will restart the application). "
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "seasonal-regulation",
"metadata": {},
"outputs": [],
"source": [
"with open(\"count.checkpoint\", \"w\") as f:\n",
" f.write(\"4\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "outdoor-agriculture",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n"
]
}
],
"source": [
"# number to count to\n",
"N = 10\n",
"\n",
"# read from checkpoint file\n",
"with open(\"count.checkpoint\", \"r\") as f:\n",
" current_count = int(f.read().strip())\n",
"\n",
"for i in range(current_count, N+1):\n",
" print(i)\n",
" \n",
" # write checkpoint\n",
" with open(\"count.checkpoint\", \"w\") as f:\n",
" f.write(str(i))\n",
" \n",
" time.sleep(1)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "rising-tragedy",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 scitech scitech-group 2 Mar 5 14:29 count.checkpoint\r\n"
]
}
],
"source": [
"# check checkpoint file is there\n",
"!ls -alh count.checkpoint"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "supported-bryan",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10"
]
}
],
"source": [
"# inspect the contents of the checkpoint file \n",
"!cat count.checkpoint"
]
},
{
"attachments": {
"pegasus_lite.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAFqCAYAAACXqBeEAAAJFHRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDVUMDUlM0ExOCUzQTUyLjE3M1olMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjMlMjIlMjBldGFnJTNEJTIyTlpqSGhKelpfOTRUS1ZBcGlkVVYlMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyM3c4TEVHUkVoLTBIclIwdnJnanklMjIlM0U3VnZMY3FNNEZQMGFMOXZGd3dhODdMaTdweGN6VmFuS1lpWkxCUlRRR0JBdGlkaWVyeDhKSkY2U1klMkJMQ2JqdGxMMUxvSWlRNDU5NGpYVW1adWV0czl3Y0JSZklYam1BNmM2eG9OM08lMkZ6UnduOEIzJTJCVnhqMnRjSDJQV21KQ1lxa3JUVThvZiUyQmdORnJTV3FJSTBsNUZobkhLVU5FM2hqalBZY2g2TmtBSTN2YXJ2ZUswMzJzQllxZ1pua0tRNnRhJTJGVWNRUyUyQlYxTHE3WCUyRmhDaE9WTSUyQjJKZTlrUUZXV0JwcUFDRzg3SnZmN3pGMFRqRmw5bGUzV01CWGdLVnpxNTM0Y3VOdThHSUU1RyUyRk9BeFAwTnBLWDhOdmxlYks4JTJCRnViUlY0RVpMNFVwb0JTRk0lMkZjaFlWbktEVGElMkZyQiUyQkFrUVpaJTJCdzUyODJYY0pTRE9JQ043WG1YYllxZWdTenF3S1J1QktXRG9yZDg4a0JUR1RYTk5ENDhZOFk0ZFM3cmJhalZmZFg3QnFtNUElMkJ0NFh1MyUyRmI5OTElMkJCeFNYSklTeXpTNlNnMjQ4NVp4akcyYUF4SkJwRGZPTERraXRxU0xPVEtLcmtjaFFCalVpR2R5eFBuV1VFYnlCYTV4aXdpMDV6bm5OaDFlVXBnTVRTRkdjQyUyRjQ1bzVEYkg5NGdZWWpIdzFkNUkwTlJKTHA1MkNhSXdhY0NoS0xQTFk5JTJCYmlPNHpDTW8zdFVTemVPYyUyRlFBWlNnVk9mNVloaWdCJTJGelRYT0thNWFFUGVmNUVzcjclMkJTOXdkMUh2VXZ4TXFERmxlV084eTBNenFjQzFPUm5QYXJlNFdYeG9lQ1NXSGZvT1FZVjNDSDJqNndycnA4RnhQT2xMSDNiU2NTcndsNFdEa1JyN2VVOWQ3cWFBSGFYQnlqOGFJZ2VVUUxYSDdRN1hZUXVOVThvWUF4b1NiJTJCa1BGN3VrZG9MdVVaQUxUMVVBNE9iTFNZSVZjOFFxbDRxU0VEOEloWVhJWUZBY0dWdE1kbWdQQllUR0VSVU5kNUJVMVBqczQlMkJyQ2ZrUFJQMEVTRGZJTmxEYk90UyUyQkFXcHZBcWo5RVZBbk1OeFVFek9PcjZWdXZ4QjFYd2FQNUFLUzZ1UERqWmkxM1NRZCUyRmdnNlZtZWlJemhPQjJVVnNoYktqV3lndkNpRnlrYUFnWnZFWDVzam1QRDN6b1QlMkY2amolMkJmUHlCUEJGaWV5UDhWYkJVZW5TRDBMdWE2RjhRZXRYVmU5aW5vTXpEcE1vbE0lMkI3bUlneiUyQnhTJTJGaUlTVEFVTVA0Qm9VYkhpYUUzU1lMd1c4VUlOc2VyMEM0RWhvOUJyajl4alZvTVdZTU9Gc2dtSllCQmhRUW1PRTNhRVQlMkY5aWRFUyUyRmQzb3ElMkZuN3hwZ3h4WmglMkJIZVN2Y2dGWmY0bmlzOFMzcXJRWm9OVjZVZzZXR2MlMkJ2UW5DMWFTRHR0dFA0NGJyT1VOS3htYUhlZ1FHZzVZTzVJT2NHTER2VkN0RUJYcjRBNXhoUHF0ZXVmV1h1c2xUczAxYlgzaUk4RFpQTVlnYWllUmtzYVF6Z0RFQ2N2b3FwdEwzWExTQ2NNQ1JZMGhHbXpScTZtelUxdGNMcmtrUjdHdGI0dldHYkUwb0FxdnppTUJTbSUyRmhPTFFMR0pZMWZwZGhaZUNpTFdneFUlMkJTNExKODRUTGlzTHBxV1RDOG1DV210VzE4JTJCemR0MzU1SlZtTzlERlpYVmwybUlQY3lPTnlxdlRGdmVRbDA2bUxmcWlFYiUyRmt3VmZseDJxdUFkdlp4bDA4JTJCQjFIbzJWeFNmRXdMVFJkV2p6bWk5NWUxYnY2SVFxUGtDRCUyQnBZTHAwWnJpR1NZczFtaXVMalJoR1k3JTJCMm43ajFZbUsxdEhVb3FJUTZEZ28zTUd3WG5NcmFiWEtUd3NZb2xkVUtVdDlFN3lrOSUyRjB6eFpBellNaDF4dW5MY0VQMUZIMXhUTXQ0aCUyRlZGNGgwQm1sU0EyWDIlMkJoUDBSTU01Qlhsa2N5MjFZVkVkdW5NT0NjRFdCUGpnRUVnU2VOZ1RNQTZkVDQ5VFRKMXElMkJ1aGk4NjNTYjJZcllEdE04a2tTVTBqMWxNUHNVNFNpZVpweDVuUGVHbmtrM3VEbHI4OEMxMnQ5Q0MxZlRKdXdVUjFNTVo0WUtna05JS2FSMyUyRnNieTUlMkZwenElMkZ2ekxzZWY2V3lSdG0xWWxHek9kcmU1SiUyQlVFeXo3YXJpSFZkdnpsbWZBMXJjQ1o4SFUlMkJFY0RPSlFFZWNlS20zdFc3V1lBWDJyazF6NUR2MmVkU2lMSG5iS3FKJTJGN3dld1c4UVpkMk5EVm4xJTJCZHg0eFBFWlByREdCR1R6WXY4NUFHNE80WjBCWUY1c0Q3JTJGWGM5UDJYd2pjNyUyRjhEJTNDJTJGZGlhZ3JhbSUzRSUzQyUyRm14ZmlsZSUzRYBRLZMAACAASURBVHhe7J0JuJZT9//Xr2SMigwlKqE0oLxSplSECkmGkpQhGSrKkDFDJCWEFKJBCilTwmsKoSIyZMgQIcNbkqkI/+uz3v/T+3R6TucZ9n3O/Zzz3dd1rnPO8+x73Xt/9/Tda6299v/9888//5hSTghcddVVNnDgwJxk6GEhIASEgBAQAkJACOSKwP+J2OUKodn//d//mfhx7jhKghAQAkJACAgBIZAbAiJ2ueHnT4vYBQBRIoSAEBACQkAICIGcERCxyxlCEbsAEEqEEBACQkAICAEhEAABEbsQIMoUGwBFiRACQkAICAEhIARyRUDELlcEZYoNgKBECAEhIASEgBAQAiEQELELgKJ87AKAKBFCQAgIASEgBIRAzgiI2OUMoXzsAkAoEUJACAgBISAEhEAABETsQoAoH7sAKEqEEBACQkAICAEhkCsCIna5IigfuwAISoQQEAJCQAgIASEQAgERuwAoyscuAIgSIQSEgBDIAAHmXaX8REAB/aNtNxG7APiK2AUAUSKEgBAQAhkgoHk3A7BilFXtFn1jiNgFwFgdNQCIEiEEhIAQyAABzbsZgBWjrGq36BtDxC4AxuqoAUCUCCEgBIRABgho3s0ArBhlVbtF3xgidgEwVkcNAKJECAEhIAQyQEDzbgZgxSir2i36xhCxC4CxOmoAECVCCAgBIZABApp3MwArRlnVbtE3hohdAIzVUQOAKBFCQAgIgQwQ0LybAVgxyqp2i74xROwCYKyOGgBEiRACQkAIZICA5t0MwIpRVrVb9I0hYhcAY3XUACBKhBAQAkIgAwTycd5dvXq1DRw40E455RSrU6dOBrX9b9aHHnrIfx977LFrPfvOO+/YI488YldccUWhMgt7NuNC5PhAPrZbjlUu9sdF7AJAro4aAESJEAJCQAhkgEBc5t0777zTlixZYh9++KF169bNWrRoYX369LEvv/zSnnnmGZs7d64NGTLExo8fbx07drSnn37abrjhBq/psGHD7KKLLrLJkyfbnnvuaci66aab7Prrr7dPPvnENthgA2vWrJm9/PLLNnz4cLvqqquse/fudvvtt9umm27qMh577DE76qij7JBDDnG5yL/22mvt888/tx49etguu+xim2++ecpnM4A7WNa4tFuwCsVQkIhdgEZRRw0AokQIASEgBDJAIA7z7tChQ23evHk2adIke+mll+ySSy6xV155xQYNGmQrVqxwotWvXz9DUzdixAgbNWqUvfXWWzZ69GgnfE2bNrWZM2e69q5GjRr2zTff2MKFC6137942f/58e/TRR+3CCy+0jz76yN577z07/PDDbfHixWuh9Pfff1vlypX9+x133NG/Q27VqlXtxhtvtJo1a9pnn32W8tkM4A6WNQ7tFqwyMRUkYhegYdRRA4AoEUJACAiBDBAo6XkXjRykCYL2r3/9y7Vtt9xyi73//vvWtm1b69mzp7Vs2dJJ14MPPujm086dO1u7du2sa9eunhdSN3Xq1DUkb9myZXb33Xe7BhANHc83bNjQbr31Vpc/Z84c/z45LViwwA499NC1CN/5559v5cqVW6MZLOzZDOAOlrWk2y1YRWIsSMQuQOOoowYAUSKEgBAQAhkgUNLz7n333WdnnXWW/fjjj1a+fHknbdtvv72bXTGhon27//77DZKFlo3vKlWq5Bo7NHSYZfmB5A0ePNimTZvmxK1Dhw7+2ZZbbmmtW7d2beAJJ5xgJ554ohM4zL3JCaI3a9Ysu/fee9d83L59eze/8iypsGczgDtY1pJut2AVibEgEbsAjaOOGgBEiRACQkAIZIBASc+7EDt+nnrqKSduBx10kGveIHT4vE2YMMEPO0yZMsXuuusuq127th144IH+eatWrZy4vf3227bddtvZ3nvvbePGjbO99trLyd/zzz9vjz/+uF199dXuQ8fnjRs3dlMueTHbzpgxw/3v8OfbZ599/PvmzZvbww8/7Kbfc889115//XUDJ75PfjYDmINnLel2C16hGAoUsQvQKOqoAUCUCCEgBIRABgiU9LyL2RTtGhq0N9980zVzaOJmz57thItDERykOOecc/yww19//eVaPYhetWrVbPfdd3eS98ILL7iGDrPrqlWrbOONN7ajjz7aTbX4zN1xxx2usatSpYqbZ8877zz7559/nACOGTPGD1rw3ptvvtnq1atn+P1hBuZZNIJXXnmlk8jEsxlAHEnWkm63SCoVM6EidgEaRB01AIgSIQSEgBDIAIG4zLvLly93P7rkhHkWIgYB++2332yzzTbzv3/99VerWLGiH57gkAWHKyB5qZ7ls19++cXzkziMscUWW6zJ+vPPP7u5lTzIB4/kPLw3cXK24LMZwBw8a1zaLXjFYiRQxC5AY6ijBgBRIoSAEBACGSCQz/Mumr6DDz7YtXllLeVzu+VLW4nYBWgpddQAIEqEEBACQiADBPJ13uXU7LPPPuvati5durjptSylfG23fGojEbsAraWOGgBEiRACQkAIZICA5t0MwIpRVrVb9I0hYhcAY3XUACBKhBAQAkIgAwQ072YAVoyyqt2ibwwRuwAYq6MGAFEiYo0AfVxJCAgBIRACAQ6SKEWHgIhdAGxF7AKAKBGxRkB9PNbNo8IJgbxBQHNJ9E0lYhcAY3XUACBKRKwRUB+PdfOocEIgbxDQXBJ9U4nYBcBYHTUAiBIRawTUx2PdPCqcEMgbBDSXRN9UInYBMFZHDQCiRMQaAfXxWDePCicE8gYBzSXRN5WIXQCM1VEDgCgRsUZAfTzWzaPCCYG8QUBzSfRNJWIXAGN11AAgSkSsEVAfj3XzpCwcV04tXLjQdthhB9t6662zqsB3331nH330kR1wwAF+ZVW26e+//7Zy5cpl+7g/RzkoDxfab7TRRsZdrR9++KHtsccefqWWUn4goLkk+nYSsQuAsTpqABAlItYIqI/HunlSFu7111+35s2b2xdffOEXwmeaIGNXX321PfTQQ8ZtCdmm1atX+yX07777rtWsWTMrMeeff77fvfrXX3+5LK7iGjt2rPXo0cNWrVplG264YVZy9VDxI6C5JHrMRewCYKyOGgBEiYg1AurjsW6elIV755137Nhjj3VNV7ZpyJAhxiX3gwcPzlaEP/fjjz86MSssQf4GDhxop5xyitWpU2etbDNnzrShQ4faE088sdbnEM4JEybYY489llPZ9HDxIqC5JHq8RewCYKyOGgBEiYg1AurjsW4e18qNGDHCKlWq5CbTyy+/3G6//Xb7/PPPrUaNGnbjjTfa/fff7yZV0q233upka86cOWsIE/l/+eUXmzt3rl1//fW28847W+vWre3SSy+1J5980hYtWmS9evWyG264wapXr26bbrqpPffcczZu3Dhr1qyZa86uvPJKLwNkkufIc9555/k777rrLv/svffes2uvvda1bWeddZadfvrp1rFjR3v66add9gUXXLAG7DvvvNOuueYa23XXXW3PPfe0efPmWZ8+fezoo4+2M844wxo1auTau8LqFO9WK5ul01wSfbuL2AXAWB01AIgSEWsE1Mfj2zz4ne2777728ssvG351mE8nTpxoHTp0sC222MI6depkEKSuXbvaCSecYAMGDHAftcMPP9w1eosXL/Znfv/9d9fM9evXz4nTXnvtZdttt529/fbbrjGD7EHa2rdvbytWrLDnn3/eSVb58uWdVLZr187f2bNnTxs0aJD9+eefdtVVVzmBa9iwofXv39/lQxwhmH/88Yd9/fXX/uyoUaPsrbfestGjR68DNHV48803nWhSnhdeeMHq16/vvoPTp0+33XffPWWd4ttiZbtkmkuib38RuwAYq6MGAFEiYo2A+nh8m+fMM8+0X3/91caPH7+mkJAq/M4gYwn/tPnz59sPP/xgBx98sI0cOdLuu+8+u+yyy1yjV7t2bT+IULdu3TUyIFDdunWzBg0a2LRp02yTTTaxhL8c5tHGjRs7yYNkNW3a1Eki791ggw2sc+fOVq1aNRs+fLgTsKlTp9ree+9thx12mJcBTSH5jzvu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mRs0aJBNnz7dSR5/c5oVMvbee+/Z8OHDXWs3bNgwGzp0qN12222u1YMYjhw50u6991732XvyySf9EMbtt99uI0aM8Od435QpU9xXD9MuJBHtH+bfSZMmOWFMfjbriunB2CKguST6phGxC4CxOmoAECUi1gioj8e6ebIuHKbVChUq+GGI5IQ2jaDFfMepWIgYp2U53JBI5Fm1apV/9scff/jH+NzxN2bXjTbayD9Dzu+//+4najk1S/5knz7ycGKW7ws+m3XF9GBsEdBcEn3TiNgFwFgdNQCIEhFrBNTHY908kRUOTRxmWsgZfUBJCOSKgOaSXBEs+nkRu6IxKjKHOmqREClDniOgPp7nDZhl8fG1Q8tGrLq99torSyl6TAj8DwHNJdH3BhG7ABirowYAUSJijYD6eKybR4UTAnmDgOaS6JtKxC4AxuqoAUCUiFgjoD4e6+ZR4YRA3iCguST6phKxC4CxOmoAECUi1gjIvyrWzaPCCYG8QoDDNUrRISBiFwBbEbsAIEpErBFQH49186hwQiBvENBcEn1TidgFwFgdNQCIEhFrBNTHY908KpwQyBsENJdE31QidgEwVkcNAKJExBoB9fFYN48KJwTyBgHNJdE3lYhdAIzVUQOAKBGxRkB9PNbNo8IJgbxBQHNJ9E0lYhcAY3XUACBKRKwRUB+PdfOocEIgbxDQXBJ9U4nYBcBYHTUAiBIRawTUx2PdPCqcEMgbBDSXRN9UInYBMFZHDQCiRMQaAfXxWDePCicE8gYBzSXRN5WIXQCM1VEDgCgRsUZAfTzWzaPCCYG8QUBzSfRNJWIXAGN11AAgSkSsEVAfj3XzFFq4oUOH2rBhw+yiiy6yyZMn25577ml33nmn3XTTTTZw4ECbOHGinXbaafbCCy9YpUqV7Prrr7ett97avv32Wxs+fLhtvPHGNnv2bBs1apT/vXLlSuvVq5f98ssv1rNnT7v88suNd1xwwQXWvXt3e+mll2zKlCmed9KkSfbuu+/693z22GOPeZ6DDz7YOnToYF26dLE+ffrY2Wefvab8H330kfXu3duqV69um266qT333HM2btw4e+utt7wOL7/8stWrV8923HFHW7BggW211Vb52TBluNSaS6JvfBG7ABirowYAUSJijYD6eKybp9DCzZ0715o2bWozZ860OnXqWI0aNeybb76x//znP06uunXrZnXr1rX99tvP9t13X5s+fbrtvvvu1rJlS7v00kutdevW1rBhQ7vrrrts88039++WLVtmlStXdiJ48skn22GHHeZkC5lnnXWWky/ed/7559v777/vpO7mm2+2Aw44wAkb7+Bdv/32m5UrV86uu+66tcrfvn17W7FihT3//PNO/MqXL2+33nqrnXrqqVazZk274oor7LzzzvPfVapUyc+GKcOl1lwSfeOL2AXAWB01AIgSEWsE1Mdj3TyFFu6WW25xkjV16lRLkDyIGf+jqeNvyBFasi+++MK1alz3BGkbP368k8Ltt9/eVq9ebWPGjHHN2R133GFo1iBzL774orVo0cL++usvz4vm7oQTTnDt2u+//24jRoxwEsazyIfsvfLKK/bee+85aeT/I488ck35ec+WW27pZW7cuLFB8urXr2833HCDzZgxwwYPHuxaQbSNV111VX42ShkvteaS6DuAiF0AjNVRA4AoEbFGQH081s1TaOE6duxo/HTt2tVJ0bRp02zOnDl20kknOWHD9EraYYcdbMCAAW4WxcTZoEED1+xVq1bNOnXq5L8xv0KoatWq5URt5MiR9uabb/rzEL4mTZq41g6iuMsuu9i1117rJA9ZZ555pp1zzjn+Hsy6mGMx137//fdu+k0k5ED0Fi9e7GbfTTbZxJ5++mlr06aN/fjjj0765s+fb4sWLVqLEOZn65TNUmsuib7dRewCYKyOGgBEiYg1AurjsW6elIVDiwbJevvtt2277bazvffe2/3V9tprL///ySef9L8TxO6hhx6yZs2aWf/+/W2bbbZxrRvmUky1+Mvtv//+a94DMeTZc8891z9D04dm7tNPP3UfvjPOOMPlQx732GMP1wz+/PPPbtbl7zfeeMPNF9qKtAAAIABJREFUuPjxtWvXzokhJA6funnz5jlxHDt2rMtFu5hIlKV58+Z27733Gn1SKf8Q0FwSfZuJ2AXAWB01AIgSEWsE1Mdj3TwpC8fBBXziJkyY4Icj0NrhO7dw4UInaUuWLHEfN9Ltt9/u5tFdd93V/vjjD7vwwgudOCGD59555x3XvuFrV7FiRdt2223dJArRIi1dutRq167tvnNo/dC6oQ3cbbfd7LbbbrNnnnnGII4QRIjao48+av369XOzLtq44447zmV+9913bvbFTEt5IH4QvkQ6/vjjnTS2atUq/xpE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I6D1Q+ur+EV0/KpQYseNEvx0797dfwomfb9+fCB27BaFXzT9B40cP+zGCtuR6Xvho/6h8aH5IbVFQ/Nj6Z0fCyV2AUy6ZVqEDk+U6eZX5YWAEBACQkAIxAYBHZ4I0BQidgFAlAghIASEgBAQAkIgZwRE7HKGUKdiA0AoEUJACAgBISAEhEAABETsQoCoAMUBUJQIISAEhIAQEAJCIFcEROxyRdCksQsAoUQIASEgBISAEBACARAQsQsBojR2AVCUCCEgBISAEBACQiBXBETsckVQGrsACEqEEBACQkAICAEhEAIBEbsAKOpUbAAQJUIICAEhIASEgBDIGQERu5whlI9dAAglopgR+O233+yTTz6xypUr24477mh///23lStXbp1SfPPNN/bhhx9as2bNbNNNNy3mUup1QkAICAEhkCkCInaZIpYivzR2AUCUiGJF4J133rH999/fnnnmGSdtHTt2tOOPP95/ktN9991nZ511lv34449Wvnz5Yi2jXiYEhIAQEAKZIyBilzlm6zwhYhcARIkoVgTQxG2//fb2559/2gYbbGArVqxwjRx/J6fbbrvN3nzzTbv33nsLLR8k8ZFHHrErrriiWOuglwkBISAEhMC6CGRF7D766CPr3bu3Va9e3ReD5557zsaNG2dVqlTxz/fZZx8jz2abbWajRo0yLoGuVKmSf3bppZfazjvvbJiCrr32Wttmm23s1VdftYkTJ/qi8tlnnxmLyVdffWU9e/a0gw8+2K6//nr7/vvvbebMmfbggw9arVq17NRTT7UtttjC5s2bZ6+88orX7NZbb3XNwpw5c+yJJ56wv/76K2W+0B1BxC40opKXCQKrV6+2iy66yGbPnu1j4fXXX7dBgwb5GPjjjz+ccG2++eY+fpo3b25cyD1p0iR76KGHfDxdcskl/v/nn3/uY/Dbb7+1q6++2sfsPffc4+Px2GOPta+//tquu+4623bbbe2BBx6wG2+80eUfddRRdsghh/j/jRo1WmccZlIX5RUCQkAICIHcEMiK2PHK9u3b+y7/+eeftz59+riZBmJ13HHHOWnr1auXVaxY0W644Qbr0KGDkzQWGzQEAwcO9IXg/PPPt0MPPdRat25tU6dOtZ9++sn/f+GFF+y0006zE044wbp162YQJwjftGnT3CwEQcR0xG9I32WXXWYDBgywjTbayA4//HBfhBYvXmzz589fJ19ucKV+WsQuClQlMxMEli5dalWrVjVIHhsaxgfErlOnTj7+unbtak2bNvWNFUSMjdFee+3l42n8+PFO8MjPGNx3332duEEG2UQhmz6O6fbhhx92TR+bqh9++MG23HJL99N777333Fcv1TjMpB7KKwSEgBAQArkhkBWxY/FgQkcD0LhxYyd59evXtyFDhvgu/+yzz7bBgwfblClTnGQlzD2dO3e2atWq+QLTt29f1wywYCQScmrWrOmavp9//tk1BRDGI4880jbZZBNfbEi//vqry4E0QiDR0KHZGzlypOETBNFjESqYLzeoCn9axC4qZCU3EwTQpM2dO9c3NYytChUq2HnnnWeffvqpLVu2zLbaaitbsmSJa9y2224730AxbiF5DRo0sH79+tmFF17oee+++24fSyNGjPDx1b9/f9+w3XHHHTZ9+nTPy8ZqwYIFvhnjnYWNw0zqoLxCQAjkjgDaeBLrr1LZQyArYvfWW2852WIyX7lypZOup59+2klZvXr1fIcP8UPrtnz5cid4//zzj5M+TK5oBvj/zjvvXIM42j++R6t3yimnOHEjQSIXLlzoC9Brr73mpJA0duxYO/fcc908BInk/RDLli1bOhnklF/BfGggokgidlGgKpmZIoCZdejQoT6+0GSjqdt11119AzR58mTX1kHyIGOMk8TGaocddnAfOTZpaN/Q4PHsSSed5No5zK+Mqccff9w3cWeeeaYXDZIHAZw1a5b74GHSLTgOM62D8guB0orAs88+625LuEqgpHj55Zd9DZswYYK7I6ENx5+VDdQ111xjv/zyi7s7XXzxxQ7J7bff7p+xeWN8Mx75zel2XCg4BIXM4cOHu7tF9+7d/RlSKnl8zruwuH355Zd+kArZrKOs2bhmYF3DAsA8wDxSsGwocXAD+fjjj91axpxAeZIVNqW1PeNcr6yIHZ0F37YxY8Y4wXrsscfclMr/jz76qP9PgtixsKAF4DM0ajNmzPDdPg1PB8QnDn86zEh0Ynzptt56a3vqqafssMMOc/88ftD2tWjRws1EixYtsnbt2rlPH1oH/Pvo2MiDVPI92oqC+TA9RZFE7KJAVTIzRQDShZYaTRsT8R577OGLAhNuw4YNXavNZE/4EhaXI444ws2x+MVBBjG7sjljkv/uu+9s7733dhMtG66EVo7P//Wvf/mC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LgCIEhE7BO69914bOnSon5RNHKZ44403bLvttrMaNWrErrxRFIhAxRtttJGtXLnSNtxwQ7v00kutU6dOhg+UUuEIjBs3zh599FGbOnWqZ5K2LjVWM2fOtOuvv95mzJjhGXRoQqMqBAIidgFQFLELAKJExBKBiy66yBYuXLhmgW7ZsqUtWLDAvvvuu1iWN1ShPvroI6tbt66LSwQqfuaZZ+yGG26wzp07G8RFqXAEzj//fBsxYoT3G0gwG4GvvvrKtt9+e8GWhABjac8997T27duvwQrzf+vWrYWTEMgaARG7rKH734MidgFAlIjYIpA4THH66adbvXr1bPXq1f5Trly52JY5l4ItXrzYGjZs6PWDyK5YscL4bMmSJS522rRpWniLAPiqq66yK6+80ipXrmzHH3+8bbbZZnbjjTfm0iyl8tkffvjBatWqZRtssIG1atXKPvvsM3vllVcMU+ysWbOsW7dupbLeqlS0CIjYBcBXxC4AiBIRWwQShynQurDobLLJJm46atasWWzLnGvB7rzzTuPmid9//9023nhj++uvvwyzLGN91apVVqFChVxfUaqfTxA7zNhgh1YKU/ayZcvsvPPOs549e5bq+mdSOTYQ//zzj/cpsILklS9f3v+G6EnLmQmaygsCInYB+oGIXQAQJSJ2CCxatMjmzJljc+fOdTMRGiuIDos1vne9e/eOXZlDFoj6TZgwwX766ac1YiEob731VsjXlEpZCWKXXDmIC+SOq+vwVVT6LwIVK1a0X3/9dS04tthiC3vsscesRYsWgkkIZIyAiF3GkK37gIhdABAlInYIQGzuuusu11AVTEcfffQav7vYFTxggTDFcngkgcEVV1xhkBal9SNQkNhBVPC1mzRpklWrVk3wJSGw0047GbeckNg0bbvttq4Rr1+/vnASAlkhIGKXFWxrPyRiFwBEiYglAk8++aThzI3W7pdffllTRsxDOMOX9rR8+XJr1KiR15WTwQ8//LD869Jo9GRih+m+b9++Nnjw4DSeLHtZmjRp4lpgtJm77767Mea23nrrsgeEahwMARG7AFCK2AUAUSJijQD3xw4ZMsQXnUR/JzZZWYi1BanFnxA/KPnXpddNIXbXXHONbb755m7O5tSnUmoEODQxe/Zs22+//YyT10pCIFcEROxyRRBHxf/7P5/0lYRAaUeAMCDDhw/3xXrKlCnWtm3b0l5lrx8nPD/55BO77777ykR9c60k4U7oH6+++qpVr149V3Gl+nlcHtDYcTBJSQiEQEDELgCKEDslISAEhIAQEAJCIL4IlBUFjIhdgD4ojV1qEIVLgM6VhoiyhrPqm0anUJaMEVC/yhiyvHqgLLWviF2ArlmWOkwmcAmXTNDKPm9Zw1n1zb6v6MnCEVC/Kt29oyy1r4hdgL5cljpMJnAJl0zQyj5vWcNZ9c2+r+hJEbsEAhpHpXc0iNgFaNuyNkDShUy4pItUbvnKGs6qb279RU/LdQQENI5K70gQsQvQtmVtgKQLmXBJF6nc8pU1nFXf3PqLnhaxE7Er3aNAxC5A+5a1hSZdyIRLukjllq+s4az65tZf9LSInYhd6R4FInYB2resLTTpQiZc0kUqt3xlDWfVN7f+oqdF7ETsSvcoELEL0L5lbaFJFzLhki5SueUrazirvrn1Fz0tYidiV7pHgYhdgPYtawtNupAJl3SRyi1fWcNZ9c2tv+hpETsRu9I9CkTsArRvWVto0oVMuKSLVG75yhrOqm9u/UVPi9iJ2JXuUSBiF6B9y9pCky5kwiVdpHLLV9ZwVn1z6y96WsROxK50jwIRuwDtW9YWmnQhK25cvv/+e+OS+n333dfKly+fbjHX5Fu1apV99tlntsEGG9guu+xS6POrV6+2efPm2Y477mjbbbddxu8J/UBx4xy6/JnKU33XRmzZsmX24Ycf2h577GGbbbZZpnCmnf/vv/+2r776yr777jvbe++9034uXzKqX+VLS2VXzrLUviJ22fWRtZ4qSx0mE7iKG5dhw4bZLbfcYosXL86kmGvyLly40Fq1amW33XabHXXUUSllsLiddNJJ1rFjR5swYYI98sgjWb0r5EPFjXPIsmcjS/VdG7WxY8dajx49jI3JhhtumA2kaT3z008/2TnnnGObbrqpjR49Oq1n8imT+lU+tVbmZS1L7Stil3n/WOeJstRhMoGruHEZOXKkffDBB3brrbdmUsw1eVkYN954Y/vxxx+tcuXKKWVMmzbNXnrpJbvpppuyekcUDxU3zlHUIROZqu/aaD300EO+yXjssccygTGrvMcdd5zx06lTp6yeL46HwIN07LHHZvQ69auM4Mq7zGWpfUXsAnTPstRhMoErSlxuv/12++WXX97IQeQAACAASURBVGzu3Ll2/fXX28477+xatOOPP96ef/55e/LJJ+29996zSpUq2W+//WbXXHON569evbpdfPHF/tm1115r22yzjb366qs2ceJEe/31123AgAF2xx132JlnnmmdO3e2s88+e02VBw8ebDfffLObobp3725HHHGEXXnllf4OTMCXXnqp/fXXX9a7d2/bZ599/DNMY/fee28msGWcN0qcMy5MMTyg+q4N8hlnnGGNGjVybRpp1KhRrrXGZPrxxx/bU089ZX369LEvv/zSnnnmGR8zQ4YMsXvuucf7LOOEsYDW76yzzrK+ffu6nIJjrFatWrblllvaCy+8YOeff7737SeeeGKdFmf8/fvf/7alS5da+/bt7cgjj7Svv/7ax+nWW29t3377rQ0fPty13YwpNkloHXGD4LOuXbvaFltsYQ8++KANHTrU0MRfdNFFNnnyZNtzzz3tzjvv9GeQ98knn7jrRLNmzezll192uVdddZWPT8pPKjj2C+ui6lfFMHhL8BVlqX1F7AJ0tLLUYTKBKypcrr76avv99999UejXr58dffTR1rx5c190Tj/9dJ/Ud999d1/I8IFr2bKlE7C33nrLyRYLwyGHHOKL06GHHmqtW7e2qVOn+kLAIrH55pv7c8ccc8xa1cW3rkKFCu5nBEFs166ddejQwXr27GmDBg2yP//80xcVNBoQx169ermsFi1aZAJbxnmjwjnjghTTA6rv2kDvsMMONn36dO/z9GH6+d133+0bGLTQkB3654oVK+yGG27wMUNfHjFihI8hiN4BBxxgf/zxhxMwPk81xiByuCEcdthhPn7Y9Hz66adrFQZSx1h77rnn7OGHH7ZvvvnGTj75ZCdkiTIyHiGUDRo08HF0xRVX+Pgl32mnnWb169d3l4o5c+Z42Zo2bWozZ860OnXqWI0aNVwmbhNsoObPn2+PPvqoXXjhhT62IamHH364E1vGY8GxDy4idv9FQOOomCasEniNiF0A0MvaAEkXsihwWbRokdWuXdudxevWrbumKG+88YZr0ti1swChJWByZ1GDtKF9Y2FhYseUilYCzQFlTKT999/fiRuai27duq1TTRaOAw880DUhU6ZMcVMPiwdkEPnVqlWzG2+80TV4LHosmsWRosC5OMqd7TtU3/8hB8HZa6+9bPny5bZkyRInPvR7fvP5JZdc4huUtm3b+gYEooObAdow+i8k7YcffnAS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"
}
},
"cell_type": "markdown",
"id": "vocal-mumbai",
"metadata": {},
"source": [
"## Application Checkpointing in Pegasus\n",
"\n",
"### pegasus-lite\n",
"\n",
"A pegasus job, when executed on some compute resources, is actually a simple workflow in itself consisting of 6-7 steps. These steps are run by a tool we called **pegasus-lite** and are outlined here:\n",
"1. create a working directory\n",
"2. check for worker package (tools needed by Pegasus to run here)\n",
"3. download required input data for this job using **pegasus-transfer**\n",
"4. perform integrity checking on the data (has it been corrupted en route?)\n",
"5. launch the executable for this job (which you specified in the TransformationCatalog) using **pegasus-kickstart**\n",
"6. upload data produced by the job using **pegasus-transfer**\n",
"7. clean up (remove working directory and files downloaded and/or produced)\n",
"\n",
"![pegasus_lite.png](attachment:pegasus_lite.png)"
]
},
{
"attachments": {
"checkpointing_content-2.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmsAAAC/CAYAAAChfJv0AAAF9nRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDJUMTklM0ExNCUzQTExLjA0MFolMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMGV0YWclM0QlMjJtVENZZmt3cS0xRXFwQnFnUlEtQiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjIlMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyNWJVUGVyQTV5UUNXbW4tYXBkLWYlMjIlMjBuYW1lJTNEJTIyUGFnZS0xJTIyJTNFN1ZqZmI1c3dFUDVyOHRnS01FbWF4NFMyMjdSVm1oWnQ2NTRtRHp0Z3hXQmtUQVA3NjNjT0p2eXNLRlBUYWxOZkl0JTJCSGZXZCUyRjMlMkZrT01rTmVsTCUyQlRPQW52QktGODVsZ2tuNkhybWVNc25TWDhhcUF3QURKQUlCa3BJYnNHdHV3M05hQmwwSXdSbXJZbUtpRzRZa2tiOUVVY1UxJTJCMU1DeWxPTFNuN1FSdlIwMXdRSHZBMXNlOGozNW5SSVVsZWpXM2F2dzlaVUZZUmJZdDh5VEMxV1FEcENFbTR0Q0EwTTBNZVZJSVZZNmkzS05jYzFmeFVxNjdmZVRwYVdPU3h1b3BDM1ozM3VydThIVjlteSUyQiUyRiUyQlIlMkI4ajlrWElpNk1sd2ZNTTNOZ3MxbFZWQXpRbUt3MWtXRDVIS2NwODJkb0U2cUlBMkREc0Z4QVNZJTJGSGVtUDI2YmlRSmxSRVZNa0NwaHhxUWlzJTJCd3dhWEZTWXB4NG85dE4xam8ydHdjbmVLOEZrd0NPeFlKZ1h0bGZGak10QjFyYmFMVkdUU3AyWlZrOENPbzhXWUk0VmxRRlhQRVF3YXg2NmhvejRUdEhKNldpa1cwWjVlaXVhcXJWQ3FwTmhUVDNBaEFZbEZERE0zTzhaNUI4S2NCYkdXR1lTamdHOGVxRlFNN3NMYVBJZ1lJVHJNNWhBeVJiY0o5blhNQTF4OHdLVElZa0wxQVN6dFhzVHFGa2VNYTdJJTJCWlQ0akdMYnBpVGdWUnclMkY2JTJCZFpzdWpvWVJLUDUxQ1NxRnN3NzRpQmpONUxNSFVneXgzbzhuMW9DVGxVTGpkJTJCc05tTkRuRFpFSENQME9UanNKRGhhRG5DNEdDQnhjUzRTM1glMkJQUkFkMVNMVDZKS0tybHlSeFBxbkdtMW93Z1RTYU0zVnY1dXJ4RDYzRjVkeFkxN21SNW1nVXhuaHEwNEJkSHF2eldGbDhyZVp5NmdIZHNqTzF1WFR2WGk4ZHp0eGNGcjBrU1dpQTB5eTkyRE4lMkZuMEowQ0x2Z3VyUDhrakFLOUNqUkx0ZXd6TGFXRG5yclJPVzdZZWYlMkJyJTJGcjMzN1pmc2hNdGU5SVdrSlElMkZjWkpjSnNXSXFPNmJxT1p6cEtPcTAxZDFxS2lmVGRUVnBLSSUyQiUyQk9JJTJCV3RkajJPaDlWYjIxMGFqczJxeEwlMkI5R2FYdHZMbWpiVyUyRjElMkJydHAlMkIlMkJRU3ZORjZ1JTJGcSUyQjJ1MDNIVWJSS1AxSFpRRHhlTmFZbWVrRTdZc052NklvUkI2ZkZaRzBjVnM1R0pPeUgzJTJGMFhkMEtzVnBKRFFVUzdjJTJCWmxlc3dkcXlUTjlxb0JaJTJGOEZRS2w3JTJGUzROdSUyRmdBJTNEJTNDJTJGZGlhZ3JhbSUzRSUzQyUyRm14ZmlsZSUzRWAIVbkAACAASURBVHhe7Z0HlBVF2oa/JbmYCMKKCgbMBBVdxMQxgqAuRlBccWHXjGHBQFBBMAeUpLiCGTEjiwHxqBjAgIKYMbMGFBOoKCDpP2+d0/Nfhxnm9p2uudU9T50zh5l7K3z9VHX3y1dVX/1p9erVq42UOgJDhgyxwYMHp85uDIYABCAAAQhAIB6BPyHW4gELJfef/vQnQ2eH0hvYAQEIQAACEPBHALHmj63XmhFrXvFSOQQgAAEIQCAYAoi1YLoiniGItXi8yA0BCEAAAhBIKwHEWkp7DrGW0o7DbAhAAAIQgEBMAoi1mMBCyY5YC6UnsAMCEIAABCDglwBizS9fb7Uj1ryhpWIIQAACEIBAUAQQa0F1R/7GINbyZ0VOCEAAAhCAQJoJINZS2nuItZR2HGZDAAIQgAAEYhJArMUEFkp2xFooPYEdEIAABCAAAb8EEGt++XqrHbHmDS0VQwACEIAABIIigFgLqjvyNwaxlj8rckIAAhCAAATSTACxltLeQ6yltOMwGwIQgAAEIBCTAGItJrBQsiPWQukJ7IAABCAAAQj4JYBY88vXW+2INW9oqRgCEIAABCAQFAHEWlDdkb8xiLX8WZETAhCAAAQgkGYCiLWU9h5iLaUdh9kQgAAEIACBmAQQazGBhZIdsRZKT2AHBCAAAQhAwC8BxJpfvt5qR6x5Q0vFEIAABCAAgaAIINaC6o78jUGs5c+KnBCAAAQgAIE0E0CspbT3EGsp7TjMhgAEIAABCMQkgFiLCSyU7Ii1UHoCOyAAAQhAAAJ+CSDW/PL1VjtizRtaKoYABCAAAQgERQCxFlR35G8MYi1/VuSEAAQgAAEIpJkAYi2lvYdYS2nHYTYEIAABCEAgJgHEWkxgoWRHrIXSE9gBAQhAAAIQ8EsAseaXr7faEWve0FIxBCAAAQhAICgCiLWguiN/YxBr+bMiJwQgAAEIQCDNBBBrKe09xFpKOw6zIQABCEAAAjEJINZiAgslO2ItlJ7ADghAAAIQgIBfAog1v3y91Y5Y84aWiiEAAQhAAAJBEUCsBdUd+RuDWMufFTkhAAEIQAACaSaAWEtp7yHWUtpxmA0BCEAAAhCISQCxFhNYKNkRa6H0BHZAAAIQgAAE/BJArPnl6612xJo3tFQMAQhAAAIQCIoAYi2o7sjfGMRa/qzICQEIQAACEEgzAcRaSnsPsZbSjsNsCEAAAhCAQEwCiLWYwELJjlgLpSewAwIQgAAEIOCXAGLNL19vtSPWvKGlYghAAAIQgEBQBBBrQXVH/sYg1vJnRU4IQAACEIBAmgkg1lLae6GLNdlHggAEIACB6kFg9erV1eNCi3SViLUiga9ss2kQa9y8le1lykMAAhAIn0Do76PwCVZsIWKtYkZB5gj95gjdviA7FaMgAAEIpJAAz3v/nYZY88/YSwuh3xyh2+elU6gUAhCAQDUkwPPef6cj1vwz9tJC6DdH6PZ56RQqhQAEIFANCfC899/piDX/jL20EPrNEbp9XjqFSiEAAQhUQwI87/13OmLNP2MvLYR+c4Run5dOoVIIQAAC1ZAAz3v/nY5Y88/YSwuh3xyh2+elU6gUAhCAQDUkwPPef6cj1vwz9tJC6DdH6PZ56RQqhQAEIFANCfC899/piDX/jL20EPrNEbp9XjqFSiEAAQhUQwI87/13OmLNP2MvLYR+c4Run5dOoVIIQAAC1ZAAz3v/nY5Y88/YSwuh3xyh2+elU6gUAhCAQDUkwPPef6cj1vwz9tJC6DdH6PZ56RQqhQAEIFANCfC899/piDX/jL20EPrNEbp9XjqFSiEAAQhUQwI87/13OmLNP2MvLYR+c4Run5dOoVIIQAAC1ZAAz3v/nY5Y88/YSwuh3xyh2+elU6gUAhCAQDUkwPPef6cj1vwz9tJC6DdH6PZ56RQqhQAEIFANCfC899/piDX/jL20EPrNEbp9XjqFSiEAAQhUQwI87/13OmLNP2MvLYR+c4Run5dOoVIIQAAC1ZAAz3v/nY5Y88/YSwuh3xyh2+elU6gUAhCAQDUkwPPef6cj1vwz9tJC6DdH6PZ56RQqhQAEIFANCfC899/piDX/jL20EPrNEbp9XjqFSiEAAQhUQwI87/13elHE2m+//Wb9+vWzSZMm2SeffGKvvfaa+3v69Onuim+55Rb7+uuvbe7cuXbiiSfavvvua2effbZ9/vnn9tRTT7n8V199td12222u3IcffmidO3e2MWPG2Mcff2waOGWlr776yq644grbeOON7f7777dhw4ZZrVq1rHfv3nbUUUfZu+++az/++KNNnjzZZs+eXebnDRs2LKn66aefXiOP6r3qqqvKvbakutTXzSHuderUsY022qhSpvqyr1JGURgCEIAABBInwPM+caRrVFgUsSYrVq1aZVtssYXddddd1r59ezvppJPsjjvusGuvvdYJpXvvvddeeOEFGzhwoBNxl112mf388892zTXXWN++fW3FihU2cuRIJ9Duuece++c//2l169a17t27l0lt4cKFts8++9jDDz9sm222mW244Yb23XffWf369a127do2aNAg99OiRQu7/PLL7Ygjjijz82OOOaakftlQVlkJv7KuLcnu9HFzqE/OPPNMJ2DFdunSpU4Qn3HGGbFN92FfbCMoAAEIQAAC3gnwvPeO2Iom1nRp/fv3t3XXXdeJr5tvvtm6devmRI48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tw4dOtiwYcNs++23dzZusMEG9vzzz9uee+5pxx9/vOPVrl07V15ljjzyyD+Ua926dawhmIXBF+uCyQwBCEAAAhAogEAW3pcFiTWxOuyww+znn3+2Z5991s4++2yrWbOmE2n9+/e3ddZZxzp37mxdu3Z1Quy2226zBx54wAmrY4891nbccUcbMmSIE0hvvPGGjRs3zom3ZcuW2fXXX1/yuUSZRNX5559v+++/vxNZardly5ZuavPoo4+2o446yv1st912TsApX2767bffrEmTJjZnzhy79tprnRCrV6+e9erVy1q1auXqVF1Llixxnre+ffs6IbXbbruVWa50exKe9evXt3feecc233xzO+aYY+yII46wE044wXbffXcnEiXmunXrZrJFolNCTuvncsvFHX9ZGHxxr5n8EIAABCAAgbgEsvC+LEisReu95Dlq06aNE1AtWrRwQuWggw6ym266ycaPH28XXXSR84adfvrptvXWW9u///1v5yl75JFH3Dqxpk2bOjGnfyWOBg4c6ASYvFsSOm+++abttNNOtnz5cqtTp47zzL333nu233772VdffeU8ezfccIMTeHPnznUeKwlCTS8qnXTSSe73E0880Qk8tVu3bl33XbNmzWzixInWuHFj22qrrVx5ecWiNG3atDLLlW5P9hx88MHuOuRx69Onj33yySf2448/2kYbbWRff/21bbzxxk4g9u7du2QqNrdc3IGn/FkYfIVcN2UgAAEIQAACcQhk4X1ZkFiTN6xLly5OoCxdutQJoKlTp9pzzz3n/tWUpzxc8rYpvf7663bGGWc4Ybfzzju73+WFk0dNguzLL7904kn1yQtWq1YtJ5Qkzp588kmbPXu2m958//337ZBDDnFTqRJEEo0ScvKQnXrqqXbBBRc4wfTxxx+7diUSZYsEm4TaDz/84DYVaMq0efPmrqw2Hqic2s5Nl1xyyRrlympP1zBjxgy7/fbbnUdNHj5Nl953333OqyY7NfW5ww47lLSvdnLLxRl0Ud4sDL5CrpsyEIAABCAAgTgEsvC+LEisafpSAurWW2+1O+64wwkkeak0HSqhJU+XhJHWh8ljJk/b008/bXfddZetv/76jrGmHzUtqO+OO+445xHT+jbtztRUqYSavGGrV69269ok6vR35DXTdOTLL7/splNvueUWt24uWn+W24laMzZy5Ei7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IFB0AhtttJH9+OOPzo46derEFm2ItUp2oZRy/fr17Z133rHNN9/cCbNWrVo5d+dZZ51lixYtsl133dVmz57tVPURRxxh1157rQ0dOtQ6derkBN4666xjnTt3tq5du9oXX3yRl0X777+/Pffcc3nlJRMEIAABCEAAAmERqF27tnXp0sUeeuihCg1DrFWIaO0Z3nvvPTv44INLRFazZs1KvGYtW7Y0/T1lyhRr0qSJHXPMMU6orbfeevbdd9/Zp59+agcddJDddNNNNn78eLvoootsn332qaRFFIcABCAAAQhAICQCjRo1sh9++AHPWrE6Zdy4cTZjxgy7/fbb7bPPPrPmzZvb8uXLnbtz4403dh41rV/baqut7Ntvv7UPP/zQ7Qp599133Zz11KlT7eqrrzZ5ymrWrFmsy6BdCEAAAhCAAAQ8ENCatQEDBrhNBqxZ8wA4nyp79Ohh7dq1szZt2tjnn39u999/v5155pm2ePFiu/TSS23WrFl27733us+1CUGetS+//NI6duzohFqtWrXs+uuvd4p73rx5tttuu+XTLHkgAAEIQAACEEgBAXaDBtBJEldbb721m8a84447TAp67Nix9vDDD1vjxo3dmrTevXtbixYt3L99+/Z1GwmUf/78+XbkkUfa0Ucf7TxvZ599tlu/RoIABCAAAQhAIBsEiLMWQD/Kg6Y1aNHuzCVLlti6665brmX6XosK5VFT+u2339zv2h1CggAEIAABCEAAAqUJsMGAMQEBCEAAAhCAAAQCJoBYC7hzMA0CEIAABCAAAQgg1hgDEIAABCAAAQhAIGACiLWAOwfTIAABCEAAAhCAAGKNMQABCEAAAhCAAAQCJvB/AVkT8FF2wMYAAAAASUVORK5CYII="
}
},
"cell_type": "markdown",
"id": "respected-spider",
"metadata": {},
"source": [
"### pegasus-kickstart\n",
"When Pegasus runs your job on your local machine or some remote host, it uses [pegasus-kickstart](https://pegasus.isi.edu/documentation/manpages/pegasus-kickstart.html) to do so. pegasus-kickstart is a wrapper program which manages and monitors the execution of jobs on remote resources. pegasus-kickstart is just a command line tool, and so we can execute it just as we would any other CLI tool. \n",
"![checkpointing_content-2.png](attachment:checkpointing_content-2.png)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "proper-diagnosis",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"- invocation: True\r\n",
" version: 3.0\r\n",
" start: 2021-03-05T14:29:35.762-08:00\r\n",
" duration: 0.005\r\n",
" interface: eth0\r\n",
" hostaddr: 172.17.0.2\r\n",
" hostname: 25031a521558\r\n",
" pid: 68304\r\n",
" uid: 550\r\n",
" user: scitech\r\n",
" gid: 808\r\n",
" group: scitech-group\r\n",
" umask: 0o0022\r\n",
" mainjob:\r\n",
" start: 2021-03-05T14:29:35.766-08:00\r\n",
" duration: 0.001\r\n",
" pid: 68314\r\n",
" usage:\r\n",
" utime: 0.000\r\n",
" stime: 0.000\r\n",
" maxrss: 1652\r\n",
" minflt: 74\r\n",
" majflt: 0\r\n",
" nswap: 0\r\n",
" inblock: 0\r\n",
" outblock: 8\r\n",
" msgsnd: 0\r\n",
" msgrcv: 0\r\n",
" nsignals: 0\r\n",
" nvcsw: 1\r\n",
" nivcsw: 1\r\n",
" status:\r\n",
" raw: 0\r\n",
" regular_exitcode: 0\r\n",
" executable:\r\n",
" file_name: /usr/bin/echo\r\n",
" mode: 0o100755\r\n",
" size: 33088\r\n",
" inode: 3687621\r\n",
" nlink: 1\r\n",
" blksize: 4096\r\n",
" blocks: 72\r\n",
" mtime: 2020-11-16T14:24:58-08:00\r\n",
" atime: 2020-11-16T14:24:58-08:00\r\n",
" ctime: 2021-02-12T09:16:32-08:00\r\n",
" uid: 0\r\n",
" user: root\r\n",
" gid: 0\r\n",
" group: root\r\n",
" argument_vector:\r\n",
" - \"hello\"\r\n",
" - \"world!\"\r\n",
" procs:\r\n",
" jobids:\r\n",
" cwd: /home/scitech/shared-data/checkpointing-example\r\n",
" usage:\r\n",
" utime: 0.230\r\n",
" stime: 0.110\r\n",
" maxrss: 42768\r\n",
" minflt: 708\r\n",
" majflt: 0\r\n",
" nswap: 0\r\n",
" inblock: 0\r\n",
" outblock: 0\r\n",
" msgsnd: 0\r\n",
" msgrcv: 0\r\n",
" nsignals: 0\r\n",
" nvcsw: 5\r\n",
" nivcsw: 26\r\n",
" machine:\r\n",
" page-size: 4096\r\n",
" uname_system: linux\r\n",
" uname_nodename: 25031a521558\r\n",
" uname_release: 4.9.184-linuxkit\r\n",
" uname_machine: x86_64\r\n",
" ram_total: 8668636\r\n",
" ram_free: 6732184\r\n",
" ram_shared: 832\r\n",
" ram_buffer: 196552\r\n",
" swap_total: 1048572\r\n",
" swap_free: 1048572\r\n",
" cpu_count: 4\r\n",
" cpu_speed: 2800\r\n",
" cpu_vendor: GenuineIntel\r\n",
" cpu_model: Intel(R) Core(TM) i7-8569U CPU @ 2.80GHz\r\n",
" load_min1: 0.31\r\n",
" load_min5: 0.24\r\n",
" load_min15: 0.19\r\n",
" procs_total: 34\r\n",
" procs_running: 1\r\n",
" procs_sleeping: 18\r\n",
" procs_zombie: 15\r\n",
" procs_vmsize: 3597704\r\n",
" procs_rss: 379504\r\n",
" task_total: 72\r\n",
" task_running: 1\r\n",
" task_sleeping: 56\r\n",
" task_zombie: 15\r\n",
" files:\r\n",
" stdin:\r\n",
" file_name: /dev/null\r\n",
" mode: 0o20666\r\n",
" size: 0\r\n",
" inode: 382041\r\n",
" nlink: 1\r\n",
" blksize: 4096\r\n",
" blocks: 0\r\n",
" mtime: 2021-03-05T12:28:43-08:00\r\n",
" atime: 2021-03-05T12:28:43-08:00\r\n",
" ctime: 2021-03-05T12:28:43-08:00\r\n",
" uid: 0\r\n",
" user: root\r\n",
" gid: 0\r\n",
" group: root\r\n",
" stdout:\r\n",
" temporary_name: /tmp/ks.out.MBUBBu\r\n",
" descriptor: 3\r\n",
" mode: 0o100600\r\n",
" size: 13\r\n",
" inode: 2493415\r\n",
" nlink: 1\r\n",
" blksize: 4096\r\n",
" blocks: 8\r\n",
" mtime: 2021-03-05T14:29:35-08:00\r\n",
" atime: 2021-03-05T14:29:35-08:00\r\n",
" ctime: 2021-03-05T14:29:35-08:00\r\n",
" uid: 550\r\n",
" user: scitech\r\n",
" gid: 808\r\n",
" group: scitech-group\r\n",
" data_truncated: false\r\n",
" data: |\r\n",
" hello world!\r\n",
" \r\n",
" stderr:\r\n",
" temporary_name: /tmp/ks.err.mfBYDV\r\n",
" descriptor: 4\r\n",
" mode: 0o100600\r\n",
" size: 0\r\n",
" inode: 2493418\r\n",
" nlink: 1\r\n",
" blksize: 4096\r\n",
" blocks: 0\r\n",
" mtime: 2021-03-05T14:29:35-08:00\r\n",
" atime: 2021-03-05T14:29:35-08:00\r\n",
" ctime: 2021-03-05T14:29:35-08:00\r\n",
" uid: 550\r\n",
" user: scitech\r\n",
" gid: 808\r\n",
" group: scitech-group\r\n",
" metadata:\r\n",
" temporary_name: /tmp/ks.meta.WX6lGm\r\n",
" descriptor: 5\r\n",
" mode: 0o100600\r\n",
" size: 0\r\n",
" inode: 2493419\r\n",
" nlink: 1\r\n",
" blksize: 4096\r\n",
" blocks: 0\r\n",
" mtime: 2021-03-05T14:29:35-08:00\r\n",
" atime: 2021-03-05T14:29:35-08:00\r\n",
" ctime: 2021-03-05T14:29:35-08:00\r\n",
" uid: 550\r\n",
" user: scitech\r\n",
" gid: 808\r\n",
" group: scitech-group\r\n"
]
}
],
"source": [
"# pegasus must be installed \n",
"!pegasus-kickstart echo hello world!"
]
},
{
"cell_type": "markdown",
"id": "hollywood-rough",
"metadata": {},
"source": [
"## Specifying Checkpoint Files in the Workflow Generation Script\n",
"\n",
"Notes:\n",
"1. one of the jobs in the workflow must output some type of checkpoint file\n",
"2. the job should try to read in the checkpoint file when it starts (just like the example above)\n",
"3. the checkpoint file needs to be added to the replica catalog\n",
"4. use Job.add_checkpoint(f: File) where `Job` is the job which uses checkpointing and `f` is the Pegasus `File` object corresponding to the checkpoint file\n",
"\n",
"Let's see a simple example using the \"counting\" script above as a job."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "explicit-impossible",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"################\n",
"# pegasus-plan #\n",
"################\n",
"2021.03.05 22:29:39.709 UTC:\n",
"2021.03.05 22:29:39.715 UTC: -----------------------------------------------------------------------\n",
"2021.03.05 22:29:39.720 UTC: File for submitting this DAG to HTCondor : hello-checkpoint-tutorial-0.dag.condor.sub\n",
"2021.03.05 22:29:39.726 UTC: Log of DAGMan debugging messages : hello-checkpoint-tutorial-0.dag.dagman.out\n",
"2021.03.05 22:29:39.732 UTC: Log of HTCondor library output : hello-checkpoint-tutorial-0.dag.lib.out\n",
"2021.03.05 22:29:39.740 UTC: Log of HTCondor library error messages : hello-checkpoint-tutorial-0.dag.lib.err\n",
"2021.03.05 22:29:39.746 UTC: Log of the life of condor_dagman itself : hello-checkpoint-tutorial-0.dag.dagman.log\n",
"2021.03.05 22:29:39.752 UTC:\n",
"2021.03.05 22:29:39.758 UTC: -no_submit given, not submitting DAG to HTCondor. You can do this with:\n",
"2021.03.05 22:29:39.769 UTC: -----------------------------------------------------------------------\n",
"2021.03.05 22:29:40.597 UTC: Your database is compatible with Pegasus version: 5.1.0dev\n",
"2021.03.05 22:29:41.742 UTC: Created Pegasus database in: sqlite:////home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0002/hello-checkpoint-tutorial-0.replicas.db\n",
"2021.03.05 22:29:41.748 UTC: Your database is compatible with Pegasus version: 5.1.0dev\n",
"2021.03.05 22:29:41.797 UTC: Output replica catalog set to jdbc:sqlite:/home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0002/hello-checkpoint-tutorial-0.replicas.db\n",
"[WARNING] Submitting to condor hello-checkpoint-tutorial-0.dag.condor.sub\n",
"2021.03.05 22:29:42.248 UTC: Time taken to execute is 3.814 seconds\n",
"\n",
"Your workflow has been started and is running in the base directory:\n",
"\n",
"/home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0002\n",
"\n",
"*** To monitor the workflow you can run ***\n",
"\n",
"pegasus-status -l /home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0002\n",
"\n",
"\n",
"*** To remove your workflow run ***\n",
"\n",
"pegasus-remove /home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0002\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1;32m####################################\u001b[0m] 100.0% ..Success (\u001b[1;32mCompleted: 9\u001b[0m, \u001b[1;33mQueued: 0\u001b[0m, \u001b[1;36mRunning: 0\u001b[0m, \u001b[1;31mFailed: 0\u001b[0m)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"####################\n",
"# pegasus-analyzer #\n",
"####################\n",
"Your database is compatible with Pegasus version: 5.1.0dev\n",
"\n",
"************************************Summary*************************************\n",
"\n",
"Submit Directory : /home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0002\n",
"Total jobs : 9 (100.00%)\n",
"# jobs succeeded : 9 (100.00%)\n",
"# jobs failed : 0 (0.00%)\n",
"# jobs held : 0 (0.00%)\n",
"# jobs unsubmitted : 0 (0.00%)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Pegasus.api.workflow.Workflow at 0x7fec140c5cc0>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# start from 0 \n",
"with open(\"count.checkpoint\", \"w\") as f:\n",
" f.write(\"0\")\n",
"\n",
"# save the following snippet to a file which we will reference in the transformation catalog\n",
"with open(\"count.py\", \"w\") as f:\n",
" f.write(\"\"\"#!/usr/bin/env python3\n",
"import time\n",
"# number to count to\n",
"N = 5\n",
"\n",
"# read from checkpoint file\n",
"with open(\"count.checkpoint\", \"r\") as f:\n",
" current_count = int(f.read().strip())\n",
"\n",
"for i in range(current_count, N+1):\n",
" print(i)\n",
" \n",
" # write checkpoint\n",
" with open(\"count.checkpoint\", \"w\") as f:\n",
" f.write(str(i))\n",
" \n",
" time.sleep(1)\n",
" \"\"\")\n",
"\n",
"# properties\n",
"props = Properties()\n",
"props[\"pegasus.mode\"] = \"development\"\n",
"props.write()\n",
"\n",
"# add starting checkpoint file to replica catalog\n",
"rc = ReplicaCatalog()\n",
"rc.add_replica(site=\"local\", lfn=\"count.checkpoint\", pfn=Path(\".\").parent.resolve() / \"count.checkpoint\")\n",
"rc.write()\n",
"\n",
"# add executable 'count.py' to transformation catalog\n",
"tc = TransformationCatalog()\n",
"tc.add_transformations(\n",
" Transformation(\n",
" name=\"count.py\",\n",
" site=\"local\",\n",
" pfn=Path(\".\").parent.resolve() / \"count.py\",\n",
" is_stageable=True\n",
" )\n",
")\n",
"tc.write()\n",
"\n",
"# generate and run the workflow \n",
"wf = Workflow(\"hello-checkpoint-tutorial\")\n",
"\n",
"# create the job and specify the checkpoint file \n",
"count_job = Job(\"count.py\")\\\n",
" .add_checkpoint(File(\"count.checkpoint\"))\\\n",
" .set_stdout(File(\"count.out\"))\n",
"\n",
"wf.add_jobs(count_job)\n",
"\n",
"wf.plan(submit=True).wait().analyze()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "operational-montreal",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5"
]
}
],
"source": [
"!cat wf-output/count.checkpoint"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "velvet-veteran",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\r\n",
"1\r\n",
"2\r\n",
"3\r\n",
"4\r\n",
"5\r\n"
]
}
],
"source": [
"!cat wf-output/count.out"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "japanese-qualification",
"metadata": {},
"outputs": [],
"source": [
"rm -f wf-output/count* *.yml pegasus.properties"
]
},
{
"attachments": {
"checkpointing_content%20%284%29.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmsAAAE3CAYAAAD16Ab1AAAJiHRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDVUMTglM0ExNCUzQTE0LjAyOFolMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjMlMjIlMjBldGFnJTNEJTIyRE53bWtFY0c3ZmN3R2hBbVZHVGMlMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyUC1JMnVKREVCaTZHbWs5eG9mT0YlMjIlM0U3VnRMYzZNNEVQNDFQb1pDdkRrbW1kZGh0eXBWT2V6TWFVc0RpazBGSXdiazJONWZ2NUtSREhvUVB3SzJrOWlIRkdwUVMlMkZUM2RhdlZJaFAzZnI3NlhzRnk5amRPVVQ1eDdIUTFjYjlNSENkMll2cVhDZGFOQUVRaGFDVFRLa3U1ckJVOFp2OGhMclM1ZEpHbHFKWWVKQmpuSkN0bFlZS0xBaVZFa3NHcXdrdjVzU2VjeTZPV2NJbzB3V01DYzEzNlQ1YVNXU09OZkx1ViUyRjBEWmRDWkdCamElMkZNNGZpWVM2b1p6REZ5NDdJJTJGVHB4N3l1TVNYTTFYOTJqbkJsUDJLWHA5NjNuN25aaUZTcklQaDJjcHNNTHpCZjgzZmk4eUZxOExDclNXMll6MmtweVdOZFpNbkh2Wm1TZVV3R2dsMDBIbEdvbWElMkJjQXRtOUdLWUh3SEpGcVRSOVp0cllUcHB0MXpDWmtGY29oeVY1azlaQkRPTjJxMjQ3d2dETTZzR056dW9HWTYlMkJGc2l3SmJWbEhqUlpVZzNxdHJLMFZSc0VzUmdkVVVFVTBSdmVpOGRpdmFRR0dHeGRWZ0lka2NhZEFRdENJeUdEV3A4RE82eHptdXFLVEFCWDN5N2luTGMwVUU4MnhhTUVRcFJvaks3MTVRUlRMSzhGdCUyQlk1NmxLUnZtYmpuTENIb3NZY0xHWEZKJTJGcHJJS0w0b1VzYm5hVEQwdXlEYzR6M0ptbDc4V1NaWkNPczE3WE5SNG80SGRmJTJCU1RGbnlqbzZIVm9Yd1JIWHdGQjlIdThNa3o4TW14JTJCNmtqWWZVS01ONXVmNUdOWXpKZkI2OWR0aHZDWEFwdHc5aGdyc0JnTDVYZXg5akxmMyUyRjJjbHpGWG81dUx6Y2F5VjdCUWZHWU8lMkZNQjlrR3JqUHprejdMclg4enNsczliWDFZY2hVMWp6UnM5QWI0Sm0xSzh1cGlZNzNrOUllTFFtSzg2ano5ZXpBODE2RXMwaGZXaXZubk9rdWVhRGtSSENISVc4SDlYOUdyS3JrclclMkI1WjJBM1lvVVBqMEMwU2tnQTkwQndaZ3BBVWkwbEJjVTZyOUM4dlNLdGM3OFBPdSUyQlBFMFg0bkFuZzZnS1FBUGdWOThVQUEySnNRN1kzQkI1JTJGUlRSRnJXNkVSaDFtekQ4S2ExSXc0M0VVaGFiaThtRG05M2JBTEpLRDR1RG51T29rZ042RDF4bUFJRjE1M0hTdlpBZmNDRUEybiUyRlJDOGFqY2NHZWFHJTJCdzY4blhEMSUyRkNNZG52UWxsQzJhajNIaiUyQlNPbXJJUmlNbGUwRFlJZ0dUUWpQUkFRWEFtWUwlMkJ1Z1Q1RGxSOEdmQk52RjNtdG0yZDRTR3BWQkJwOU5va1RWVGNXZTB0MlRQQThEaHFnNWl5STVOYSUyQnNReVRFd1ZTc0doeU9ab2VSNUV5Y3M2bDdzQVRobmRpeCUyQjE2V015c1dEcFdXdmtjRjN4dHI2QWIySThYWndOTHlYWnNQM1lIUm1QRHpiUDUlMkZ6bUVvWG54d09kV2s1SlJ5bXlzam5oaU5RMCUyRjVUd21FcXZFaHd0SVlSVm1jM2J1ck40Y1JtQiUyQmVWSzhQaVhsR3o3V3Z4OTUlMkYxeGZZd1hIQkNtUXRCcUhNaEhDdnIweXN4R2xKNkVTNkY5V3hqUWlBanlPUVBrRkJVaW8zRXNkMHRydUx3eU9uZjNWM01WazZKbFlIdnlScjJQa1VKZGlnYXJxSUc5R0pNazlIWjlib21hUDd4JTJGRzhnNzFPeGRrJTJGb2ZIb0JwcXh3Z3VvYTFWZTg5c1RMY0NBMkZsNUN4MXNLWnVKUW9qMkklMkJEWHBuRU1jZXlnQkxpMkVxa1dzeUZNQTJEZUd1bUp2SlFEM25MRmlxR01xZ1J5TnJ4ZEtDRnUyJTJGZnJSVTFzcXBWMkRTYWRjQ2l3YlRGNnZsMjVhRDZqSzZPc3lIOSUyQnFWMlY3Y0lsbjY5MWFxNmhHWEF5OVhFZlpYYnJIMHN0eHJBakU3YzlUd2d1dzRtZzB3cG1LUEVjVExvampEdUZ1S09Qb1BuaFB4Z1VhNGNJcjQ5U0FabmtkbnNRcSUyRnl6WGJuOUtqTnE3OUE4aUslMkZiN0JxRnJuZVhyVXhpQmw2WnkxcUc4SElWY1l5eWRsM2FRRk5oeURBcEJkQnliQXR1MTRsZ2o1WFloWld0UyUyQiUyRk5IWTlOSnFuSFZleXIlMkY3UFBkelZqbG4zMiUyQlV6ckF1ZjJ1Yjl1NyUyRkhycndqWmRWVnNuM3NhRSUyRnJYcXVKVkZMQ1BkcFVYdzhXSWN2cmNBZEhneW95VGQ2cTVuUUtlJTJCRmhFdnFvam9xcVdtRXhZUkRaOXpYYmx3Umk1NCUyRmhtNW9OY2hyMXc0SXhmOGM4WUYwd2RtUTNDaFFqQzlVdUZRS3FoZlNKeVNDaUxmN1ZBaCUyQlhoUURYVWc2TVZXR0VoWWhXNW8lMkJScGFwcHpVOFFkQVN5JTJCRVh0SHF6YnlVNyUyQjlQREpWZVFyeEMxWnNZcWR2dTAwS2xWOVd1VVBYbUxWcUJmMFNvYUxQOU45Um1NOXolMkJNNiUyRjc5WDglM0QlM0MlMkZkaWFncmFtJTNFJTNDJTJGbXhmaWxlJTNFEI9JhwAAIABJREFUeF7tnQm4llP3/9dbQqaUIpQhZCiZ50JoMGWqiEJeJDIUDVTSgAZFokwlylCmzMOLDGVOkTKTCoWUDJVU/+u7fv/neDqdYd3Pc097P999XV3VOevee+3P3s+5v2ftvdf+z5o1a9YIi3ME+vbtK3369HHObzpMAiRAAiRAAiQQjMB/KNaCAUuL9X/+8x+hzk7LaNAPEiABEiABEoiOAMVadGwjrZliLVK8rJwESIAESIAEUkOAYi01QxHMEYq1YLxoTQIkQAIkQAKuEqBYc3Tk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JgESIAESSIwAxVpi6NmwD5OPo0gCJEACJEACURPw4X3JyFrUsySi+n2YfBGhYbUkQAIkQAIkUETAh/clxZqjE9qHyecoerpNAiRAAiTgEAEf3pcUaw5NuGxXfZh8jqKn2yRAAiRAAg4R8OF9SbHm0ISjWHN0sOg2CZAACZBAYgQo1hJDz4Z9mHwcRRIgARIgARKImoAP70tG1qKeJRHV78PkiwgNqyUBEiABEiCBIgI+vC8p1hyd0D5MPkfR020SIAESIAGHCPjwvqRYc2jCZbvqw+RzFD3dJgESIAEScIiAD+9LijWHJhzFmqODRbdJgARIgAQSI0Cxlhh6NuzD5OMokgAJkAAJkEDUBHx4XzKyFvUsiah+HyZfRGhYLQmQAAmQAAkUEfDhfUmx5uiE9mHyOYqebpMACZAACThEwIf3ZUGItYULF8rnn38ujRo1EgxapqxevVoqVKhQ6pQr7bk0zFEfJl8aONIHEiABEiABvwn48L70XqxBkPXr108eeeQRmTVrVtGM/Oeff6RatWoyc+ZM2X777deZqaU9l5Yp7cPkSwtL+kECJEACJOAvAR/el96LNUy/QYMGyZIlS+TGG29cazYuXrxYqlatWuoMLe254g98/PHHMmnSJLn22msDzfZcn0MjPky+QLBoTAIkQAIkQAI5EPDhfZmTWMOS4qWXXirbbLONbLTRRvLKK6/IfffdJwcffLBiHDFihEAIvffee/LMM8/I33//rYLpp59+ki+//FKOOOIIufrqq9X2jjvukHnz5gmWHL/44gt544035Ntvv5U+ffrIqlWrZNttt5WLLrpI/zRs2FAF0ahRo+TPP/+Uq666Sp5//nl56qmn9JlzzjlH2rRps85QHn300dKzZ0957rnnZM6cOXLllVfKLbfconYTJkzQv2+//Xb5448/5P3335eBAwfKzjvvLMWfGzx4sC6nZre38cYby0knnSRNmjSRoUOHyq677qo+brrppvL666/LIYccImeeeabyOuigg/R5PHPKKaes9dyee+4ZaAr6MPkCdZjGJEACJEACJJADAR/elzmJNbA64YQTZOnSpfLqq6/KZZddJhUrVlSR1qNHD9lggw3k2GOPlVatWqkQGzNmjEycOFGF1emnny6777679O3bVwXS9OnT5Z577lHxtmLFChk2bFjR1yHKIKq6du0qjRs3VpGF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Qm3jjTeWn3/+Wb755hs55phjZOTIkTJ+/Hjp1auXNGzYME+P+DgJkAAJkAAJkECaCFSvXl0WLVrEyFpSg3LPPffI1KlT5d5775Vvv/1W6tSpIytXrtRw51ZbbaURNexf23HHHeWnn36SL774Qk+FzJo1S9esX3zxRRk0aJAgUlaxYsWkusF2SYAESIAESIAEIiCAPWtXX321HjLgnrUIAFuqbNeunRx00EGyzz77yNy5c2XChAnSqVMn+eOPP6R///4ybdo0eeihh/TrOISAyNr8+fOladOmKtTWW289GTZsmCruOXPmyH777WdpljYkQAIkQAIkQAIOEOBp0BQMEsTVTjvtpMuYY8eOFSjou+++Wx577DGpUaOG7km75JJLZI899tC/u3TpogcJYP/DDz/IKaecIqeddppG3i677DLdv8ZCAiRAAiRAAiTgBwHmWUvBOCKChj1omdOZy5Ytk4022qhUz/B9bCpERA3lr7/+0n/jdAgLCZAACZAACZAACRQnwAMGnBMkQAIkQAIkQAIkkGICFGspHhy6RgIkQAIkQAIkQAIUa5wDJEACJEACJEACJJBiAhRrKR4cukYCJEACJEACJEACFGucAyRAAiRAAiRAAiSQYgL/D6dCHaTiu940AAAAAElFTkSuQmCC"
}
},
"cell_type": "markdown",
"id": "pleased-appliance",
"metadata": {},
"source": [
"### Scenario: application periodically writes/overwrites large checkpoint file\n",
"\n",
"With the counting application above, the checkpoint file writes are small and fast.\n",
"\n",
"![checkpointing_content%20%284%29.png](attachment:checkpointing_content%20%284%29.png)"
]
},
{
"attachments": {
"checkpointing_content%20%282%29.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmsAAAE3CAYAAAD16Ab1AAAJ2nRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDVUMDUlM0E0MyUzQTE1Ljc1NFolMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjMlMjIlMjBldGFnJTNEJTIyNlYzaks2UUhxalA5NmhTN1FCcFclMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyRzJicmNKRXRIbkRIejl3aHVIR1clMjIlM0U3VnZMY3FNNEZQMGFMJTJCTVNMd1BMSk4zcG1hcWVxbFJsTWQycktSa1VXMldNR0NISDluejlTQ0R4a0hDTUhYQW5hV2VSZ290ZW5IUHZrZTRObVRqMzY5MDNDclBsWHlSR3ljUUc4VzdpZkpuWWR1RGIlMkZMY3c3RXVENVZ0dWFWbFFIRXRiYlhqQyUyRnlGcEJOSzZ3VEhLV3cwWklRbkRXZHNZa1RSRkVXdlpJS1ZrMjI3MlRKTDJyQmxjSU1Qd0ZNSEV0UDZOWTdhVTclMkJXQjJ2NEh3b3VsbXRrQzhza2Fxc2JTa0M5aFRMWU5rJTJGTjE0dHhUUWxoNXRkN2RvMFNBcDNBcCUyQnowY2VGb3RqS0tVOWVrZ21YaUJ5VWElMkJtMXdYMjZ1WFJXbDhLekRqZDFFQzh4eEhFJTJCZHV5ZFlKTjFqOHN1eUFZZ095ZWcxVzlXYmNKUkJaSTBiM3ZNbTJ4azVCdDJ6QXBtd1VKWkRobCUyRmJ3VUZLNHFJYXJabmdrbUU5c0ElMkJsdVZpakhVZDVXZ2ElMkZHeU1tR1JraDJhNEtsalRRN09oS0RkSUdZTVJLJTJGYUx4NGJTckk2Q2JHTVloaGVJME1jaGphc1RZZE9hTmtoZTVKUWlpM3BDVGxMZSUyQmVjWkpvSnBqZ1JTbzQ1U3doYnI5N1FaUmg3dU8zOHNFYXg3R1k1bTY3eEF3OVpUQVNjMjU1UkhNYkpaczBSbUt0UUF4UFV2WUExemdSd0h6ZlJEaUdmSm4zSk0xSk1ZSjQlMkZpUVhyVHlPejRaMnAzcU02dURwUkNobGFMaVUyJTJCRlNPbDlONzJtUjlRb3o3dkdRYWFQVGhWJTJCRHNHUGdEWUdYN3JnVmdBMjhITkFCMkd3QXdMeVBCeGdIb3cwWUNEb0FDMFlDYkhhU0tNdDRQZ0VndE1Qc2gyd3JybjhLM0tlZXZQdXlrelFVTjN0NWMwRGxTJTJCbHNTZGE3RVg3WFBhUVNwd3ElMkZIaiUyRmhlTHJ2Rzl4bmFBSHpUWDZ6d3RFcTV4UHhHV2FKRVAwNTVWY0xjWldKM3JlOG13VjhSY052djBrRXV1YjVaZ2hiMWtpYlJHRFF1T2UlMkI5ZyUyRk1zbW0yUDBLZ2V5VlFpcTdPSURBWjdOTGdJUWdNVDlMZ3pvUHhVUmxPJTJCWnAlMkJLTEVWTncwaEZyZTFFaGQzUjZTNDFLRFdsdnR1cExoUzNvcEtOenhQaWwxYkgwa1g5UU5hekttQyUyQjBhelREVElUMWx5TzVYaUYlMkJXUTV5cTlHciUyRmxZcVV3Q004UmVTbVVXJTJCdnMzNDFJQ084TUo2cWVLQ0ZSSTJCbDJDb0xYdzdXVzNGYk9aVXl2JTJCVllOa0RFMjM2UFkxYzQwcW5Mc2c3eVlRQjNQa0hSRWtXcnd2ZW1YSzVGQTdnV1FLYnpQSHVObVM0U2Z6RmJ4cW5JTmNseVoyT3gxVlc1JTJCTDJqeDlGUFBGM1JNMWJPWXBrRkM0MlBHaGtGdTNod2t4ZlZ2ZUxzNDJZN2s1TXQ1YmoxaGZ3akhwUkViOFkzVnlKbXVRbkJNTTVnU3Fsak9vTSUyRjB1SEo2bEVqTVRQWUdPYkxBa09yVGFHd1AwTEdhVWtMaXcyY2lsaFZmclUlMkZRQ0V5Q0tkaDR5Y0lOWUlVYWllWEpXYzYxZnBJdzZXbmxsbk1LYmN4a085emh0YWZMeUlIaWtkOXJ3d3ZHSTFtUFNtakpFSjVqdklyWCUyRjM0NGpGMVFjTE1JdEJyOHRtWmZLb2FYMTNYJTJCemxwbFBYT3JmRXBGTjZOcUJyNW9BMDBCdnJLcUtPT01CWGx3QjVOUnMzNjBCc1lkdjBXeDFNQVhxJTJGbDFvVUgzblhXTEQ1WVUyQWRxVDRVZDQlMkJJWXY2NklzeXI0WFZiRDIlMkJTbTBtemNtRzl0MTNiVWF1czNDSTgxOEZzZXhwWWpST0FxMHVNTlEyRDBWeXVxNkkxZUhwTFAxSUMyJTJCdXZQRjBWNGlFU0pxVmJiNUtBT3BDOVpoaURZekZjU1FmZ0RsZExod2glMkYlMkYzWHBPQyUyRlFyWTRhcFhMSWR4UHBoMU9tMHlOZHJ4MEcya2pEeGJWOXVHeDFUYnglMkZRZUx0R05uWUJSTnZwU0dET3dORk1MNzZ3cW0lMkJZSHgzY1ZGZk1DdHkwZWZqYWlDbVBQMnZQU0QwREthNjloNTFPbndUVTJhNTdNclVRWDExamZPNFA3MGdWMllCN01wViUyRndQMlpibnE4U0dWd3ZjN25LUGtrZVJZSWpBbmpKRjFCd0dNYUlsSXZvU1pHR3k5VzRpdm5hZHp5TSUyRnBVMXA4ZDF4VGJOY2N0eXZYeFJEbEY4NjJnQjF6Qmd0MFBjMURKcmJ6SEVRb0Vqa0E0YnhqSmxCMWdPRmR2T0U4OEZ4dklCTGRYbG5TV0g5WDZ2Z2c2cG5RMWVjTHVSdlhHJTJCblEwZlhaekZnZngzWjglMkJCUlJtQzglMkZJVjlESFJKZHk5UDVzanRFY2pUR2VuenBwQ1F1MnRCa2YwZGh0RUxzZUlXbWh0b3lwZXloJTJCREdscklId1VBRHJaN3ZROXcxMDdRNTBqYVQ5SEhpVmVEYmdSVHNVYllwM3RNR2ZEJTJGeVhqQkFRODA0MlNJbkkwMGpFd2Y1OFVUTlV6UFJKc3EwdVVzOElHWDViJTJGME5PV2FHcCUyRjYzSiUyQmZvJTJGJTNDJTJGZGlhZ3JhbSUzRSUzQyUyRm14ZmlsZSUzRQml3AIAACAASURBVHhe7Z0HlBRF97fvCyZECQqKOYsBA0bM8gqCCTGAGFDxVTFgAFFRTAQDIApiVsw5YkQUxUAQEEURs2JAzIKKigm+89T373VYZtmemerpsL86Z8+Gqa6qfqq2+te3bt36z4IFCxaYUuoI9OnTxy688MLUtVsNFgEREAEREAERKIzAfyTWCgOWlNz/+c9/TDo7Kb2hdoiACIiACIhAdAQk1qJjG2nJEmuR4lXhIiACIiACIpAYAhJriemKwhoisVYYL+UWAREQAREQgbQSkFhLac9JrKW049RsERABERABESiQgMRagcCSkl1iLSk9oXaIgAiIgAiIQLQEJNai5RtZ6RJrkaFVwSIgAiIgAiKQKAISa4nqjvCNkVgLz0o5RUAEREAERCDNBCTWUtp7Emsp7Tg1WwREQAREQAQKJCCxViCwpGSXWEtKT6gdIiACIiACIhAtAYm1aPlGVrrEWmRoVbAIiIAIiIAIJIqAxFqiuiN8YyTWwrNSThEQAREQARFIMwGJtZT2nsRaSjtOzRYBERABERCBAglIrBUILCnZJdaS0hNqhwiIgAiIgAhES0BiLVq+kZUusRYZWhUsAiIgAiIgAokiILGWqO4I3xiJtfCslFMEREAEREAE0kxAYi2lvSexltKOU7NFQAREQAREoEACEmsFAktKdom1pPSE2iECIiACIiAC0RKQWIuWb2SlS6xFhlYFi4AIiIAIiECiCEisJao7wjdGYi08K+UUAREQAREQgTQTkFhLae8h1pREQAREQAREQASqJ7BgwYLqMyU4h8RagjtncU2TZS2lHadmi4AIiIAIlJVAFp6XEmtlHTL+KsvC4PNHQyWJgAiIgAiIQH4CWXheSqyldHRnYfClFL2aLQIiIAIikCICWXheSqylaMDlNjULgy+l6NVsERABERCBFBHIwvNSYi1FA05iLaWdpWaLgAiIgAjERkBiLTb0qjgLg0+9KAIiIAIiIAJRE8jC81KWtahHSUTlZ2HwRYRGxYqACIiACIhABYEsPC8l1lI6oLMw+FKKXs0WAREQARFIEYEsPC8l1lI04HKbmoXBl1L0arYIiIAIiECKCGTheSmxlqIBJ7GW0s5Ss0VABERABGIjILEWG3pVnIXBp14UAREQAREQgagJZOF5Kcta1KMkovKzMPgiQqNiRUAEREAERKCCQBaelxJrKR3QWRh8KUWvZouACIiACKSIQBaelxJrKRpwuU3NwuBLKXo1WwREQAREIEUEsvC8lFhL0YCTWEtpZ6nZIiACIiACsRGQWIsNvSrOwuBTL4qACIiACIhA1ASy8LyUZS3qURJR+VkYfBGhUbEiIAIiIAIiUEEgC89LibWUDugsDL6UolezRUAEREAEUkQgC89LibUUDbjcpmZh8KUUvZotAiIgAiKQIgJZeF5KrKVowEmspbSz1GwREAEREIHYCEisxYZeFWdh8KkXRUAEREAERCBqAll4XsqyFvUoiaj8LAy+iNCoWBEQAREQARGoIJCF56XEWkoHdBYGX0rRq9kiIAIiIAIpIpCF56XEWooGXG5TszD4UopezRYBERABEUgRgSw8LyXWUjTgJNZS2llqtgiIgAiIQGwEJNZiQ6+KszD41IsiEBWBX375xT788ENbY401rHHjxkVV880339j7779vu+yyi/H/VmyaP3++1apVq9jL3XW0g/Zsv/32tvTSS9uPP/5o7733nm2xxRZWt27dksrWxSKQdQJZeF7KspbSUZqFwZdS9Gp2Cgi8+uqrtsMOO9hnn31ma665ZsEtRmD17dvXHnzwQZs+fXrB1wcX/P3337bCCivYtGnTbK211iqqnJ49e1rDhg3tn3/+cWV169bNbrvtNuvSpYv98ccfttRSSxVVri4SgZpCIAvPS4m1lI7WLAy+lKJXs1NA4K233rIOHTo4i1SxacCAATZnzhy79NJLiy3CXTd79mwntqpKCLoLL7zQjjnmGFtvvfUWyvbSSy/ZoEGD7Mknn1zo74jIO++80x5//PGS2qaLRaAmEMjC81JiLaUjNQuDL6Xo1eyEEcB6dtVVV1n9+vXdcuX5559v11xzjc2YMcNWX311Gzx4sN1zzz1uOZM0bNgwJ6AmTZpUIYLIP3fuXJs8ebJddtlltv7669see+xhvXv3tqeffto+/fRTO+GEE2zgwIG26qqr2rLLLmvPP/+83X777daiRQtn4broootcGxCIXEee7t27uzpvuukm97e3337bLr74YmcVO+mkk+y4446zAw880EaNGuXKPvPMMyvo3njjjdavXz/bcMMNbcstt7TXX3/dTj31VDvggAOsa9euttlmmzkrW1X3lLBuUnNEIDYCWXheSqzFNnxKqzgLg680ArpaBMz5ce244472yiuvGH5qLF3efffd1r59e6tXr54dfPDBhug54ogjrFOnTtarVy/n87XXXns5y9sXX3zhrvn999+dBa1Hjx5ODG299dbWpEkTmzp1qrNsIeAQYvvuu6/9/PPP9sILLzjhVLt2bScU99lnH1fn8ccfb/3797e//vrL+vTp40RZs2bN7IwzznDlIwYRjX/++ad9+eWX7trrr7/e3njjDbvhhhsW6VLuYcqUKU480p4xY8bYJpts4nzxnnrqKdt8883z3pPGhgiIwL8EsvC8lFhL6YjOwuBLKXo1O0EETjzxRPv111/tjjvuqGgVQgk/LgRW4O/15ptv2nfffWetWrWya6+91u666y4777zznOVtnXXWcc76TZs2rSgDUXTkkUfapptuao8++qjVqVPHAv8zliabN2/uhBvCabvttnPCj3qXWGIJO/TQQ22VVVaxK664womqRx55xLbddltr27atawMWPfJ37NjRCUjyI/YQlLlp5syZ7nrqZbME9bAs+/HHHzsxyc+vvfbaIve08847J6iH1BQRiJ9AFp6XEmvxj6OiWpCFwVfUjesiEcghgJhBlB1++OEVf504caK1a9fOWc0QYQghfj733HPdciO+aC1btnRWsXvvvdfOOuss93luYkkTvzeE2g8//OAc+7F+BeXOmzfPCTjKe+CBB5xweuihh2zBggXOAod1D4vauuuu60QcmwOWWWYZQ+hhWSMPGxcQi/xM2ZX91UaOHOmWRhGON998sz377LOuLiyFWBLxWct3TxogIiACCxPIwvNSYi2lozoLgy+l6NXsBBHA8oUPGEuQiCt2fiJmvv76a2fZYmmRZUSWQ3HSx/LF3xFg+KF9/vnnzsKGcGIH6Pjx4w3LFDtJWaK8/PLL3e9YtbBi4Tc2fPhwtxsT536sZscee6zzK0P08Tcsdwit++67z+6//37nV4b/WufOnZ1VDAHZunVrVw5iDeGI8OJv/F9zLX5w+LnRTsQly6lY8bAMIk733HNPF5Jk9OjRi9wTVjclERCBfwlk4XkpsZbSEZ2FwZdS9Gp2ggjccsstNnToUCfG8OnCYZ/lxlNOOcVZ1PBRGzt2rBNQbCDAH+2ggw5yS5/4nGH12m233dyyJhsHEF4NGjRw1i42DQSxzBBOWLZYkmTjARsFEH1Y18aNG+f80RCMhOi45JJLXOwzRCNt49qXX37ZLYGy2YGfWQalTVjbWAbFKocACyxzCDmE4GGHHWb77befs+ghNBGJLJ8i/hCiLI9Wvid88pREQAQk1jQGEkBAYi0BnaAmJIIAPmsIFMRM5YQjP/8rSy65pPvot99+c/kqxyZjGRORli+xoWC55ZZzn7OxYKONNnK/5yZEHOIuN0AtwouNCwirygnhSBnkof255bFRgt+phw0JbDII4qlxL+RHJAaBdqu6p0R0jhohAgkgkIXnpSxrCRhIxTQhC4OvmPvWNSIQBwF8yrbaaiu3VFrKaQbVtZ3y9957b7cxYsKECS4MiZIIiEBpBLLwvJRYK20MxHZ1FgZfbPBUsQgUSAAHfyxa+K9F7ROG3xsWQeKvlXpMVYG3qewikEkCWXheSqyldGhmYfClFL2aLQIiIAIikCICWXheSqylaMDlNjULgy+l6NVsERABERCBFBHIwvNSYi1FA05iLaWdpWaLgAiIgAjERkBiLTb0qjgLg0+9KAIiIAIiIAJRE8jC81KWtahHSUTlZ2HwRYRGxYqACIiACIhABYEsPC8l1lI6oLMw+FKKXs0WAREQARFIEYEsPC8l1lI04HKbmoXBl1L0arYIiIAIiECKCGTheSmxlqIBJ7GW0s5Ss0VABERABGIjILEWG3pVnIXBp14UAREQAREQgagJZOF5Kcta1KMkovKzMPgiQqNiRUAEREAERKCCQBaelxJrKR3QWRh8KUWvZouACIiACKSIQBaelxJrKRpwuU3NwuBLKXo1WwREQAREIEUEsvC8lFhL0YCTWEtpZ6nZIiACIiACsRGQWIsNvSrOwuBTL4qACIiACIhA1ASy8LyUZS3qURJR+VkYfBGhUbEiIAIiIAIiUEEgC89LibWUDugsDL6UolezRUAEREAEUkQgC89LibUUDbjcpmZh8KUUvZotAiIgAiKQIgJZeF5KrKVowEmspbSz1GwREAEREIHYCEisVYN+7ty59tprr9nKK69sG2+8sf3999/26aef2m+//Wabb755bB2XhYqzMPiy0A+6BxEQAREQgWQTyMLzMjLL2rvvvmtnnnmm9ezZ0/73v/8Zv3/33Xd2yCGH2P777+8+UyqeQBYGX/F3rytFQAREQAREIByBLDwvIxNrLVu2tIEDB9q22267EM2mTZva3Xffbdtss004ykXmevDBB92VHTp0KLKEZF+WhcGXbMJqnQiIgAiIQBYIZOF56V2ssczZu3dvu+eee6x79+42e/Zst/Q5ZswY+/zzz61Zs2b2448/2hJLLGGffPKJXX311TZz5kw7/vjjrVWrVguNi8suu8y+/fZbe+mll2zw4MF2+eWXW926de3++++3AQMGuOXUPn36WG6+Bx54wO68807396OPPtquueYaV2a/fv2MZdlVV13VjjnmGDv77LPtjz/+sC5dutiJJ57o2vHNN9/Y+eefb4888sgiIjNpAzYLgy9pTNUeERABERCB7BHIwvPSu1ijm6+//nobP3683XHHHTZ8+HAbPXq03XvvvU5EPfHEE4agQsC1adPGibhjjz3WOnXqZEceeeRCowTACLpHH33UTjrpJJs1a5att956TnT98ssvduWVVzrRVjnfRx99ZHvttZd98cUX9tdffxlWvosuusjeeOMNe//99+3mm2+2U045xebMmWNbbbWVvf766zZ//nxr3769DRo0yPr27Wtt27ZN9IjlnpVEQAREQAREQASqJ7BgwYLqMyU4RyRiDUvVRhttZKeddpodfvjhtssuu9gJJ5zgxNjOO+/srGj77ruvrbXWWs5ShvDCslW7du2FULVr187q1KnjLGlB2nrrrZ2FrVatWk6k7brrrlY534033miTJk1youyKK65wlrJDDz3UnnrqKfc3rGubbrqprbHGGjZy5Ehr0qSJHXzwwU6o0R586xo1apTgbjN372kbfJdeeqkbE8suu2yi2apxIiACIiACIpAkApGIte22284JKkQaQui5555zy58NGjSwyZMn2yqrrGL169e3/v37uyVJfq+c2Dn64Ycf2iabbGITJkywFi1auCy9evVy1wY///PPP4vkQyBitUMc0pYNNtjAXbfZZpu561haZYcqFrWGDRvaOuus4/72wQcfOCE5ffr0JPVR3rakUaw1btzYbTRJuhBOfOergWUjMHbsWGelHzVqlO24445lq1cViYAIiEAuAe9iDZG15JJLOr80vpo3b+4sWoiiPfbYw1nJEHCE8kAg8QB/5plnFll2ZNmSLyxiu+22m7PMkbCS4VfG5oV99tnH5cnN17VrV1c+S7FsbqBOlkpZ4nzzzTfdZ4g/fNimTJnilmdp04gRI5xlDf+5Pffc05Wd5CSxluTe8dc2/p86d+5sQ4cOtZVWWslfwSopFAFWAJi/Wrdubc8++2yoa5RJBERABHwT8C7W3nnnHSewEEbEWEP0sMS52mqr2QEHHOAEERavjh072scff+zCePz3v/91y6NB+umnn9wSJctm+Ljh64aoI02bNs1OPvlkt+ng559/XiQfQhFhyPInGxyGDRvmhB0PPKx0RxxxhJ1xxhmuPKxtlMXf+d6jRw+3fHrX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tmWWWcZ78yTWvCNVgVoGLcsYiEWscWf4Z6y11lp2xx132C677GLHHnus3XbbbTZo0CAnlO699157+eWX7dxzz3Uirn///vbzzz/bwIEDrUePHvb333/bVVdd5QTa3Xffbcccc4zVqVPHDj300LzgZs+ebTvvvLM9/PDDttpqq1m9evXsu+++swYNGtiSSy5pF1xwgfvaZJNN7OKLL7b27dvn/fvBBx9cUT5tyHctwi/fvfns0SgeWvRJt27dnICF7bx585wgPumkkwpuetj2hc1XcAOquSCuen3fR9LL883Zd3lx8QvE2j///GPX3HSTrbPWWjbm5Zdt5HPP2QcffWQrNW5svXr0sDZ77GEbbbiht2ZKrHlDqYJyCGgZNPrhEJtY49Z69eplyy67rBNf119/vXXs2NGJHCxn22yzjbOwDR061Fm89t57bzv++OOtZcuWTmA98MAD1qFDB+vcubMTd+RZXDrjjDMMix7i7qmnnnJ1vv/+++5arHIzZsxwwgur0hNPPGGrrrpq3r/vu+++FdVUdS15Kt9bz549vfZmFA8txCdLMjCmP/7880+bOHGinXjiiQW3PWz7wuYruAESa76RFVWe7/71XV5RN+XhosXtBp05a5a99Mor9vxLLznx9t6UKVa/Xj0PtZpJrHnBqEIqEZBYi35IxCrWEE2IMZY6//vf/9oLL7zgrDhYwWrXru2sZFjBWPLE2jNr1iy75557DOHzxRdfuM+aNGniLHIIrqoSFiPKQ4QhpALxgXC7+uqrberUqXbzzTfbuHHjnPXt22+/dcuk+f7euHHjimqqupY8le8N8eczRfnQQiz37t3bLTk/88wz1rZt24KbHrZ9YfMV3ACJNd/IiirPd//6Lq+om/JwUT6x9sZbb9mw66+3M087zTZu2tS9LPHy6DNJrPmkqbICAhJr0Y+FWMXaN998YxtssIH16dPHunfvbnfddZf7QiAgxnbffXdnZUOk7b///nbnnXfagw8+aA899JDdxNLBOuvYtttua99///1iJ7UffvjBGjVq5MqkTqx211xzjW233XbOv4yysdB16dLFttpqKzvllFOM5c58f6dLRo4caS1atLDjjjuuyjyV7813V0b10MLhGQsjy9Jt2rRxrPELhAuWRL6HSWHbFzZfmDoLyRNXvYW0MQt5fXP2XV5cjPOJtedeeME1Z+vm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UXbooYcu0jF77LGH9e7d255++mn79NNP7YwzzrAhQ4a4fPfff7/7fs0119jcuXNt8uTJdtlll9n6669vla8bOHCgW07Nra9u3bq2//77W+vWrW3w4MHWtGlT18bll1/eXnrpJdthhx3ssMMOc7y23357dz3XHHDAAQtdt9lmmxU0oDT5FYRLmUVABGIkoPkqRviqOhMEihJr3Pm+++5rP//8s73wwgt26qmnWu3atZ1I69Wrly299NK21157WYcOHZwQu+WWW+yBBx5wwuqQQw6xjTfe2Pr06eME0htvvGE333yzE29//PGHXXHFFRV/R5Qhqs4880xr2bKlE1nUu+mmm7qlzYMOOsgOPPBA97Xhhhs6AUe+3PTbb79ZkyZNbOrUqTZo0CAnxOrXr29dunSxZs2auTIp6/fff3eWtx49ejghtfXWW+e9rnJ9CM8GDRrY22+/bWuuuaYdfPDB1r59ezviiCNsu+22cyIRMdexY0ejLYhOhBz+c7nXFTqaNPkVSkz5RUAE4iKg+Sou8qo3KwSKEmuBvxeWo+bNmzsBtckmmzih0qpVK7v22mvtrrvusvPOO89Zw0488URbb7317PTTT3eWskcffdT5ia2++upOzPEdcXTuuec6AYZ1C6Hz5ptv2uabb25//fWXLbXUUs4y984779juu+9uX375pbPsXXnllU7gvffee85ihSBkeZF07LHHup+PPPJIJ/Cot06dOu6zNdZYwx555BFr3LixrbPOOu56rGJBGjNmTN7rKtdHe9q0aePuA4tb9+7d7eOPP7Yff/zRVlxxRfvqq69s5ZVXdgLx5JNPrliKzb2umMGkya8YarpGBEQgDgKar+KgrjqzRKAosYY1rF27dk6gzJs3zwmgUaNG2Ysvvui+s+SJhQtrG+m1116zk046yQm7LbbYwv2MFQ6LGoJs5syZTjxRHlawJZZYwgklxNkzzzxjr7/+ulvefPfdd23vvfd2S6kIIkQjQg4LWdeuXe2ss85ygumjjz5y9SISaQuCDaH2ww8/uE0FLJmuu+667lo2HnAddeemiy66aJHr8tXHPYwbN85uvfVWZ1HDwsdy6X333eesarSTpc+NNtqoon7qyb2umAGlya8YarpGBEQgDgKar+KgrjqzRKAoscbyJQJq+PDhdttttzmBhJWK5VCEFpYuhBH+YVjMsLSNHj3a7rjjDltuueUcP5YfWRbks06dOjmLGP5t7M5kqRShhjVswYIFzq8NUcfvgdWM5cgJEya45dQbb7zR+c0F/me5HYTP2FVXXWWXX365s/Jhsfvkk09c3m7dutkvv/ziLIDsFGUH6Pjx412+fNfh81a5vs6dOztfNIQoIpTlXJaAEZBYGY8++mgnHh977DHHKUi51+20004FjylNfgUj0wUiIAIxEdB8FRN4VZsZAkWJNfyvsDLhgI+vFuIM6xpCB38vljJZWkS8Lbnkks5PiyVTlgQRLCxjIq7Iu+eee7r8WMbuvfdeGzt2rBNsiCr+wc8//3wntPA3u/rqq52P28SJE53IQ/D897//ta+//tptLqjsr4ZPHcuP+MKxzIlV76abbnKibOjQoe5nllnxO0NssazK0im+ZPmuQxRWrg8xyhIvy760Ef882sH933PPPU6k4RNHHf/73/8qBk7udSzxFpo0+RVKTPlFQATiIqD5Ki7yqjcrBAoWawgdxAwbC1jaCyxlARCsZVjXAgGCQ/+WW25pbdu2taeeeso58LMsSPrpp5+cnxn52YlJWVi6EIIsodarV8/lY7kSwcXn7CwlUT5ijE0FjRo1cqKwukR+ysRax4YCdrIGidAe3Fe+FFyXrz7azT0EwXbxVWOplTbDis0W+VLl66pre+XPNfkVSkz5RUAE4iKg+Sou8qo3KwQKFmtYtrbaaisnRHJPA6gKSP/+/Z3IwsqGP9uzzz7rNgUolUZAk19p/HS1CIhA+Qhoviofa9WUTQIFizUc47Fm4dfFUl51CUsYS5tsImBpE2ucUukENPmVzlAliIAIlIeA5qvycFYt2SVQsFjLLop03Zkmv3T1l1orAjWZgOarmtz7uncfBCTWfFCMoQxNfjFAV5UiIAJFEdB8VRQ2XSQCFQQSKdbwh6tVq9ZC3cQGA46j4jN2dVaXOKqKkBmrrLJKxUYFrmEDACFF2AXKxgYScdsoN0j42BG8l80S7HblKKggmG6Qhx2otCnfIfDVtc3H55r8fFBUGSIgAuUgoPmqHJRVR5YJJE6ssYGBkxAIJpubiLvGsU0EyyXY7eLS999/7zYxXHLJJS5eG6cUkAihwa5P/OYItktsOOLEkZdTBkjEc+McT2K/EYeNXZvEdiMOXBAPjTAdiDXCkBCPjcC75U6a/MpNXPWJgAgUS0DzVbHkdJ0I/H8CiRNrhNVAUDVs2HChPiIUBsc3EYyXQ9arSwgqguFymDyJuGwE3SWwLYmjpRBsHDjP7lYSoTkIZMtJDATcJY4ciZ2sfIawy00cj8WxUSNGjKiuOd4/1+TnHakKFAERiIiA5quIwKrYGkMgFrHGaQack8kpBJwcwNJkcEzUaaedZocddpizbpEIMsvyJ6KI+GxBjDZOUSAI79133523s7DAcaQUx0YRU23ttde2hx9+2O1iJRFvjXawQzVIHDvF71j2chNBbgnai7WNGHCvvPKKq5cyCE2SG6+tXCNHk1+5SKseERCBUgloviqVoK6v6QRiEWsIHoLYXnDBBe6LQ+AvvvhiJ5JYjnziiSecaOLEAMJ+cEzV8ccf76xtwZIjgokzPhFllVMQuJcgvLvssou9+uqrbrkSKxqBbzkKi0C6s2bNcj5tJHzTEIoIuNz4cZy8QLiSO++80+XjLFTOEx0yZIj7fcqUKbGMIU1+sWBXpSIgAkUQ0HxVBDRdIgI5BGIRayxlcn4mYgvRxmkECDREG0c3seT5zTff2Oqrr+7O8eToJg56R7xxXXUpCNzLBgDK5hzQnj17VhzWzqHuHIHF8VdsZGDplWOkEGC5mxf4HIsah7JXtp5xOP22225rX375pTumqtxJk1+5ias+ERCBYgloviqWnK4Tgf9PIBaxxhmfU6dOdRarcePGuaVJNgJwwsEDDzzglkTJc91117llUpY+2RQQWMaq67zBgwe7pcrAl+yhhx5y1rngIHUOikeU4XNG4kxS8uPXFiR2gh533HFOwAUbFHLrDY6r4nisykduVdc+H59r8vNBUWWIgAiUg4Dmq3JQVh1ZJhCLWGO5k52dHMTepUsX5+CPjxpLnTj+8zuWNgQRgq1du3bOgsWB7viPsWmA8zer2mjAxoAOHTo46xmJnZtHH32021DAge6tW7d2YpENC5xPypIry62BKGMZlfy0DaseR2Rtv/32bgmVz4K/YbEbPnx4LONDk18s2FWpCIhAEQQ0XxUBTZeIQA6Bsou1wJ+MA905igqB1L17d9ekQw891PmT4byPL1jHjh3dsueOO+7odnbytc8++7hD4TkcnkPicxOWNzYksOR59tlnu69gVynhPpo0aeI2KrApYIMNNnCX0g42IhCmI0j4xfXq1avid5ZjP//8c8Nid+aZZzoRSNy1fv36uUPc40ia/OKgrjpFQASKIaD5qhhqukYE/iVQdrHGsib+YTj0I6SCwLQ0Ced9fNhq167tWki4DHZcEuAWK1uw3MjP5Mu9NkynIg7xYctNxGTDYha2LMRk/fr1Q+cP065i8mjyK4aarhEBEYiDgOarOKirziwRKLtYGzZsmI0ZM8YFpFUqnoAmv+LZ6UoREIHyEtB8VV7eqi17BMoq1oinhjM//7j4obG8qFQcAU1+xXHTVSIgAuUnoPmq/MxVY7YIlFWsZQtdvHejyS9e/qpdBEQgPAHNV+FZKacI5CMgsZbScaHJL6Udp2aLQA0koPmqBna6btkrAYk1rzjLV5gmv/KxVk0iIAKlEdB8VRo/XS0CEmspHQOa/FLacWq2CNRAApqvamCn65a9EpBY84qzfIVp8isfa9UkAiJQGgHNV6Xx09UiILGW0jGgyS+lHadmi0ANJKD5qgZ2um7ZKwGJNa84y1eYJr/ysVZNIiACpRHQfFUaP10tAhJrKR0DmvxS2nFqtgjUQAKar2pgp+uWvRKQWPOKs3yFafIrH2vVJAIiUBoBzVel8dPVIiCxltIxoMkvpR2nZotADSSg+aoGdrpu2SsBiTWvOMtXmCa/8rFWTSIgAqUR0HxVGj9dLQISaykdA5r8UtpxarYI1EACmq9qYKfrlr0SkFjzirN8hWnyKx9r1SQCIlAaAc1XpfHT1SIgsZbSMaDJL6Udp2aLQA0koPmqBna6btkrAYk1rzjLV5gmv/KxVk0iIAKlEdB8VRo/XS0CEmspHQNMfkoiIAIikBYCCxYsSEtT1U4RSBwBibXEdUm4BulNNRwn5RIBERABERCBtBOQWEtpD0qspbTj1GwREAEREAERKJCAxFqBwJKSXWItKT2hdoiACIiACIhAtAQk1qLlG1npEmuRoVXBIiACIiACIpAoAhJrieqO8I2RWAvPSjlFQAREQAREIM0EJNYi6L358+dbrVq1Iij53yIl1iLFq8JFQAREQAREwAuBwYMH2/HHH2/LL7980eVJrBWNLv+Ff//9t62wwgo2bdo0W2uttTyXLrEWGVAVLAIiIAIiIAIREKhTp479888/dsYZZ9i5555blGiTWPPQMW+99ZaNGDHCLrjgAlfa7NmzrWHDhh5KrroIWdYixavCRUAEREAERMALgaFDh1qvXr2MVTee3d27dy9YtEmsldgVjz/+uO2///7WunVr1xk33HCDK/Gqq66ys88+2/744w/r0qWLnXjiiXb11VfbN998Y+eff7498sgjtu2227q8w4YNcwJv0qRJ9uSTT4ZqkcRaKEzKJAIiIAIiIAKxE1hxxRXtxx9/dO1YaqmlChZtEmsldiFKuUGDBvb222/bmmuu6YRZs2bNnLnzlFNOsTlz5thWW21lr7/+ulPV7du3t0GDBlnfvn2tbdu2TuAtvfTStm+VCTgAAAI/SURBVNdee1mHDh3siy++CNWili1b2osvvhgqrzKJgAiIgAiIgAgki8CSSy5p7dq1s4ceeqjahkmsVYto8Rneeecda9OmTYXIWmONNSqsZptuuqnx+8iRI61JkyZ28MEHO6FWt25d++677+yTTz6xVq1a2bXXXmt33XWXnXfeebbzzjuX2CJdLgIiIAIiIAIikCQCjRo1sh9++EGWtbg65eabb7Zx48bZrbfeajNmzLB1113X/vrrL2fuXHnllZ1FDf+1ddZZx7799lv74IMP3K6Q6dOnuzXrUaNG2YABAwxLWe3ateO6DdUrAiIgAiIgAiIQAQF81s455xy3yUA+axEADlNk586dbfvtt7fmzZvb559/bvfff79169bN5s6da/369bMpU6bYvffe6/7OJgQsazNnzrQ999zTCbUllljCrrjiCqe4P/30U9t6663DVKs8IiACIiACIiACKSCg3aAJ6CTE1XrrreeWMW+77TZDQd9000328MMPW+PGjZ1P2sknn2ybbLKJ+96jRw+3kYD8s2bNsgMOOMAOOuggZ3k79dRTnf+akgiIgAiIgAiIQDYIKM5aAvoRCxo+aMHuzN9//92WXXbZKlvG5zgVYlEj/fbbb+5ndocoiYAIiIAIiIAIiEBlAtpgoDEhAiIgAiIgAiIgAgkmILGW4M5R00RABERABERABERAYk1jQAREQAREQAREQAQSTEBiLcGdo6aJgAiIgAiIgAiIgMSaxoAIiIAIiIAIiIAIJJjA/wORmGKkzQhosAAAAABJRU5ErkJggg=="
}
},
"cell_type": "markdown",
"id": "painful-jersey",
"metadata": {},
"source": [
"In some cases, the checkpoint file being written by an application may be large. In this scenario, we don't want to end up with a **corrupted** or **incomplete** checkpoint file as that will only crash the application when it tries to use it again upon restarting.\n",
"\n",
"![checkpointing_content%20%282%29.png](attachment:checkpointing_content%20%282%29.png)\n",
"\n",
"The snippet below illustrates what happens when an application is killed in the middle of writing a 1 GB checkpoint file, then tries to read it in again."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "selected-mexico",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sizeof(s): 1024 MB\n"
]
}
],
"source": [
"s = \"x\"*(1<<30)\n",
"print(\"sizeof(s): {} MB\".format(sys.getsizeof(s) // (1<<20)))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "brown-aluminum",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"writing large file took: 5.965020418167114 seconds\n"
]
}
],
"source": [
"start = time.time()\n",
"with open(\"big_file\", \"w\") as f:\n",
" f.write(s)\n",
"end = time.time()\n",
"print(\"writing large file took: {} seconds\".format(end - start))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "special-courtesy",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 scitech scitech-group 1.0G Mar 5 14:32 big_file\r\n"
]
}
],
"source": [
"# verify size\n",
"!ls -alh big_file && rm -f big_file"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "rising-principal",
"metadata": {},
"outputs": [],
"source": [
"def write_big_file():\n",
" with open(\"big_file\", \"wb\") as f:\n",
" pickle.dump(\"x\"*(1<<30), f)\n",
"\n",
"p = Process(target=write_big_file)\n",
"p.start()\n",
"time.sleep(3)\n",
"\n",
"# kill process mid write\n",
"os.kill(p.pid, signal.SIGKILL)\n",
"p.join()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "mental-newsletter",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 scitech scitech-group 403M Mar 5 14:32 big_file\r\n"
]
}
],
"source": [
"# verify size of large file < 1 GB\n",
"!ls -alh big_file"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "advised-vitamin",
"metadata": {},
"outputs": [
{
"ename": "UnpicklingError",
"evalue": "pickle data was truncated",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mUnpicklingError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-16-01afd87c05d5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# this won't work, as we expect\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"big_file\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"rb\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mUnpicklingError\u001b[0m: pickle data was truncated"
]
}
],
"source": [
"# this won't work, as we expect\n",
"with open(\"big_file\", \"rb\") as f:\n",
" pickle.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "dedicated-nurse",
"metadata": {},
"outputs": [],
"source": [
"!rm -f big_file"
]
},
{
"cell_type": "markdown",
"id": "responsible-burner",
"metadata": {},
"source": [
"Once we open a file in write mode, it is created (as shown by the open system call and the mask `O_CREAT` https://linux.die.net/man/3/open) and thus immediately visible on the filesystem."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "emerging-hartford",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loaded plugins: fastestmirror, ovl, priorities\n",
"Determining fastest mirrors\n",
"epel/x86_64/metalink | 14 kB 00:00 \n",
" * base: ftp.osuosl.org\n",
" * epel: mirrors.kernel.org\n",
" * extras: mirror.cs.uwp.edu\n",
" * updates: mirror.cs.pitt.edu\n",
"base | 3.6 kB 00:00 \n",
"docker-ce-stable | 3.5 kB 00:00 \n",
"epel | 4.7 kB 00:00 \n",
"extras | 2.9 kB 00:00 \n",
"htcondor-stable | 2.9 kB 00:00 \n",
"http://mirror.cs.pitt.edu/centos/7.9.2009/updates/x86_64/repodata/repomd.xml: [Errno 14] curl#52 - \"Empty reply from server\"\n",
"Trying other mirror.\n",
"updates | 2.9 kB 00:00 \n",
"(1/6): docker-ce-stable/7/x86_64/primary_db | 57 kB 00:00 \n",
"(2/6): epel/x86_64/group_gz | 95 kB 00:00 \n",
"(3/6): epel/x86_64/updateinfo | 1.0 MB 00:00 \n",
"(4/6): extras/7/x86_64/primary_db | 225 kB 00:00 \n",
"(5/6): epel/x86_64/primary_db | 6.9 MB 00:00 \n",
"(6/6): updates/7/x86_64/primary_db | 5.7 MB 00:01 \n",
"6 packages excluded due to repository priority protections\n",
"Resolving Dependencies\n",
"--> Running transaction check\n",
"---> Package strace.x86_64 0:4.24-6.el7 will be installed\n",
"--> Finished Dependency Resolution\n",
"\n",
"Dependencies Resolved\n",
"\n",
"================================================================================\n",
" Package Arch Version Repository Size\n",
"================================================================================\n",
"Installing:\n",
" strace x86_64 4.24-6.el7 base 902 k\n",
"\n",
"Transaction Summary\n",
"================================================================================\n",
"Install 1 Package\n",
"\n",
"Total download size: 902 k\n",
"Installed size: 1.6 M\n",
"Downloading packages:\n",
"strace-4.24-6.el7.x86_64.rpm | 902 kB 00:00 \n",
"Running transaction check\n",
"Running transaction test\n",
"Transaction test succeeded\n",
"Running transaction\n",
" Installing : strace-4.24-6.el7.x86_64 1/1 \n",
" Verifying : strace-4.24-6.el7.x86_64 1/1 \n",
"\n",
"Installed:\n",
" strace.x86_64 0:4.24-6.el7 \n",
"\n",
"Complete!\n"
]
}
],
"source": [
"!sudo yum install strace -y"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "clinical-james",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 scitech scitech-group 0 Mar 5 14:32 test.file\r\n"
]
}
],
"source": [
"!strace -Tfe trace=open -o tmp python3 -c 'open(\"test.file\", \"wb\")'; ls -alh test.file"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "technical-breath",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"71508 open(\"test.file\", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = 3 <0.000697>\r\n"
]
}
],
"source": [
"! cat tmp | grep \"test.file\"; rm tmp test.file"
]
},
{
"cell_type": "markdown",
"id": "visible-greenhouse",
"metadata": {},
"source": [
"### Solution: write to \"temp\" file, then rename once complete\n",
"\n",
"This scenario can be handled by writing to a \"temp\" file, then renaming/overwriting the old one once the write is complete. If the application is killed in the middle of writing a checkpoint file, the \"previous\" one would be saved. This is illustrated below."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "unlikely-windows",
"metadata": {},
"outputs": [],
"source": [
"with open(\"count.checkpoint\", \"w\") as f:\n",
" f.write(\"4\")"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "liberal-transition",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n"
]
}
],
"source": [
"# number to count to\n",
"N = 10\n",
"\n",
"# read from checkpoint file\n",
"with open(\"count.checkpoint\", \"r\") as f:\n",
" current_count = int(f.read().strip())\n",
"\n",
"for i in range(current_count, N+1):\n",
" print(i)\n",
" \n",
" # write to temp file, then rename once write finishes\n",
" with open(\"count.checkpoint.temp\", \"w\") as f:\n",
" f.write(str(i))\n",
" \n",
" # write finished, rename\n",
" os.replace(\"count.checkpoint.temp\", \"count.checkpoint\")\n",
" \n",
" time.sleep(1)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "blessed-virgin",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 scitech scitech-group 2 Mar 5 14:33 count.checkpoint\r\n"
]
}
],
"source": [
"!ls -alh | grep count.checkpoint*"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "chinese-comment",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10"
]
}
],
"source": [
"!cat count.checkpoint; rm -f count.checkpoint count.checkpoint.temp"
]
},
{
"attachments": {
"checkpointing_content%20%285%29.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAACXCAYAAABA6c8MAAAFSnRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDVUMTglM0EyNCUzQTMwLjkwNlolMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjMlMjIlMjBldGFnJTNEJTIyRjlVUFdJVkR6RUt6T3J1WHVqbUglMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyXzdpS0VJSTJzRV9ic3NXT29zWnMlMjIlM0UxVlpMazlNd0RQNDF1ZTdrMFpUbXlMWUxIR0JncGdlV28lMkJ1NGlWa25EcmJUcHZ4NjVOcHUzcnRkNk93TWw0ejAyWkpsZmJJVUwxb1h6VWVCcXZ3TFR3bnpRajl0dkdqamhXRVNKdkRWd01rQXdTcFlHQ1FUTkxWWUMyenBiMkpCMzZJMVRZbnNiVlNjTTBXclBvaDVXUktzZWhnU2doJTJGNzIlMkZhYzlVJTJCdFVFWkd3QllqTmthJTJGMDFUbEJsM0Zmb3QlMkZJalRMM2NtQmIxY0s1RFpiUU9ZbzVjY09GRDE0MFZwd3JveFVOR3ZDZFBKY1hvemRoNW5WUzJDQ2xPb2FnOUFZSEJDcjdkMjhjTW5BOUo2Q2tHbkJBWHNPTGlGWkNKdWR5MSUyQjFqdkwlMkJjNDFwaW1CbHpVdkpJVVdYRmVkQjFydUNhdHNTS2dGaWtRcGx0TXowOWFraXpqOHNtQ1A2eHdMY0NlV2NNM1Z5UkFoZWx5blJkJTJGRmglMkJaaUR1MjFsQWp4QzZRR1dxNEtCRmx5c0QwUW8wc3ltSzdpUUFOVkxlRUdVT01FV2E3QzB0TG5DVFZZV09MWmxFRVFXeSUyRnNsWU12UGxsNTI4ZDJ5QTRJbGFKcXM2QzNJd3J5b2FzMktaZXYlMkZJU2RLM3QzRlBYNUMzeCUyRnpzNHJIOUt4dXdNNWlncDFCUmtpWnZ0ZnRCelRNa0pRVTk1TkFHcW9lYmI2MCUyRkVQTGNDZWpiWnJPMHVia2xCTGlmSFFPdE5LeDBtcHJkdGFjblFtT3BJTk9KM2t0Yk0yNGVsTklaRVQxJTJCc1VWcEhReUhrODhDSWNKd3BDaWgzNFFVelRZRTc1eGVxNXN4M25nenpEdWZKZ0xXYk51Snh4NkdyM3RlT0RKNUdIa0NSaEZwODYyU20lMkJRejRTOG5BbDVMckl3bWVrNnN3YlI4eWVBWUlKdTYlMkZwQzNGV2xIczgyb3IlMkZ2TzZOV2huT0NuODdKdk50VFJxWmJ6a3gzR3J3N21MS1ZGaXZCTVpIeTVXNjBRJTJGZ3BPJTJGZXZyN1ZpdENTMzYxSkRjb0prTVRGRHdva25FOTJnU1MzZllvVDg1THQlMkZtUnNRTWZ6SWtaZFpRckl5ZjNkNzJ1ZzVjd3Q2RmxFNEdDSkJrb3dKV2t3TUVZZTlnaDlRMjM4OTh4RGJQJTJCYm80UTglM0QlM0MlMkZkaWFncmFtJTNFJTNDJTJGbXhmaWxlJTNFbpeKhQAAIABJREFUeF7tnQu8lVP6xx9FKSWRQhch5U6IoUKqcYtKTUoxo5sQxaBGF4YalWhEuuhCUVSjSIPJZRINYdxKDFI0DEYYlET9P9818/bfHed09trn3ft9371/6/M5nzpnr3etZ/2etdfvfS5rrR22bNmyxVSEQMwR2GGHHWIuocQrKwJaisqKYP49v4MIKv+Umo8jgqB8FjDf+vmIWZRj8sXft36UY1PfuUNABJU7rNVTGRDwXcB865dBND1aDAK++PvWF+iFgYAIqjD0nPhR+i5gvvUTD1DMBuCLv2/9mA1X4mQJARFUloBVs+Ei4LuA+dYPV1q15ou/b30hXBgIiKAKQ8+JH6XvAuZbP/EAxWwAvvj71o/ZcCVOlhAQQWUJWDUbLgK+C5hv/XClVWu++PvWF8KFgYAIqjD0nPhR+i5gvvUTD1DMBuCLv2/9mA1X4mQJARFUloBVs+Ei4LuA+dYPV1q15ou/b30hXBgIiKAKQ8+JH6XvAuZbP/EAxWwAvvj71o/ZcCVOlhAQQWUJWDUbLgK+C5hv/XClVWu++PvWF8KFgYAIqjD0nPhR+i5gvvW3B9DmzZtt7dq19umnn1qTJk0ywnLjxo22atUq23HHHe3AAw/MqI3gIeQpV65cxm18++239vLLL1utWrXs4IMPth9//NFWr15t69evtyOOOCLjdlMf9MXft34oQqqR2CMggoq9iiQgCPguYL71t4fy119/bX379rXKlSvbxIkTM1LIu+++a6eeeqrdeeed1rZt24za4CGef+utt+yuu+7KqI2VK1faNddcY1dffbX16NHD+P3zzz+38847z8nFZ2EUX/x964cho9qIPwIiqPjrSBJGTFAooFOnTu6nY8eOGekDC2rnnXe2L7/80nbbbbeM2uChH374wTZt2mS77LJLiW288cYbNn/+fBs6dOjP6rRo0cJGjRr1M0uwUaNGdv/999uxxx6bsWyyoEKBTo2kICCC0nRIBAK+b9i+9VNBGDdunOEGe+mll2zEiBFWv35923333e2ZZ55xlgfk8Oijj7pHcNth1eAC7N27t7Vq1crWrFljY8eOtWrVqjnLb8iQIfbcc8/ZwIEDbfz48XbJJZdYly5dnEtt9OjRNmDAAHvggQfsqKOOskmTJrl2qf/QQw8ZxEb/WDb33XefXX/99a4uRDd48GD39yVLlti8efPs7bfftqeeespZQq1bt7Zbb73VDj/8cNceLrxBgwbZzJkz7corr3TP8zfG9OGHH9phhx1m69atcy7I4sbkO0l88fet7yuP6icTARFUMvVWcFL7LmC+9QNAb7zxRtuwYYPdfPPNdtVVV1n79u0dIV1wwQV2+umnu4X/sssus/fff98t8Keddppb5Hv27GmdO3d2v5944omONL755hujPSyTYcOGucW/atWqttdee1mHDh0cAR533HG2ePFiO+CAA6xOnTr28ccfu7ZxvxEnwuqqUKGC4WbEFdegQQNnRXGye8WKFR25XXzxxbb//vvbJ598YjVr1nQW2vLly61evXrbzJMJEybY0qVLbfr06TZlyhR78sknbdasWTZjxgxbsGCBzZ49u9gxXXjhhd7zzRd/3/reAumBRCIggkqk2gpPaN8FzLd+YGXst99+zhLB5RWUMWPGOLKCILBeXnvtNZs8ebK1adPG9t13X0dgkBGWFLGq7777zpFAamnWrJnttNNOdtFFF1mw4N9+++2OnLCU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"
}
},
"cell_type": "markdown",
"id": "typical-intranet",
"metadata": {},
"source": [
"### Scenario: we want Pegasus to \"periodically\" save a checkpoint file that is being updated while the job is running\n",
"\n",
"Pegasus cannot periodically \"save\" (grab produced checkpoint file and send it back to the staging site where it can persist) checkpoint files throughout the lifespan of a a job. In other words, Pegasus can only save checkpoint files once the application fails or is killed by Pegasus. If a compute node suffers from a catastrophic failure (e.g. power outage), there is no way to send back any checkpoint files that may have been created. \n",
"\n",
"![checkpointing_content%20%285%29.png](attachment:checkpointing_content%20%285%29.png)"
]
},
{
"cell_type": "markdown",
"id": "affected-optics",
"metadata": {},
"source": [
"### Solution: intentionally kill the job after some period of time and restart it until it runs to completion\n",
"\n",
"#### Brief Introduction to Signals\n",
"\n",
"Unix operating systems provide you with the means to communicate with processes via signals. There are different types of signals, but the basic idea behind this is that each process can have signal handlers, and when that process receives a signal, it is interrupted and performs whatever code is in the designated handler (be careful! you can still be interrupted, with another signal while handling a current one..). There are two signals we will need to be aware of here.\n",
"- **SIGTERM**: \"politely\" interrupts program; can be handled, blocked, or ignored\n",
"- **SIGKILL**: causes immediate program termination\n",
"\n",
"*source*: https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html\n",
"\n",
"*source*: https://www.gnu.org/software/libc/manual/html_node/Signals-in-Handler.html#Signals-in-Handler \n",
"\n",
"For more information, see [this chapter on Event-based Concurrency](https://pages.cs.wisc.edu/~remzi/OSTEP/threads-events.pdf) in the OSTEP book. \n",
"\n",
"Lets see how our count program can be modified to handle a **SIGTERM** signal. "
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "special-paraguay",
"metadata": {},
"outputs": [],
"source": [
"with open(\"count.checkpoint\", \"w\") as f:\n",
" f.write(\"4\")"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "constitutional-swift",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"5\n",
"got SIGTERM\n",
"6\n",
"7\n"
]
}
],
"source": [
"def sample_job():\n",
" # number to count to\n",
" N = 10\n",
"\n",
" # read from checkpoint file\n",
" with open(\"count.checkpoint\", \"r\") as f:\n",
" current_count = int(f.read().strip())\n",
"\n",
" # define signal handler \n",
" def SIGTERM_handler(signum, frame):\n",
" print(\"got SIGTERM\")\n",
" os.replace(\"count.checkpoint.temp\", \"count.checkpoint\")\n",
"\n",
" # \n",
" signal.signal(signal.SIGTERM, SIGTERM_handler)\n",
"\n",
" for i in range(current_count, N+1):\n",
" print(i)\n",
"\n",
" # write to temp file, then rename once write finishes\n",
" with open(\"count.checkpoint.temp\", \"w\") as f:\n",
" f.write(str(i))\n",
"\n",
" time.sleep(1)\n",
"\n",
"p = Process(target=sample_job)\n",
"p.start()\n",
"time.sleep(2)\n",
"os.kill(p.pid, signal.SIGTERM)\n",
"time.sleep(2)\n",
"os.kill(p.pid, signal.SIGKILL)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "blond-hollow",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 scitech scitech-group 1 Mar 5 14:33 count.checkpoint\r\n",
"-rw-r--r-- 1 scitech scitech-group 1 Mar 5 14:33 count.checkpoint.temp\r\n"
]
}
],
"source": [
"!ls -alh count.checkpoint count.checkpoint.temp"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "collaborative-supply",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5"
]
}
],
"source": [
"!cat count.checkpoint"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "understood-muslim",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7"
]
}
],
"source": [
"!cat count.checkpoint.temp"
]
},
{
"attachments": {
"checkpointing_content%20%283%29.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmsAAAIyCAYAAACUzY3bAAALXHRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDVUMDYlM0ExOCUzQTE0LjMyM1olMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjMlMjIlMjBldGFnJTNEJTIyZmgtRXYxN0ozNkZSTlRYQUd1bU4lMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIydTNvZ3BmU3YteEZycjhkS2ZzaHQlMjIlM0U3VnhiYjZNNEZQNDFrV1llR21ITTliSHR0TE9qYlZlajZVbzc4N1J5d1UxUUNiQkFtbVIlMkYlMkZkcUF1ZGhPUXFoSjAyN3lVTUhCTjg1M3p1ZmpZOU1KdkY2c3Y2WW9tZCUyRkhQZzRudXVhdkolMkZETFJOZHQyeVYlMkZxV0JUQ29BRDdWSXlTd08lMkZraldDaCUyQkJmWEFtMVNyb01mSngxQ3VaeEhPWkIwaFY2Y1JSaEwlMkIlMkZJVUpyR3EyNnhwempzOXBxZ0dSWUVEeDRLUmVsZmdaJTJGUFM2bGphbzM4Tnh6TTVxeG5vRlZQRm9nVnJnVFpIUG54cWlXQ054TjRuY1p4WGw0dDF0YzRwTXBqZWlucjNXNTVXZzhzeFZIZXA0SmVWbmhCNGJKNnQycGMlMkJZYTlMSTc4UzZvemN1ZUZLTXNDYndLdjV2a2lKQUpBTHNzSzJCZFUxb3dCMUc5R1RBTEhDNXluRzFKazFlaU9xVzdlVWh1VHBUaEVlZkRTYlI1VkVNN3E1dW9ldnNjQjZWalhLblBUbWZLWnRkbE13TnJJNG1YcTRhcGFXMWxjUyUyRmJlbG5LVXpuQXV0RVF1V2klMkZlaUFvdzVNQkFBWmc4V0dBQm5CeXY4eTRjV1o3R3olMkZnNkR1T1VTS0k0SWlXdm5vSXc1RVFvREdZUnhaU2doSW44NmdXbmVVQnMlMkZMSjZzQWg4bjNaenRab0hPWDVJa0VmN1hCR1BKckkwWGtZJTJCcG1QVmFQTnhsTiUyQmlSUkJTeGR3dHZjQkhaSmpYY1pURlJRdjAlMkJVTTFhR1p4cERlOFB0UmlXQVdMQThKeUswSExwQXlKU2VuYWR1dnBnTFVER1dPJTJGeTNTMUk5TmZDN0I5eWxPZ0w4RUZMRjNVRjRRU2hWa0tGR2ElMkJRNFVabk1KTVRWUllyUnpWQ3JNT0l1WEtudzlRRUY0SCUyQmMlMkJxTEwzJTJCUmZVJTJCTmF1N0wlMkJzS2h1Sm1VOTFzWWZtU09qdVVkVExFYjVpODFjT0J4QyUyRjRqJTJCNk1SdnkyQUg2Q1p5aGJaaGZQZ2ZlY2tZNUlEMVpJV2Y4eEpWY3plcFhRMnBla0d0QnNoc1AlMkZmcFp3ZWZnTjBZY0JHR21XY0FRWU44VFklMkZrWkpNazAyZXdBMHpnQjJ3YWxaV0RKdE9TTUI2QjVFd3RMSWVDOFBSMlJNUHhuYjBwc1dFOVBiaG9xTHV6MWNYSEpRSlhKUGpJeHJUR3B2WkVNOG1JeUZ1YmtuR1JPczBLWlZMS0VGc2dPR2JMcmE3cEVKRmN4T0JYSlJqbUhvM01EOG9XV1VUM0g2JTJGQ0hvZ3RiT2lZWEZ0SmNMd3h3cDhwVlJ5RmdyQlFEMmM4aEJrYThDaFVEQlJpV1JyV3hTVkJIWUFsbTZvWndLQXpZVE1nRzFEbEwwQ1ZYaHBmWFBraVpGcmdSRHFwJTJCd0ZydzU5cDRMNTU0U0M2Y0YwSUlxTW5yTWtsWUhaTEJsSDkxJTJCaWJnMWxqZEdTd3c4WFNpZ0phVnRKWENKU1lnMzE0Z0J6RGUwWDluYXYyT3VqV2FZVmRJSEYxbVJ3aXppT3lOWml5YTdTb25ldGhybWgyTjNWMVBrSGc3bkh2V1NyMlVNOWxqczNpT3ZJUzdUZlpUTkN4MkNMb1JVJTJGaDNsQkphb2tPZ2FySUZsT1diOUhXUmJYWGZxdG42T3l3RUVqVzZMZmFNJTJCeSUyQmFoNWx0U3R3UUhZZ0ttbkVpMGJKUGxlUEh4UEZLUlB3SiUyQnVqTEFFZjFSa2psSll3OW5HYzdPaVBWR0RCNFJNVEZKc290QnBXdHNsc3ZVcGpwTFlQNmF0UEtYUTVPWjROU0lGYks4WG8yVXkwSFFsMHJGbHBqZVI2RFNIbW1Vb3dmVmZaTDdZNFdRekclMkZPSWVScGhKRFE1dFlUeHd3aGRWbUNRSVV4cEJqNVoxczRtQmlFeWZDWXR2QVd1WkVwaVdhVDk1UVFFZEpYMEpKdzkxZzcyWkpUR2JzQ0ZrVkx2bnFiQUV6YTJ3U1QxMjhTNkNjVzR3Zzd0b09QNmhqQ0NaSHhqdXIwT1JHeU40eXR0NEthM1I5VktKJTJGY1ZwQmhURTI3bFNUZ3dsRm93bUdnQ3cwN0hKMERPSm9OeUpKQlI4aHN2eHZpTmt3dXpwSVN0MnduUmdseEgzYWtadlNWNXNuNG9nSGNxUTIwNW1kMFVUSUhFN0JPOUxTajRSSFhuTnVQMEZETnAzSGhPa1h3M1BLbjhuU2xWaFRYMk9MdkkwWEpxbUprZnYlMkZGbHB5cWthNmVsUVRKaDJXTXhLTnhqUk5ybHQzeVlqQUZ1OCUyQiUyRjBadnZPQ1ZXVW9EWU40M0ViUEZrSEw0JTJCNVZsN09NJTJCdnZUMThiN0NtNkJ5R3djZjh0Z1U1bzNuZHNRckpXWjh0aExGQTZ4VUt3dzVaNkdleTJFb1dMcGxkckM1NGp1UUF4bWg4d1l4OU1GJTJCYyUyQnZ3TmdTRnEyQmpvMGVheFBOcmNNV3BWVGcxN0hMNDU4Ylg2eVZqWmZzTVliR0wxZ1pZUlBxSFI5MXZBWVI4ZXRQaDZva01mWWVlSkxoSmlVaVBJNlJ0Wm1zRDFwS0RsT2ZqeFNRMmxtc0tCTnRtWENackVGbFNzbyUyQkNiSk1CTzNqMlVmV0VtdEtUem0zd0szVU5NVzMyU0xJaDBvbjd0VXpmd3VSRFhUcDlKZCUyRnBud1JqZVl5VDBlaWNGQWw5YXB1Q2swREMzVyUyQlNybkhUUXdhUjNGUFFBJTJGc3NPUjVtJTJGamJhRzRmUFJiTWpLd3AwZUdhNXNqaEo2NlMzVGNIT1ZJdThaNSUyRnRudmNhVkpIUGdiZkVUNThCUnRtcjVkYURoU0E3RFNzd084QjhJRFBJcU1hdEV6ZG44RUpRM3p1SnYyM2Nh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oOmqTmItXaTVjgiIgAiIgAhkloDEWmb5J9y6xFrC6HSjCIiACIiACASKgMRaoMz1/52VWAuo4dRtERABERABEcgjAYm1PALzy+USa36xhPohAiIgAiIgAqklILGWWr4pq11iLWVoVbEIiIAIiIAI+IqAxJqvzBF/ZyTW4melK0UgiATCsvpQ4wji06c++42AxJrfLBJnfyTW4gSly0QgoAS0P5m/DBcWe/iLqnoTLwGJtXhJ+ew6iTWfGUTdEYEkE5BHKslA81ldWOyRTwy6PUMEJNYyBD6/zUqs5Zeg7hcBERABERCBYBCQWAuGnf7VS4m1gBpO3RYBERABERCBPBKQWMsjML9cLrHmF0uoHyIgAiIgAiKQWgISayng+88//7gCBQqkoOb/r1JiLaV4VbkIiIAIiIAIJIVAnz59XJs2bVzhwoUTrk9iLWF02d/4999/u+LFi7tly5a58uXLJ7l2ibWUAVXFIiACIiACIpACAgceeKDbuXOn69Spk7v//vsTEm0Sa0kwzKeffuomTJjgevToYbX9/PPPrlixYkmoOecq5FlLKV5VLgIZJxCW1YcaR8YfJXUgwwT69+/vunbt6oi6MXd36NAhz6JNYi2fRpw4caK78sorXe3atc0YgwcPthqfffZZ16VLF/fHH3+4m2++2d1+++1u4MCBbsOGDa579+5u/PjxrmrVqnbtgAEDTOAtWLDAvfPOO3H1SGItLky6SAQCSyAs+3ppHIF9BNXxJBI47LDD3P/+9z+rcb/99suzaJNYy6cxUMqHHnqo++yzz9xRRx1lwuy0004zd+ddd93ltmzZ4ipXruwWLVpkqrphw4bu6aefdo888oirW7euCbz999/fXXbZZa5x48buu+++i6vtRI+DAAAgAElEQVRHF154oeMbq4oIiIAIiIAIiEDwCBQqVMg1aNDAjR07NtfOS6zlimjvF3zxxRfu0ksv3S2yypUrt9trduqppzr+P2XKFFe6dGl3zTXXmFA7+OCD3caNG92qVavcJZdc4p5//nk3cuRI161bN1erVq189ki3i4AIhIEAuS07duxwhFCCXJ555hm3dOlSN2LEiCAPw02fPt317NnTvffee4EehzqfGQIlSpRwmzdvlmctM/idGzp0qJszZ44bPny4W716tatQoYL766+/zN1ZqlQp86iRv3bMMce4n376yS1f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IAIBISCxFhBDqZsiIAIiEHUCH3zwgevUqZNbsGBB1FFo/BEjILEWMYNruCIgAiIQVAI9e/Z0W7ZscU8//XRQh6B+i0BCBCTWEsKmm0RABFJB4O+//3ZLlixxf/zxh6tZs6Y18cMPP9ixQuecc04qmkxLnb/++qtbuXKlO/TQQ125cuX2OqZ//vnHFShQIC39ytoI/L/44gtXqlQp+xNbfv/9d7ds2TJ38sknO7bOyES59NJL7eSC+vXrZ6J5tSkCGSMgsZYx9GpYBEQglsAvv/zibrjhBnfddde50aNHux49erhTTjnFdenSxX3zzTfu3XffDSywTz/91NWqVctNnz7dnX766TmOCbHE3mGIovLly6d1vDt27LDE/R9//NHNmzfP4cW66667rA+TJ092w4YNc9dee60bMGCAe/vtt91hhx2W1v7R2AEHHGAnFxQtWjTtbatBEcgkAYm1TNJX2yIgArsJPProo+7ggw92HTt23IPKnXfe6Y477jjXoUOHwNJav369O+KII9xff/3l9t13Xxc7JoTchAkTTJxSfv7554wkzyPQEJIk8I8bN87dcccdJowWL17sWIH59ddfm2ewXbt2rmrVqias01nef/99d++995qQVBGBqBGQWIuaxTXeQBEgN6d3797miXnttdfcmWee6V588UUbw6pVq9zAgQPdunXrXJs2bdwll1zi5s+f71544QXzQBC2uu2221y1atVs9VyvXr0stPX666/bHlVMwJyx+NNPP7n33nvPvfHGG27ixIn2M0J2iIrq1as7kroRUS1btnRFihRxixYtch9++OFujtu2bTOBtXz5cnfRRRe5MWPGuM6dO7smTZpYv/n5ZZdd5gYNGmT1sqnp+PHjLdR59NFHu3vuucfu79evn7vppptMqPznP/+xvuBdImzIvytVquQIJyLq8MKVLVvW3XfffdaPq666yhEiu/XWW3f3i37SjwYNGlhbjBnhAc8333zTxIe3sjArG7xGXbt2dRdeeKE7++yz3TXXXGNtPf/887Zz/j777GNeKMaEtwzmjOnPP/800VW4cGFjWqNGDffwww8bE9rkGoo3pu+++862oKhdu7a1N3jwYPs9tu7WrZsbO3asjb1FixZm34YNG7pmzZq5u+++2wQfBU8XAo+k+3feeWeP55tngDayloIFC7oKFSrk+FmAMQKT8cEW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"
}
},
"cell_type": "markdown",
"id": "devoted-pressing",
"metadata": {},
"source": [
"#### What does this look like in Pegasus\n",
"\n",
"In the context of Pegasus jobs, the way that we can handle the above scenario is summarized as follows:\n",
"```\n",
"1.for i in NUM_RETRIES:\n",
"2. let p = executable assigned to job\n",
"3. p.start() asynchronously; break out if p is already done based on checkpoint file\n",
"4. wait some period of time\n",
"5. send_SIGTERM(p)\n",
"6. wait some period of time <--- at this point p should prep the checkpoint file (rename, compress, etc.)\n",
"7. send_SIGKILL(p)\n",
"```\n",
"\n",
"In our workflow script, we will need to specify two profiles that correspond to steps 4-7 above:\n",
"- `Job.add_profiles(Namespace.PEGASUS, key=\"checkpoint.time\", value=<minutes>)`\n",
"- `Job.add_profiles(Namespace.PEGASUS, key=\"maxwalltime\", value=<minutes>)`\n",
"\n",
"We will also need to set the NUM_RETRIES property. \n",
"- `Job.add_profiles(Namespace.DAGMAN, key=\"retry\", value=<NUM_RETRIES>)`\n",
"- this can also be done in the Properties object with `props[\"dagman.retry\"]=\"<N>\"` and it will be applied globally to all jobs\n",
"\n",
"![checkpointing_content%20%283%29.png](attachment:checkpointing_content%20%283%29.png)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "attached-virtue",
"metadata": {},
"outputs": [],
"source": [
"!rm -rf wf-output wf-scratch scitech *.yml pegasus.properties"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "european-folder",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"################\n",
"# pegasus-plan #\n",
"################\n",
"2021.03.05 22:33:38.504 UTC:\n",
"2021.03.05 22:33:38.510 UTC: -----------------------------------------------------------------------\n",
"2021.03.05 22:33:38.515 UTC: File for submitting this DAG to HTCondor : hello-checkpoint-tutorial-0.dag.condor.sub\n",
"2021.03.05 22:33:38.521 UTC: Log of DAGMan debugging messages : hello-checkpoint-tutorial-0.dag.dagman.out\n",
"2021.03.05 22:33:38.527 UTC: Log of HTCondor library output : hello-checkpoint-tutorial-0.dag.lib.out\n",
"2021.03.05 22:33:38.532 UTC: Log of HTCondor library error messages : hello-checkpoint-tutorial-0.dag.lib.err\n",
"2021.03.05 22:33:38.537 UTC: Log of the life of condor_dagman itself : hello-checkpoint-tutorial-0.dag.dagman.log\n",
"2021.03.05 22:33:38.543 UTC:\n",
"2021.03.05 22:33:38.549 UTC: -no_submit given, not submitting DAG to HTCondor. You can do this with:\n",
"2021.03.05 22:33:38.560 UTC: -----------------------------------------------------------------------\n",
"2021.03.05 22:33:39.357 UTC: Your database is compatible with Pegasus version: 5.1.0dev\n",
"2021.03.05 22:33:40.461 UTC: Created Pegasus database in: sqlite:////home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0001/hello-checkpoint-tutorial-0.replicas.db\n",
"2021.03.05 22:33:40.467 UTC: Your database is compatible with Pegasus version: 5.1.0dev\n",
"2021.03.05 22:33:40.511 UTC: Output replica catalog set to jdbc:sqlite:/home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0001/hello-checkpoint-tutorial-0.replicas.db\n",
"[WARNING] Submitting to condor hello-checkpoint-tutorial-0.dag.condor.sub\n",
"2021.03.05 22:33:40.926 UTC: Time taken to execute is 3.674 seconds\n",
"\n",
"Your workflow has been started and is running in the base directory:\n",
"\n",
"/home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0001\n",
"\n",
"*** To monitor the workflow you can run ***\n",
"\n",
"pegasus-status -l /home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0001\n",
"\n",
"\n",
"*** To remove your workflow run ***\n",
"\n",
"pegasus-remove /home/scitech/shared-data/checkpointing-example/scitech/pegasus/hello-checkpoint-tutorial/run0001\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1;32m####\u001b[0m--------------------------------] 11.1% ..Running (\u001b[1;32mCompleted: 1\u001b[0m, \u001b[1;33mQueued: 0\u001b[0m, \u001b[1;36mRunning: 2\u001b[0m, \u001b[1;31mFailed: 0\u001b[0m)\n",
"checkpoint.count -> 2021-03-05T14:34:07.113593: 0\n",
"[\u001b[1;32m############\u001b[0m------------------------] 33.3% ..Running (\u001b[1;32mCompleted: 3\u001b[0m, \u001b[1;33mQueued: 0\u001b[0m, \u001b[1;36mRunning: 1\u001b[0m, \u001b[1;31mFailed: 0\u001b[0m)\n",
"checkpoint.count -> 2021-03-05T14:36:01.922776: 59\n",
"count.out -> 2021-03-05T14:36:01.934820\n",
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n",
"11\n",
"12\n",
"13\n",
"14\n",
"15\n",
"16\n",
"17\n",
"18\n",
"19\n",
"20\n",
"21\n",
"22\n",
"23\n",
"24\n",
"25\n",
"26\n",
"27\n",
"28\n",
"29\n",
"30\n",
"31\n",
"32\n",
"33\n",
"34\n",
"35\n",
"36\n",
"37\n",
"38\n",
"39\n",
"40\n",
"41\n",
"42\n",
"43\n",
"44\n",
"45\n",
"46\n",
"47\n",
"48\n",
"49\n",
"50\n",
"51\n",
"52\n",
"53\n",
"54\n",
"55\n",
"56\n",
"57\n",
"58\n",
"59\n",
"got SIGTERM\n",
"60\n",
"61\n",
"62\n",
"63\n",
"64\n",
"65\n",
"66\n",
"67\n",
"68\n",
"69\n",
"70\n",
"71\n",
"72\n",
"73\n",
"74\n",
"75\n",
"76\n",
"77\n",
"78\n",
"79\n",
"80\n",
"81\n",
"82\n",
"83\n",
"84\n",
"85\n",
"86\n",
"87\n",
"88\n",
"89\n",
"[\u001b[1;32m############\u001b[0m------------------------] 33.3% ..Running (\u001b[1;32mCompleted: 3\u001b[0m, \u001b[1;33mQueued: 0\u001b[0m, \u001b[1;36mRunning: 1\u001b[0m, \u001b[1;31mFailed: 0\u001b[0m)\n",
"checkpoint.count -> 2021-03-05T14:37:16.487232: 120\n",
"count.out -> 2021-03-05T14:37:16.496950\n",
"59\n",
"60\n",
"61\n",
"62\n",
"63\n",
"64\n",
"65\n",
"66\n",
"67\n",
"68\n",
"69\n",
"70\n",
"71\n",
"72\n",
"73\n",
"74\n",
"75\n",
"76\n",
"77\n",
"78\n",
"79\n",
"80\n",
"81\n",
"82\n",
"83\n",
"84\n",
"85\n",
"86\n",
"87\n",
"88\n",
"89\n",
"90\n",
"91\n",
"92\n",
"93\n",
"94\n",
"95\n",
"96\n",
"97\n",
"98\n",
"99\n",
"100\n",
"101\n",
"102\n",
"103\n",
"104\n",
"105\n",
"106\n",
"107\n",
"108\n",
"109\n",
"110\n",
"111\n",
"112\n",
"113\n",
"114\n",
"115\n",
"116\n",
"117\n",
"118\n",
"got SIGTERM\n",
"119\n",
"120\n",
"[\u001b[1;32m############\u001b[0m------------------------] 33.3% ..Running (\u001b[1;32mCompleted: 3\u001b[0m, \u001b[1;33mQueued: 0\u001b[0m, \u001b[1;36mRunning: 1\u001b[0m, \u001b[1;31mFailed: 0\u001b[0m)\n",
"checkpoint.count -> 2021-03-05T14:37:29.571413: 120\n",
"count.out -> 2021-03-05T14:37:29.581958\n",
"120\n",
"[\u001b[1;32m####################################\u001b[0m] 100.0% ..Success (\u001b[1;32mCompleted: 9\u001b[0m, \u001b[1;33mQueued: 0\u001b[0m, \u001b[1;36mRunning: 0\u001b[0m, \u001b[1;31mFailed: 0\u001b[0m)\n"
]
}
],
"source": [
"# start from 0 \n",
"with open(\"count.checkpoint\", \"w\") as f:\n",
" f.write(\"0\")\n",
"\n",
"# save the following snippet to a file which we will reference in the transformation catalog\n",
"with open(\"count.py\", \"w\") as f:\n",
" f.write(\"\"\"#!/usr/bin/env python3\n",
"import os\n",
"import time\n",
"import traceback\n",
"import signal\n",
"\n",
"from pathlib import Path\n",
"\n",
"try:\n",
" # number to count to\n",
" N = 120\n",
"\n",
" # read from checkpoint file\n",
" with open(\"count.checkpoint\", \"r\") as f:\n",
" current_count = int(f.read().strip())\n",
"\n",
" # define signal handler\n",
" def SIGTERM_handler(signum, frame):\n",
" print(\"got SIGTERM\", flush=True)\n",
" os.replace(\"count.checkpoint.temp\", \"count.checkpoint\")\n",
"\n",
" # set the signal handler \n",
" signal.signal(signal.SIGTERM, SIGTERM_handler)\n",
"\n",
" for i in range(current_count, N+1):\n",
" print(i, flush=True)\n",
"\n",
" # write to temp file, then rename once write finishes\n",
" with open(\"count.checkpoint.temp\", \"w\") as f:\n",
" f.write(str(i))\n",
"\n",
" time.sleep(1)\n",
"except Exception as e:\n",
" traceback.print_exc()\n",
"finally:\n",
" if Path(\"count.checkpoint.temp\").exists():\n",
" os.replace(\"count.checkpoint.temp\", \"count.checkpoint\")\n",
"\n",
" \"\"\")\n",
" \n",
"############################ START WORKFLOW SCRIPT ################################\n",
"# add starting checkpoint file to replica catalog\n",
"rc = ReplicaCatalog()\n",
"rc.add_replica(site=\"local\", lfn=\"count.checkpoint\", pfn=Path(\".\").resolve() / \"count.checkpoint\")\n",
"rc.write()\n",
"\n",
"# add executable 'count.py' to transformation catalog\n",
"tc = TransformationCatalog()\n",
"tc.add_transformations(\n",
" Transformation(\n",
" name=\"count.py\",\n",
" site=\"local\",\n",
" pfn=Path(\".\").resolve() / \"count.py\",\n",
" is_stageable=True\n",
" )\n",
")\n",
"tc.write()\n",
"\n",
"# generate and run the workflow \n",
"wf = Workflow(\"hello-checkpoint-tutorial\")\n",
"\n",
"# create the job and specify the checkpoint file \n",
"count_job = Job(\"count.py\")\\\n",
" .add_checkpoint(File(\"count.checkpoint\"))\\\n",
" .set_stdout(\"count.out\")\\\n",
" .add_profiles(Namespace.PEGASUS, key=\"checkpoint.time\", value=1)\\\n",
" .add_profiles(Namespace.PEGASUS, key=\"maxwalltime\", value=2)\\\n",
" .add_profiles(Namespace.DAGMAN, key=\"retry\", value=5)\n",
" \n",
"wf.add_jobs(count_job)\n",
"\n",
"wf.plan(force=True, submit=True)\n",
"############################ END WORKFLOW SCRIPT ##################################\n",
"\n",
"def watch_output():\n",
" wf_scratch_dir = Path(\".\").resolve() / \"wf-scratch/LOCAL/scitech/pegasus/hello-checkpoint-tutorial/run0001\"\n",
" checkpoint_file = wf_scratch_dir / \"count.checkpoint\"\n",
" stdout_file = wf_scratch_dir / \"count.out\"\n",
" \n",
" checkpoint_file_ctime = 0\n",
" stdout_file_ctime = 0\n",
" \n",
" while True:\n",
" try:\n",
" if checkpoint_file.stat().st_ctime > checkpoint_file_ctime:\n",
" with checkpoint_file.open(\"r\") as f:\n",
" print(\"\\ncheckpoint.count -> {}: {}\".format(datetime.now().isoformat(), f.read().strip()))\n",
" \n",
" checkpoint_file_ctime = checkpoint_file.stat().st_ctime\n",
" \n",
" if stdout_file.stat().st_ctime > stdout_file_ctime:\n",
" with stdout_file.open(\"r\") as f:\n",
" print(\"count.out -> {}\".format(datetime.now().isoformat()))\n",
" print(f.read().strip())\n",
" \n",
" stdout_file_ctime = stdout_file.stat().st_ctime\n",
" \n",
" except FileNotFoundError:\n",
" pass\n",
" \n",
" time.sleep(1)\n",
"\n",
"watcher = Process(target=watch_output)\n",
"watcher.start()\n",
"\n",
"wf.wait()\n",
"os.kill(watcher.pid, signal.SIGKILL)"
]
},
{
"cell_type": "markdown",
"id": "placed-progressive",
"metadata": {},
"source": [
"### Things to Keep in Mind\n",
"- `maxwalltime` **must be greater than** `checkpoint.time`\n",
"- get an idea for how long it takes to write out your checkpoint file so that you can dial the above two parameters\n",
"- `dagman.retry` must be large enough to allow your job to complete"
]
},
{
"attachments": {
"checkpointing_content%20%286%29.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAGRCAYAAACZqVCFAAAKAnRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDVUMjIlM0ExMCUzQTQ4LjgzNVolMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjMlMjIlMjBldGFnJTNEJTIyNnQ1elIxQThQOUgxY0NUSkNkalYlMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyOGY1VUhOb0sxWjBxTmFfWkc5ZnYlMjIlM0U3VnhMYzZNNEVQNDFQc2FGRUE5elRES3Z3JTJCeFdxbkxZbWRPVUJoU2JDa1lzeUxHOXYzNGxnd0E5R0Q4Q3hFNDhsMEdOYU1uOWZkMXF0VlNad1B2bDVtdU9zc1ZmSk1MSnhMYWl6UVIlMkJtdGcyY0dZVyUyQjQ5THRwVWtjQ3JKUEklMkJqU3RZSUh1UCUyRmNDVVUzVlp4aEF1cEl5VWtvWEVtQzBPU3BqaWtrZ3psT1ZuTDNaNUlJbyUyQmFvVG5XQkk4aFNuVHBQM0ZFRjZWMDVscU4lMkZCdU81d3N4TXJDcU4wc2tPbGVDWW9FaXNtNko0T2NKdk04Sm9lWFRjbk9QRTI0OVlaZnl1eThkYiUyQnVKNVRpbGgzeGdseCUyQjhvR1JWJTJGYlpxWG5RcmZpeE9vMXR1TTlZS0UxUVVjVGlCZHd1NlRKZ0FzTWZ5QXh4cEptdm1BT3BmeGppQnlSTFRmTXU2ckJ2YkNkTXRXbVlUc2h3bmlNWXZzbnBVUVRpdjFkVWpQSkNZRFd4YmdtOSUyQnBhZGltJTJCMUNTOVpSa0ZVZTR1cXp0ckVVVGI2elR4TkYlMkJSeFRUUk43YVAzd1JyUUR3d3dNMUlDaDhSSnI0RkM4b1RJY0JjM0pNNzRuQ2NtWkpDVXA2M24zRkNlSklrSkpQRTg1cGd3bHpPUjNMemluTWVQNGJmVmlHVWNSSCUyQlp1dllncGZzeFF5TWRjTTVkbXNweXMwZ2p6dVZwY1BVbnBGN1NNRTI2WTc2c3dqaENiNWoxSkM3TFR3TjglMkZWcE1XakdPajRjMnhqQkVmUUJVSTRVOHRTamtHU3RsV04zc2tzUDZBakxQZlpXVHJtT3pYQW15ZjhmcXdsJTJCb0NqcWZicTdaaDIyQmVEd1p6TDg5ZzlVb2pEQVlEM1dCd05wREJ2S09DY3VYUFJ4Z0liMkw2byUyQnJMbjM5eXUwJTJGZHF2VnBVOEd3YTJ5clJrZVVMME9uRkxMT0p2QTdkbGVVT0Rid2ElMkY0RG5NRUN2NiUyQkJuJTJCRTVLbGJGelhNY1BoZHNJRGFDbCUyRkNvJTJGenRuVDNQJTJCbFBHdmI5bG53UElGRGg5JTJCbGZEVW9EZlRmUmlBZ1ZhSm1RYmpscEh0RjhxeWFiYmRBNkJ6QmJDMG9Rb2cwQUUweGVBJTJCOEF1T2lzSEd4SGh2R0U3Wm5INklZTXNiclVETW0wMGszclgyaE9JeUJFbEw3dG1FWWhDb1VMckJhYUhZc1ZSTkt0b2RvWmhCaGJhdGJobnZVQnd6WlNodHBkaERxZkxVUUMlMkZJM0tMWUU4bWYzNFh2ODY4cEl3emhvOXc0N2xCcHJDRWdESlgyQTJDSUNHVVlqMFVVRndKdUROYjFDVldwa2ZmdmltJTJGbzd6UzcxVyUyQkVoclZRd2FaVGFwRTFNM0ZydE5kazBUM2dZYXN1WXNxU1RRdHNIMGt5TUpVdWVzY2pYT0R3ZVJjcXBzekJlQWUwNUlaTWZ4ZVpETXZabzlXZHhFcHJ3RkJ3NlFXTjE2T2pBYjQyVzc0RHBEY0dCTTdjTjNRZlV4bmpZJTJCUGhxQTR5S2g2bUtzbkh4c05WOCUyRjlSOFRBVllTUThHc3NJcyUyRk1YTjhYdXRHSzNsWE95aldHRno1bmREalg1NWVkJTJCZ2RVUEdlcWRTRTBHdyUyQnJsRDVYNzZVVVpEU3E5SWhlaFlyR3pJWkFoNVBJSFJCa3M2VTVpVzdBR1Zod24yZDM3dkxQWjFHbmhVaFF1anQzVGVlcTVpcWFwdiUyRklhMEFzelpXSm5GZHVDNHVYN2M4R2VIRkJEMnhyUiUyRiUyRlJxVEphVEVCY0ZMcTZBSFFxWTRZeHNLTUNFanRlVXo4UXBSWE15OFhQU09wZ3dubEtZUzJwZ2NsSkJyWDIyQVF4Rk51aWNXVURXYW1NdVVMQThOQ0xiQVZUSUk3YmIlMkZVZGsyMVJZT1prcmppJTJCeFpXcFpmejdYNG8wSG5NZHN3dHpsRlJaTkxRZ2tKazB0ZnglMkJiZGkxVjVRRVVjdzBNTzdjNkxyU1VMV3ROdVdNWkJtZUJ5akJsTmoweXpGUXFPcGxoWGhDMEdIYkRPTUwyMHElMkJobU8wb0ZHc0VJMURNT3pPS01VWk5uYUQxVHlQY0ZKNUdPY2QzeHFPY3FkdzE2Z0k0RFh5JTJGelNzbWNQZWRMSjNLSzJBZ2xqZ0JQUnRpdVRNViUyRnRuc05DTHBtdFIxdGtjaWpWS255eSUyQnBMblRRNVp5aDZrS0gzR2JhNjlpTms3cVNpJTJCNXp6em9nV0lFdlpUbEJZQiUyQjlCQjNpMTdiQnI4OHQ2NjJqVCUyQk9ON29rNWlYYTJIQXpuMTlmNjRsblZGNkZXZ3hxeHZtaTQ5SFVsd3h1U3dWSHZGNXZJNEExRkJyMUNlU1hERzVMQmZkUElZTHFIMWdjWmNveWlLeGVPNVFKUTc1U095UVVSbEZwY0NOOGZWbjJkRjlyQjFQZVVkTTd5cDY0R2x5azF0ZDBlNE5Mcm1sZTRPdE12OWE3JTJCeUZqcEZjSXJWcDNaa2JyJTJGSGhrcnZiUjJ4YW96ZWRFTDlxTmkxVjI5R3U2UzVpOXd5ZGMwN1VCQnpEWmNjb2ElMkJPMUNPMFgwTmJVREE3RXNDQ0tyWDBteEREbGhmamU0ZG9PNjYwWUFBd1VzQ1NMdkhXV2ZrYllCTUY1MTdBYWk3bGpNZ1FIOWZFa0N1cjRhNFFGJTJCU2duNGlIR3MyZjAyaHJOTTJmNVFDZnY0ZiUzQyUyRmRpYWdyYW0lM0UlM0MlMkZteGZpbGUlM0WsxUrMAAAgAElEQVR4XuydCdxN1ff/1y9NmhSKJBkqU4WiSCUhkkQihCJDRRkyFZJCZlE0oTSI0jwXqSghhebZ2IxKoVT+r/fuf30fj/uwzz3n3nP2uWu/Xs8Lj73PXvu99z3nc9dZe+3/2759+3bR4hyB//u//3POZjVYCSgBJaAElIAS2JWASrHUV8X/qZBNHV6YLRGyuvDDnAHtWwkoASWgBJSAfwL6PPfHUIWsP36htdaFHxp67VgJKAEloASUQGAE9HnuD6UKWX/8QmutCz809NqxElACSkAJKIHACOjz3B9KFbL++IXWWhd+aOi1YyWgBJSAElACgRHQ57k/lCpk/fELrbUu/NDQa8dKQAkoASWgBAIjoM9zfyhVyPrjF1prXfihodeOlYASUAJKQAkERkCf5/5QqpD1xy+01rrwQ0OvHSsBJaAElIASCIyAPs/9oVQh649faK114YeGXjtWAkpACSgBJRAYAX2e+0OpQtYfv9Ba68IPDb12rASUgBJQAkogMAL6PPeHUoWsP36htdaFHxp67VgJKAEloASUQGAE9HnuD6UKWX/8QmutCz809NqxElACSkAJKIHACOjz3B9KFbL++IXWWhd+aOi1YyWgBJSAElACgRHQ57k/lCpk/fELrbUu/NDQa8dKQAkoASWgBAIjoM9zfyhVyPrjF1prXfihodeOlYASUAJKQAkERkCf5/5QqpD1xy+01rrwQ0OvHSsBJaAElIASCIyAPs/9oVQh649faK114YeGXjtWAkpACSgBJRAYAX2e+0OpQtYfv9Ba68IPDb12rASUgBJQAkogMAL6PPeHUoWsP36htdaFHxp67VgJKAEloASUQGAE9HnuD6UKWX/8QmutCz809NqxElACSkAJKIHACOjz3B9KFbL++IXWWhd+aOi1YyWgBJSAElACgRHQ57k/lCpk/fELrbUu/NDQa8dKQAkoASWgBAIjoM9zfyhVyPrjF1prXfihodeOlYASUAJKQAkERkCf5/5QqpD1xy+01rrwQ0OvHSsBJaAElIASCIyAPs/9oVQh649faK114YeGXjtWAkpACSgBJRAYAX2e+0OpQtYfv9Ba68IPDb12rASUgBJQAkogMAL6PPeHUoWsP36htdaFHxp67TgLCWzatEm++OILOfroo+Xwww9PicAPP/wgn332mZx55pnC5zfV8u+//8pee+2VanPTDjuw57TTTpP99ttPNmzYIJ9++qlUqlRJDjzwQF/X1sZKQAl4I6DPc2+8ctdWIeuPX2itdeGHhl47zkIC77zzjtSoUUNWrVolJUqU8EwA8XnzzTfLY489Jh999JHn9okGf//9txQsWFA++OADOeaYY1K6Tu/eveWwww6Tf/75x1yrW7ducv/990v79u3lzz//lH333Tel62ojJaAEUiOgz/PUuCVaqZD1xy+01rrwQ0OvHWchgRUrVkjz5s2NJzPVMnLkSPnll1/k1ltvTfUSpt3GjRuNEM2rIHYHDx4sHTp0kDJlyuxU7Y033pDRo0fLc889t9PvEdgPPvigPPPMM75s08ZKQAl4J6DPc+/McrZQIeuPX2itdeGHhl47jjkBvK4TJ06UAgUKmBCAQYMGyaRJk+Sbb76R4sWLy9ixY2XGjBkmRIBy++23G3G5ePHiHQKR+r///rssWbJERowYIccee6zUqVNHBgwYIC+88IKsXLlSrrzyShk1apQUK1ZMDjjgAJk7d65Mnz5dqlevbjyjN910k7EB8Uw76vTs2dP0ee+995rfffjhhzJs2DDjTb366qulU6dOctFFF8nLL79srt2nT58ds3XPPffILbfcIscff7xUrlxZ3nvvPbn22muladOm0qVLFznxxBONdzavMcV82nV4SiA0Avo894dehaw/fqG11oUfGnrtOMYEiBs9/fTTZf78+UJcLOEADz/8sDRp0kQOOeQQufjiiwVB2KZNG2nZsqX079/fxJied955xmO7Zs0a02bLli3G89qrVy8jFE855RQpWrSoLFu2zHhEEbeI1EaNGslvv/0mr732mhGV+fLlMyL6/PPPN3127txZhg4dKtu2bZMhQ4YYwXrCCSfIddddZ66PUEZQ//XXX7Ju3TrT9q677pL3339f7r777l1mijEsXbrUCGvsmTdvnlSoUMHE/j7//PNy0kknJR1TjKdch6YEQiegz3N/U6BC1h+/0Frrwg8NvXYcYwJXXXWV/PHHH/LAAw/sGCUikrhRxGcivnT58uXy008/Sd26dWXy5Mny0EMPycCBA43HtlSpUmbjVNmyZXdcA8HYrl07qVixojz55JOSP39+ScS78rq/SpUqRtQiKk899VQjiul37733llatWsmRRx4p48aNM4LziSeekGrVqkmDBg2MDXiCqd+iRQsjrqmPEEZs5yxr16417emXjWv0Q6jDV199ZYQ2f3/33Xd3GdMZZ5wR4xnXoSmB8Ano89zfHKiQ9ccvtNa68ENDrx3HmABCD8F66aWX7hjlokWLpHHjxsbbikBFJPL3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OSNvczYV/Xz4m20Vsv74hdba5YV/+OGHm3ychQsXDo2fix27POcu8k7YrJsT/c+erl2RX3/9Vbp16yYHHHCA3H333SlB/eKLL8yJiHfccYdceOGFKV2DRrT/+OOPTRrEVAr37z59+kjv3r3liiuuMPfzn376SS655BJjF//npaxbt06mTp1qmowZM0Y++uijrHpjp58PL6tl17oqZP3xC621ywufRPOrVq2SAgUKhMbPxY5dnnMXeSdsrlSpkjz44IMpeZlcHneQtuva/Y9mixYtzM/FF1+cEl48svvvv79s3LjRHNiRavnrr79k27ZtcuCBB+Z5iRUrVshTTz0lN9544y51ateuLaNGjdrFs1y2bFl5+OGHU84R/u2335o3H++8845UqFAh1eE5104/H/6mTIWsP36htXZ54R900EHy448/Gs+EFnsCLs+5/SijV/Pkk0823iLyH2tJjUA2rt1JkyaZ1+9LliyRESNGmOONCxYsKPPmzTOeTETkc889Z4ASLoCXlNCDzp07S926dc2X/YkTJ5ov/PDjhLkFCxZI//795c4775SrrrpKWrVqZV7l48Xs16+fzJw50+TnTpw8R/0nnnhCEMD0j6f0oYceksGDB5u6COKBAwea38+fP9+E0PB6f+7cucazWq9ePXOq3YknnmjsJHRgwIABMmPGDOnZs6dpz+8Y0+rVq4W3Fxs2bDChD8nGlNfqWbNmjbzyyisyZcoU461OJTQhtZUZjVbZ+PkIkrwK2SBpZvBaLi/8/fbbz9zg99lnnwwSc78rl+fcZfrEMyIc9CS61Gcx29buzTffLFu2bDEnwfXq1UuaNm1qhGvbtm2lQYMGRiB27dpVvvrqKyME69evb8Rgx44dpWXLlubfHOWNuNy0aZNwPTydQ4cONSLx4IMPNnsMmjVrZoQypyWSIo4MG+Q7xrPJtXntTxwrXlziTglvIATg2GOPFbyynCbF/RgRzLHMZJL57rvvzCl2eHw//PBDYXNuznLXXXfJ22+/LQ888ID5gjdnzhx55JFHzFuLZ599Vh599NGkY2rXrl2eC4h+pk2bJuPHjzfi/vzzz099sTnYMts+H0FPkQrZoIlm6HouL3w2GPzzzz/Gy6DFnoDLc24/yujVrF69ukyYMEFOO+206BnniEXZtHYRpqVKlTKeTV61JwoiDVGLkMQbumzZMuOB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"
}
},
"cell_type": "markdown",
"id": "imperial-beads",
"metadata": {},
"source": [
"### Scenario: your application produces a variable number of checkpoint files, not known at the time you generate the workflow\n",
"\n",
"![checkpointing_content%20%286%29.png](attachment:checkpointing_content%20%286%29.png)\n"
]
},
{
"attachments": {
"checkpointing_content%20%287%29.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzQAAAGSCAYAAAA1qIStAAAKiHRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBtb2RpZmllZCUzRCUyMjIwMjEtMDMtMDVUMjIlM0EyNiUzQTQ3Ljg2NlolMjIlMjBhZ2VudCUzRCUyMjUuMCUyMChNYWNpbnRvc2glM0IlMjBJbnRlbCUyME1hYyUyME9TJTIwWCUyMDEwXzE0XzYpJTIwQXBwbGVXZWJLaXQlMkY1MzcuMzYlMjAoS0hUTUwlMkMlMjBsaWtlJTIwR2Vja28pJTIwQ2hyb21lJTJGODguMC40MzI0LjE5MiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMHZlcnNpb24lM0QlMjIxNC40LjMlMjIlMjBldGFnJTNEJTIySndQMmhKbC1OUVlYdTZTTy1nN3klMjIlMjB0eXBlJTNEJTIyZ29vZ2xlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyUS10Rk9saDRyTl9hNHRVS2NOSS0lMjIlM0U3VnpkazVzMkVQOXJQSDA2RDVMNE1JOTNsNlI5YURzM3ZjNDBlY29vb0xPWnc0aUNITnY5NnlzWlpFQVNBZnZBSHhmbkpiQ0lsZGpmYjFlcmxYd1Q5TGpjJTJGSnJoZFBFSERVazhnVmE0bWFBUEV3aUJQYlA0ZjBLeUxTVyUyQlhVcm1XUlNXc2tyd0hQMUhTcUZzdG9wQ2tqY2FNa3BqRnFWTllVQ1RoQVNzSWNOWlJ0Zk5aaTgwYnZhYTRqblJCTThCam5YcFAxSElGb1YwNWxpViUyRkRjU3pSZXlaMkNWVDVaWU5pNEYlMkJRS0hkRjBUb1k4VDlKaFJ5b3FyNWVhUnhNSjYwaTdGZTU5YW51NEhscEdFOVhrQkZpOTh4JTJGR3ElMkZMWnlYR3dyUDVZazRiMndHYjhMWXB6blVUQkJEd3UyakxrQThNdmlCUkpxSnF2R0FQWmZ4amxCNkpLd2JNdWJyQ3ZiU2RNdGFtYVRzb3pFbUVYZm0lMkJweENlRjhyMjdmd3hPTmVNZlFLdm0yWjAzSk5tUkp4VkpIVGxkWlFNclg2c1pTTlBtZG1oak81b1JwbXZoRjdjTXIwUTRNTXpCSUE0WkZTNktCdzhpR05lSElXVVpmeVNPTmFjWWxDVTE0eTRlWEtJNFZFWTZqZVNJdzVTZ1JMbiUyRjRUaklXY1k3Zmx3JTJCV1VSaUtiaDdXaTRpUjV4UUhvczgxZDJrdXklMkJncUNZa1lxeVhVMDRSOXdzc29Gb2I1ZlJWRUllYkRmS1JKVG5jYXhQUG5jdENTY2J3M3NqbVVNZklGVHdWQ0JwQWFwV3dEcGFEVnpwNEdXRDlBeHU1Mm1hWjFUUGFyQWRabHZBSHNwYm9BOUdlNnZWeVREN29ER015NVFvTTVxc0dBYmpBMEc4bGc3a0ZCdWZUbkF3eEVOaEg3WExZVjExJTJCRTNhZE9lZmRoVThLd3U5bVdOeTFSdmdpZGpaQjFNWUhmZHR1aXhLR0JYJTJGTWZWNFY1dU1EdmFlQ25aSTd6Vlg3M0dnV3ZPZSUyQkk5JTJCREdJdXAlMkZ5JTJGalZYRnlsNHUxNyUyRmhxd1BJbkRiWmF3VlB3dDNZa0JHR21hbUdrNGJqbmJ2dUkwbmFiYkRnVHRHNExGVTZpR1lhUWphSXJDUXdEb0h4U0ZqYWx4WnlCTyUyQkpnJTJCeTNBcmJtcWhXTnhXc1hoMzF4R01peURVbUhRdkpoaERwRUxwJTJCY2NGWTl0V05hbGh2U1VZYzZqd3R0WXNGUTN5UTRic05CWlQlMkZLSlFlV3lvbDZHblJyRVhtcjIlMkJDJTJCY1hiek5PR0NwNnViT2RzUkpaUTBBWUslMkZFSHdCQVJpamdleVRBdUJjSVl2T2tMTHBNajk5JTJCVldOSSUyRmFIYmJQNUVhMWxJRkgwNmhwYW1aaTJ1OXZTV1BIZ0FQcExtSUlVODJ6YkJEcE1uQVZMd1lISTlnUVlMWFhhaVljZ2NURGZCU0dETDVscWROV0M0ZXJmWTB0akVIakFXWFh0SjRPem9hNEd1ejVWdEFPak1ndHB5bXolMkJJJTJCcGtMR3o0MkhvMDB2cDhURFZDZjV1ZkZ3dGZ6JTJGbEhpWXlqQU5QQ3JMU0xPTEIzZjVicjlpdDVhejA0MWhocyUyQjQzZnFhJTJGUHB6UDk4YWhnelFWOGd3TTh4ZTNsaTVuMTZXMGFEU2EzSWh6aGM3RzRJbWhFTCUyQmhCbUhKZGxKb0lYMndNb05KZGklMkJ6cnVZUlIxUTQlMkJYTXRwczYlMkJpN3EzRm1YcHVFcWJFQXZ6UlNablpWdmMwYVc3ODhIQiUyRkpBSFc1NFFnJTJGVTZ6RnBSZ09TNXlTJTJGSWRZYk1jTkcyVmlJU1IxdnFhREpyWXBxZSUyQkxMcExZN1lkeXFNRmZWd09Tb21scDlnd01ZNm16SXZyQ1lySmJIa0lVVUxQdkdaSVNRUWg0RXg0ckowRlJiT1pvcnR0ZGd5OVN5ZnJ5NUpXNmVTQmJ4QVF1ZlYxZzB0UkJvTUdscWVWMXMydDJwS250UXpERXc3TkpLdWNoV1Y2MXF0T2hkeXBWRjlvcGh5bWdHWkppcFduUTB3MXpmcnpIc2puT0VMNmZmUWpGb0t4U3JCQ2VnbUh0aEZPTkJiR3I3dFg4YTRhYm9PTW81c3V4eENzcVpLbDRublFDbnZ1ZlZlY1VGVHRmbTByRzhBZ1ppeVYzUWl5R1dDeFg0Zld0MkhKRTBUVE4xbmgyUVNDY3AxV1hYVkJycWRVSm5yTkpRbnlOTm5ZNWRPYW5UY05FdTk5d0hCTXYzR2xtTzc4T0RwNkElMkJmZzBOZm4xcFdTOTBsSnhrSnRPbWc3TmVMWDhHNCUyRm4xcmNSNFVTVkdwRldoVGxoaU5Kejh1cEhoakdTd3ZSNWtjTWNpZzE2anZKSGhqR1J3emhvWlRFZlJoaUJEUm5CNDQ4TEJxYWQxUmk3SVJVYU5DOEg3dzJvb3BGeCUyRjZybE5zSHpvVFIwTkxsTnFDcDBCNE5Mcm1qZTRXdE12VjEzVG5SWXJ2VUo0dzZvMU85TFczNmZGU2klMkJ0M2JCcVRWNzBndjFKc1dxdlhvMTNUdk1ydU9hVG1nZ3BpSG1HYzg2TzVZeVVZN1NmUkJzUk1IaE5BTm5xeVRUUGtBUHVHdzBPVUh2ZGFFU0EwRFVCcEIzbDlId2RvUDN4OWNFQmFxJTJGbGpBalFuOWNFa0F2VWlpM1FwNlQ5JTJGRE00UUozMWxTUHclMkJQdiUyQnIwdmRMbkg3JTJGRkJqck44em84NzZ4UkRiVjRvMyUyRkhKTnUxbWVPcDJZZnBrQlROUEpFUGpZZWszaGJSYWglMkZFbkV4TGNnUzBtd0p4QVJFRHJFMDdKeCUyRnNSM1BZVGRrUmh2U3FGTWpBZXp3MDNLYjZ1JTJGMlZKc0JGViUyRiUyQmdaOSUy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BU1M57RrEzWmw0S3SYAESIAESIAESCBwAq6tEyloAp9i/jTo2kT1hxprIQESIAESIAESIIHkE3BtnUhBE9M57dpEjekw0W0SIAESIAESIAESCJyAa+tECprAp5g/Dbo2Uf2hxlpIgARIgARIgARIIPkEXFsnUtDEdE67NlFjOkx0mwRIgARIgARIgAQCJ+DaOpGCJvAp5k+Drk1Uf6ixFhIgARIgARIgARJIPgHX1okUNDGd065N1JgOE90mARIgARIgARIggcAJuLZOpKAJfIr506BrE9UfaqyFBEiABEiABEiABJJPwLV1IgVNTOe0axM1psNEt0mABEiABEiABEggcAKurRMpaAKfYv406NpE9YcaayEBEiABEiABEiCB5BNwbZ1IQRPTOe3aRI3pMNFtEiABEiABEiABEgicgGvrRAqawKeYPw26NlH9ocZaSIAESIAESIAESCD5BFxbJ1LQxHROuzZRYzpMdJsESIAESIAESIAEAifg2jrRCUGzbt06+eKLL+TMM88UDLBX/vjjDylSpEi+kyy/5wKflWkadG2iRoE5fSABEiABEiABEiCBOBBwbZ2YeEED0XLXXXfJc889J0uWLNk9B3fs2CFly5aVTz/9VKpUqbLX3MzvuahMYtcmalS40w8SIAESIAESIAESiDoB19aJiRc0mHBDhgyRn376Se6555495t/GjRulTJky+c7J/J7L+8Ann3wi06ZNk379+mU0v7N9Do24NlEzAktjEiABEiABEiABEnCYgGvrxKwEDdK3unfvLoceeqiULFlS3njjDXnyySfl1FNP1akzatQogVhYsGCBTJ8+XbZv366iYv369fLll1/KWWedJbfeeqvaPvTQQ7Jq1SpBeteyZcvk7bfflhUrVkj//v1l586dcthhh0nXrl31q0GDBioaxo0bJ7/++qv07t1bZsyYIS+//LI+c/nll0v79u33mr7nnHOO3HbbbfLaa6/JN998I7169ZLhw4er3dSpU/W/Y8aMkV9++UX+/e9/y7333is1atSQvM/dd999mrqW2l6pUqWkVatW0qRJExk6dKgcc8wx6mPp0qXlrbfektNOO006dOigvOrXr6/P45nWrVvv8Vzt2rUz+rVzbaJmBIfGJEACJEACJEACJOAwAdfWiVkJGsyP888/XzZv3ixvvvmmXH/99VK0aFEVMn369JH9999fWrRoIW3btlWx8thjj8mzzz6r4uPiiy+W4447Tu68804VER999JE8+uijKnC2bdsmw4YN2/19CBcIj5tuukkaNmyoQgTtHn/88ZpGdtFFF8mFF16oX0cffbSKHNillt9++00qVaokixYtkvvvv1/FykEHHSSdO3eWWrVqaZ2oa8uWLRrB6dmzp4qNevXqpX0ub3sQZwcffLAsXrxYjjjiCGnTpo1ccMEFcumll8opp5yiQgqCp127dgJfIMwgdrCfJ/W5TH/nXJuomfKhPQmQAAmQAAmQAAm4SsC1dWJWgsbbf4IIxEknnaQio2bNmrqYb9y4sYwdO1YmTpwot99+u0ZVrrnmGqlevbrceOONGnF56aWXdN/K4YcfroIH/4WA6Nu3r4oUREkgBj7++GOpU6eO/P7771K8eHGN8CxdulTOPvtsWb16tUaIHnzwQRVBn3/+uUY+IJqQyoVy5ZVX6v9fdtllKoLQbokSJfRnlStXlhdffFEqVKggVatW1ecRXfHKnDlz0j6Xtz3406xZM+0HIjc9evSQr7/+Wn788UcpV66crF27VipWrKgiqlu3brvT3lKfy+aXzbWJmg0jPkMCJEACJEACJEACLhJwbZ2YlaBBVKVly5a6iN+6dauKhJkzZ8rcuXP1v0gvQ6QEURuUDz74QK699loVPyeccIL+P6I5iMxAtHz77bcqMFAfoin77befigkImNdff10+/PBDTSX77LPP5Nxzz9W0NYgGCCuIHURarr76arn55ptVVHz11VfaLoQUfIGogZjZsGGDHgSA9LRq1arpszgsAM+h7dQyYMCAvZ5L1x76MG/ePHn88cc1MoNIEVLTnnnmGY3OwE+kmR177LG720c7qc9l84vm2kTNhhGfIQESIAESIAESIAEXCbi2TsxK0CBVDCJjwoQJ8sQTT6iIQLQDqWcQI4iYQDxgvwoiL4jYzJ49W5566ik54IADdF4h1QspWPjZJZdcopEV7LfBqWNIS4OYQVRl165dus8Gwgf/9qIvSP167733NHXtkUce0X083n6Y1ImLPSwjR46UBx54QKNFiPwsX75cba+77jr5+eefNZKEE9Bwstm7776rdumewx6cvO117NhR98ZArEGoIXUO6XYQWYhWderUSQXWP//5T+XkldTnzjjjjIx/11ybqBkD4gMkQAIkQAIkQAIk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gARIgARIgARIIIYEXFsnBi5okEKG/SrYhA+x4V1uibmCDffYU1O0aFGdOjgqGSeJ4ZJMRGu81C78P+xSn7XMNQgo7KlJLbizBpEXa10QXAcddJDZ3uJXNjauTdRsGPEZEiABEiABEiABEnCRgGvrxMAFzahRo2TOnDl6qSVL9gRcm6jZk+KTJEACJEACJEACJOAWAdfWiYEKGtw3gw34gIx9MUjlYsmOgGsTNTtKfIoESIAESIAESIAE3CPg2joxUEHj3nTKXY9dm6i5I8maSYAESIAESIAESCBZBFxbJ1LQxHT+ujZRYzpMdJsESIAESIAESIAEAifg2jqRgibwKeZPg65NVH+osRYSIAESIAESIAESSD4B19aJFDQxndOuTdSYDhPdJgESIAESIAESIIHACbi2TqSgCXyK+dOgaxPVH2qshQRIgARIgARIgASST8C1dSIFTUzntGsTNabDRLdJgARIgARIgARIIHACrq0TKWgCn2L+NOjaRPWHGmshARIgARIgARIggeQTcG2dSEET0znt2kSN6TDRbRIgARIgARIgARIInIBr60QKmsCnmD8NujZR/aHGWkiABEiABEiABEgg+QRcWydS0MR0Trs2UWM6THSbBEiABEiABEiABAIn4No6kYIm8CnmT4OuTVR/qLEWEiABEiABEiABEkg+AdfWiRQ0MZ3Trk3UmA4T3SYBEiABEiABEiCBwAm4tk6koAl8ivnToGsT1R9qrIUESIAESIAESIAEkk/AtXUiBU1M57RrEzWmw0S3SYAESIAESIAESCBwAq6tEyloAp9i/jTo2kT1hxprIQESIAESIAESIIHkE3BtnUhBE9M5jYnKQgIkQAIkQAIkQAIkQALpCOzatcsZMBQ0MR1q15R3TIeJbpMACZAACZAACZAACeSYAAVNjgHnqnoKmlyRZb0kQAIkQAIkQAIkQAJxIkBBE6fRSvGVgiamA0e3SYAESIAESIAESIAEfCVAQeMrzuAqo6AJjjVbIgESIAESIAESIAESiC4BCprojs0+PaOgienA0W0SIAESIAESIAESIAFfCVDQ+Irzv5X98ccfUqRIkRzU/P9VUtDkFC8rJwESIAESIAESIAESyDGBoUOHylVXXSWlS5cuVEsUNIXCt/fDO3bskLJly8qnn34qVapU8bl2CpqcAWXFJEACJEACJEACJEACgRIoUaKE7Ny5U3r16iV9+/bNWthQ0PgwbJ988olMmzZN+vXrp7Vt3LhRypQp40PN+VfBCE1O8bJyEiABEiABEiABEiCBHBMYMWKE9OnTR7ObsLbt0aNHVsKGgqaQA/Xyyy9Lq1atpEmTJjogDz/8sNY4cuRIueWWW2Tbtm3SuXNnueaaa2T06NGybt06ueOOO+TFF1+Uk08+WW1HjRqlImjBggUyffp0k0cUNCZMNCIBEiABEiABEiABEogwgXLlysmPP/6oHhYvXjwrYUNBU8gBhqI8+OCDZfHixXLEEUeoeKlVq5aGzrp37y4//fST1K1bVz788ENVnxdccIHcf//9ctddd0nz5s1VBO2///7SokULadu2raxatcrkUcOGDWXu3LkmWxqRAAmQAAmQAAmQAAmQQFwIFCtWTFq2bCnPP/+8yWUKGhOm/I2WLl0qzZo12y1EKleuvDv6cvzxxwv+PWPGDKlUqZK0adNGxUypUqXk+++/l+XLl0vjxo1l7NixMnHiRLn99tulQYMGhfSIj5MACZAACZAACZAACZBAPAiUL19eNmzYwAhNmMP16KOPyrx58+Txxx+XFStWSLVq1eT333/X0FnFihU1MoP9NFWrVpX169fLsmXL9DSHJUuWaI7gzJkzZciQIYKIS9GiRcPsCtsmARIgARIgARIgARIggcAIYA/NrbfeqgcDcA9NYNj3bqhjx45Sv359Oemkk2TlypUydepUue666+SXX36Ru+++WxYuXChTpkzR7+PgAERovv32W2natKmKmf3220+GDRumyvSbb76RevXqhdgbNk0CJEACJEACJEACJEACwRDgKWfBcC6wFQiQ6tWra8rYE088IVCa48ePlxdeeEEqVKige2S6desmNWvW1P/27NlTN//Dfs2aNdK6dWu56KKLNIJz/fXX634aFhIgARIgARIgARIgARJIOgHeQxOREUYkBntivFPHtmzZIiVLlszXO/wcG50QmUH57bff9P9xqgMLCZAACZAACZAACZAACZBAZgR4KEBmvGhNAiRAAiRAAiRAAiRAAiQQIQIUNBEaDLpCAiRAAiRAAiRAAiRAAiSQGQEKmsx40ZoESIAESIAESIAESIAESCBCBChoIjQYdIUESIAESIAESIAESIAESCAzAhQ0mfGiNQmQAAmQAAmQAAmQAAmQQIQIUNBEaDDoCgmQAAmQAAmQAAmQAAmQQGYE/hfdT2xkmgYxTAAAAABJRU5ErkJggg=="
}
},
"cell_type": "markdown",
"id": "changed-peace",
"metadata": {},
"source": [
"### Solution: using checkpoint.time and maxwalltime, update your job to compress / tar all the checkpoint files into a single one\n",
"\n",
"![checkpointing_content%20%287%29.png](attachment:checkpointing_content%20%287%29.png)\n",
"\n",
"**caution**: compressing a large a mount of files takes time, and so you must give the application enough time to do this (set maxwalltime to be large enough)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "entitled-image",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment