Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
0c3af5e
added backend notebook-migration-service related files
zyratlo May 28, 2026
baea89a
added test cases
zyratlo May 28, 2026
7c16db7
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
zyratlo Jun 1, 2026
3ab68e2
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
zyratlo Jun 5, 2026
5e1cae4
fixed formatting for spec test file
zyratlo Jun 5, 2026
2168500
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
zyratlo Jun 9, 2026
346cb6a
Merge branch 'refs/heads/main' into migration-tool-backend-notebook-m…
zyratlo Jun 15, 2026
af14652
added weak default token for Jupyter auth
zyratlo Jun 16, 2026
0502cfb
fix stale StorageConfig import after move to common.config package
zyratlo Jun 16, 2026
1ffef65
disconnect HttpURLConnection in finally to avoid socket leak
zyratlo Jun 16, 2026
cc80b1a
derive jupyter iframe url from uploaded notebook name
zyratlo Jun 16, 2026
7468ab1
document per-user-pod assumption for jupyterIframeURL global state
zyratlo Jun 16, 2026
f0cf261
build error responses via mapper to avoid malformed JSON
zyratlo Jun 16, 2026
c4df430
stop logging full request bodies in notebook-migration endpoints
zyratlo Jun 16, 2026
89e3d5a
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
zyratlo Jun 16, 2026
391e2bb
fix notebook fetch test to respect unique wid constraint
zyratlo Jun 16, 2026
c05c35b
remove redundant logback.xml in favor of dropwizard yaml logging
zyratlo Jun 17, 2026
ce69dfd
remove "Default values..." comment from jupyter config
zyratlo Jun 17, 2026
733dcfc
read jupyter token from shared JUPYTER_TOKEN env var
zyratlo Jun 17, 2026
6f69e91
use shared jacksonVersion for notebook-migration-service override
zyratlo Jun 17, 2026
dc08534
return 409 when storing a second notebook for a workflow
zyratlo Jun 17, 2026
01b731b
ship binary license files in notebook-migration-service dist
zyratlo Jun 17, 2026
0fe0df8
register notebook-migration-service in license checks and CI matrix
zyratlo Jun 17, 2026
3d112c9
regenerate NOTICE-binary as utf-8 to fix copyright mojibake
zyratlo Jun 17, 2026
d2ad797
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
zyratlo Jun 19, 2026
8bed0f9
add HealthCheckResource to notebook-migration-service
zyratlo Jun 22, 2026
fd0d472
validate notebook name to block path traversal and json injection
zyratlo Jun 22, 2026
f7ca644
require auth and workflow write access on notebook-migration endpoints
zyratlo Jun 22, 2026
372fe10
add resource-class and jupyter-unreachable test coverage
zyratlo Jun 22, 2026
97106a8
cover resource HTTP paths and service run in tests
zyratlo Jun 22, 2026
f6b7b2c
cover jupyter availability and upload status-code branches
zyratlo Jun 22, 2026
e416ce3
fix formatting
zyratlo Jun 22, 2026
c0e243e
add volatile modifier to jupyterIframeURL
zyratlo Jun 23, 2026
319f0a3
build jupyter URL responses via mapper to guarantee valid JSON
zyratlo Jun 23, 2026
275f5eb
Merge remote-tracking branch 'origin/migration-tool-backend-notebook-…
zyratlo Jun 23, 2026
7f90d74
translate unique-violation to 409 as a concurrency backstop in store
zyratlo Jun 23, 2026
44aafb1
formatting
zyratlo Jun 23, 2026
eb19044
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
zyratlo Jun 23, 2026
99048f1
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
mengw15 Jun 24, 2026
a24161c
Merge branch 'main' into migration-tool-backend-notebook-migration-se…
mengw15 Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,8 @@ jobs:
sbt_project: ComputingUnitManagingService
- service: workflow-compiling-service
sbt_project: WorkflowCompilingService
- service: notebook-migration-service
sbt_project: NotebookMigrationService
env:
JAVA_OPTS: -Xms2048M -Xmx2048M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8
JVM_OPTS: -Xms2048M -Xmx2048M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8
Expand Down
1 change: 1 addition & 0 deletions bin/licensing/check_binary_deps.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"file-service/LICENSE-binary",
"workflow-compiling-service/LICENSE-binary",
"computing-unit-managing-service/LICENSE-binary",
"notebook-migration-service/LICENSE-binary",
"amber/LICENSE-binary-java",
"amber/LICENSE-binary-python",
"frontend/LICENSE-binary",
Expand Down
13 changes: 12 additions & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,16 @@ lazy val WorkflowExecutionService = (project in file("amber"))
)
.configs(Test)
.dependsOn(DAO % "test->test", Auth % "test->test") // test scope dependency
lazy val NotebookMigrationService = (project in file("notebook-migration-service"))
.dependsOn(Auth, Config, DAO)
.settings(asfLicensingSettings)
.settings(
dependencyOverrides ++= Seq(
// override it as io.dropwizard 4 require 2.16.1 or higher
"com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion
)
)
.dependsOn(DAO % "test->test") // test scope dependency

// root project definition
lazy val TexeraProject = (project in file("."))
Expand All @@ -186,7 +196,8 @@ lazy val TexeraProject = (project in file("."))
ConfigService,
FileService,
WorkflowCompilingService,
WorkflowExecutionService
WorkflowExecutionService,
NotebookMigrationService
)
.settings(
name := "texera",
Expand Down
10 changes: 10 additions & 0 deletions common/config/src/main/resources/storage.conf
Original file line number Diff line number Diff line change
Expand Up @@ -150,4 +150,14 @@ storage {
password = "postgres"
password = ${?STORAGE_JDBC_PASSWORD}
}

# Configurations of the JupyterLab service
jupyter {
url = "http://localhost:9100"
url = ${?STORAGE_JUPYTER_URL}
# Read from the same JUPYTER_TOKEN env var as the Jupyter container
# (notebook-migration-service/src/main/resources/docker-compose.yml)
token = "texera"
token = ${?JUPYTER_TOKEN}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,8 @@ object StorageConfig {
val ENV_S3_REGION = "STORAGE_S3_REGION"
val ENV_S3_AUTH_USERNAME = "STORAGE_S3_AUTH_USERNAME"
val ENV_S3_AUTH_PASSWORD = "STORAGE_S3_AUTH_PASSWORD"

// Jupyter
val jupyterURL: String = conf.getString("storage.jupyter.url")
val jupyterToken: String = conf.getString("storage.jupyter.token")
}
5 changes: 5 additions & 0 deletions frontend/proxy.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
"secure": false,
"changeOrigin": true
},
"/api/notebook-migration": {
"target": "http://localhost:9098",
"secure": false,
"changeOrigin": true
},
"/api/models": {
"target": "http://localhost:9096",
"secure": false,
Expand Down
400 changes: 400 additions & 0 deletions notebook-migration-service/LICENSE-binary

Large diffs are not rendered by default.

Loading
Loading