Skip to content

Commit f7e6e09

Browse files
committed
add max concurrent runs config for triggers
1 parent 0a73ea8 commit f7e6e09

File tree

7 files changed

+67
-1
lines changed

7 files changed

+67
-1
lines changed

app/cdap/components/PipelineTriggers/EnabledTriggersTab/EnabledCompositeTriggerRow.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ const EnabledCompositeTriggerRowView = ({
7575
? (compositeTrigger.trigger as ICompositeTrigger).triggers[0].programId.application
7676
: compositeTrigger.name;
7777

78+
const concurrencyConstraint = compositeTrigger.constraints.find(
79+
(constraint) => constraint.type === 'CONCURRENCY'
80+
);
81+
const maxConcurrentRuns = concurrencyConstraint ? concurrencyConstraint.maxConcurrency : '_';
82+
7883
const handleConfirmModalOpen = (e) => {
7984
e.stopPropagation();
8085
setShowDeleteModal(true);
@@ -139,6 +144,10 @@ const EnabledCompositeTriggerRowView = ({
139144
isLoading={loading}
140145
closeable={true}
141146
/>
147+
<PipelineName>
148+
{T.translate(`${TRIGGER_PREFIX}.pipelineTriggerConcurrencyHeader`, { maxConcurrentRuns })}
149+
</PipelineName>
150+
<br />
142151
{(compositeTrigger.trigger as ICompositeTrigger).triggers.map((trigger) => {
143152
return (
144153
<StyledEnabledInlineTriggerRow>

app/cdap/components/PipelineTriggers/EnabledTriggersTab/EnabledTriggerRow.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ const EnabledTriggerRowView = ({
7878
workflowName,
7979
}: IEnabledTriggerRowViewProps) => {
8080
const currentTrigger = schedule.trigger as IProgramStatusTrigger;
81+
const concurrencyConstraint = schedule.constraints.find(
82+
(constraint) => constraint.type === 'CONCURRENCY'
83+
);
84+
const maxConcurrentRuns = concurrencyConstraint ? concurrencyConstraint.maxConcurrency : '_';
8185
const [showDeleteModal, setShowDeleteModal] = useState(false);
8286
const [selectedNamespace, setSelectedNamesapce] = useState(null);
8387
const [payloadModalOpen, setPayloadModalOpen] = useState(false);
@@ -138,6 +142,10 @@ const EnabledTriggerRowView = ({
138142

139143
return (
140144
<div>
145+
<StyledNameSpace>
146+
{T.translate(`${TRIGGER_PREFIX}.pipelineTriggerConcurrencyHeader`, { maxConcurrentRuns })}
147+
</StyledNameSpace>
148+
<br />
141149
<PipelineDescription>
142150
<strong>{T.translate(`${TRIGGER_PREFIX}.description`)}: </strong>
143151
{info ? <span>{info && info.description}</span> : renderLoading()}

app/cdap/components/PipelineTriggers/PipelineListCompositeTab/index.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import React, { useEffect, useReducer } from 'react';
1818
import styled from 'styled-components';
1919
import {
20+
changeMaxConcurrentRuns,
2021
changeNamespace,
2122
changeTriggersType,
2223
enableGroupTrigger,
@@ -54,6 +55,7 @@ import {
5455
} from 'components/PipelineTriggers/reducer';
5556
import PayloadConfigModal from 'components/PipelineTriggers/PayloadConfigModal';
5657
import PipelineCompositeTriggerRow from './PipelineCompositeTriggerRow';
58+
import { DEFAULT_TRIGGER_MAX_CONCURRENT_RUNS } from '../store/PipelineTriggersStore';
5759

5860
const TRIGGER_PREFIX = 'features.PipelineTriggers';
5961
const PREFIX = `${TRIGGER_PREFIX}.SetTriggers`;
@@ -146,6 +148,7 @@ interface IPipelineListCompositeTabViewProps {
146148
configureError: string;
147149
onPayloadToggle: (isOpen: boolean) => void;
148150
setTab: (tab: number) => void;
151+
maxConcurrentRuns?: number;
149152
}
150153

151154
const PipelineListCompositeTabView = ({
@@ -160,6 +163,7 @@ const PipelineListCompositeTabView = ({
160163
toggleExpandPipeline,
161164
configureError,
162165
setTab,
166+
maxConcurrentRuns = DEFAULT_TRIGGER_MAX_CONCURRENT_RUNS,
163167
}: IPipelineListCompositeTabViewProps) => {
164168
const [state, dispatch] = useReducer(triggerNameReducer, initialAvailablePipelineListState);
165169
const emptyTriggerErrorMsg =
@@ -220,6 +224,10 @@ const PipelineListCompositeTabView = ({
220224
changeTriggersType(e.target.value);
221225
};
222226

227+
const handleChangeMaxConcurrentRuns = (e) => {
228+
changeMaxConcurrentRuns(e.target.value);
229+
};
230+
223231
const addGroupTriggerClick = () => {
224232
enableGroupTrigger(state.triggerName, setTab, state.computeProfile);
225233
};
@@ -277,6 +285,24 @@ const PipelineListCompositeTabView = ({
277285
</select>
278286
</SelectorDropdown>
279287
</div>
288+
<div>
289+
<TriggerConfigHeader>{T.translate(`${PREFIX}.maxConcurrentRuns`)}</TriggerConfigHeader>
290+
<SelectorDropdown data-testid="composite-trigger-max-concurrent-runs">
291+
<select
292+
className="form-control"
293+
value={maxConcurrentRuns}
294+
onChange={handleChangeMaxConcurrentRuns}
295+
>
296+
{Array(10)
297+
.fill(0)
298+
.map((_, i) => (
299+
<option value={i + 1} key={i + 1}>
300+
{i + 1}
301+
</option>
302+
))}
303+
</select>
304+
</SelectorDropdown>
305+
</div>
280306
<div>
281307
<TriggerConfigHeader>{T.translate(`${PREFIX}.triggerName`)}</TriggerConfigHeader>
282308
<TriggerNameTextField
@@ -397,6 +423,7 @@ const mapStateToProps = (state) => {
397423
pipelineName: state.triggers.pipelineName,
398424
expandedPipeline: state.triggers.expandedPipeline,
399425
configureError: state.triggers.configureError,
426+
maxConcurrentRuns: state.triggers.maxConcurrentRuns,
400427
};
401428
};
402429

app/cdap/components/PipelineTriggers/store/PipelineTriggersActionCreator.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ export function changeTriggersType(selectedTriggersType: string) {
7272
});
7373
}
7474

75+
export function changeMaxConcurrentRuns(maxConcurrentRuns: number) {
76+
PipelineTriggersStore.dispatch({
77+
type: PipelineTriggersActions.setMaxConcurrentRuns,
78+
payload: {
79+
maxConcurrentRuns,
80+
},
81+
});
82+
}
83+
7584
/**
7685
* Method to remove the selected trigger from the composite AND or OR trigger group.
7786
*/
@@ -174,7 +183,7 @@ export function enableGroupTrigger(
174183
},
175184
constraints: [
176185
{
177-
maxConcurrency: 3,
186+
maxConcurrency: pipelineTriggers.maxConcurrentRuns,
178187
type: 'CONCURRENCY',
179188
waitUntilMet: false,
180189
},

app/cdap/components/PipelineTriggers/store/PipelineTriggersActions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const PipelineTriggersActions = {
3131
setPayloadModalState: 'TRIGGERS_SET_PAYLOAD_MODAL_STATE',
3232
setTriggerType: 'TRIGGERS_SET_TYPE',
3333
reset: 'TRIGGERS_RESET',
34+
setMaxConcurrentRuns: 'TRIGGERS_SET_MAX_CONCURRENT_RUNS',
3435
};
3536

3637
export default PipelineTriggersActions;

app/cdap/components/PipelineTriggers/store/PipelineTriggersStore.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import {
2525
} from 'components/PipelineTriggers/store/ScheduleTypes';
2626
import PipelineTriggersTypes from 'components/PipelineTriggers/store/PipelineTriggersTypes';
2727

28+
export const DEFAULT_TRIGGER_MAX_CONCURRENT_RUNS = 3;
29+
2830
interface IPayLoad {
2931
pipelineName?: string;
3032
workflowName?: string;
@@ -41,6 +43,7 @@ interface IPayLoad {
4143
isOpen?: boolean;
4244
expandedSchedule?: string;
4345
pipelineInfo?: IPipelineInfo;
46+
maxConcurrentRuns?: number;
4447
}
4548

4649
interface IAction {
@@ -71,6 +74,7 @@ const defaultInitialState = {
7174
configureError: null,
7275
pipelineCompositeTriggersEnabled: false,
7376
lifecycleManagementEditEnabled: false,
77+
maxConcurrentRuns: DEFAULT_TRIGGER_MAX_CONCURRENT_RUNS,
7478
};
7579

7680
const defaultInitialEnabledTriggersState = {
@@ -159,6 +163,12 @@ const triggers = (state = defaultInitialState, action = defaultAction) => {
159163
configureError: action.payload.error,
160164
};
161165
break;
166+
case PipelineTriggersActions.setMaxConcurrentRuns:
167+
stateCopy = {
168+
...state,
169+
maxConcurrentRuns: action.payload.maxConcurrentRuns,
170+
};
171+
break;
162172
case PipelineTriggersActions.reset:
163173
return defaultInitialState;
164174
default:

app/cdap/text/text-en.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2808,6 +2808,7 @@ features:
28082808
groupTriggers: Composite Triggers
28092809
pipelineTriggerType: "Trigger Type: {type}"
28102810
pipelineTriggerTypeHeader: "Type"
2811+
pipelineTriggerConcurrencyHeader: "Max concurrent runs: {maxConcurrentRuns}"
28112812
ScheduleRuntimeArgs:
28122813
configure_enable_btn: Configure and Enable Trigger
28132814
configure_select_btn: Select
@@ -2849,6 +2850,7 @@ features:
28492850
SetTriggers:
28502851
addNewTrigger: Enable the trigger
28512852
configComputeProfie: Compute Profile
2853+
maxConcurrentRuns: Max concurrent runs
28522854
compositeTriggersTitle: "Add a new trigger for \"{pipelineName}\""
28532855
buttonLabel: Enable Trigger
28542856
pipelineCount: "{count} pipelines available"

0 commit comments

Comments
 (0)