skypilot-nightly 1.0.0.dev20250903__py3-none-any.whl → 1.0.0.dev20250904__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of skypilot-nightly might be problematic. Click here for more details.
- sky/__init__.py +2 -2
- sky/backends/cloud_vm_ray_backend.py +7 -2
- sky/client/cli/command.py +18 -1
- sky/client/sdk.py +22 -1
- sky/clouds/nebius.py +4 -2
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/chunks/{1121-ec35954c8cbea535.js → 1121-408ed10b2f9fce17.js} +1 -1
- sky/dashboard/out/_next/static/chunks/{7205-88191679e7988c57.js → 1836-37fede578e2da5f8.js} +4 -9
- sky/dashboard/out/_next/static/chunks/3015-86cabed5d4669ad0.js +1 -0
- sky/dashboard/out/_next/static/chunks/3294.c80326aec9bfed40.js +6 -0
- sky/dashboard/out/_next/static/chunks/{3785.d5b86f6ebc88e6e6.js → 3785.4872a2f3aa489880.js} +1 -1
- sky/dashboard/out/_next/static/chunks/{4783.c485f48348349f47.js → 5339.3fda4a4010ff4e06.js} +4 -9
- sky/dashboard/out/_next/static/chunks/{9946.3b7b43c217ff70ec.js → 649.b9d7f7d10c1b8c53.js} +4 -9
- sky/dashboard/out/_next/static/chunks/6856-66e696640347e77b.js +1 -0
- sky/dashboard/out/_next/static/chunks/9025.c12318fb6a1a9093.js +6 -0
- sky/dashboard/out/_next/static/chunks/9037-1c0101b86582136f.js +6 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-39c9bd4cdb7e5a57.js +16 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/{[cluster]-a0527109c2fab467.js → [cluster]-0b4b35dc1dfe046c.js} +2 -7
- sky/dashboard/out/_next/static/chunks/pages/infra/{[context]-81351f95f3bec08e.js → [context]-6563820e094f68ca.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/{infra-c320641c2bcbbea6.js → infra-aabba60d57826e0f.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs-1f70d9faa564804f.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces/{[name]-de06e613e20bc977.js → [name]-af76bb06dbb3954f.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/{workspaces-be35b22e2046564c.js → workspaces-7598c33a746cdc91.js} +1 -1
- sky/dashboard/out/_next/static/chunks/webpack-24c4fc6d30ce0193.js +1 -0
- sky/dashboard/out/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js +1 -0
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -1
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -1
- sky/dashboard/out/infra.html +1 -1
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -1
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -1
- sky/dashboard/out/volumes.html +1 -1
- sky/dashboard/out/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/data/mounting_utils.py +29 -38
- sky/global_user_state.py +17 -5
- sky/jobs/state.py +1 -1
- sky/provision/kubernetes/instance.py +10 -3
- sky/serve/serve_state.py +1 -1
- sky/server/config.py +31 -3
- sky/server/requests/executor.py +9 -3
- sky/server/requests/requests.py +9 -0
- sky/server/server.py +24 -21
- sky/server/uvicorn.py +9 -3
- sky/skylet/constants.py +1 -1
- sky/skypilot_config.py +21 -9
- sky/ssh_node_pools/server.py +5 -5
- sky/users/server.py +18 -15
- sky/utils/db/db_utils.py +58 -1
- sky/utils/db/migration_utils.py +0 -32
- {skypilot_nightly-1.0.0.dev20250903.dist-info → skypilot_nightly-1.0.0.dev20250904.dist-info}/METADATA +33 -33
- {skypilot_nightly-1.0.0.dev20250903.dist-info → skypilot_nightly-1.0.0.dev20250904.dist-info}/RECORD +63 -63
- sky/dashboard/out/_next/static/chunks/3015-8089ed1e0b7e37fd.js +0 -1
- sky/dashboard/out/_next/static/chunks/6856-049014c6d43d127b.js +0 -1
- sky/dashboard/out/_next/static/chunks/9025.a1bef12d672bb66d.js +0 -6
- sky/dashboard/out/_next/static/chunks/9037-89a84fd7fa31362d.js +0 -6
- sky/dashboard/out/_next/static/chunks/9984.7eb6cc51fb460cae.js +0 -6
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-b77360a343d48902.js +0 -16
- sky/dashboard/out/_next/static/chunks/pages/jobs-7421e63ac35f8fce.js +0 -1
- sky/dashboard/out/_next/static/chunks/webpack-60556df644cd5d71.js +0 -1
- sky/dashboard/out/_next/static/yLz6EPhW_XXmnNs1I6dmS/_buildManifest.js +0 -1
- /sky/dashboard/out/_next/static/{yLz6EPhW_XXmnNs1I6dmS → mriHUOVL_Ht-CeW-e7saa}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250903.dist-info → skypilot_nightly-1.0.0.dev20250904.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250903.dist-info → skypilot_nightly-1.0.0.dev20250904.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250903.dist-info → skypilot_nightly-1.0.0.dev20250904.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250903.dist-info → skypilot_nightly-1.0.0.dev20250904.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(){"use strict";var e,t,n,r,c,o,u,a,i,f={},d={};function s(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}},r=!0;try{f[e](n,n.exports,s),r=!1}finally{r&&delete d[e]}return n.exports}s.m=f,e=[],s.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var u=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],a=!0,i=0;i<n.length;i++)u>=c&&Object.keys(s.O).every(function(e){return s.O[e](n[i])})?n.splice(i--,1):(a=!1,c<u&&(u=c));if(a){e.splice(o--,1);var f=r();void 0!==f&&(t=f)}}return t},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},s.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);s.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},s.d(c,o),c},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce(function(t,n){return s.f[n](e,t),t},[]))},s.u=function(e){return 2350===e?"static/chunks/2350.fab69e61bac57b23.js":7325===e?"static/chunks/7325.b4bc99ce0892dcd5.js":3937===e?"static/chunks/3937.210053269f121201.js":9025===e?"static/chunks/9025.c12318fb6a1a9093.js":3294===e?"static/chunks/3294.c80326aec9bfed40.js":649===e?"static/chunks/649.b9d7f7d10c1b8c53.js":7669===e?"static/chunks/7669.1f5d9a402bf5cc42.js":4045===e?"static/chunks/4045.b30465273dc5e468.js":4725===e?"static/chunks/4725.10f7a9a5d3ea8208.js":3785===e?"static/chunks/3785.4872a2f3aa489880.js":5339===e?"static/chunks/5339.3fda4a4010ff4e06.js":"static/chunks/"+e+"-"+({616:"3d59f75e2ccf9321",1121:"408ed10b2f9fce17",1141:"943efc7aff0f0c06",1272:"1ef0bf0237faccdb",1836:"37fede578e2da5f8",3015:"86cabed5d4669ad0",3850:"ff4a9a69d978632b",4676:"9da7fdbde90b5549",5739:"d67458fcb1386c92",6130:"2be46d70a38f1e82",6135:"4b4d5e824b7f9d3c",6601:"06114c982db410b6",6856:"66e696640347e77b",6989:"01359c57e018caa4",6990:"08b2a1cae076a943",7411:"b15471acd2cba716",8969:"4a6f1a928fb6d370",9037:"1c0101b86582136f"})[e]+".js"},s.miniCssF=function(e){},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",s.l=function(e,t,n,o){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var u,a,i=document.getElementsByTagName("script"),f=0;f<i.length;f++){var d=i[f];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==c+n){u=d;break}}u||(a=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,s.nc&&u.setAttribute("nonce",s.nc),u.setAttribute("data-webpack",c+n),u.src=s.tu(e)),r[e]=[t];var b=function(t,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),a&&document.head.appendChild(u)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.tt=function(){return void 0===o&&(o={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},s.tu=function(e){return s.tt().createScriptURL(e)},s.p="/dashboard/_next/",u={2272:0},s.f.j=function(e,t){var n=s.o(u,e)?u[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var c=s.p+s.u(e),o=Error();s.l(c,function(t){if(s.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+e,e)}else u[e]=0}},s.O.j=function(e){return 0===u[e]},a=function(e,t){var n,r,c=t[0],o=t[1],a=t[2],i=0;if(c.some(function(e){return 0!==u[e]})){for(n in o)s.o(o,n)&&(s.m[n]=o[n]);if(a)var f=a(s)}for(e&&e(t);i<c.length;i++)r=c[i],s.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return s.O(f)},(i=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(a.bind(null,0)),i.push=a.bind(null,i.push.bind(i)),s.nc=void 0}();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST=function(s,c,a,e,t,f,u,n,b,o,j,i,r,k){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/pages/index-444f1804401f04ea.js"],"/_error":["static/chunks/pages/_error-c66a4e8afc46f17b.js"],"/clusters":["static/chunks/pages/clusters-469814d711d63b1b.js"],"/clusters/[cluster]":[s,c,a,f,u,"static/chunks/4676-9da7fdbde90b5549.js",o,e,t,n,j,b,i,"static/chunks/6856-66e696640347e77b.js",r,k,"static/chunks/9037-1c0101b86582136f.js","static/chunks/pages/clusters/[cluster]-0b4b35dc1dfe046c.js"],"/clusters/[cluster]/[job]":[s,c,a,f,e,t,b,"static/chunks/pages/clusters/[cluster]/[job]-39c9bd4cdb7e5a57.js"],"/config":["static/chunks/pages/config-dfb9bf07b13045f4.js"],"/infra":["static/chunks/pages/infra-aabba60d57826e0f.js"],"/infra/[context]":["static/chunks/pages/infra/[context]-6563820e094f68ca.js"],"/jobs":["static/chunks/pages/jobs-1f70d9faa564804f.js"],"/jobs/pools/[pool]":[s,c,a,u,o,e,t,n,"static/chunks/pages/jobs/pools/[pool]-07349868f7905d37.js"],"/jobs/[job]":[s,c,a,f,u,o,e,t,n,b,"static/chunks/pages/jobs/[job]-dd64309c3fe67ed2.js"],"/users":["static/chunks/pages/users-018bf31cda52e11b.js"],"/volumes":["static/chunks/pages/volumes-739726d6b823f532.js"],"/workspace/new":["static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js"],"/workspaces":["static/chunks/pages/workspaces-7598c33a746cdc91.js"],"/workspaces/[name]":[s,c,a,f,u,"static/chunks/1836-37fede578e2da5f8.js",e,t,n,j,b,i,r,k,"static/chunks/1141-943efc7aff0f0c06.js","static/chunks/pages/workspaces/[name]-af76bb06dbb3954f.js"],sortedPages:["/","/_app","/_error","/clusters","/clusters/[cluster]","/clusters/[cluster]/[job]","/config","/infra","/infra/[context]","/jobs","/jobs/pools/[pool]","/jobs/[job]","/users","/volumes","/workspace/new","/workspaces","/workspaces/[name]"]}}("static/chunks/616-3d59f75e2ccf9321.js","static/chunks/6130-2be46d70a38f1e82.js","static/chunks/5739-d67458fcb1386c92.js","static/chunks/6989-01359c57e018caa4.js","static/chunks/3850-ff4a9a69d978632b.js","static/chunks/7411-b15471acd2cba716.js","static/chunks/1272-1ef0bf0237faccdb.js","static/chunks/8969-4a6f1a928fb6d370.js","static/chunks/6135-4b4d5e824b7f9d3c.js","static/chunks/754-d0da8ab45f9509e9.js","static/chunks/6990-08b2a1cae076a943.js","static/chunks/1121-408ed10b2f9fce17.js","static/chunks/6601-06114c982db410b6.js","static/chunks/3015-86cabed5d4669ad0.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-39c9bd4cdb7e5a57.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-408ed10b2f9fce17.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-66e696640347e77b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-86cabed5d4669ad0.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-1c0101b86582136f.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-0b4b35dc1dfe046c.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/clusters.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-469814d711d63b1b.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/config.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-6563820e094f68ca.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/infra.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-aabba60d57826e0f.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/jobs.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-1f70d9faa564804f.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/users.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-018bf31cda52e11b.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/volumes.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-739726d6b823f532.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1836-37fede578e2da5f8.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-408ed10b2f9fce17.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-86cabed5d4669ad0.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-943efc7aff0f0c06.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-af76bb06dbb3954f.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-24c4fc6d30ce0193.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-7598c33a746cdc91.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mriHUOVL_Ht-CeW-e7saa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"mriHUOVL_Ht-CeW-e7saa","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/data/mounting_utils.py
CHANGED
|
@@ -38,6 +38,29 @@ _GOOFYS_WRAPPER = ('$(if [ -S /dev/log ] ; then '
|
|
|
38
38
|
'fi)')
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
def get_rclone_install_cmd() -> str:
|
|
42
|
+
""" RClone installation for both apt-get and rpm.
|
|
43
|
+
This would be common command.
|
|
44
|
+
"""
|
|
45
|
+
# pylint: disable=line-too-long
|
|
46
|
+
install_cmd = (
|
|
47
|
+
'ARCH=$(uname -m) && '
|
|
48
|
+
'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
|
|
49
|
+
' ARCH_SUFFIX="arm64"; '
|
|
50
|
+
'else '
|
|
51
|
+
' ARCH_SUFFIX="amd64"; '
|
|
52
|
+
'fi && '
|
|
53
|
+
f'(which dpkg > /dev/null 2>&1 && (which rclone > /dev/null || (cd ~ > /dev/null'
|
|
54
|
+
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
|
|
55
|
+
f' && sudo dpkg -i rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
|
|
56
|
+
f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb)))'
|
|
57
|
+
f' || (which rclone > /dev/null || (cd ~ > /dev/null'
|
|
58
|
+
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm'
|
|
59
|
+
f' && sudo yum --nogpgcheck install rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm -y'
|
|
60
|
+
f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm))')
|
|
61
|
+
return install_cmd
|
|
62
|
+
|
|
63
|
+
|
|
41
64
|
def get_s3_mount_install_cmd() -> str:
|
|
42
65
|
"""Returns command for basic S3 mounting (goofys by default, rclone for
|
|
43
66
|
ARM64)."""
|
|
@@ -47,18 +70,7 @@ def get_s3_mount_install_cmd() -> str:
|
|
|
47
70
|
'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
|
|
48
71
|
# Use rclone for ARM64 since goofys doesn't support it
|
|
49
72
|
# Extract core rclone installation logic without redundant ARCH check
|
|
50
|
-
'
|
|
51
|
-
f' (which dpkg > /dev/null 2>&1 && (which rclone > /dev/null || '
|
|
52
|
-
f'(cd ~ > /dev/null && curl -O https://downloads.rclone.org/'
|
|
53
|
-
f'{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb '
|
|
54
|
-
f'&& sudo dpkg -i rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb '
|
|
55
|
-
f'&& rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb))) || '
|
|
56
|
-
f'(which rclone > /dev/null || (cd ~ > /dev/null && curl -O '
|
|
57
|
-
f'https://downloads.rclone.org/{RCLONE_VERSION}/'
|
|
58
|
-
f'rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm && '
|
|
59
|
-
f'sudo yum --nogpgcheck install '
|
|
60
|
-
f'rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm -y && '
|
|
61
|
-
f'rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm)); '
|
|
73
|
+
f' {get_rclone_install_cmd()}; '
|
|
62
74
|
'else '
|
|
63
75
|
' sudo wget -nc https://github.com/aylei/goofys/'
|
|
64
76
|
'releases/download/0.24.0-aylei-upstream/goofys '
|
|
@@ -84,7 +96,9 @@ def get_s3_mount_cmd(bucket_name: str,
|
|
|
84
96
|
rclone_mount = (
|
|
85
97
|
f'{FUSERMOUNT3_SOFT_LINK_CMD} && '
|
|
86
98
|
f'rclone mount :s3:{bucket_name}{_bucket_sub_path} {mount_path} '
|
|
87
|
-
|
|
99
|
+
# Have to add --s3-env-auth=true to allow rclone to access private
|
|
100
|
+
# buckets.
|
|
101
|
+
'--daemon --allow-other --s3-env-auth=true')
|
|
88
102
|
goofys_mount = (f'{_GOOFYS_WRAPPER} -o allow_other '
|
|
89
103
|
f'--stat-cache-ttl {_STAT_CACHE_TTL} '
|
|
90
104
|
f'--type-cache-ttl {_TYPE_CACHE_TTL} '
|
|
@@ -349,9 +363,9 @@ def get_mount_cached_cmd(rclone_config: str, rclone_profile_name: str,
|
|
|
349
363
|
# the filename length limit.
|
|
350
364
|
# The hash is a non-negative integer in string form.
|
|
351
365
|
hashed_mount_path = hashlib.md5(mount_path.encode()).hexdigest()
|
|
352
|
-
log_file_path = os.path.join(constants.
|
|
366
|
+
log_file_path = os.path.join(constants.RCLONE_MOUNT_CACHED_LOG_DIR,
|
|
353
367
|
f'{hashed_mount_path}.log')
|
|
354
|
-
create_log_cmd = (f'mkdir -p {constants.
|
|
368
|
+
create_log_cmd = (f'mkdir -p {constants.RCLONE_MOUNT_CACHED_LOG_DIR} && '
|
|
355
369
|
f'touch {log_file_path}')
|
|
356
370
|
# when mounting multiple directories with vfs cache mode, it's handled by
|
|
357
371
|
# rclone to create separate cache directories at ~/.cache/rclone/vfs. It is
|
|
@@ -392,29 +406,6 @@ def get_mount_cached_cmd(rclone_config: str, rclone_profile_name: str,
|
|
|
392
406
|
return mount_cmd
|
|
393
407
|
|
|
394
408
|
|
|
395
|
-
def get_rclone_install_cmd() -> str:
|
|
396
|
-
""" RClone installation for both apt-get and rpm.
|
|
397
|
-
This would be common command.
|
|
398
|
-
"""
|
|
399
|
-
# pylint: disable=line-too-long
|
|
400
|
-
install_cmd = (
|
|
401
|
-
'ARCH=$(uname -m) && '
|
|
402
|
-
'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
|
|
403
|
-
' ARCH_SUFFIX="arm"; '
|
|
404
|
-
'else '
|
|
405
|
-
' ARCH_SUFFIX="amd64"; '
|
|
406
|
-
'fi && '
|
|
407
|
-
f'(which dpkg > /dev/null 2>&1 && (which rclone > /dev/null || (cd ~ > /dev/null'
|
|
408
|
-
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
|
|
409
|
-
f' && sudo dpkg -i rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
|
|
410
|
-
f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb)))'
|
|
411
|
-
f' || (which rclone > /dev/null || (cd ~ > /dev/null'
|
|
412
|
-
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm'
|
|
413
|
-
f' && sudo yum --nogpgcheck install rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm -y'
|
|
414
|
-
f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm))')
|
|
415
|
-
return install_cmd
|
|
416
|
-
|
|
417
|
-
|
|
418
409
|
def get_oci_mount_cmd(mount_path: str, store_name: str, region: str,
|
|
419
410
|
namespace: str, compartment: str, config_file: str,
|
|
420
411
|
config_profile: str) -> str:
|
sky/global_user_state.py
CHANGED
|
@@ -299,9 +299,7 @@ def create_table(engine: sqlalchemy.engine.Engine):
|
|
|
299
299
|
# a session has already been created with _SQLALCHEMY_ENGINE = e1,
|
|
300
300
|
# and then another thread overwrites _SQLALCHEMY_ENGINE = e2
|
|
301
301
|
# which could result in e1 being garbage collected unexpectedly.
|
|
302
|
-
def initialize_and_get_db(
|
|
303
|
-
pg_pool_class: Optional[sqlalchemy.pool.Pool] = None
|
|
304
|
-
) -> sqlalchemy.engine.Engine:
|
|
302
|
+
def initialize_and_get_db() -> sqlalchemy.engine.Engine:
|
|
305
303
|
global _SQLALCHEMY_ENGINE
|
|
306
304
|
|
|
307
305
|
if _SQLALCHEMY_ENGINE is not None:
|
|
@@ -310,8 +308,7 @@ def initialize_and_get_db(
|
|
|
310
308
|
if _SQLALCHEMY_ENGINE is not None:
|
|
311
309
|
return _SQLALCHEMY_ENGINE
|
|
312
310
|
# get an engine to the db
|
|
313
|
-
engine =
|
|
314
|
-
pg_pool_class=pg_pool_class)
|
|
311
|
+
engine = db_utils.get_engine('state')
|
|
315
312
|
|
|
316
313
|
# run migrations if needed
|
|
317
314
|
create_table(engine)
|
|
@@ -2315,3 +2312,18 @@ def set_system_config(config_key: str, config_value: str) -> None:
|
|
|
2315
2312
|
})
|
|
2316
2313
|
session.execute(upsert_stmnt)
|
|
2317
2314
|
session.commit()
|
|
2315
|
+
|
|
2316
|
+
|
|
2317
|
+
@_init_db
|
|
2318
|
+
def get_max_db_connections() -> Optional[int]:
|
|
2319
|
+
"""Get the maximum number of connections for the engine."""
|
|
2320
|
+
assert _SQLALCHEMY_ENGINE is not None
|
|
2321
|
+
if (_SQLALCHEMY_ENGINE.dialect.name ==
|
|
2322
|
+
db_utils.SQLAlchemyDialect.SQLITE.value):
|
|
2323
|
+
return None
|
|
2324
|
+
with sqlalchemy.orm.Session(_SQLALCHEMY_ENGINE) as session:
|
|
2325
|
+
max_connections = session.execute(
|
|
2326
|
+
sqlalchemy.text('SHOW max_connections')).scalar()
|
|
2327
|
+
if max_connections is None:
|
|
2328
|
+
return None
|
|
2329
|
+
return int(max_connections)
|
sky/jobs/state.py
CHANGED
|
@@ -157,7 +157,7 @@ def initialize_and_get_db() -> sqlalchemy.engine.Engine:
|
|
|
157
157
|
if _SQLALCHEMY_ENGINE is not None:
|
|
158
158
|
return _SQLALCHEMY_ENGINE
|
|
159
159
|
# get an engine to the db
|
|
160
|
-
engine =
|
|
160
|
+
engine = db_utils.get_engine('spot_jobs')
|
|
161
161
|
|
|
162
162
|
# run migrations if needed
|
|
163
163
|
create_table(engine)
|
|
@@ -1047,8 +1047,10 @@ def stop_instances(
|
|
|
1047
1047
|
raise NotImplementedError()
|
|
1048
1048
|
|
|
1049
1049
|
|
|
1050
|
-
def _delete_services(name_prefix: str,
|
|
1051
|
-
|
|
1050
|
+
def _delete_services(name_prefix: str,
|
|
1051
|
+
namespace: str,
|
|
1052
|
+
context: Optional[str],
|
|
1053
|
+
skip_ssh_service: bool = False) -> None:
|
|
1052
1054
|
"""Delete services with the given name prefix.
|
|
1053
1055
|
|
|
1054
1056
|
Args:
|
|
@@ -1057,7 +1059,9 @@ def _delete_services(name_prefix: str, namespace: str,
|
|
|
1057
1059
|
context: Kubernetes context
|
|
1058
1060
|
"""
|
|
1059
1061
|
# TODO(andy): We should use tag for the service filter.
|
|
1060
|
-
|
|
1062
|
+
services = ([name_prefix, f'{name_prefix}-ssh']
|
|
1063
|
+
if not skip_ssh_service else [name_prefix])
|
|
1064
|
+
for service_name in services:
|
|
1061
1065
|
# Since we are not saving this lambda, it's a false positive.
|
|
1062
1066
|
# TODO(andyl): Wait for
|
|
1063
1067
|
# https://github.com/pylint-dev/pylint/issues/5263.
|
|
@@ -1083,6 +1087,9 @@ def _terminate_node(namespace: str,
|
|
|
1083
1087
|
# Delete services for the head pod
|
|
1084
1088
|
# services are specified in sky/templates/kubernetes-ray.yml.j2
|
|
1085
1089
|
_delete_services(pod_name, namespace, context)
|
|
1090
|
+
else:
|
|
1091
|
+
# No ssh service is created for worker pods
|
|
1092
|
+
_delete_services(pod_name, namespace, context, skip_ssh_service=True)
|
|
1086
1093
|
|
|
1087
1094
|
# Note - delete pod after all other resources are deleted.
|
|
1088
1095
|
# This is to ensure there are no leftover resources if this down is run
|
sky/serve/serve_state.py
CHANGED
|
@@ -130,7 +130,7 @@ def initialize_and_get_db() -> sqlalchemy.engine.Engine:
|
|
|
130
130
|
if _SQLALCHEMY_ENGINE is not None:
|
|
131
131
|
return _SQLALCHEMY_ENGINE
|
|
132
132
|
# get an engine to the db
|
|
133
|
-
engine =
|
|
133
|
+
engine = db_utils.get_engine('serve/services')
|
|
134
134
|
|
|
135
135
|
# run migrations if needed
|
|
136
136
|
create_table(engine)
|
sky/server/config.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import enum
|
|
5
|
+
from typing import Optional
|
|
5
6
|
|
|
6
7
|
from sky import sky_logging
|
|
7
8
|
from sky.server import constants as server_constants
|
|
@@ -61,6 +62,7 @@ class QueueBackend(enum.Enum):
|
|
|
61
62
|
class WorkerConfig:
|
|
62
63
|
garanteed_parallelism: int
|
|
63
64
|
burstable_parallelism: int
|
|
65
|
+
num_db_connections_per_worker: int
|
|
64
66
|
|
|
65
67
|
|
|
66
68
|
@dataclasses.dataclass
|
|
@@ -68,10 +70,13 @@ class ServerConfig:
|
|
|
68
70
|
num_server_workers: int
|
|
69
71
|
long_worker_config: WorkerConfig
|
|
70
72
|
short_worker_config: WorkerConfig
|
|
73
|
+
num_db_connections_per_worker: int
|
|
71
74
|
queue_backend: QueueBackend
|
|
72
75
|
|
|
73
76
|
|
|
74
|
-
def compute_server_config(deploy: bool
|
|
77
|
+
def compute_server_config(deploy: bool,
|
|
78
|
+
max_db_connections: Optional[int] = None
|
|
79
|
+
) -> ServerConfig:
|
|
75
80
|
"""Compute the server config based on environment.
|
|
76
81
|
|
|
77
82
|
We have different assumptions for the resources in different deployment
|
|
@@ -114,7 +119,17 @@ def compute_server_config(deploy: bool) -> ServerConfig:
|
|
|
114
119
|
queue_backend = QueueBackend.MULTIPROCESSING
|
|
115
120
|
burstable_parallel_for_long = 0
|
|
116
121
|
burstable_parallel_for_short = 0
|
|
122
|
+
# if num_db_connections_per_worker is 0, server will use NullPool
|
|
123
|
+
# to conserve the number of concurrent db connections.
|
|
124
|
+
# This could lead to performance degradation.
|
|
125
|
+
num_db_connections_per_worker = 0
|
|
117
126
|
num_server_workers = cpu_count
|
|
127
|
+
|
|
128
|
+
# +1 for the event loop running the main process
|
|
129
|
+
# and gc daemons in the '__main__' body of sky/server/server.py
|
|
130
|
+
max_parallel_all_workers = (max_parallel_for_long + max_parallel_for_short +
|
|
131
|
+
num_server_workers + 1)
|
|
132
|
+
|
|
118
133
|
if not deploy:
|
|
119
134
|
# For local mode, use local queue backend since we only run 1 uvicorn
|
|
120
135
|
# worker in local mode and no multiprocessing is needed.
|
|
@@ -140,6 +155,16 @@ def compute_server_config(deploy: bool) -> ServerConfig:
|
|
|
140
155
|
'SkyPilot API server will run in low resource mode because '
|
|
141
156
|
'the available memory is less than '
|
|
142
157
|
f'{server_constants.MIN_AVAIL_MEM_GB}GB.')
|
|
158
|
+
elif max_db_connections is not None:
|
|
159
|
+
if max_parallel_all_workers > max_db_connections:
|
|
160
|
+
logger.warning(
|
|
161
|
+
f'Max parallel all workers ({max_parallel_all_workers}) '
|
|
162
|
+
f'is greater than max db connections ({max_db_connections}). '
|
|
163
|
+
'Increase the number of max db connections to '
|
|
164
|
+
f'at least {max_parallel_all_workers} for optimal performance.')
|
|
165
|
+
else:
|
|
166
|
+
num_db_connections_per_worker = 1
|
|
167
|
+
|
|
143
168
|
logger.info(
|
|
144
169
|
f'SkyPilot API server will start {num_server_workers} server processes '
|
|
145
170
|
f'with {max_parallel_for_long} background workers for long requests '
|
|
@@ -150,10 +175,13 @@ def compute_server_config(deploy: bool) -> ServerConfig:
|
|
|
150
175
|
queue_backend=queue_backend,
|
|
151
176
|
long_worker_config=WorkerConfig(
|
|
152
177
|
garanteed_parallelism=max_parallel_for_long,
|
|
153
|
-
burstable_parallelism=burstable_parallel_for_long
|
|
178
|
+
burstable_parallelism=burstable_parallel_for_long,
|
|
179
|
+
num_db_connections_per_worker=num_db_connections_per_worker),
|
|
154
180
|
short_worker_config=WorkerConfig(
|
|
155
181
|
garanteed_parallelism=max_parallel_for_short,
|
|
156
|
-
burstable_parallelism=burstable_parallel_for_short
|
|
182
|
+
burstable_parallelism=burstable_parallel_for_short,
|
|
183
|
+
num_db_connections_per_worker=num_db_connections_per_worker),
|
|
184
|
+
num_db_connections_per_worker=num_db_connections_per_worker,
|
|
157
185
|
)
|
|
158
186
|
|
|
159
187
|
|
sky/server/requests/executor.py
CHANGED
|
@@ -57,6 +57,7 @@ from sky.utils import subprocess_utils
|
|
|
57
57
|
from sky.utils import tempstore
|
|
58
58
|
from sky.utils import timeline
|
|
59
59
|
from sky.utils import yaml_utils
|
|
60
|
+
from sky.utils.db import db_utils
|
|
60
61
|
from sky.workspaces import core as workspaces_core
|
|
61
62
|
|
|
62
63
|
if typing.TYPE_CHECKING:
|
|
@@ -152,6 +153,8 @@ class RequestWorker:
|
|
|
152
153
|
self.schedule_type = schedule_type
|
|
153
154
|
self.garanteed_parallelism = config.garanteed_parallelism
|
|
154
155
|
self.burstable_parallelism = config.burstable_parallelism
|
|
156
|
+
self.num_db_connections_per_worker = (
|
|
157
|
+
config.num_db_connections_per_worker)
|
|
155
158
|
self._thread: Optional[threading.Thread] = None
|
|
156
159
|
self._cancel_event = threading.Event()
|
|
157
160
|
|
|
@@ -190,8 +193,9 @@ class RequestWorker:
|
|
|
190
193
|
# multiple requests can share the same process pid, which may cause
|
|
191
194
|
# issues with SkyPilot core functions if they rely on the exit of
|
|
192
195
|
# the process, such as subprocess_daemon.py.
|
|
193
|
-
fut = executor.submit_until_success(
|
|
194
|
-
|
|
196
|
+
fut = executor.submit_until_success(
|
|
197
|
+
_request_execution_wrapper, request_id, ignore_return_value,
|
|
198
|
+
self.num_db_connections_per_worker)
|
|
195
199
|
# Monitor the result of the request execution.
|
|
196
200
|
threading.Thread(target=self.handle_task_result,
|
|
197
201
|
args=(fut, request_element),
|
|
@@ -351,7 +355,8 @@ def _sigterm_handler(signum: int, frame: Optional['types.FrameType']) -> None:
|
|
|
351
355
|
|
|
352
356
|
|
|
353
357
|
def _request_execution_wrapper(request_id: str,
|
|
354
|
-
ignore_return_value: bool
|
|
358
|
+
ignore_return_value: bool,
|
|
359
|
+
num_db_connections_per_worker: int = 0) -> None:
|
|
355
360
|
"""Wrapper for a request execution.
|
|
356
361
|
|
|
357
362
|
It wraps the execution of a request to:
|
|
@@ -362,6 +367,7 @@ def _request_execution_wrapper(request_id: str,
|
|
|
362
367
|
4. Handle the SIGTERM signal to abort the request gracefully.
|
|
363
368
|
5. Maintain the lifecycle of the temp dir used by the request.
|
|
364
369
|
"""
|
|
370
|
+
db_utils.set_max_connections(num_db_connections_per_worker)
|
|
365
371
|
# Handle the SIGTERM signal to abort the request processing gracefully.
|
|
366
372
|
signal.signal(signal.SIGTERM, _sigterm_handler)
|
|
367
373
|
|