This is an automated email from the ASF dual-hosted git repository.
linxinyuan pushed a commit to branch xinyuan-support-mutilink
in repository https://gitbox.apache.org/repos/asf/texera.git
The following commit(s) were added to refs/heads/xinyuan-support-mutilink by
this push:
new 452d7d609a update
452d7d609a is described below
commit 452d7d609a476a08eb31cba6c4b8cbc637205e55
Author: Xinyuan Lin <[email protected]>
AuthorDate: Sat Mar 28 23:09:10 2026 -0700
update
---
...xample] Data Exploration on Movies Dataset.json | 25 ----------------------
.../workflow-editor/workflow-editor.component.ts | 2 +-
.../validation/validation-workflow.service.ts | 13 +++--------
.../model/workflow-action.service.ts | 5 +----
4 files changed, 5 insertions(+), 40 deletions(-)
diff --git a/bin/single-node/examples/workflows/[Example] Data Exploration on
Movies Dataset.json b/bin/single-node/examples/workflows/[Example] Data
Exploration on Movies Dataset.json
index 3e9f99c613..9144958b09 100644
--- a/bin/single-node/examples/workflows/[Example] Data Exploration on Movies
Dataset.json
+++ b/bin/single-node/examples/workflows/[Example] Data Exploration on Movies
Dataset.json
@@ -17,7 +17,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -40,7 +39,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -49,7 +47,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -79,7 +76,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -88,7 +84,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -115,7 +110,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -124,7 +118,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -147,7 +140,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -156,7 +148,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -183,7 +174,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -192,7 +182,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -215,7 +204,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -224,7 +212,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -250,7 +237,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -259,7 +245,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -292,7 +277,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": true,
"isDynamicPort": false,
"dependencies": []
}
@@ -301,7 +285,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -332,7 +315,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -341,7 +323,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -371,7 +352,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -380,7 +360,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -404,7 +383,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -413,7 +391,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
@@ -437,7 +414,6 @@
{
"portID": "input-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false,
"dependencies": []
}
@@ -446,7 +422,6 @@
{
"portID": "output-0",
"displayName": "",
- "allowMultiInputs": false,
"isDynamicPort": false
}
],
diff --git
a/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts
b/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts
index 6255560108..a7d3e60900 100644
---
a/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts
+++
b/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts
@@ -827,7 +827,7 @@ export class WorkflowEditorComponent implements OnInit,
AfterViewInit, OnDestroy
.pipe(untilDestroyed(this))
.subscribe(elementView => {
if
(this.workflowActionService.getTexeraGraph().hasOperator(elementView.model.id.toString()))
{
- this.workflowActionService.addPort(elementView.model.id.toString(),
true, false);
+ this.workflowActionService.addPort(elementView.model.id.toString(),
true);
}
});
fromJointPaperEvent(this.paper, "element:add-output-port")
diff --git
a/frontend/src/app/workspace/service/validation/validation-workflow.service.ts
b/frontend/src/app/workspace/service/validation/validation-workflow.service.ts
index 93099888b2..b0cbe176e0 100644
---
a/frontend/src/app/workspace/service/validation/validation-workflow.service.ts
+++
b/frontend/src/app/workspace/service/validation/validation-workflow.service.ts
@@ -325,16 +325,9 @@ export class ValidationWorkflowService {
for (let i = 0; i < operator.inputPorts.length; i++) {
const port = operator.inputPorts[i];
const portNumInputs = numInputLinksByPort.get(port.portID) ?? 0;
- if (port.allowMultiInputs) {
- if (portNumInputs < 1) {
- satisfyInput = false;
- inputPortsViolationMessage += `${port.displayName ?? ""} requires at
least 1 inputs, has ${portNumInputs}`;
- }
- } else {
- if (portNumInputs !== 1) {
- satisfyInput = false;
- inputPortsViolationMessage += `${port.displayName ?? ""} requires 1
input, has ${portNumInputs}`;
- }
+ if (portNumInputs < 1) {
+ satisfyInput = false;
+ inputPortsViolationMessage += `${port.displayName ?? ""} requires at
least 1 inputs, has ${portNumInputs}`;
}
}
diff --git
a/frontend/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts
b/frontend/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts
index 0215f14b7d..a943975176 100644
---
a/frontend/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts
+++
b/frontend/src/app/workspace/service/workflow-graph/model/workflow-action.service.ts
@@ -236,7 +236,7 @@ export class WorkflowActionService {
});
}
- public addPort(operatorID: string, isInput: boolean, allowMultiInputs?:
boolean): void {
+ public addPort(operatorID: string, isInput: boolean): void {
const operator = this.texeraGraph.getOperator(operatorID);
// TODO: use uniform serde to calculate the portID
const prefix = isInput ? "input-" : "output-";
@@ -261,9 +261,6 @@ export class WorkflowActionService {
if (!operator.dynamicOutputPorts && !isInput) {
throw new Error(`operator ${operatorID} does not have dynamic output
ports`);
}
- if (!isInput && allowMultiInputs !== undefined) {
- throw new Error("error: allowMultiInputs property of an output port
should not be specified");
- }
this.texeraGraph.bundleActions(() => {
// add port to the operator