This is an automated email from the ASF dual-hosted git repository.
kuanhsun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git
The following commit(s) were added to refs/heads/master by this push:
new e4eeb44 SUBMARINE-1212. fine tune crud operation flow of notebook to
align experiment flow
e4eeb44 is described below
commit e4eeb446b52acf18a9028d8dd16aa50ca9c47156
Author: FatalLin <[email protected]>
AuthorDate: Wed Mar 16 22:29:34 2022 +0800
SUBMARINE-1212. fine tune crud operation flow of notebook to align
experiment flow
### What is this PR for?
After we completed the refactoring of experiment operation flow, we would
like to align the same pattern on notebook flow; In that case, both the
experiment and notebook flow has the same flow. Besides, we also could collect
all the status change logic into agent.
### What type of PR is it?
Improvement
### Todos
N/A
### What is the Jira issue?
https://issues.apache.org/jira/browse/SUBMARINE-1212
### How should this be tested?
should passed all existed tests.
### Screenshots (if appropriate)
### Questions:
* Do the license files need updating?No
* Are there breaking changes for older versions? No
* Does this need new documentation? No
Author: FatalLin <[email protected]>
Signed-off-by: kuanhsun <[email protected]>
Closes #897 from FatalLin/SUBMARINE-1212 and squashes the following commits:
ce633445 [FatalLin] rollback deleting logic
179dfa36 [FatalLin] modify nameing policy
3a7899f4 [FatalLin] fine tune crud operation flow of notebook
---
.../submarine/server/notebook/NotebookManager.java | 20 +---------
.../server/k8s/agent/handler/NotebookHandler.java | 7 ++--
.../server/submitter/k8s/K8sSubmitter.java | 26 ++----------
.../server/submitter/k8s/model/AgentPod.java | 9 +++--
.../submitter/k8s/parser/NotebookSpecParser.java | 46 ----------------------
5 files changed, 14 insertions(+), 94 deletions(-)
diff --git
a/submarine-server/server-core/src/main/java/org/apache/submarine/server/notebook/NotebookManager.java
b/submarine-server/server-core/src/main/java/org/apache/submarine/server/notebook/NotebookManager.java
index 8dfd104..dcdfbdf 100644
---
a/submarine-server/server-core/src/main/java/org/apache/submarine/server/notebook/NotebookManager.java
+++
b/submarine-server/server-core/src/main/java/org/apache/submarine/server/notebook/NotebookManager.java
@@ -120,13 +120,7 @@ public class NotebookManager {
List<Notebook> notebookList = new ArrayList<>();
for (Notebook notebook : notebookService.selectAll()) {
if (namespace == null || namespace.length() == 0 ){
- if
(notebook.getStatus().equals(Notebook.Status.STATUS_CREATING.getValue())) {
- Notebook patchNotebook = submitter.findNotebook(notebook.getSpec());
- notebook.rebuild(patchNotebook);
- notebookList.add(notebook);
- } else {
- notebookList.add(notebook);
- }
+ notebookList.add(notebook);
}
}
return notebookList;
@@ -142,17 +136,7 @@ public class NotebookManager {
List<Notebook> serviceNotebooks = notebookService.selectAll();
List<Notebook> notebookList = new ArrayList<>();
for (Notebook nb : serviceNotebooks) {
- try {
- if (nb.getStatus().equals(Notebook.Status.STATUS_CREATING.getValue()))
{
- Notebook patchNotebook = submitter.findNotebook(nb.getSpec());
- nb.rebuild(patchNotebook);
- notebookList.add(nb);
- } else {
- notebookList.add(nb);
- }
- } catch (SubmarineRuntimeException e) {
- LOG.error("Error when get notebook resource, skip this row!", e);
- }
+ notebookList.add(nb);
}
return notebookList;
}
diff --git
a/submarine-server/server-submitter/submarine-k8s-agent/src/main/java/org/apache/submarine/server/k8s/agent/handler/NotebookHandler.java
b/submarine-server/server-submitter/submarine-k8s-agent/src/main/java/org/apache/submarine/server/k8s/agent/handler/NotebookHandler.java
index fa4fb51..1931a6b 100644
---
a/submarine-server/server-submitter/submarine-k8s-agent/src/main/java/org/apache/submarine/server/k8s/agent/handler/NotebookHandler.java
+++
b/submarine-server/server-submitter/submarine-k8s-agent/src/main/java/org/apache/submarine/server/k8s/agent/handler/NotebookHandler.java
@@ -83,11 +83,11 @@ public class NotebookHandler extends CustomResourceHandler {
ListOptions listOptions = new ListOptions();
String podLabelSelector = String.format("%s=%s", NotebookCR.NOTEBOOK_ID,
this.resourceId);
listOptions.setLabelSelector(podLabelSelector);
+
+
V1PodList podList = podClient.list(namespace,
listOptions).throwsApiException().getObject();
-
this.uid = podList.getItems().get(podList.getItems().size() -
1).getMetadata().getUid();
-
-
+
listOptions = new ListOptions();
String fieldSelector = String.format("involvedObject.uid=%s", this.uid);
@@ -140,7 +140,6 @@ public class NotebookHandler extends CustomResourceHandler {
notebook = NotebookUtils.parseObject(object,
NotebookUtils.ParseOpt.PARSE_OPT_GET);
notebook.setStatus(Notebook.Status.STATUS_TERMINATING.getValue());
restClient.callStatusUpdate(CustomResourceType.Notebook,
this.resourceId, notebook);
-
LOG.info("Receive terminating event, exit progress");
return;
default:
diff --git
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
index 6dbbc3c..5e961fc 100644
---
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
+++
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
@@ -482,7 +482,8 @@ public class K8sSubmitter implements Submitter {
LOG.error("K8s submitter: parse response object failed by " +
e.getMessage(), e);
throw new SubmarineRuntimeException(500, "K8s Submitter parse upstream
response failed.");
}
-
+ AgentPod agentPod = new AgentPod(namespace, spec.getMeta().getName(),
+ CustomResourceType.Notebook, notebookId);
// create persistent volume claim
try {
// workspace
@@ -517,6 +518,7 @@ public class K8sSubmitter implements Submitter {
try {
Object object =
notebookCRClient.create(notebookCR).throwsApiException().getObject();
notebook = NotebookUtils.parseObject(object,
NotebookUtils.ParseOpt.PARSE_OPT_CREATE);
+ V1Pod agentPodResult =
podClient.create(agentPod).throwsApiException().getObject();
} catch (JsonSyntaxException e) {
LOG.error("K8s submitter: parse response object failed by " +
e.getMessage(), e);
if (needOverwrite) rollbackCreationConfigMap(namespace, configmap);
@@ -555,28 +557,6 @@ public class K8sSubmitter implements Submitter {
Object object = notebookCRClient.get(namespace,
notebookCR.getMetadata().getName())
.throwsApiException().getObject();
notebook = NotebookUtils.parseObject(object,
NotebookUtils.ParseOpt.PARSE_OPT_GET);
- if
(notebook.getStatus().equals(Notebook.Status.STATUS_WAITING.toString())) {
- LOG.info(String.format("notebook status: waiting; check the pods in
namespace:[%s] to "
- + "ensure is the waiting caused by image pulling", namespace));
- String podLabelSelector = String.format("%s=%s",
NotebookCR.NOTEBOOK_ID,
- spec.getMeta().getLabels().get(NotebookCR.NOTEBOOK_ID).toString());
- ListOptions listOptions = new ListOptions();
- listOptions.setLabelSelector(podLabelSelector);
- final V1PodList podList = podClient.list(getServerNamespace(),
listOptions)
- .throwsApiException().getObject();
- String podName = podList.getItems().get(0).getMetadata().getName();
-
- String fieldSelector = String.format("involvedObject.name=%s",
podName);
- listOptions = new ListOptions();
- listOptions.setFieldSelector(fieldSelector);
- CoreV1EventList events = eventClient.list(namespace,
listOptions).throwsApiException().getObject();
- CoreV1Event latestEvent =
events.getItems().get(events.getItems().size() - 1);
-
- if (latestEvent.getReason().equalsIgnoreCase("Pulling")) {
- notebook.setStatus(Notebook.Status.STATUS_PULLING.getValue());
- notebook.setReason(latestEvent.getReason());
- }
- }
} catch (ApiException e) {
// SUBMARINE-1124
// The exception that obtaining CRD resources is not necessarily because
the CRD is deleted,
diff --git
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/model/AgentPod.java
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/model/AgentPod.java
index 2a7efd8..e38fe91 100644
---
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/model/AgentPod.java
+++
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/model/AgentPod.java
@@ -41,9 +41,7 @@ public class AgentPod extends V1Pod{
super();
V1ObjectMeta meta = new V1ObjectMeta();
- meta.setName(
- String.format("%s-%s-%s-%s", type.toString().toLowerCase(), name,
- resourceId.toLowerCase(), CONTAINER_NAME));
+ meta.setName(getNormalizePodName(type, name, resourceId));
meta.setNamespace(namespace);
this.setMetadata(meta);
@@ -92,4 +90,9 @@ public class AgentPod extends V1Pod{
spec.setRestartPolicy("OnFailure");
this.setSpec(spec);
}
+
+ private String getNormalizePodName(CustomResourceType type, String name,
String resourceId) {
+ return String.format("%s-%s-%s-%s",
resourceId.toString().toLowerCase().replace('_', '-'),
+ type.toString().toLowerCase(), name, CONTAINER_NAME);
+ }
}
diff --git
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/parser/NotebookSpecParser.java
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/parser/NotebookSpecParser.java
index ff9c750..3bcd09e 100644
---
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/parser/NotebookSpecParser.java
+++
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/parser/NotebookSpecParser.java
@@ -34,7 +34,6 @@ import
io.kubernetes.client.openapi.models.V1PersistentVolumeClaimVolumeSource;
import org.apache.commons.lang3.StringUtils;
import org.apache.submarine.commons.utils.SubmarineConfVars;
import org.apache.submarine.commons.utils.SubmarineConfiguration;
-import org.apache.submarine.server.api.common.CustomResourceType;
import org.apache.submarine.server.api.environment.Environment;
import org.apache.submarine.server.api.spec.EnvironmentSpec;
import org.apache.submarine.server.api.spec.KernelSpec;
@@ -68,7 +67,6 @@ public class NotebookSpecParser {
NotebookCR notebookCR = new NotebookCR();
notebookCR.setMetadata(parseMetadata(spec));
notebookCR.setSpec(parseNotebookCRSpec(spec));
- appendSidecar(notebookCR, notebookId, namespace);
return notebookCR;
}
@@ -283,48 +281,4 @@ public class NotebookSpecParser {
+ "activation.\"; fi");
return condaVersionValidationCommand.toString();
}
-
- private static void appendSidecar(NotebookCR notebookCR, String notebookId,
String namespace) {
- NotebookCRSpec notebookCRSpec = notebookCR.getSpec();
- List<V1Container> containers =
notebookCRSpec.getTemplate().getSpec().getContainers();
- V1Container agentContainer = new V1Container();
- agentContainer.setName("agent");
- agentContainer.setImage("apache/submarine:agent-0.7.0");
-
- List<V1EnvVar> envVarList = new ArrayList<>();
- V1EnvVar crTypeVar = new V1EnvVar();
- crTypeVar.setName("CUSTOM_RESOURCE_TYPE");
- crTypeVar.setValue(CustomResourceType.Notebook.toString());
-
- V1EnvVar crNameVar = new V1EnvVar();
- crNameVar.setName("CUSTOM_RESOURCE_NAME");
- crNameVar.setValue(notebookCR.getMetadata().getName());
-
- V1EnvVar namespaceVar = new V1EnvVar();
- namespaceVar.setName("NAMESPACE");
- namespaceVar.setValue(namespace);
-
- V1EnvVar serverHostVar = new V1EnvVar();
- serverHostVar.setName("SERVER_HOST");
- serverHostVar.setValue(conf.getServerServiceName());
-
- V1EnvVar serverPortVar = new V1EnvVar();
- serverPortVar.setName("SERVER_PORT");
- serverPortVar.setValue(String.valueOf(conf.getServerPort()));
-
- V1EnvVar customResourceIdVar = new V1EnvVar();
- customResourceIdVar.setName("CUSTOM_RESOURCE_ID");
- customResourceIdVar.setValue(notebookId);
-
- envVarList.add(crTypeVar);
- envVarList.add(crNameVar);
- envVarList.add(namespaceVar);
- envVarList.add(serverHostVar);
- envVarList.add(serverPortVar);
- envVarList.add(customResourceIdVar);
-
- agentContainer.env(envVarList);
-
- containers.add(agentContainer);
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]