Skip to content

Commit 8e1d7ab

Browse files
committed
#AI Commit#bug fix
1 parent 55b0c6d commit 8e1d7ab

1 file changed

Lines changed: 76 additions & 4 deletions

File tree

  • dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/execution/impl

dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/execution/impl/LinkisNodeExecutionImpl.java

Lines changed: 76 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import scala.tools.nsc.settings.Final;
4444

4545
import java.text.MessageFormat;
46+
import java.lang.reflect.Method;
4647
import java.util.ArrayList;
4748
import java.util.HashMap;
4849
import java.util.Arrays;
@@ -349,14 +350,17 @@ public String getResult(Job job, int index, int maxSize) {
349350
@Override
350351
public Map<String, String> getResultVariables(Job job, int maxSize) {
351352
Map<String, String> variables = new LinkedHashMap<>();
352-
Object fileContent = getResultFileContent(job, 0, maxSize);
353+
Object resultSetResponse = getResultSetResponse(job, 0, maxSize);
354+
Object fileContent = extractFileContent(resultSetResponse);
355+
Object metaData = extractMetaData(resultSetResponse);
353356
if (fileContent == null) {
354357
job.getLogObj().warn("Branch variable extraction skipped because result file content is null.");
355358
LOGGER.warn("Branch variable extraction skipped because result file content is null.");
356359
return variables;
357360
}
358361
job.getLogObj().info("Branch variable extraction file content type: " + fileContent.getClass().getName());
359362
LOGGER.info("Branch variable extraction file content type: {}", fileContent.getClass().getName());
363+
LOGGER.info("Branch variable extraction metadata preview: {}", previewObject(metaData));
360364
if (!(fileContent instanceof ArrayList)) {
361365
job.getLogObj().warn("Branch variable extraction skipped because result file content is not ArrayList: " + fileContent);
362366
LOGGER.warn("Branch variable extraction skipped because result file content is not ArrayList: {}", fileContent);
@@ -374,7 +378,7 @@ public Map<String, String> getResultVariables(Job job, int maxSize) {
374378
if (firstRow instanceof Map) {
375379
extractVariablesFromMapRows(rows, variables);
376380
} else if (firstRow instanceof ArrayList) {
377-
extractVariablesFromArrayRows(rows, variables);
381+
extractVariablesFromArrayRows(rows, metaData, variables);
378382
} else {
379383
job.getLogObj().warn("Branch variable extraction skipped because first row type is unsupported: " + firstRow.getClass().getName());
380384
LOGGER.warn("Branch variable extraction skipped because first row type is unsupported: {}", firstRow.getClass().getName());
@@ -384,7 +388,7 @@ public Map<String, String> getResultVariables(Job job, int maxSize) {
384388
return variables;
385389
}
386390

387-
private void extractVariablesFromArrayRows(ArrayList rows, Map<String, String> variables) {
391+
private void extractVariablesFromArrayRows(ArrayList rows, Object metaData, Map<String, String> variables) {
388392
if (rows.size() >= 2 && rows.get(0) instanceof ArrayList && rows.get(1) instanceof ArrayList) {
389393
ArrayList headers = (ArrayList) rows.get(0);
390394
ArrayList values = (ArrayList) rows.get(1);
@@ -404,6 +408,13 @@ private void extractVariablesFromArrayRows(ArrayList rows, Map<String, String> v
404408
ArrayList row = (ArrayList) rows.get(0);
405409
if (row.size() == 1) {
406410
LOGGER.warn("Branch variable extraction saw a single-row single-column result: {}. Column name may not be present in fileContent.", row);
411+
String columnName = extractSingleColumnName(metaData);
412+
String value = normalizeCellValue(row.get(0));
413+
if (StringUtils.isNotBlank(columnName) && value != null) {
414+
variables.put(columnName, value);
415+
LOGGER.info("Branch variable extraction recovered single-column metadata: {}={}", columnName, value);
416+
return;
417+
}
407418
}
408419
}
409420

@@ -438,6 +449,37 @@ private void extractVariablesFromMapRows(ArrayList rows, Map<String, String> var
438449
}
439450
}
440451

452+
private String extractSingleColumnName(Object metaData) {
453+
if (metaData instanceof Map) {
454+
Map map = (Map) metaData;
455+
String columnName = firstNonBlank(map.get("columnName"), map.get("name"), map.get("column"), map.get("alias"));
456+
if (StringUtils.isNotBlank(columnName)) {
457+
return columnName;
458+
}
459+
}
460+
if (metaData instanceof List && !((List) metaData).isEmpty()) {
461+
Object first = ((List) metaData).get(0);
462+
if (first instanceof Map) {
463+
Map map = (Map) first;
464+
String columnName = firstNonBlank(map.get("columnName"), map.get("name"), map.get("column"), map.get("alias"));
465+
if (StringUtils.isNotBlank(columnName)) {
466+
return columnName;
467+
}
468+
}
469+
}
470+
return null;
471+
}
472+
473+
private String firstNonBlank(Object... values) {
474+
for (Object value : values) {
475+
String text = normalizeCellValue(value);
476+
if (StringUtils.isNotBlank(text)) {
477+
return text;
478+
}
479+
}
480+
return null;
481+
}
482+
441483
private String previewRows(ArrayList rows) {
442484
int previewSize = Math.min(rows.size(), 3);
443485
return rows.subList(0, previewSize).toString();
@@ -447,7 +489,37 @@ private String normalizeCellValue(Object value) {
447489
return value == null ? null : value.toString();
448490
}
449491

450-
private Object getResultFileContent(Job job, int index, int maxSize) {
492+
private String previewObject(Object value) {
493+
if (value == null) {
494+
return "null";
495+
}
496+
String text = value.toString();
497+
return text.length() > 300 ? text.substring(0, 300) + "..." : text;
498+
}
499+
500+
private Object extractFileContent(Object resultSetResponse) {
501+
return invokeNoArgMethod(resultSetResponse, "getFileContent", "fileContent");
502+
}
503+
504+
private Object extractMetaData(Object resultSetResponse) {
505+
return invokeNoArgMethod(resultSetResponse, "getMetaData", "getMetadata", "metaData", "metadata", "getMeta", "meta");
506+
}
507+
508+
private Object invokeNoArgMethod(Object target, String... methodNames) {
509+
if (target == null) {
510+
return null;
511+
}
512+
for (String methodName : methodNames) {
513+
try {
514+
Method method = target.getClass().getMethod(methodName);
515+
return method.invoke(target);
516+
} catch (Throwable ignored) {
517+
}
518+
}
519+
return null;
520+
}
521+
522+
private Object getResultSetResponse(Job job, int index, int maxSize) {
451523
JobInfoResult jobInfo = getClient(job).getJobInfo(job.getJobExecuteResult());
452524
String[] resultSetList = jobInfo.getResultSetList(getClient(job));
453525
if (resultSetList != null && resultSetList.length > index) {

0 commit comments

Comments
 (0)