skypilot-nightly 1.0.0.dev20251015__py3-none-any.whl → 1.0.0.dev20251017__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.

Files changed (58) hide show
  1. sky/__init__.py +2 -2
  2. sky/authentication.py +17 -157
  3. sky/backends/backend_utils.py +6 -5
  4. sky/backends/cloud_vm_ray_backend.py +25 -12
  5. sky/catalog/kubernetes_catalog.py +5 -3
  6. sky/client/cli/command.py +0 -1
  7. sky/dashboard/out/404.html +1 -1
  8. sky/dashboard/out/_next/static/chunks/{webpack-ac3a34c8f9fef041.js → webpack-3c431f6c9086e487.js} +1 -1
  9. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  10. sky/dashboard/out/clusters/[cluster].html +1 -1
  11. sky/dashboard/out/clusters.html +1 -1
  12. sky/dashboard/out/config.html +1 -1
  13. sky/dashboard/out/index.html +1 -1
  14. sky/dashboard/out/infra/[context].html +1 -1
  15. sky/dashboard/out/infra.html +1 -1
  16. sky/dashboard/out/jobs/[job].html +1 -1
  17. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  18. sky/dashboard/out/jobs.html +1 -1
  19. sky/dashboard/out/users.html +1 -1
  20. sky/dashboard/out/volumes.html +1 -1
  21. sky/dashboard/out/workspace/new.html +1 -1
  22. sky/dashboard/out/workspaces/[name].html +1 -1
  23. sky/dashboard/out/workspaces.html +1 -1
  24. sky/exceptions.py +13 -1
  25. sky/jobs/constants.py +1 -1
  26. sky/jobs/scheduler.py +2 -4
  27. sky/jobs/server/core.py +2 -1
  28. sky/jobs/server/server.py +5 -3
  29. sky/jobs/state.py +12 -6
  30. sky/jobs/utils.py +8 -2
  31. sky/provision/fluidstack/instance.py +2 -2
  32. sky/provision/seeweb/instance.py +3 -3
  33. sky/schemas/generated/jobsv1_pb2.py +52 -52
  34. sky/schemas/generated/jobsv1_pb2.pyi +4 -2
  35. sky/serve/server/server.py +1 -0
  36. sky/serve/service.py +2 -2
  37. sky/server/requests/executor.py +51 -15
  38. sky/server/requests/preconditions.py +2 -2
  39. sky/server/requests/requests.py +33 -24
  40. sky/server/requests/threads.py +106 -0
  41. sky/server/rest.py +36 -18
  42. sky/server/server.py +26 -4
  43. sky/server/stream_utils.py +10 -3
  44. sky/setup_files/dependencies.py +19 -8
  45. sky/skylet/constants.py +1 -1
  46. sky/skylet/services.py +3 -1
  47. sky/utils/auth_utils.py +153 -0
  48. sky/utils/command_runner.py +3 -0
  49. sky/utils/context_utils.py +2 -0
  50. sky/utils/locks.py +5 -2
  51. {skypilot_nightly-1.0.0.dev20251015.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/METADATA +281 -52
  52. {skypilot_nightly-1.0.0.dev20251015.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/RECORD +58 -56
  53. /sky/dashboard/out/_next/static/{-bih7JVStsXyeasac-dvQ → 3xvBA5BSGbiQ87tVmfbpY}/_buildManifest.js +0 -0
  54. /sky/dashboard/out/_next/static/{-bih7JVStsXyeasac-dvQ → 3xvBA5BSGbiQ87tVmfbpY}/_ssgManifest.js +0 -0
  55. {skypilot_nightly-1.0.0.dev20251015.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/WHEEL +0 -0
  56. {skypilot_nightly-1.0.0.dev20251015.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/entry_points.txt +0 -0
  57. {skypilot_nightly-1.0.0.dev20251015.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/licenses/LICENSE +0 -0
  58. {skypilot_nightly-1.0.0.dev20251015.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/top_level.txt +0 -0
@@ -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-ac3a34c8f9fef041.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/6212-7bd06f60ba693125.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-e5c9ce6a24fc0de4.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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/6212-7bd06f60ba693125.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-e5c9ce6a24fc0de4.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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-ac3a34c8f9fef041.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/6212-7bd06f60ba693125.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-bc979970c247d8f3.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_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":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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/6212-7bd06f60ba693125.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-bc979970c247d8f3.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_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":"3xvBA5BSGbiQ87tVmfbpY","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-ac3a34c8f9fef041.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-a35a9dc3c5ccd657.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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-a35a9dc3c5ccd657.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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-ac3a34c8f9fef041.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-98d2ed979084162a.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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-98d2ed979084162a.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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-ac3a34c8f9fef041.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-835d14ba94808f79.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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-835d14ba94808f79.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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-ac3a34c8f9fef041.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/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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-ac3a34c8f9fef041.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/7359-c8d04e06886000b3.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-7e0e8f06bb2f881c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-3b40c39626f99c89.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-e8688c35c06f0ac5.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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/7359-c8d04e06886000b3.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-7e0e8f06bb2f881c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-3b40c39626f99c89.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-e8688c35c06f0ac5.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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-ac3a34c8f9fef041.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-69c80d677d3c2949.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/-bih7JVStsXyeasac-dvQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"-bih7JVStsXyeasac-dvQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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-3c431f6c9086e487.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-69c80d677d3c2949.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
sky/exceptions.py CHANGED
@@ -649,7 +649,14 @@ class VolumeTopologyConflictError(Exception):
649
649
 
650
650
  class ServerTemporarilyUnavailableError(Exception):
651
651
  """Raised when the server is temporarily unavailable."""
652
- pass
652
+
653
+ def __init__(self, message: str):
654
+ super().__init__(message)
655
+ self.message = message
656
+
657
+ def __str__(self):
658
+ return ('SkyPilot API server is temporarily unavailable: '
659
+ f'{self.message}. Please try again later.')
653
660
 
654
661
 
655
662
  class RestfulPolicyError(Exception):
@@ -686,3 +693,8 @@ class ClientError(Exception):
686
693
  If a request encounters a ClientError, it will not be retried to the server.
687
694
  """
688
695
  pass
696
+
697
+
698
+ class ConcurrentWorkerExhaustedError(Exception):
699
+ """Raised when the concurrent worker is exhausted."""
700
+ pass
sky/jobs/constants.py CHANGED
@@ -46,7 +46,7 @@ JOBS_CLUSTER_NAME_PREFIX_LENGTH = 25
46
46
  # The version of the lib files that jobs/utils use. Whenever there is an API
47
47
  # change for the jobs/utils, we need to bump this version and update
48
48
  # job.utils.ManagedJobCodeGen to handle the version update.
49
- MANAGED_JOBS_VERSION = 10
49
+ MANAGED_JOBS_VERSION = 11
50
50
 
51
51
  # The command for setting up the jobs dashboard on the controller. It firstly
52
52
  # checks if the systemd services are available, and if not (e.g., Kubernetes
sky/jobs/scheduler.py CHANGED
@@ -64,7 +64,6 @@ from sky.jobs import utils as managed_job_utils
64
64
  from sky.server import config as server_config
65
65
  from sky.skylet import constants
66
66
  from sky.utils import annotations
67
- from sky.utils import common_utils
68
67
  from sky.utils import controller_utils
69
68
  from sky.utils import subprocess_utils
70
69
 
@@ -290,9 +289,8 @@ def submit_job(job_id: int, dag_yaml_path: str, original_user_yaml_path: str,
290
289
  maybe_start_controllers(from_scheduler=True)
291
290
  return
292
291
 
293
- state.scheduler_set_waiting(job_id, dag_yaml_path,
294
- original_user_yaml_path, env_file_path,
295
- common_utils.get_user_hash(), priority)
292
+ state.scheduler_set_waiting(job_id, dag_yaml_path, original_user_yaml_path,
293
+ env_file_path, priority)
296
294
  if state.get_ha_recovery_script(job_id) is None:
297
295
  # the run command is just the command that called scheduler
298
296
  run = (f'source {env_file_path} && '
sky/jobs/server/core.py CHANGED
@@ -142,7 +142,8 @@ def _maybe_submit_job_locally(prefix: str, dag: 'sky.Dag',
142
142
  force_user_workspace=True),
143
143
  entrypoint=common_utils.get_current_command(),
144
144
  pool=pool,
145
- pool_hash=pool_hash))
145
+ pool_hash=pool_hash,
146
+ user_hash=common_utils.get_user_hash()))
146
147
  for task_id, task in enumerate(dag.tasks):
147
148
  resources_str = backend_utils.get_task_resources_str(
148
149
  task, is_managed_job=True)
sky/jobs/server/server.py CHANGED
@@ -99,6 +99,8 @@ async def logs(
99
99
  # When refresh is specified, the job controller might be restarted,
100
100
  # which takes longer time to finish. We schedule it to long executor.
101
101
  schedule_type = api_requests.ScheduleType.LONG
102
+ if schedule_type == api_requests.ScheduleType.SHORT:
103
+ executor.check_request_thread_executor_available()
102
104
  request_task = executor.prepare_request(
103
105
  request_id=request.state.request_id,
104
106
  request_name='jobs.logs',
@@ -107,14 +109,14 @@ async def logs(
107
109
  schedule_type=schedule_type,
108
110
  request_cluster_name=common.JOB_CONTROLLER_NAME,
109
111
  )
110
- if schedule_type == api_requests.ScheduleType.LONG:
111
- executor.schedule_prepared_request(request_task)
112
- else:
112
+ if schedule_type == api_requests.ScheduleType.SHORT:
113
113
  # For short request, run in the coroutine to avoid blocking
114
114
  # short workers.
115
115
  task = executor.execute_request_in_coroutine(request_task)
116
116
  # Cancel the coroutine after the request is done or client disconnects
117
117
  background_tasks.add_task(task.cancel)
118
+ else:
119
+ executor.schedule_prepared_request(request_task)
118
120
 
119
121
  return stream_utils.stream_response_for_long_request(
120
122
  request_id=request_task.request_id,
sky/jobs/state.py CHANGED
@@ -692,8 +692,8 @@ class ManagedJobScheduleState(enum.Enum):
692
692
  # === Status transition functions ===
693
693
  @_init_db
694
694
  def set_job_info_without_job_id(name: str, workspace: str, entrypoint: str,
695
- pool: Optional[str],
696
- pool_hash: Optional[str]) -> int:
695
+ pool: Optional[str], pool_hash: Optional[str],
696
+ user_hash: Optional[str]) -> int:
697
697
  assert _SQLALCHEMY_ENGINE is not None
698
698
  with orm.Session(_SQLALCHEMY_ENGINE) as session:
699
699
  if (_SQLALCHEMY_ENGINE.dialect.name ==
@@ -712,6 +712,7 @@ def set_job_info_without_job_id(name: str, workspace: str, entrypoint: str,
712
712
  entrypoint=entrypoint,
713
713
  pool=pool,
714
714
  pool_hash=pool_hash,
715
+ user_hash=user_hash,
715
716
  )
716
717
 
717
718
  if (_SQLALCHEMY_ENGINE.dialect.name ==
@@ -1241,7 +1242,7 @@ def get_task_specs(job_id: int, task_id: int) -> Dict[str, Any]:
1241
1242
  @_init_db
1242
1243
  def scheduler_set_waiting(job_id: int, dag_yaml_path: str,
1243
1244
  original_user_yaml_path: str, env_file_path: str,
1244
- user_hash: str, priority: int):
1245
+ priority: int):
1245
1246
  """Do not call without holding the scheduler lock.
1246
1247
 
1247
1248
  Returns: Whether this is a recovery run or not.
@@ -1260,7 +1261,6 @@ def scheduler_set_waiting(job_id: int, dag_yaml_path: str,
1260
1261
  job_info_table.c.dag_yaml_path: dag_yaml_path,
1261
1262
  job_info_table.c.original_user_yaml_path: original_user_yaml_path,
1262
1263
  job_info_table.c.env_file_path: env_file_path,
1263
- job_info_table.c.user_hash: user_hash,
1264
1264
  job_info_table.c.priority: priority,
1265
1265
  })
1266
1266
  session.commit()
@@ -2000,8 +2000,13 @@ async def scheduler_set_done_async(job_id: int,
2000
2000
 
2001
2001
 
2002
2002
  @_init_db
2003
- def set_job_info(job_id: int, name: str, workspace: str, entrypoint: str,
2004
- pool: Optional[str], pool_hash: Optional[str]):
2003
+ def set_job_info(job_id: int,
2004
+ name: str,
2005
+ workspace: str,
2006
+ entrypoint: str,
2007
+ pool: Optional[str],
2008
+ pool_hash: Optional[str],
2009
+ user_hash: Optional[str] = None):
2005
2010
  assert _SQLALCHEMY_ENGINE is not None
2006
2011
  with orm.Session(_SQLALCHEMY_ENGINE) as session:
2007
2012
  if (_SQLALCHEMY_ENGINE.dialect.name ==
@@ -2020,6 +2025,7 @@ def set_job_info(job_id: int, name: str, workspace: str, entrypoint: str,
2020
2025
  entrypoint=entrypoint,
2021
2026
  pool=pool,
2022
2027
  pool_hash=pool_hash,
2028
+ user_hash=user_hash,
2023
2029
  )
2024
2030
  session.execute(insert_stmt)
2025
2031
  session.commit()
sky/jobs/utils.py CHANGED
@@ -2148,8 +2148,12 @@ class ManagedJobCodeGen:
2148
2148
  return cls._build(code)
2149
2149
 
2150
2150
  @classmethod
2151
- def set_pending(cls, job_id: int, managed_job_dag: 'dag_lib.Dag',
2152
- workspace: str, entrypoint: str) -> str:
2151
+ def set_pending(cls,
2152
+ job_id: int,
2153
+ managed_job_dag: 'dag_lib.Dag',
2154
+ workspace: str,
2155
+ entrypoint: str,
2156
+ user_hash: Optional[str] = None) -> str:
2153
2157
  dag_name = managed_job_dag.name
2154
2158
  pool = managed_job_dag.pool
2155
2159
  # Add the managed job to queue table.
@@ -2166,6 +2170,8 @@ class ManagedJobCodeGen:
2166
2170
  pool_hash = serve_state.get_service_hash({pool!r})
2167
2171
  set_job_info_kwargs['pool'] = {pool!r}
2168
2172
  set_job_info_kwargs['pool_hash'] = pool_hash
2173
+ if managed_job_version >= 11:
2174
+ set_job_info_kwargs['user_hash'] = {user_hash!r}
2169
2175
  managed_job_state.set_job_info(
2170
2176
  {job_id}, {dag_name!r}, **set_job_info_kwargs)
2171
2177
  """)
@@ -3,11 +3,11 @@ import os
3
3
  import time
4
4
  from typing import Any, Dict, List, Optional, Tuple
5
5
 
6
- from sky import authentication as auth
7
6
  from sky import exceptions
8
7
  from sky import sky_logging
9
8
  from sky.provision import common
10
9
  from sky.provision.fluidstack import fluidstack_utils as utils
10
+ from sky.utils import auth_utils
11
11
  from sky.utils import command_runner
12
12
  from sky.utils import common_utils
13
13
  from sky.utils import status_lib
@@ -27,7 +27,7 @@ logger = sky_logging.init_logger(__name__)
27
27
  def get_internal_ip(node_info: Dict[str, Any]) -> None:
28
28
  node_info['internal_ip'] = node_info['ip_address']
29
29
 
30
- private_key_path, _ = auth.get_or_generate_keys()
30
+ private_key_path, _ = auth_utils.get_or_generate_keys()
31
31
  runner = command_runner.SSHCommandRunner(
32
32
  (node_info['ip_address'], 22),
33
33
  ssh_user='ubuntu',
@@ -9,7 +9,6 @@ import subprocess
9
9
  import time
10
10
  from typing import Any, Dict, List, Optional, Tuple
11
11
 
12
- from sky import authentication as auth
13
12
  from sky import sky_logging
14
13
  from sky.adaptors import seeweb as seeweb_adaptor
15
14
  from sky.provision import common
@@ -17,6 +16,7 @@ from sky.provision.common import ClusterInfo
17
16
  from sky.provision.common import InstanceInfo
18
17
  from sky.provision.common import ProvisionConfig
19
18
  from sky.provision.common import ProvisionRecord
19
+ from sky.utils import auth_utils
20
20
  from sky.utils import command_runner # Unified SSH helper
21
21
  from sky.utils import common_utils
22
22
  from sky.utils import status_lib
@@ -75,7 +75,7 @@ class SeewebNodeProvider:
75
75
  if self.config and self.config.authentication_config:
76
76
  key_path = self.config.authentication_config.get('ssh_private_key')
77
77
  if not key_path:
78
- key_path, _ = auth.get_or_generate_keys()
78
+ key_path, _ = auth_utils.get_or_generate_keys()
79
79
  return os.path.expanduser(key_path)
80
80
 
81
81
  # ------------------------------------------------------------------ #
@@ -661,7 +661,7 @@ def _ping_server_standalone(server_ip: str) -> bool:
661
661
  def _check_ssh_ready_standalone(server_ip: str) -> bool:
662
662
  """Check that SSH is available on the server (standalone version)."""
663
663
  try:
664
- private_key_path, _ = auth.get_or_generate_keys()
664
+ private_key_path, _ = auth_utils.get_or_generate_keys()
665
665
  private_key_path = os.path.expanduser(private_key_path)
666
666
  ssh_user = 'ecuser'
667
667
  result = subprocess.run([
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"sky/schemas/generated/jobsv1.proto\x12\x07jobs.v1\"\x85\x01\n\rAddJobRequest\x12\x15\n\x08job_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x15\n\rrun_timestamp\x18\x03 \x01(\t\x12\x15\n\rresources_str\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\tB\x0b\n\t_job_name\"1\n\x0e\x41\x64\x64JobResponse\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x0f\n\x07log_dir\x18\x02 \x01(\t\"\xb3\x01\n\x0fQueueJobRequest\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x14\n\x07\x63odegen\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bscript_path\x18\x03 \x01(\t\x12\x16\n\x0eremote_log_dir\x18\x04 \x01(\t\x12\x31\n\x0bmanaged_job\x18\x05 \x01(\x0b\x32\x17.jobs.v1.ManagedJobInfoH\x01\x88\x01\x01\x42\n\n\x08_codegenB\x0e\n\x0c_managed_job\"\x89\x01\n\x0eManagedJobInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\x04pool\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tworkspace\x18\x03 \x01(\t\x12\x12\n\nentrypoint\x18\x04 \x01(\t\x12&\n\x05tasks\x18\x05 \x03(\x0b\x32\x17.jobs.v1.ManagedJobTaskB\x07\n\x05_pool\"]\n\x0eManagedJobTask\x12\x0f\n\x07task_id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rresources_str\x18\x03 \x01(\t\x12\x15\n\rmetadata_json\x18\x04 \x01(\t\"\x12\n\x10QueueJobResponse\"\x15\n\x13UpdateStatusRequest\"\x16\n\x14UpdateStatusResponse\"L\n\x12GetJobQueueRequest\x12\x16\n\tuser_hash\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08\x61ll_jobs\x18\x02 \x01(\x08\x42\x0c\n\n_user_hash\"\xa3\x02\n\x07JobInfo\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x10\n\x08job_name\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x14\n\x0csubmitted_at\x18\x04 \x01(\x01\x12\"\n\x06status\x18\x05 \x01(\x0e\x32\x12.jobs.v1.JobStatus\x12\x15\n\rrun_timestamp\x18\x06 \x01(\t\x12\x15\n\x08start_at\x18\x07 \x01(\x01H\x00\x88\x01\x01\x12\x13\n\x06\x65nd_at\x18\x08 \x01(\x01H\x01\x88\x01\x01\x12\x11\n\tresources\x18\t \x01(\t\x12\x10\n\x03pid\x18\n \x01(\x03H\x02\x88\x01\x01\x12\x10\n\x08log_path\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\tB\x0b\n\t_start_atB\t\n\x07_end_atB\x06\n\x04_pid\"5\n\x13GetJobQueueResponse\x12\x1e\n\x04jobs\x18\x01 \x03(\x0b\x32\x10.jobs.v1.JobInfo\"^\n\x11\x43\x61ncelJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\x12\x12\n\ncancel_all\x18\x02 \x01(\x08\x12\x16\n\tuser_hash\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_user_hash\"/\n\x12\x43\x61ncelJobsResponse\x12\x19\n\x11\x63\x61ncelled_job_ids\x18\x01 \x03(\x03\"\x1e\n\x1c\x46\x61ilAllInProgressJobsRequest\"\x1f\n\x1d\x46\x61ilAllInProgressJobsResponse\"\x7f\n\x0fTailLogsRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x1b\n\x0emanaged_job_id\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x0e\n\x06\x66ollow\x18\x03 \x01(\x08\x12\x0c\n\x04tail\x18\x04 \x01(\x05\x42\t\n\x07_job_idB\x11\n\x0f_managed_job_id\"7\n\x10TailLogsResponse\x12\x10\n\x08log_line\x18\x01 \x01(\t\x12\x11\n\texit_code\x18\x02 \x01(\x05\"&\n\x13GetJobStatusRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\xa4\x01\n\x14GetJobStatusResponse\x12\x44\n\x0cjob_statuses\x18\x01 \x03(\x0b\x32..jobs.v1.GetJobStatusResponse.JobStatusesEntry\x1a\x46\n\x10JobStatusesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12!\n\x05value\x18\x02 \x01(\x0e\x32\x12.jobs.v1.JobStatus:\x02\x38\x01\"A\n\x1fGetJobSubmittedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"5\n GetJobSubmittedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"=\n\x1bGetJobEndedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"1\n\x1cGetJobEndedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"+\n\x18GetLogDirsForJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\x98\x01\n\x19GetLogDirsForJobsResponse\x12H\n\x0cjob_log_dirs\x18\x01 \x03(\x0b\x32\x32.jobs.v1.GetLogDirsForJobsResponse.JobLogDirsEntry\x1a\x31\n\x0fJobLogDirsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*\x8d\x02\n\tJobStatus\x12\x1a\n\x16JOB_STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fJOB_STATUS_INIT\x10\x01\x12\x16\n\x12JOB_STATUS_PENDING\x10\x02\x12\x19\n\x15JOB_STATUS_SETTING_UP\x10\x03\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x04\x12\x1c\n\x18JOB_STATUS_FAILED_DRIVER\x10\x05\x12\x18\n\x14JOB_STATUS_SUCCEEDED\x10\x06\x12\x15\n\x11JOB_STATUS_FAILED\x10\x07\x12\x1b\n\x17JOB_STATUS_FAILED_SETUP\x10\x08\x12\x18\n\x14JOB_STATUS_CANCELLED\x10\t2\x91\x07\n\x0bJobsService\x12\x39\n\x06\x41\x64\x64Job\x12\x16.jobs.v1.AddJobRequest\x1a\x17.jobs.v1.AddJobResponse\x12?\n\x08QueueJob\x12\x18.jobs.v1.QueueJobRequest\x1a\x19.jobs.v1.QueueJobResponse\x12K\n\x0cUpdateStatus\x12\x1c.jobs.v1.UpdateStatusRequest\x1a\x1d.jobs.v1.UpdateStatusResponse\x12H\n\x0bGetJobQueue\x12\x1b.jobs.v1.GetJobQueueRequest\x1a\x1c.jobs.v1.GetJobQueueResponse\x12\x45\n\nCancelJobs\x12\x1a.jobs.v1.CancelJobsRequest\x1a\x1b.jobs.v1.CancelJobsResponse\x12\x66\n\x15\x46\x61ilAllInProgressJobs\x12%.jobs.v1.FailAllInProgressJobsRequest\x1a&.jobs.v1.FailAllInProgressJobsResponse\x12\x41\n\x08TailLogs\x12\x18.jobs.v1.TailLogsRequest\x1a\x19.jobs.v1.TailLogsResponse0\x01\x12K\n\x0cGetJobStatus\x12\x1c.jobs.v1.GetJobStatusRequest\x1a\x1d.jobs.v1.GetJobStatusResponse\x12o\n\x18GetJobSubmittedTimestamp\x12(.jobs.v1.GetJobSubmittedTimestampRequest\x1a).jobs.v1.GetJobSubmittedTimestampResponse\x12\x63\n\x14GetJobEndedTimestamp\x12$.jobs.v1.GetJobEndedTimestampRequest\x1a%.jobs.v1.GetJobEndedTimestampResponse\x12Z\n\x11GetLogDirsForJobs\x12!.jobs.v1.GetLogDirsForJobsRequest\x1a\".jobs.v1.GetLogDirsForJobsResponseb\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"sky/schemas/generated/jobsv1.proto\x12\x07jobs.v1\"\x85\x01\n\rAddJobRequest\x12\x15\n\x08job_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x15\n\rrun_timestamp\x18\x03 \x01(\t\x12\x15\n\rresources_str\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\tB\x0b\n\t_job_name\"1\n\x0e\x41\x64\x64JobResponse\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x0f\n\x07log_dir\x18\x02 \x01(\t\"\xb3\x01\n\x0fQueueJobRequest\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x14\n\x07\x63odegen\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bscript_path\x18\x03 \x01(\t\x12\x16\n\x0eremote_log_dir\x18\x04 \x01(\t\x12\x31\n\x0bmanaged_job\x18\x05 \x01(\x0b\x32\x17.jobs.v1.ManagedJobInfoH\x01\x88\x01\x01\x42\n\n\x08_codegenB\x0e\n\x0c_managed_job\"\xab\x01\n\x0eManagedJobInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\x04pool\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tworkspace\x18\x03 \x01(\t\x12\x12\n\nentrypoint\x18\x04 \x01(\t\x12&\n\x05tasks\x18\x05 \x03(\x0b\x32\x17.jobs.v1.ManagedJobTask\x12\x14\n\x07user_id\x18\x06 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_poolB\n\n\x08_user_id\"]\n\x0eManagedJobTask\x12\x0f\n\x07task_id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rresources_str\x18\x03 \x01(\t\x12\x15\n\rmetadata_json\x18\x04 \x01(\t\"\x12\n\x10QueueJobResponse\"\x15\n\x13UpdateStatusRequest\"\x16\n\x14UpdateStatusResponse\"L\n\x12GetJobQueueRequest\x12\x16\n\tuser_hash\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08\x61ll_jobs\x18\x02 \x01(\x08\x42\x0c\n\n_user_hash\"\xa3\x02\n\x07JobInfo\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x10\n\x08job_name\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x14\n\x0csubmitted_at\x18\x04 \x01(\x01\x12\"\n\x06status\x18\x05 \x01(\x0e\x32\x12.jobs.v1.JobStatus\x12\x15\n\rrun_timestamp\x18\x06 \x01(\t\x12\x15\n\x08start_at\x18\x07 \x01(\x01H\x00\x88\x01\x01\x12\x13\n\x06\x65nd_at\x18\x08 \x01(\x01H\x01\x88\x01\x01\x12\x11\n\tresources\x18\t \x01(\t\x12\x10\n\x03pid\x18\n \x01(\x03H\x02\x88\x01\x01\x12\x10\n\x08log_path\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\tB\x0b\n\t_start_atB\t\n\x07_end_atB\x06\n\x04_pid\"5\n\x13GetJobQueueResponse\x12\x1e\n\x04jobs\x18\x01 \x03(\x0b\x32\x10.jobs.v1.JobInfo\"^\n\x11\x43\x61ncelJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\x12\x12\n\ncancel_all\x18\x02 \x01(\x08\x12\x16\n\tuser_hash\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_user_hash\"/\n\x12\x43\x61ncelJobsResponse\x12\x19\n\x11\x63\x61ncelled_job_ids\x18\x01 \x03(\x03\"\x1e\n\x1c\x46\x61ilAllInProgressJobsRequest\"\x1f\n\x1d\x46\x61ilAllInProgressJobsResponse\"\x7f\n\x0fTailLogsRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x1b\n\x0emanaged_job_id\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x0e\n\x06\x66ollow\x18\x03 \x01(\x08\x12\x0c\n\x04tail\x18\x04 \x01(\x05\x42\t\n\x07_job_idB\x11\n\x0f_managed_job_id\"7\n\x10TailLogsResponse\x12\x10\n\x08log_line\x18\x01 \x01(\t\x12\x11\n\texit_code\x18\x02 \x01(\x05\"&\n\x13GetJobStatusRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\xa4\x01\n\x14GetJobStatusResponse\x12\x44\n\x0cjob_statuses\x18\x01 \x03(\x0b\x32..jobs.v1.GetJobStatusResponse.JobStatusesEntry\x1a\x46\n\x10JobStatusesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12!\n\x05value\x18\x02 \x01(\x0e\x32\x12.jobs.v1.JobStatus:\x02\x38\x01\"A\n\x1fGetJobSubmittedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"5\n GetJobSubmittedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"=\n\x1bGetJobEndedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"1\n\x1cGetJobEndedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"+\n\x18GetLogDirsForJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\x98\x01\n\x19GetLogDirsForJobsResponse\x12H\n\x0cjob_log_dirs\x18\x01 \x03(\x0b\x32\x32.jobs.v1.GetLogDirsForJobsResponse.JobLogDirsEntry\x1a\x31\n\x0fJobLogDirsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*\x8d\x02\n\tJobStatus\x12\x1a\n\x16JOB_STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fJOB_STATUS_INIT\x10\x01\x12\x16\n\x12JOB_STATUS_PENDING\x10\x02\x12\x19\n\x15JOB_STATUS_SETTING_UP\x10\x03\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x04\x12\x1c\n\x18JOB_STATUS_FAILED_DRIVER\x10\x05\x12\x18\n\x14JOB_STATUS_SUCCEEDED\x10\x06\x12\x15\n\x11JOB_STATUS_FAILED\x10\x07\x12\x1b\n\x17JOB_STATUS_FAILED_SETUP\x10\x08\x12\x18\n\x14JOB_STATUS_CANCELLED\x10\t2\x91\x07\n\x0bJobsService\x12\x39\n\x06\x41\x64\x64Job\x12\x16.jobs.v1.AddJobRequest\x1a\x17.jobs.v1.AddJobResponse\x12?\n\x08QueueJob\x12\x18.jobs.v1.QueueJobRequest\x1a\x19.jobs.v1.QueueJobResponse\x12K\n\x0cUpdateStatus\x12\x1c.jobs.v1.UpdateStatusRequest\x1a\x1d.jobs.v1.UpdateStatusResponse\x12H\n\x0bGetJobQueue\x12\x1b.jobs.v1.GetJobQueueRequest\x1a\x1c.jobs.v1.GetJobQueueResponse\x12\x45\n\nCancelJobs\x12\x1a.jobs.v1.CancelJobsRequest\x1a\x1b.jobs.v1.CancelJobsResponse\x12\x66\n\x15\x46\x61ilAllInProgressJobs\x12%.jobs.v1.FailAllInProgressJobsRequest\x1a&.jobs.v1.FailAllInProgressJobsResponse\x12\x41\n\x08TailLogs\x12\x18.jobs.v1.TailLogsRequest\x1a\x19.jobs.v1.TailLogsResponse0\x01\x12K\n\x0cGetJobStatus\x12\x1c.jobs.v1.GetJobStatusRequest\x1a\x1d.jobs.v1.GetJobStatusResponse\x12o\n\x18GetJobSubmittedTimestamp\x12(.jobs.v1.GetJobSubmittedTimestampRequest\x1a).jobs.v1.GetJobSubmittedTimestampResponse\x12\x63\n\x14GetJobEndedTimestamp\x12$.jobs.v1.GetJobEndedTimestampRequest\x1a%.jobs.v1.GetJobEndedTimestampResponse\x12Z\n\x11GetLogDirsForJobs\x12!.jobs.v1.GetLogDirsForJobsRequest\x1a\".jobs.v1.GetLogDirsForJobsResponseb\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -25,8 +25,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
25
25
  _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_options = b'8\001'
26
26
  _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._loaded_options = None
27
27
  _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_options = b'8\001'
28
- _globals['_JOBSTATUS']._serialized_start=2185
29
- _globals['_JOBSTATUS']._serialized_end=2454
28
+ _globals['_JOBSTATUS']._serialized_start=2219
29
+ _globals['_JOBSTATUS']._serialized_end=2488
30
30
  _globals['_ADDJOBREQUEST']._serialized_start=48
31
31
  _globals['_ADDJOBREQUEST']._serialized_end=181
32
32
  _globals['_ADDJOBRESPONSE']._serialized_start=183
@@ -34,53 +34,53 @@ if not _descriptor._USE_C_DESCRIPTORS:
34
34
  _globals['_QUEUEJOBREQUEST']._serialized_start=235
35
35
  _globals['_QUEUEJOBREQUEST']._serialized_end=414
36
36
  _globals['_MANAGEDJOBINFO']._serialized_start=417
37
- _globals['_MANAGEDJOBINFO']._serialized_end=554
38
- _globals['_MANAGEDJOBTASK']._serialized_start=556
39
- _globals['_MANAGEDJOBTASK']._serialized_end=649
40
- _globals['_QUEUEJOBRESPONSE']._serialized_start=651
41
- _globals['_QUEUEJOBRESPONSE']._serialized_end=669
42
- _globals['_UPDATESTATUSREQUEST']._serialized_start=671
43
- _globals['_UPDATESTATUSREQUEST']._serialized_end=692
44
- _globals['_UPDATESTATUSRESPONSE']._serialized_start=694
45
- _globals['_UPDATESTATUSRESPONSE']._serialized_end=716
46
- _globals['_GETJOBQUEUEREQUEST']._serialized_start=718
47
- _globals['_GETJOBQUEUEREQUEST']._serialized_end=794
48
- _globals['_JOBINFO']._serialized_start=797
49
- _globals['_JOBINFO']._serialized_end=1088
50
- _globals['_GETJOBQUEUERESPONSE']._serialized_start=1090
51
- _globals['_GETJOBQUEUERESPONSE']._serialized_end=1143
52
- _globals['_CANCELJOBSREQUEST']._serialized_start=1145
53
- _globals['_CANCELJOBSREQUEST']._serialized_end=1239
54
- _globals['_CANCELJOBSRESPONSE']._serialized_start=1241
55
- _globals['_CANCELJOBSRESPONSE']._serialized_end=1288
56
- _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_start=1290
57
- _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_end=1320
58
- _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_start=1322
59
- _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_end=1353
60
- _globals['_TAILLOGSREQUEST']._serialized_start=1355
61
- _globals['_TAILLOGSREQUEST']._serialized_end=1482
62
- _globals['_TAILLOGSRESPONSE']._serialized_start=1484
63
- _globals['_TAILLOGSRESPONSE']._serialized_end=1539
64
- _globals['_GETJOBSTATUSREQUEST']._serialized_start=1541
65
- _globals['_GETJOBSTATUSREQUEST']._serialized_end=1579
66
- _globals['_GETJOBSTATUSRESPONSE']._serialized_start=1582
67
- _globals['_GETJOBSTATUSRESPONSE']._serialized_end=1746
68
- _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_start=1676
69
- _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_end=1746
70
- _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_start=1748
71
- _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_end=1813
72
- _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_start=1815
73
- _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_end=1868
74
- _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_start=1870
75
- _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_end=1931
76
- _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_start=1933
77
- _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_end=1982
78
- _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_start=1984
79
- _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_end=2027
80
- _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_start=2030
81
- _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_end=2182
82
- _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_start=2133
83
- _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_end=2182
84
- _globals['_JOBSSERVICE']._serialized_start=2457
85
- _globals['_JOBSSERVICE']._serialized_end=3370
37
+ _globals['_MANAGEDJOBINFO']._serialized_end=588
38
+ _globals['_MANAGEDJOBTASK']._serialized_start=590
39
+ _globals['_MANAGEDJOBTASK']._serialized_end=683
40
+ _globals['_QUEUEJOBRESPONSE']._serialized_start=685
41
+ _globals['_QUEUEJOBRESPONSE']._serialized_end=703
42
+ _globals['_UPDATESTATUSREQUEST']._serialized_start=705
43
+ _globals['_UPDATESTATUSREQUEST']._serialized_end=726
44
+ _globals['_UPDATESTATUSRESPONSE']._serialized_start=728
45
+ _globals['_UPDATESTATUSRESPONSE']._serialized_end=750
46
+ _globals['_GETJOBQUEUEREQUEST']._serialized_start=752
47
+ _globals['_GETJOBQUEUEREQUEST']._serialized_end=828
48
+ _globals['_JOBINFO']._serialized_start=831
49
+ _globals['_JOBINFO']._serialized_end=1122
50
+ _globals['_GETJOBQUEUERESPONSE']._serialized_start=1124
51
+ _globals['_GETJOBQUEUERESPONSE']._serialized_end=1177
52
+ _globals['_CANCELJOBSREQUEST']._serialized_start=1179
53
+ _globals['_CANCELJOBSREQUEST']._serialized_end=1273
54
+ _globals['_CANCELJOBSRESPONSE']._serialized_start=1275
55
+ _globals['_CANCELJOBSRESPONSE']._serialized_end=1322
56
+ _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_start=1324
57
+ _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_end=1354
58
+ _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_start=1356
59
+ _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_end=1387
60
+ _globals['_TAILLOGSREQUEST']._serialized_start=1389
61
+ _globals['_TAILLOGSREQUEST']._serialized_end=1516
62
+ _globals['_TAILLOGSRESPONSE']._serialized_start=1518
63
+ _globals['_TAILLOGSRESPONSE']._serialized_end=1573
64
+ _globals['_GETJOBSTATUSREQUEST']._serialized_start=1575
65
+ _globals['_GETJOBSTATUSREQUEST']._serialized_end=1613
66
+ _globals['_GETJOBSTATUSRESPONSE']._serialized_start=1616
67
+ _globals['_GETJOBSTATUSRESPONSE']._serialized_end=1780
68
+ _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_start=1710
69
+ _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_end=1780
70
+ _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_start=1782
71
+ _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_end=1847
72
+ _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_start=1849
73
+ _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_end=1902
74
+ _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_start=1904
75
+ _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_end=1965
76
+ _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_start=1967
77
+ _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_end=2016
78
+ _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_start=2018
79
+ _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_end=2061
80
+ _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_start=2064
81
+ _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_end=2216
82
+ _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_start=2167
83
+ _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_end=2216
84
+ _globals['_JOBSSERVICE']._serialized_start=2491
85
+ _globals['_JOBSSERVICE']._serialized_end=3404
86
86
  # @@protoc_insertion_point(module_scope)
@@ -66,18 +66,20 @@ class QueueJobRequest(_message.Message):
66
66
  def __init__(self, job_id: _Optional[int] = ..., codegen: _Optional[str] = ..., script_path: _Optional[str] = ..., remote_log_dir: _Optional[str] = ..., managed_job: _Optional[_Union[ManagedJobInfo, _Mapping]] = ...) -> None: ...
67
67
 
68
68
  class ManagedJobInfo(_message.Message):
69
- __slots__ = ("name", "pool", "workspace", "entrypoint", "tasks")
69
+ __slots__ = ("name", "pool", "workspace", "entrypoint", "tasks", "user_id")
70
70
  NAME_FIELD_NUMBER: _ClassVar[int]
71
71
  POOL_FIELD_NUMBER: _ClassVar[int]
72
72
  WORKSPACE_FIELD_NUMBER: _ClassVar[int]
73
73
  ENTRYPOINT_FIELD_NUMBER: _ClassVar[int]
74
74
  TASKS_FIELD_NUMBER: _ClassVar[int]
75
+ USER_ID_FIELD_NUMBER: _ClassVar[int]
75
76
  name: str
76
77
  pool: str
77
78
  workspace: str
78
79
  entrypoint: str
79
80
  tasks: _containers.RepeatedCompositeFieldContainer[ManagedJobTask]
80
- def __init__(self, name: _Optional[str] = ..., pool: _Optional[str] = ..., workspace: _Optional[str] = ..., entrypoint: _Optional[str] = ..., tasks: _Optional[_Iterable[_Union[ManagedJobTask, _Mapping]]] = ...) -> None: ...
81
+ user_id: str
82
+ def __init__(self, name: _Optional[str] = ..., pool: _Optional[str] = ..., workspace: _Optional[str] = ..., entrypoint: _Optional[str] = ..., tasks: _Optional[_Iterable[_Union[ManagedJobTask, _Mapping]]] = ..., user_id: _Optional[str] = ...) -> None: ...
81
83
 
82
84
  class ManagedJobTask(_message.Message):
83
85
  __slots__ = ("task_id", "name", "resources_str", "metadata_json")
@@ -98,6 +98,7 @@ async def tail_logs(
98
98
  request: fastapi.Request, log_body: payloads.ServeLogsBody,
99
99
  background_tasks: fastapi.BackgroundTasks
100
100
  ) -> fastapi.responses.StreamingResponse:
101
+ executor.check_request_thread_executor_available()
101
102
  request_task = executor.prepare_request(
102
103
  request_id=request.state.request_id,
103
104
  request_name='serve.logs',
sky/serve/service.py CHANGED
@@ -13,7 +13,6 @@ from typing import Dict
13
13
 
14
14
  import filelock
15
15
 
16
- from sky import authentication
17
16
  from sky import exceptions
18
17
  from sky import global_user_state
19
18
  from sky import sky_logging
@@ -28,6 +27,7 @@ from sky.serve import replica_managers
28
27
  from sky.serve import serve_state
29
28
  from sky.serve import serve_utils
30
29
  from sky.skylet import constants as skylet_constants
30
+ from sky.utils import auth_utils
31
31
  from sky.utils import common_utils
32
32
  from sky.utils import controller_utils
33
33
  from sky.utils import subprocess_utils
@@ -227,7 +227,7 @@ def _start(service_name: str, tmp_task_yaml: str, job_id: int, entrypoint: str):
227
227
  """
228
228
  # Generate ssh key pair to avoid race condition when multiple sky.launch
229
229
  # are executed at the same time.
230
- authentication.get_or_generate_keys()
230
+ auth_utils.get_or_generate_keys()
231
231
 
232
232
  # Initialize database record for the service.
233
233
  task = task_lib.Task.from_yaml(tmp_task_yaml)