Skip to content

Commit cdeaf17

Browse files
committed
Add check in pipeline transformation to make sure there is atleast one pipeline with a valid external source
Signed-off-by: Krishna Kondaka <krishkdk@amazon.com>
1 parent 638b049 commit cdeaf17

5 files changed

Lines changed: 47 additions & 0 deletions

File tree

data-prepper-core/src/main/java/org/opensearch/dataprepper/core/parser/PipelineTransformer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.opensearch.dataprepper.model.sink.SinkContext;
3737
import org.opensearch.dataprepper.model.source.Source;
3838
import org.opensearch.dataprepper.pipeline.parser.PipelineConfigurationValidator;
39+
import org.opensearch.dataprepper.pipeline.parser.InvalidPipelineConfigurationException;
3940
import org.opensearch.dataprepper.pipeline.parser.model.PipelineConfiguration;
4041
import org.opensearch.dataprepper.pipeline.parser.model.SinkContextPluginSetting;
4142
import org.opensearch.dataprepper.validation.PluginError;
@@ -123,11 +124,18 @@ public Map<String, Pipeline> transformConfiguration(final PipelinesDataFlowModel
123124
}
124125
}
125126
Map<String, HeadlessPipeline> headlessPipelines = new LinkedHashMap<>();
127+
boolean validSourcePresent = false;
126128
for (Map.Entry<String, Pipeline> pipeline: pipelineMap.entrySet()){
127129
if (pipeline.getValue().getSource() instanceof HeadlessPipelineSource) {
128130
headlessPipelines.put(pipeline.getKey(), pipeline.getValue());
131+
} else if (!(pipeline.getValue().getSource() instanceof PipelineConnector)) {
132+
validSourcePresent = true;
129133
}
130134
}
135+
if (pipelineMap.size() > 0 && !validSourcePresent) {
136+
throw new InvalidPipelineConfigurationException(
137+
String.format("No valid source present in the configuration\n"));
138+
}
131139

132140
for (Map.Entry<String, Pipeline> pipelineEntry: pipelineMap.entrySet()) {
133141
final Pipeline pipeline = pipelineEntry.getValue();

data-prepper-core/src/test/java/org/opensearch/dataprepper/TestDataProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,7 @@ public class TestDataProvider {
7979
public static final String INVALID_ZERO_BUFFER_MULTIPLE_THREADS_NO_SINGLE_THREAD_PROCESSORS_CONFIG_FILE = "src/test/resources/invalid_zero_buffer_multiple_threads_no_single_thread_processors.yml";
8080
public static Set<String> VALID_MULTIPLE_PIPELINE_NAMES = new HashSet<>(Arrays.asList("test-pipeline-1",
8181
"test-pipeline-2", "test-pipeline-3"));
82+
public static final String INVALID_ONLY_HEADLESS_AND_SUBPIPELINES_CONFIG_FILE = "src/test/resources/invalid_only_headless_and_subpipelines_config.yml";
83+
public static final String INVALID_ONLY_HEADLESS_PIPELINES_CONFIG_FILE = "src/test/resources/invalid_only_headless_pipelines_config.yml";
84+
8285
}

data-prepper-core/src/test/java/org/opensearch/dataprepper/core/parser/PipelineTransformerTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.opensearch.dataprepper.model.event.Event;
4040
import org.opensearch.dataprepper.model.event.EventFactory;
4141
import org.opensearch.dataprepper.model.plugin.InvalidPluginConfigurationException;
42+
import org.opensearch.dataprepper.pipeline.parser.InvalidPipelineConfigurationException;
4243
import org.opensearch.dataprepper.model.plugin.PluginFactory;
4344
import org.opensearch.dataprepper.model.record.Record;
4445
import org.opensearch.dataprepper.pipeline.parser.DataPrepperDeserializationProblemHandler;
@@ -395,6 +396,23 @@ void testMultipleSinksWithFailurePipeline() {
395396
assertThat(((HeadlessPipelineSource)failurePipeline.getSource()).getAcknowledgementsEnabled(), equalTo(false));
396397
}
397398

399+
@Test
400+
void testPipelineConfigWithOnlyHeadlessPipelines() {
401+
mockDataPrepperConfigurationAccesses();
402+
final String configFile = TestDataProvider.INVALID_ONLY_HEADLESS_PIPELINES_CONFIG_FILE;
403+
final PipelineTransformer pipelineTransformer = createObjectUnderTest(configFile);
404+
assertThrows(InvalidPipelineConfigurationException.class, () -> pipelineTransformer.transformConfiguration(this.pipelinesDataFlowModel));
405+
}
406+
407+
@Test
408+
void testPipelineConfigWithHeadlessPipelinesAndSubPipelines() {
409+
mockDataPrepperConfigurationAccesses();
410+
final String configFile = TestDataProvider.INVALID_ONLY_HEADLESS_AND_SUBPIPELINES_CONFIG_FILE;
411+
final PipelineTransformer pipelineTransformer = createObjectUnderTest(configFile);
412+
assertThrows(InvalidPipelineConfigurationException.class, () -> pipelineTransformer.transformConfiguration(this.pipelinesDataFlowModel));
413+
}
414+
415+
398416
@Test
399417
void testMultipleProcessors() {
400418
mockDataPrepperConfigurationAccesses();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
headless-pipeline1:
2+
sink:
3+
- stdout:
4+
- pipeline:
5+
name : "sub-pipeline1"
6+
sub-pipeline1:
7+
source:
8+
pipeline:
9+
name : "headless-pipeline1"
10+
sink:
11+
- stdout:
12+
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
headless-pipeline1:
2+
sink:
3+
- stdout:
4+
headless-pipeline2:
5+
sink:
6+
- stdout:

0 commit comments

Comments
 (0)