[
https://issues.apache.org/jira/browse/OOZIE-3004?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Purshotam Shah updated OOZIE-3004:
----------------------------------
Description:
UI shows N/A for start time and console URL
We do parallel job submission for forked actions, and each job submission needs
to update workflow instance.
To avoid data race, ForkedActionStartXCommand write workflow instance to a
temporary map.
{code:title=ForkedActionExecutorContext.java}
private Map<String, String> contextVariableMap = new HashMap<String, String>();
public ForkedActionExecutorContext(WorkflowJobBean workflow,
WorkflowActionBean action, boolean isRetry,
boolean isUserRetry) {
super(workflow, action, isRetry, isUserRetry);
}
public void setVar(String name, String value) {
if (value != null) {
contextVariableMap.remove(name);
}
else {
contextVariableMap.put(name, value);
}
}
{code}
And when forked submission completes, the temporary map is written to the
workflow instance.
{code:title=SignalXCommand.java}
List<Future<ActionExecutorContext>> futures =
Services.get().get(CallableQueueService.class)
.invokeAll(tasks);
for (Future<ActionExecutorContext> result : futures) {
if (result == null) {
submitJobByQueuing = true;
continue;
}
ActionExecutorContext context = result.get();
Map<String, String> contextVariableMap =
((ForkedActionExecutorContext) context).getContextMap();
LOG.debug("contextVariableMap size of action " +
context.getAction().getId() + " is " + contextVariableMap.size());
for (String key : contextVariableMap.keySet()) {
context.setVarToWorkflow(key, contextVariableMap.get(key));
}
{code}
The logic for writing to the temporary map is incorrect. It should be
{code}
public void setVar(String name, String value) {
if (value == null) {
contextVariableMap.remove(name);
}
else {
contextVariableMap.put(name, value);
}
}
{code}
was:UI shows N/A for start time and console URL
> Forked action retry info is not working
> ---------------------------------------
>
> Key: OOZIE-3004
> URL: https://issues.apache.org/jira/browse/OOZIE-3004
> Project: Oozie
> Issue Type: Bug
> Reporter: Purshotam Shah
> Assignee: Purshotam Shah
> Attachments: OOZIE-3004-V1.patch, OOZIE-3004-V2.patch,
> screenshot-1.png
>
>
> UI shows N/A for start time and console URL
> We do parallel job submission for forked actions, and each job submission
> needs to update workflow instance.
> To avoid data race, ForkedActionStartXCommand write workflow instance to a
> temporary map.
> {code:title=ForkedActionExecutorContext.java}
> private Map<String, String> contextVariableMap = new HashMap<String,
> String>();
> public ForkedActionExecutorContext(WorkflowJobBean workflow,
> WorkflowActionBean action, boolean isRetry,
> boolean isUserRetry) {
> super(workflow, action, isRetry, isUserRetry);
> }
> public void setVar(String name, String value) {
> if (value != null) {
> contextVariableMap.remove(name);
> }
> else {
> contextVariableMap.put(name, value);
> }
> }
> {code}
> And when forked submission completes, the temporary map is written to the
> workflow instance.
> {code:title=SignalXCommand.java}
> List<Future<ActionExecutorContext>> futures =
> Services.get().get(CallableQueueService.class)
> .invokeAll(tasks);
> for (Future<ActionExecutorContext> result : futures) {
> if (result == null) {
> submitJobByQueuing = true;
> continue;
> }
> ActionExecutorContext context = result.get();
> Map<String, String> contextVariableMap =
> ((ForkedActionExecutorContext) context).getContextMap();
> LOG.debug("contextVariableMap size of action " +
> context.getAction().getId() + " is " + contextVariableMap.size());
> for (String key : contextVariableMap.keySet()) {
> context.setVarToWorkflow(key,
> contextVariableMap.get(key));
> }
> {code}
> The logic for writing to the temporary map is incorrect. It should be
> {code}
> public void setVar(String name, String value) {
> if (value == null) {
> contextVariableMap.remove(name);
> }
> else {
> contextVariableMap.put(name, value);
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)