Full Code of Netflix/conductor for AI

main 548f386c2c6c cached
1030 files
5.8 MB
1.6M tokens
6536 symbols
1 requests
Download .txt
Showing preview only (6,319K chars total). Download the full file or copy to clipboard to get everything.
Repository: Netflix/conductor
Branch: main
Commit: 548f386c2c6c
Files: 1030
Total size: 5.8 MB

Directory structure:
gitextract_cp2gulur/

├── .dockerignore
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   ├── documentation.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   ├── release-drafter.yml
│   └── workflows/
│       ├── ci.yml
│       ├── publish.yml
│       ├── release_draft.yml
│       ├── stale.yml
│       └── update-gradle-wrapper.yml
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── OSSMETADATA
├── README.md
├── RELATED.md
├── SECURITY.md
├── USERS.md
├── annotations/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── annotations/
│                               └── protogen/
│                                   ├── ProtoEnum.java
│                                   ├── ProtoField.java
│                                   └── ProtoMessage.java
├── annotations-processor/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       ├── example/
│       │   └── java/
│       │       └── com/
│       │           └── example/
│       │               └── Example.java
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── annotationsprocessor/
│       │   │                   └── protogen/
│       │   │                       ├── AbstractMessage.java
│       │   │                       ├── Enum.java
│       │   │                       ├── Message.java
│       │   │                       ├── ProtoFile.java
│       │   │                       ├── ProtoGen.java
│       │   │                       ├── ProtoGenTask.java
│       │   │                       └── types/
│       │   │                           ├── AbstractType.java
│       │   │                           ├── ExternMessageType.java
│       │   │                           ├── GenericType.java
│       │   │                           ├── ListType.java
│       │   │                           ├── MapType.java
│       │   │                           ├── MessageType.java
│       │   │                           ├── ScalarType.java
│       │   │                           ├── TypeMapper.java
│       │   │                           └── WrappedType.java
│       │   └── resources/
│       │       └── templates/
│       │           ├── file.proto
│       │           └── message.proto
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── annotationsprocessor/
│           │                   └── protogen/
│           │                       └── ProtoGenTest.java
│           └── resources/
│               └── example.proto.txt
├── awss3-storage/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── s3/
│           │                   ├── config/
│           │                   │   ├── S3Configuration.java
│           │                   │   └── S3Properties.java
│           │                   └── storage/
│           │                       └── S3PayloadStorage.java
│           └── resources/
│               └── META-INF/
│                   └── additional-spring-configuration-metadata.json
├── awssqs-event-queue/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── sqs/
│       │   │                   ├── config/
│       │   │                   │   ├── SQSEventQueueConfiguration.java
│       │   │                   │   ├── SQSEventQueueProperties.java
│       │   │                   │   └── SQSEventQueueProvider.java
│       │   │                   └── eventqueue/
│       │   │                       └── SQSObservableQueue.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── sqs/
│                               └── eventqueue/
│                                   ├── DefaultEventQueueProcessorTest.java
│                                   └── SQSObservableQueueTest.java
├── build.gradle
├── cassandra-persistence/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── cassandra/
│       │   │                   ├── config/
│       │   │                   │   ├── CassandraConfiguration.java
│       │   │                   │   ├── CassandraProperties.java
│       │   │                   │   └── cache/
│       │   │                   │       ├── CacheableEventHandlerDAO.java
│       │   │                   │       ├── CacheableMetadataDAO.java
│       │   │                   │       └── CachingConfig.java
│       │   │                   ├── dao/
│       │   │                   │   ├── CassandraBaseDAO.java
│       │   │                   │   ├── CassandraEventHandlerDAO.java
│       │   │                   │   ├── CassandraExecutionDAO.java
│       │   │                   │   ├── CassandraMetadataDAO.java
│       │   │                   │   └── CassandraPollDataDAO.java
│       │   │                   └── util/
│       │   │                       ├── Constants.java
│       │   │                       └── Statements.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── groovy/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── cassandra/
│                               ├── dao/
│                               │   ├── CassandraEventHandlerDAOSpec.groovy
│                               │   ├── CassandraExecutionDAOSpec.groovy
│                               │   ├── CassandraMetadataDAOSpec.groovy
│                               │   └── CassandraSpec.groovy
│                               └── util/
│                                   └── StatementsSpec.groovy
├── client/
│   ├── build.gradle
│   ├── spotbugsExclude.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── client/
│       │                       ├── automator/
│       │                       │   ├── PollingSemaphore.java
│       │                       │   ├── TaskPollExecutor.java
│       │                       │   └── TaskRunnerConfigurer.java
│       │                       ├── config/
│       │                       │   ├── ConductorClientConfiguration.java
│       │                       │   ├── DefaultConductorClientConfiguration.java
│       │                       │   └── PropertyFactory.java
│       │                       ├── exception/
│       │                       │   └── ConductorClientException.java
│       │                       ├── http/
│       │                       │   ├── ClientBase.java
│       │                       │   ├── ClientRequestHandler.java
│       │                       │   ├── EventClient.java
│       │                       │   ├── MetadataClient.java
│       │                       │   ├── PayloadStorage.java
│       │                       │   ├── TaskClient.java
│       │                       │   └── WorkflowClient.java
│       │                       ├── telemetry/
│       │                       │   └── MetricsContainer.java
│       │                       └── worker/
│       │                           └── Worker.java
│       └── test/
│           ├── groovy/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   └── http/
│           │                       ├── ClientSpecification.groovy
│           │                       ├── EventClientSpec.groovy
│           │                       ├── MetadataClientSpec.groovy
│           │                       ├── TaskClientSpec.groovy
│           │                       └── WorkflowClientSpec.groovy
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   ├── automator/
│           │                   │   ├── PollingSemaphoreTest.java
│           │                   │   ├── TaskPollExecutorTest.java
│           │                   │   └── TaskRunnerConfigurerTest.java
│           │                   ├── config/
│           │                   │   └── TestPropertyFactory.java
│           │                   ├── sample/
│           │                   │   ├── Main.java
│           │                   │   └── SampleWorker.java
│           │                   ├── testing/
│           │                   │   ├── AbstractWorkflowTests.java
│           │                   │   ├── LoanWorkflowInput.java
│           │                   │   ├── LoanWorkflowTest.java
│           │                   │   ├── RegressionTest.java
│           │                   │   └── SubWorkflowTest.java
│           │                   └── worker/
│           │                       └── TestWorkflowTask.java
│           └── resources/
│               ├── config.properties
│               ├── tasks.json
│               ├── test_data/
│               │   ├── loan_workflow_input.json
│               │   └── workflow1_run.json
│               └── workflows/
│                   ├── PopulationMinMax.json
│                   ├── calculate_loan_workflow.json
│                   ├── kitchensink.json
│                   └── workflow1.json
├── client-spring/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── client/
│       │   │                   └── spring/
│       │   │                       ├── ClientProperties.java
│       │   │                       ├── ConductorClientAutoConfiguration.java
│       │   │                       ├── ConductorWorkerAutoConfiguration.java
│       │   │                       └── SpringWorkerConfiguration.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   └── spring/
│           │                       ├── ExampleClient.java
│           │                       └── Workers.java
│           └── resources/
│               └── application.properties
├── common/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── common/
│       │                       ├── config/
│       │                       │   ├── ObjectMapperBuilderConfiguration.java
│       │                       │   ├── ObjectMapperConfiguration.java
│       │                       │   └── ObjectMapperProvider.java
│       │                       ├── constraints/
│       │                       │   ├── NoSemiColonConstraint.java
│       │                       │   ├── OwnerEmailMandatoryConstraint.java
│       │                       │   ├── TaskReferenceNameUniqueConstraint.java
│       │                       │   └── TaskTimeoutConstraint.java
│       │                       ├── jackson/
│       │                       │   └── JsonProtoModule.java
│       │                       ├── metadata/
│       │                       │   ├── Auditable.java
│       │                       │   ├── BaseDef.java
│       │                       │   ├── acl/
│       │                       │   │   └── Permission.java
│       │                       │   ├── events/
│       │                       │   │   ├── EventExecution.java
│       │                       │   │   └── EventHandler.java
│       │                       │   ├── tasks/
│       │                       │   │   ├── PollData.java
│       │                       │   │   ├── Task.java
│       │                       │   │   ├── TaskDef.java
│       │                       │   │   ├── TaskExecLog.java
│       │                       │   │   ├── TaskResult.java
│       │                       │   │   └── TaskType.java
│       │                       │   └── workflow/
│       │                       │       ├── DynamicForkJoinTask.java
│       │                       │       ├── DynamicForkJoinTaskList.java
│       │                       │       ├── RerunWorkflowRequest.java
│       │                       │       ├── SkipTaskRequest.java
│       │                       │       ├── StartWorkflowRequest.java
│       │                       │       ├── SubWorkflowParams.java
│       │                       │       ├── WorkflowDef.java
│       │                       │       ├── WorkflowDefSummary.java
│       │                       │       └── WorkflowTask.java
│       │                       ├── model/
│       │                       │   └── BulkResponse.java
│       │                       ├── run/
│       │                       │   ├── ExternalStorageLocation.java
│       │                       │   ├── SearchResult.java
│       │                       │   ├── TaskSummary.java
│       │                       │   ├── Workflow.java
│       │                       │   ├── WorkflowSummary.java
│       │                       │   └── WorkflowTestRequest.java
│       │                       ├── utils/
│       │                       │   ├── ConstraintParamUtil.java
│       │                       │   ├── EnvUtils.java
│       │                       │   ├── ExternalPayloadStorage.java
│       │                       │   ├── SummaryUtil.java
│       │                       │   └── TaskUtils.java
│       │                       └── validation/
│       │                           ├── ErrorResponse.java
│       │                           └── ValidationError.java
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── common/
│                               ├── config/
│                               │   └── TestObjectMapperConfiguration.java
│                               ├── events/
│                               │   └── EventHandlerTest.java
│                               ├── run/
│                               │   └── TaskSummaryTest.java
│                               ├── tasks/
│                               │   ├── TaskDefTest.java
│                               │   ├── TaskResultTest.java
│                               │   └── TaskTest.java
│                               ├── utils/
│                               │   ├── ConstraintParamUtilTest.java
│                               │   └── SummaryUtilTest.java
│                               └── workflow/
│                                   ├── SubWorkflowParamsTest.java
│                                   ├── WorkflowDefValidatorTest.java
│                                   └── WorkflowTaskTest.java
├── core/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               ├── annotations/
│       │   │               │   ├── Audit.java
│       │   │               │   ├── Trace.java
│       │   │               │   └── VisibleForTesting.java
│       │   │               ├── core/
│       │   │               │   ├── LifecycleAwareComponent.java
│       │   │               │   ├── WorkflowContext.java
│       │   │               │   ├── config/
│       │   │               │   │   ├── ConductorCoreConfiguration.java
│       │   │               │   │   ├── ConductorProperties.java
│       │   │               │   │   └── SchedulerConfiguration.java
│       │   │               │   ├── dal/
│       │   │               │   │   └── ExecutionDAOFacade.java
│       │   │               │   ├── event/
│       │   │               │   │   ├── WorkflowCreationEvent.java
│       │   │               │   │   └── WorkflowEvaluationEvent.java
│       │   │               │   ├── events/
│       │   │               │   │   ├── ActionProcessor.java
│       │   │               │   │   ├── DefaultEventProcessor.java
│       │   │               │   │   ├── DefaultEventQueueManager.java
│       │   │               │   │   ├── EventQueueManager.java
│       │   │               │   │   ├── EventQueueProvider.java
│       │   │               │   │   ├── EventQueues.java
│       │   │               │   │   ├── ScriptEvaluator.java
│       │   │               │   │   ├── SimpleActionProcessor.java
│       │   │               │   │   └── queue/
│       │   │               │   │       ├── ConductorEventQueueProvider.java
│       │   │               │   │       ├── ConductorObservableQueue.java
│       │   │               │   │       ├── DefaultEventQueueProcessor.java
│       │   │               │   │       ├── Message.java
│       │   │               │   │       └── ObservableQueue.java
│       │   │               │   ├── exception/
│       │   │               │   │   ├── ConflictException.java
│       │   │               │   │   ├── NonTransientException.java
│       │   │               │   │   ├── NotFoundException.java
│       │   │               │   │   ├── TerminateWorkflowException.java
│       │   │               │   │   └── TransientException.java
│       │   │               │   ├── execution/
│       │   │               │   │   ├── AsyncSystemTaskExecutor.java
│       │   │               │   │   ├── DeciderService.java
│       │   │               │   │   ├── StartWorkflowInput.java
│       │   │               │   │   ├── WorkflowExecutor.java
│       │   │               │   │   ├── evaluators/
│       │   │               │   │   │   ├── Evaluator.java
│       │   │               │   │   │   ├── JavascriptEvaluator.java
│       │   │               │   │   │   └── ValueParamEvaluator.java
│       │   │               │   │   ├── mapper/
│       │   │               │   │   │   ├── DecisionTaskMapper.java
│       │   │               │   │   │   ├── DoWhileTaskMapper.java
│       │   │               │   │   │   ├── DynamicTaskMapper.java
│       │   │               │   │   │   ├── EventTaskMapper.java
│       │   │               │   │   │   ├── ExclusiveJoinTaskMapper.java
│       │   │               │   │   │   ├── ForkJoinDynamicTaskMapper.java
│       │   │               │   │   │   ├── ForkJoinTaskMapper.java
│       │   │               │   │   │   ├── HTTPTaskMapper.java
│       │   │               │   │   │   ├── HumanTaskMapper.java
│       │   │               │   │   │   ├── InlineTaskMapper.java
│       │   │               │   │   │   ├── JoinTaskMapper.java
│       │   │               │   │   │   ├── JsonJQTransformTaskMapper.java
│       │   │               │   │   │   ├── KafkaPublishTaskMapper.java
│       │   │               │   │   │   ├── LambdaTaskMapper.java
│       │   │               │   │   │   ├── NoopTaskMapper.java
│       │   │               │   │   │   ├── SetVariableTaskMapper.java
│       │   │               │   │   │   ├── SimpleTaskMapper.java
│       │   │               │   │   │   ├── StartWorkflowTaskMapper.java
│       │   │               │   │   │   ├── SubWorkflowTaskMapper.java
│       │   │               │   │   │   ├── SwitchTaskMapper.java
│       │   │               │   │   │   ├── TaskMapper.java
│       │   │               │   │   │   ├── TaskMapperContext.java
│       │   │               │   │   │   ├── TerminateTaskMapper.java
│       │   │               │   │   │   ├── UserDefinedTaskMapper.java
│       │   │               │   │   │   └── WaitTaskMapper.java
│       │   │               │   │   └── tasks/
│       │   │               │   │       ├── Decision.java
│       │   │               │   │       ├── DoWhile.java
│       │   │               │   │       ├── Event.java
│       │   │               │   │       ├── ExclusiveJoin.java
│       │   │               │   │       ├── ExecutionConfig.java
│       │   │               │   │       ├── Fork.java
│       │   │               │   │       ├── Human.java
│       │   │               │   │       ├── Inline.java
│       │   │               │   │       ├── IsolatedTaskQueueProducer.java
│       │   │               │   │       ├── Join.java
│       │   │               │   │       ├── Lambda.java
│       │   │               │   │       ├── Noop.java
│       │   │               │   │       ├── SetVariable.java
│       │   │               │   │       ├── StartWorkflow.java
│       │   │               │   │       ├── SubWorkflow.java
│       │   │               │   │       ├── Switch.java
│       │   │               │   │       ├── SystemTaskRegistry.java
│       │   │               │   │       ├── SystemTaskWorker.java
│       │   │               │   │       ├── SystemTaskWorkerCoordinator.java
│       │   │               │   │       ├── Terminate.java
│       │   │               │   │       ├── Wait.java
│       │   │               │   │       └── WorkflowSystemTask.java
│       │   │               │   ├── index/
│       │   │               │   │   ├── NoopIndexDAO.java
│       │   │               │   │   └── NoopIndexDAOConfiguration.java
│       │   │               │   ├── listener/
│       │   │               │   │   ├── TaskStatusListener.java
│       │   │               │   │   ├── TaskStatusListenerStub.java
│       │   │               │   │   ├── WorkflowStatusListener.java
│       │   │               │   │   └── WorkflowStatusListenerStub.java
│       │   │               │   ├── metadata/
│       │   │               │   │   └── MetadataMapperService.java
│       │   │               │   ├── operation/
│       │   │               │   │   ├── StartWorkflowOperation.java
│       │   │               │   │   └── WorkflowOperation.java
│       │   │               │   ├── reconciliation/
│       │   │               │   │   ├── WorkflowReconciler.java
│       │   │               │   │   ├── WorkflowRepairService.java
│       │   │               │   │   └── WorkflowSweeper.java
│       │   │               │   ├── storage/
│       │   │               │   │   └── DummyPayloadStorage.java
│       │   │               │   ├── sync/
│       │   │               │   │   ├── Lock.java
│       │   │               │   │   ├── local/
│       │   │               │   │   │   ├── LocalOnlyLock.java
│       │   │               │   │   │   └── LocalOnlyLockConfiguration.java
│       │   │               │   │   └── noop/
│       │   │               │   │       └── NoopLock.java
│       │   │               │   └── utils/
│       │   │               │       ├── DateTimeUtils.java
│       │   │               │       ├── ExternalPayloadStorageUtils.java
│       │   │               │       ├── IDGenerator.java
│       │   │               │       ├── JsonUtils.java
│       │   │               │       ├── ParametersUtils.java
│       │   │               │       ├── QueueUtils.java
│       │   │               │       ├── SemaphoreUtil.java
│       │   │               │       └── Utils.java
│       │   │               ├── dao/
│       │   │               │   ├── ConcurrentExecutionLimitDAO.java
│       │   │               │   ├── EventHandlerDAO.java
│       │   │               │   ├── ExecutionDAO.java
│       │   │               │   ├── IndexDAO.java
│       │   │               │   ├── MetadataDAO.java
│       │   │               │   ├── PollDataDAO.java
│       │   │               │   ├── QueueDAO.java
│       │   │               │   └── RateLimitingDAO.java
│       │   │               ├── metrics/
│       │   │               │   ├── Monitors.java
│       │   │               │   └── WorkflowMonitor.java
│       │   │               ├── model/
│       │   │               │   ├── TaskModel.java
│       │   │               │   └── WorkflowModel.java
│       │   │               ├── service/
│       │   │               │   ├── AdminService.java
│       │   │               │   ├── AdminServiceImpl.java
│       │   │               │   ├── EventService.java
│       │   │               │   ├── EventServiceImpl.java
│       │   │               │   ├── ExecutionLockService.java
│       │   │               │   ├── ExecutionService.java
│       │   │               │   ├── MetadataService.java
│       │   │               │   ├── MetadataServiceImpl.java
│       │   │               │   ├── TaskService.java
│       │   │               │   ├── TaskServiceImpl.java
│       │   │               │   ├── WorkflowBulkService.java
│       │   │               │   ├── WorkflowBulkServiceImpl.java
│       │   │               │   ├── WorkflowService.java
│       │   │               │   ├── WorkflowServiceImpl.java
│       │   │               │   └── WorkflowTestService.java
│       │   │               └── validations/
│       │   │                   ├── ValidationContext.java
│       │   │                   └── WorkflowTaskTypeConstraint.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── additional-spring-configuration-metadata.json
│       │           ├── validation/
│       │           │   └── constraints.xml
│       │           └── validation.xml
│       └── test/
│           ├── groovy/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               ├── core/
│           │               │   ├── execution/
│           │               │   │   ├── AsyncSystemTaskExecutorTest.groovy
│           │               │   │   └── tasks/
│           │               │   │       ├── DoWhileSpec.groovy
│           │               │   │       ├── EventSpec.groovy
│           │               │   │       ├── IsolatedTaskQueueProducerSpec.groovy
│           │               │   │       └── StartWorkflowSpec.groovy
│           │               │   └── operation/
│           │               │       └── StartWorkflowOperationSpec.groovy
│           │               └── model/
│           │                   ├── TaskModelSpec.groovy
│           │                   └── WorkflowModelSpec.groovy
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               ├── TestUtils.java
│           │               ├── core/
│           │               │   ├── dal/
│           │               │   │   └── ExecutionDAOFacadeTest.java
│           │               │   ├── events/
│           │               │   │   ├── MockObservableQueue.java
│           │               │   │   ├── MockQueueProvider.java
│           │               │   │   ├── TestDefaultEventProcessor.java
│           │               │   │   ├── TestScriptEval.java
│           │               │   │   └── TestSimpleActionProcessor.java
│           │               │   ├── execution/
│           │               │   │   ├── TestDeciderOutcomes.java
│           │               │   │   ├── TestDeciderService.java
│           │               │   │   ├── TestWorkflowDef.java
│           │               │   │   ├── TestWorkflowExecutor.java
│           │               │   │   ├── WorkflowSystemTaskStub.java
│           │               │   │   ├── mapper/
│           │               │   │   │   ├── DecisionTaskMapperTest.java
│           │               │   │   │   ├── DoWhileTaskMapperTest.java
│           │               │   │   │   ├── DynamicTaskMapperTest.java
│           │               │   │   │   ├── EventTaskMapperTest.java
│           │               │   │   │   ├── ForkJoinDynamicTaskMapperTest.java
│           │               │   │   │   ├── ForkJoinTaskMapperTest.java
│           │               │   │   │   ├── HTTPTaskMapperTest.java
│           │               │   │   │   ├── HumanTaskMapperTest.java
│           │               │   │   │   ├── InlineTaskMapperTest.java
│           │               │   │   │   ├── JoinTaskMapperTest.java
│           │               │   │   │   ├── JsonJQTransformTaskMapperTest.java
│           │               │   │   │   ├── KafkaPublishTaskMapperTest.java
│           │               │   │   │   ├── LambdaTaskMapperTest.java
│           │               │   │   │   ├── NoopTaskMapperTest.java
│           │               │   │   │   ├── SetVariableTaskMapperTest.java
│           │               │   │   │   ├── SimpleTaskMapperTest.java
│           │               │   │   │   ├── SubWorkflowTaskMapperTest.java
│           │               │   │   │   ├── SwitchTaskMapperTest.java
│           │               │   │   │   ├── TerminateTaskMapperTest.java
│           │               │   │   │   ├── UserDefinedTaskMapperTest.java
│           │               │   │   │   └── WaitTaskMapperTest.java
│           │               │   │   └── tasks/
│           │               │   │       ├── EventQueueResolutionTest.java
│           │               │   │       ├── InlineTest.java
│           │               │   │       ├── TestLambda.java
│           │               │   │       ├── TestNoop.java
│           │               │   │       ├── TestSubWorkflow.java
│           │               │   │       ├── TestSystemTaskWorker.java
│           │               │   │       ├── TestSystemTaskWorkerCoordinator.java
│           │               │   │       └── TestTerminate.java
│           │               │   ├── metadata/
│           │               │   │   └── MetadataMapperServiceTest.java
│           │               │   ├── reconciliation/
│           │               │   │   ├── TestWorkflowRepairService.java
│           │               │   │   └── TestWorkflowSweeper.java
│           │               │   ├── storage/
│           │               │   │   └── DummyPayloadStorageTest.java
│           │               │   ├── sync/
│           │               │   │   └── local/
│           │               │   │       └── LocalOnlyLockTest.java
│           │               │   └── utils/
│           │               │       ├── ExternalPayloadStorageUtilsTest.java
│           │               │       ├── JsonUtilsTest.java
│           │               │       ├── ParametersUtilsTest.java
│           │               │       ├── QueueUtilsTest.java
│           │               │       └── SemaphoreUtilTest.java
│           │               ├── dao/
│           │               │   ├── ExecutionDAOTest.java
│           │               │   └── PollDataDAOTest.java
│           │               ├── metrics/
│           │               │   └── WorkflowMonitorTest.java
│           │               ├── service/
│           │               │   ├── EventServiceTest.java
│           │               │   ├── ExecutionServiceTest.java
│           │               │   ├── MetadataServiceTest.java
│           │               │   ├── TaskServiceTest.java
│           │               │   ├── WorkflowBulkServiceTest.java
│           │               │   └── WorkflowServiceTest.java
│           │               └── validations/
│           │                   ├── WorkflowDefConstraintTest.java
│           │                   └── WorkflowTaskTypeConstraintTest.java
│           └── resources/
│               ├── completed.json
│               ├── conditional_flow.json
│               ├── conditional_flow_with_switch.json
│               ├── payload.json
│               └── test.json
├── dependencies.gradle
├── docker/
│   ├── README.md
│   ├── ci/
│   │   └── Dockerfile
│   ├── docker-compose-mysql.yaml
│   ├── docker-compose-postgres.yaml
│   ├── docker-compose.yaml
│   ├── server/
│   │   ├── Dockerfile
│   │   ├── config/
│   │   │   ├── config-mysql.properties
│   │   │   ├── config-postgres.properties
│   │   │   ├── config-redis.properties
│   │   │   ├── config.properties
│   │   │   ├── log4j-file-appender.properties
│   │   │   ├── log4j.properties
│   │   │   └── redis.conf
│   │   └── nginx/
│   │       └── nginx.conf
│   └── ui/
│       ├── Dockerfile
│       └── README.md
├── docs/
│   ├── docs/
│   │   ├── apispec.md
│   │   ├── architecture/
│   │   │   ├── overview.md
│   │   │   └── tasklifecycle.md
│   │   ├── bestpractices.md
│   │   ├── configuration/
│   │   │   ├── eventhandlers.md
│   │   │   ├── isolationgroups.md
│   │   │   ├── sysoperator.md
│   │   │   ├── systask.md
│   │   │   ├── taskdef.md
│   │   │   ├── taskdomains.md
│   │   │   ├── workerdef.md
│   │   │   └── workflowdef.md
│   │   ├── css/
│   │   │   └── custom.css
│   │   ├── extend.md
│   │   ├── externalpayloadstorage.md
│   │   ├── faq.md
│   │   ├── gettingstarted/
│   │   │   ├── basicconcepts.md
│   │   │   ├── client.md
│   │   │   ├── docker.md
│   │   │   ├── hosted.md
│   │   │   ├── intro.md
│   │   │   ├── source.md
│   │   │   ├── startworkflow.md
│   │   │   └── steps.md
│   │   ├── googleba55068fa3e0e553.html
│   │   ├── how-tos/
│   │   │   ├── Monitoring/
│   │   │   │   └── Conductor-LogLevel.md
│   │   │   ├── Tasks/
│   │   │   │   ├── creating-tasks.md
│   │   │   │   ├── dynamic-vs-switch-tasks.md
│   │   │   │   ├── extending-system-tasks.md
│   │   │   │   ├── monitoring-task-queues.md
│   │   │   │   ├── reusing-tasks.md
│   │   │   │   ├── task-configurations.md
│   │   │   │   ├── task-inputs.md
│   │   │   │   ├── task-timeouts.md
│   │   │   │   └── updating-tasks.md
│   │   │   ├── Test/
│   │   │   │   └── testing-workflows.md
│   │   │   ├── Workers/
│   │   │   │   ├── build-a-golang-task-worker.md
│   │   │   │   ├── build-a-java-task-worker.md
│   │   │   │   └── build-a-python-task-worker.md
│   │   │   ├── Workflows/
│   │   │   │   ├── debugging-workflows.md
│   │   │   │   ├── handling-errors.md
│   │   │   │   ├── searching-workflows.md
│   │   │   │   ├── starting-workflows.md
│   │   │   │   ├── updating-workflows.md
│   │   │   │   ├── versioning-workflows.md
│   │   │   │   └── view-workflow-executions.md
│   │   │   ├── clojure-sdk.md
│   │   │   ├── csharp-sdk.md
│   │   │   ├── go-sdk.md
│   │   │   ├── java-sdk.md
│   │   │   └── python-sdk.md
│   │   ├── index.md
│   │   ├── labs/
│   │   │   ├── beginner.md
│   │   │   ├── eventhandlers.md
│   │   │   ├── kitchensink.md
│   │   │   └── running-first-workflow.md
│   │   ├── metrics/
│   │   │   ├── client.md
│   │   │   └── server.md
│   │   ├── reference-docs/
│   │   │   ├── annotation-processor.md
│   │   │   ├── archival-of-workflows.md
│   │   │   ├── azureblob-storage.md
│   │   │   ├── directed-acyclic-graph.md
│   │   │   ├── do-while-task.md
│   │   │   ├── dynamic-fork-task.md
│   │   │   ├── dynamic-task.md
│   │   │   ├── event-task.md
│   │   │   ├── fork-task.md
│   │   │   ├── http-task.md
│   │   │   ├── human-task.md
│   │   │   ├── inline-task.md
│   │   │   ├── join-task.md
│   │   │   ├── json-jq-transform-task.md
│   │   │   ├── kafka-publish-task.md
│   │   │   ├── redis.md
│   │   │   ├── set-variable-task.md
│   │   │   ├── start-workflow-task.md
│   │   │   ├── sub-workflow-task.md
│   │   │   ├── switch-task.md
│   │   │   ├── terminate-task.md
│   │   │   └── wait-task.md
│   │   ├── resources/
│   │   │   ├── code-of-conduct.md
│   │   │   ├── contributing.md
│   │   │   ├── license.md
│   │   │   └── related.md
│   │   └── technicaldetails.md
│   ├── kitchensink.json
│   ├── mkdocs.yml
│   └── theme/
│       ├── main.html
│       ├── toc-sub.html
│       └── toc.html
├── es6-persistence/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── es6/
│       │   │                   ├── config/
│       │   │                   │   ├── ElasticSearchConditions.java
│       │   │                   │   ├── ElasticSearchProperties.java
│       │   │                   │   ├── ElasticSearchV6Configuration.java
│       │   │                   │   ├── IsHttpProtocol.java
│       │   │                   │   └── IsTcpProtocol.java
│       │   │                   └── dao/
│       │   │                       ├── index/
│       │   │                       │   ├── BulkRequestBuilderWrapper.java
│       │   │                       │   ├── BulkRequestWrapper.java
│       │   │                       │   ├── ElasticSearchBaseDAO.java
│       │   │                       │   ├── ElasticSearchDAOV6.java
│       │   │                       │   └── ElasticSearchRestDAOV6.java
│       │   │                       └── query/
│       │   │                           └── parser/
│       │   │                               ├── Expression.java
│       │   │                               ├── FilterProvider.java
│       │   │                               ├── GroupedExpression.java
│       │   │                               ├── NameValue.java
│       │   │                               └── internal/
│       │   │                                   ├── AbstractNode.java
│       │   │                                   ├── BooleanOp.java
│       │   │                                   ├── ComparisonOp.java
│       │   │                                   ├── ConstValue.java
│       │   │                                   ├── FunctionThrowingException.java
│       │   │                                   ├── ListConst.java
│       │   │                                   ├── Name.java
│       │   │                                   ├── ParserException.java
│       │   │                                   └── Range.java
│       │   └── resources/
│       │       ├── mappings_docType_task.json
│       │       ├── mappings_docType_workflow.json
│       │       ├── template_event.json
│       │       ├── template_message.json
│       │       └── template_task_log.json
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── es6/
│           │                   ├── dao/
│           │                   │   ├── index/
│           │                   │   │   ├── ElasticSearchDaoBaseTest.java
│           │                   │   │   ├── ElasticSearchRestDaoBaseTest.java
│           │                   │   │   ├── ElasticSearchTest.java
│           │                   │   │   ├── TestElasticSearchDAOV6.java
│           │                   │   │   ├── TestElasticSearchDAOV6Batch.java
│           │                   │   │   ├── TestElasticSearchRestDAOV6.java
│           │                   │   │   └── TestElasticSearchRestDAOV6Batch.java
│           │                   │   └── query/
│           │                   │       └── parser/
│           │                   │           ├── TestExpression.java
│           │                   │           └── internal/
│           │                   │               ├── TestAbstractParser.java
│           │                   │               ├── TestBooleanOp.java
│           │                   │               ├── TestComparisonOp.java
│           │                   │               ├── TestConstValue.java
│           │                   │               └── TestName.java
│           │                   └── utils/
│           │                       └── TestUtils.java
│           └── resources/
│               ├── expected_template_task_log.json
│               ├── task_summary.json
│               └── workflow_summary.json
├── family.properties
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── grpc/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── grpc/
│       │   │                   ├── AbstractProtoMapper.java
│       │   │                   └── ProtoMapper.java
│       │   └── proto/
│       │       ├── grpc/
│       │       │   ├── event_service.proto
│       │       │   ├── metadata_service.proto
│       │       │   ├── search.proto
│       │       │   ├── task_service.proto
│       │       │   └── workflow_service.proto
│       │       └── model/
│       │           ├── dynamicforkjointask.proto
│       │           ├── dynamicforkjointasklist.proto
│       │           ├── eventexecution.proto
│       │           ├── eventhandler.proto
│       │           ├── polldata.proto
│       │           ├── rerunworkflowrequest.proto
│       │           ├── skiptaskrequest.proto
│       │           ├── startworkflowrequest.proto
│       │           ├── subworkflowparams.proto
│       │           ├── task.proto
│       │           ├── taskdef.proto
│       │           ├── taskexeclog.proto
│       │           ├── taskresult.proto
│       │           ├── tasksummary.proto
│       │           ├── workflow.proto
│       │           ├── workflowdef.proto
│       │           ├── workflowdefsummary.proto
│       │           ├── workflowsummary.proto
│       │           └── workflowtask.proto
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── grpc/
│                               └── TestProtoMapper.java
├── grpc-client/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── client/
│       │                       └── grpc/
│       │                           ├── ClientBase.java
│       │                           ├── EventClient.java
│       │                           ├── MetadataClient.java
│       │                           ├── TaskClient.java
│       │                           └── WorkflowClient.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   └── grpc/
│           │                       ├── EventClientTest.java
│           │                       ├── TaskClientTest.java
│           │                       └── WorkflowClientTest.java
│           └── resources/
│               └── mockito-extensions/
│                   └── org.mockito.plugins.MockMaker
├── grpc-server/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── grpc/
│       │                       └── server/
│       │                           ├── GRPCServer.java
│       │                           ├── GRPCServerProperties.java
│       │                           ├── GrpcConfiguration.java
│       │                           └── service/
│       │                               ├── EventServiceImpl.java
│       │                               ├── GRPCHelper.java
│       │                               ├── HealthServiceImpl.java
│       │                               ├── MetadataServiceImpl.java
│       │                               ├── TaskServiceImpl.java
│       │                               └── WorkflowServiceImpl.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── grpc/
│           │                   └── server/
│           │                       └── service/
│           │                           ├── HealthServiceImplTest.java
│           │                           ├── TaskServiceImplTest.java
│           │                           └── WorkflowServiceImplTest.java
│           └── resources/
│               └── log4j.properties
├── http-task/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── tasks/
│       │   │                   └── http/
│       │   │                       ├── HttpTask.java
│       │   │                       └── providers/
│       │   │                           ├── DefaultRestTemplateProvider.java
│       │   │                           └── RestTemplateProvider.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── tasks/
│                               └── http/
│                                   ├── HttpTaskTest.java
│                                   └── providers/
│                                       └── DefaultRestTemplateProviderTest.java
├── java-sdk/
│   ├── README.md
│   ├── build.gradle
│   ├── example/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── netflix/
│   │   │           └── conductor/
│   │   │               └── sdk/
│   │   │                   └── example/
│   │   │                       └── shipment/
│   │   │                           ├── Order.java
│   │   │                           ├── Shipment.java
│   │   │                           ├── ShipmentState.java
│   │   │                           ├── ShipmentWorkers.java
│   │   │                           ├── ShipmentWorkflow.java
│   │   │                           └── User.java
│   │   └── resources/
│   │       └── script.js
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/
│   │   │   │       └── netflix/
│   │   │   │           └── conductor/
│   │   │   │               └── sdk/
│   │   │   │                   ├── healthcheck/
│   │   │   │                   │   └── HealthCheckClient.java
│   │   │   │                   ├── testing/
│   │   │   │                   │   ├── LocalServerRunner.java
│   │   │   │                   │   └── WorkflowTestRunner.java
│   │   │   │                   └── workflow/
│   │   │   │                       ├── def/
│   │   │   │                       │   ├── ConductorWorkflow.java
│   │   │   │                       │   ├── ValidationError.java
│   │   │   │                       │   ├── WorkflowBuilder.java
│   │   │   │                       │   └── tasks/
│   │   │   │                       │       ├── DoWhile.java
│   │   │   │                       │       ├── Dynamic.java
│   │   │   │                       │       ├── DynamicFork.java
│   │   │   │                       │       ├── DynamicForkInput.java
│   │   │   │                       │       ├── Event.java
│   │   │   │                       │       ├── ForkJoin.java
│   │   │   │                       │       ├── Http.java
│   │   │   │                       │       ├── JQ.java
│   │   │   │                       │       ├── Javascript.java
│   │   │   │                       │       ├── Join.java
│   │   │   │                       │       ├── SetVariable.java
│   │   │   │                       │       ├── SimpleTask.java
│   │   │   │                       │       ├── SubWorkflow.java
│   │   │   │                       │       ├── Switch.java
│   │   │   │                       │       ├── Task.java
│   │   │   │                       │       ├── TaskRegistry.java
│   │   │   │                       │       ├── Terminate.java
│   │   │   │                       │       └── Wait.java
│   │   │   │                       ├── executor/
│   │   │   │                       │   ├── WorkflowExecutor.java
│   │   │   │                       │   └── task/
│   │   │   │                       │       ├── AnnotatedWorker.java
│   │   │   │                       │       ├── AnnotatedWorkerExecutor.java
│   │   │   │                       │       ├── DynamicForkWorker.java
│   │   │   │                       │       ├── NonRetryableException.java
│   │   │   │                       │       ├── TaskContext.java
│   │   │   │                       │       └── WorkerConfiguration.java
│   │   │   │                       ├── task/
│   │   │   │                       │   ├── InputParam.java
│   │   │   │                       │   ├── OutputParam.java
│   │   │   │                       │   └── WorkerTask.java
│   │   │   │                       └── utils/
│   │   │   │                           ├── InputOutputGetter.java
│   │   │   │                           ├── MapBuilder.java
│   │   │   │                           └── ObjectMapperProvider.java
│   │   │   └── resources/
│   │   │       └── test-server.properties
│   │   └── test/
│   │       ├── java/
│   │       │   └── com/
│   │       │       └── netflix/
│   │       │           └── conductor/
│   │       │               └── sdk/
│   │       │                   └── workflow/
│   │       │                       ├── def/
│   │       │                       │   ├── TaskConversionsTests.java
│   │       │                       │   ├── WorkflowCreationTests.java
│   │       │                       │   ├── WorkflowDefTaskTests.java
│   │       │                       │   └── WorkflowState.java
│   │       │                       ├── executor/
│   │       │                       │   └── task/
│   │       │                       │       ├── AnnotatedWorkerTests.java
│   │       │                       │       └── TestWorkerConfig.java
│   │       │                       └── testing/
│   │       │                           ├── Task1Input.java
│   │       │                           ├── TestWorkflowInput.java
│   │       │                           └── WorkflowTestFrameworkTests.java
│   │       └── resources/
│   │           ├── application-integrationtest.properties
│   │           ├── log4j2.xml
│   │           ├── script.js
│   │           ├── simple_workflow.json
│   │           └── tasks.json
│   ├── testing_framework.md
│   ├── worker_sdk.md
│   └── workflow_sdk.md
├── json-jq-task/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── tasks/
│       │                       └── json/
│       │                           └── JsonJqTransform.java
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── tasks/
│                               └── json/
│                                   └── JsonJqTransformTest.java
├── licenseheader.txt
├── polyglot-clients/
│   └── README.md
├── redis-concurrency-limit/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── redis/
│       │                       └── limit/
│       │                           ├── RedisConcurrentExecutionLimitDAO.java
│       │                           └── config/
│       │                               ├── RedisConcurrentExecutionLimitConfiguration.java
│       │                               └── RedisConcurrentExecutionLimitProperties.java
│       └── test/
│           └── groovy/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── redis/
│                               └── limit/
│                                   └── RedisConcurrentExecutionLimitDAOSpec.groovy
├── redis-lock/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── redislock/
│       │   │                   ├── config/
│       │   │                   │   ├── RedisLockConfiguration.java
│       │   │                   │   └── RedisLockProperties.java
│       │   │                   └── lock/
│       │   │                       └── RedisLock.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── redis/
│                               └── lock/
│                                   └── RedisLockTest.java
├── redis-persistence/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── redis/
│       │                       ├── config/
│       │                       │   ├── AnyRedisCondition.java
│       │                       │   ├── DynomiteClusterConfiguration.java
│       │                       │   ├── InMemoryRedisConfiguration.java
│       │                       │   ├── JedisCommandsConfigurer.java
│       │                       │   ├── RedisClusterConfiguration.java
│       │                       │   ├── RedisCommonConfiguration.java
│       │                       │   ├── RedisProperties.java
│       │                       │   ├── RedisSentinelConfiguration.java
│       │                       │   └── RedisStandaloneConfiguration.java
│       │                       ├── dao/
│       │                       │   ├── BaseDynoDAO.java
│       │                       │   ├── DynoQueueDAO.java
│       │                       │   ├── RedisEventHandlerDAO.java
│       │                       │   ├── RedisExecutionDAO.java
│       │                       │   ├── RedisMetadataDAO.java
│       │                       │   ├── RedisPollDataDAO.java
│       │                       │   └── RedisRateLimitingDAO.java
│       │                       ├── dynoqueue/
│       │                       │   ├── ConfigurationHostSupplier.java
│       │                       │   ├── LocalhostHostSupplier.java
│       │                       │   └── RedisQueuesShardingStrategyProvider.java
│       │                       └── jedis/
│       │                           ├── JedisCluster.java
│       │                           ├── JedisMock.java
│       │                           ├── JedisProxy.java
│       │                           ├── JedisSentinel.java
│       │                           └── JedisStandalone.java
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── redis/
│                               ├── config/
│                               │   └── utils/
│                               │       └── RedisQueuesShardingStrategyProviderTest.java
│                               ├── dao/
│                               │   ├── BaseDynoDAOTest.java
│                               │   ├── DynoQueueDAOTest.java
│                               │   ├── RedisEventHandlerDAOTest.java
│                               │   ├── RedisExecutionDAOTest.java
│                               │   ├── RedisMetadataDAOTest.java
│                               │   ├── RedisPollDataDAOTest.java
│                               │   └── RedisRateLimitDAOTest.java
│                               └── jedis/
│                                   ├── ConfigurationHostSupplierTest.java
│                                   ├── JedisClusterTest.java
│                                   └── JedisSentinelTest.java
├── rest/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── rest/
│       │   │                   ├── config/
│       │   │                   │   ├── RequestMappingConstants.java
│       │   │                   │   └── RestConfiguration.java
│       │   │                   ├── controllers/
│       │   │                   │   ├── AdminResource.java
│       │   │                   │   ├── ApplicationExceptionMapper.java
│       │   │                   │   ├── EventResource.java
│       │   │                   │   ├── HealthCheckResource.java
│       │   │                   │   ├── MetadataResource.java
│       │   │                   │   ├── QueueAdminResource.java
│       │   │                   │   ├── TaskResource.java
│       │   │                   │   ├── ValidationExceptionMapper.java
│       │   │                   │   ├── WorkflowBulkResource.java
│       │   │                   │   └── WorkflowResource.java
│       │   │                   └── startup/
│       │   │                       └── KitchenSinkInitializer.java
│       │   └── resources/
│       │       ├── kitchensink/
│       │       │   ├── kitchenSink-ephemeralWorkflowWithEphemeralTasks.json
│       │       │   ├── kitchenSink-ephemeralWorkflowWithStoredTasks.json
│       │       │   ├── kitchensink.json
│       │       │   ├── sub_flow_1.json
│       │       │   ├── wf1.json
│       │       │   └── wf2.json
│       │       └── static/
│       │           └── index.html
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── rest/
│                               └── controllers/
│                                   ├── AdminResourceTest.java
│                                   ├── EventResourceTest.java
│                                   ├── MetadataResourceTest.java
│                                   ├── TaskResourceTest.java
│                                   └── WorkflowResourceTest.java
├── server/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── Conductor.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── additional-spring-configuration-metadata.json
│       │       ├── application.properties
│       │       ├── banner.txt
│       │       └── log4j2.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── common/
│                               └── config/
│                                   └── ConductorObjectMapperTest.java
├── settings.gradle
├── springboot-bom-overrides.gradle
├── test-harness/
│   ├── build.gradle
│   └── src/
│       └── test/
│           ├── groovy/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── test/
│           │                   ├── base/
│           │                   │   ├── AbstractResiliencySpecification.groovy
│           │                   │   └── AbstractSpecification.groovy
│           │                   ├── integration/
│           │                   │   ├── DecisionTaskSpec.groovy
│           │                   │   ├── DoWhileSpec.groovy
│           │                   │   ├── DynamicForkJoinSpec.groovy
│           │                   │   ├── EventTaskSpec.groovy
│           │                   │   ├── ExclusiveJoinSpec.groovy
│           │                   │   ├── ExternalPayloadStorageSpec.groovy
│           │                   │   ├── FailureWorkflowSpec.groovy
│           │                   │   ├── ForkJoinSpec.groovy
│           │                   │   ├── HierarchicalForkJoinSubworkflowRerunSpec.groovy
│           │                   │   ├── HierarchicalForkJoinSubworkflowRestartSpec.groovy
│           │                   │   ├── HierarchicalForkJoinSubworkflowRetrySpec.groovy
│           │                   │   ├── JsonJQTransformSpec.groovy
│           │                   │   ├── LambdaAndTerminateTaskSpec.groovy
│           │                   │   ├── NestedForkJoinSubWorkflowSpec.groovy
│           │                   │   ├── SetVariableTaskSpec.groovy
│           │                   │   ├── SimpleWorkflowSpec.groovy
│           │                   │   ├── StartWorkflowSpec.groovy
│           │                   │   ├── SubWorkflowRerunSpec.groovy
│           │                   │   ├── SubWorkflowRestartSpec.groovy
│           │                   │   ├── SubWorkflowRetrySpec.groovy
│           │                   │   ├── SubWorkflowSpec.groovy
│           │                   │   ├── SwitchTaskSpec.groovy
│           │                   │   ├── SystemTaskSpec.groovy
│           │                   │   ├── TaskLimitsWorkflowSpec.groovy
│           │                   │   ├── TestWorkflowSpec.groovy
│           │                   │   ├── WaitTaskSpec.groovy
│           │                   │   └── WorkflowAndTaskConfigurationSpec.groovy
│           │                   ├── resiliency/
│           │                   │   ├── QueueResiliencySpec.groovy
│           │                   │   └── TaskResiliencySpec.groovy
│           │                   └── util/
│           │                       └── WorkflowTestUtil.groovy
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               ├── ConductorTestApp.java
│           │               └── test/
│           │                   ├── integration/
│           │                   │   ├── AbstractEndToEndTest.java
│           │                   │   ├── grpc/
│           │                   │   │   ├── AbstractGrpcEndToEndTest.java
│           │                   │   │   └── GrpcEndToEndTest.java
│           │                   │   └── http/
│           │                   │       ├── AbstractHttpEndToEndTest.java
│           │                   │       └── HttpEndToEndTest.java
│           │                   └── utils/
│           │                       ├── MockExternalPayloadStorage.java
│           │                       └── UserTask.java
│           └── resources/
│               ├── application-integrationtest.properties
│               ├── concurrency_limited_task_workflow_integration_test.json
│               ├── conditional_switch_task_workflow_integration_test.json
│               ├── conditional_system_task_workflow_integration_test.json
│               ├── conditional_task_workflow_integration_test.json
│               ├── decision_and_fork_join_integration_test.json
│               ├── decision_and_terminate_integration_test.json
│               ├── do_while_as_subtask_integration_test.json
│               ├── do_while_five_loop_over_integration_test.json
│               ├── do_while_integration_test.json
│               ├── do_while_iteration_fix_test.json
│               ├── do_while_multiple_integration_test.json
│               ├── do_while_set_variable_fix.json
│               ├── do_while_sub_workflow_integration_test.json
│               ├── do_while_system_tasks.json
│               ├── do_while_with_decision_task.json
│               ├── dynamic_fork_join_integration_test.json
│               ├── event_workflow_integration_test.json
│               ├── exclusive_join_integration_test.json
│               ├── failure_workflow_for_terminate_task_workflow.json
│               ├── fork_join_integration_test.json
│               ├── fork_join_sub_workflow.json
│               ├── fork_join_with_no_task_retry_integration_test.json
│               ├── fork_join_with_optional_sub_workflow_forks_integration_test.json
│               ├── hierarchical_fork_join_swf.json
│               ├── input.json
│               ├── json_jq_transform_result_integration_test.json
│               ├── nested_fork_join_integration_test.json
│               ├── nested_fork_join_swf.json
│               ├── nested_fork_join_with_sub_workflow_integration_test.json
│               ├── output.json
│               ├── rate_limited_simple_task_workflow_integration_test.json
│               ├── rate_limited_system_task_workflow_integration_test.json
│               ├── sequential_json_jq_transform_integration_test.json
│               ├── set_variable_workflow_integration_test.json
│               ├── simple_decision_task_integration_test.json
│               ├── simple_json_jq_transform_integration_test.json
│               ├── simple_lambda_workflow_integration_test.json
│               ├── simple_one_task_sub_workflow_integration_test.json
│               ├── simple_set_variable_workflow_integration_test.json
│               ├── simple_switch_task_integration_test.json
│               ├── simple_wait_task_workflow_integration_test.json
│               ├── simple_workflow_1_input_template_integration_test.json
│               ├── simple_workflow_1_integration_test.json
│               ├── simple_workflow_3_integration_test.json
│               ├── simple_workflow_with_async_complete_system_task_integration_test.json
│               ├── simple_workflow_with_optional_task_integration_test.json
│               ├── simple_workflow_with_resp_time_out_integration_test.json
│               ├── simple_workflow_with_sub_workflow_inline_def_integration_test.json
│               ├── start_workflow_input.json
│               ├── switch_and_fork_join_integration_test.json
│               ├── switch_and_terminate_integration_test.json
│               ├── switch_with_no_default_case_integration_test.json
│               ├── terminate_task_completed_workflow_integration_test.json
│               ├── terminate_task_failed_workflow_integration.json
│               ├── terminate_task_parent_workflow.json
│               ├── terminate_task_sub_workflow.json
│               ├── test_task_failed_parent_workflow.json
│               ├── test_task_failed_sub_workflow.json
│               ├── wait_workflow_integration_test.json
│               ├── workflow_that_starts_another_workflow.json
│               ├── workflow_with_sub_workflow_1_integration_test.json
│               └── workflow_with_synchronous_system_task.json
└── ui/
    ├── .eslintrc
    ├── .gitignore
    ├── .prettierignore
    ├── .prettierrc.json
    ├── README.md
    ├── cypress/
    │   ├── e2e/
    │   │   └── spec.cy.js
    │   ├── fixtures/
    │   │   ├── doWhile/
    │   │   │   └── doWhileSwitch.json
    │   │   ├── dynamicFork/
    │   │   │   ├── externalizedInput.json
    │   │   │   ├── noneSpawned.json
    │   │   │   ├── notExecuted.json
    │   │   │   ├── oneFailed.json
    │   │   │   └── success.json
    │   │   ├── dynamicFork.json
    │   │   ├── metadataTasks.json
    │   │   ├── metadataWorkflow.json
    │   │   ├── taskSearch.json
    │   │   └── workflowSearch.json
    │   └── support/
    │       ├── commands.ts
    │       ├── component-index.html
    │       ├── component.ts
    │       └── e2e.ts
    ├── cypress.config.ts
    ├── package.json
    ├── public/
    │   ├── index.html
    │   └── robots.txt
    ├── src/
    │   ├── App.jsx
    │   ├── components/
    │   │   ├── Banner.jsx
    │   │   ├── Button.jsx
    │   │   ├── ButtonGroup.jsx
    │   │   ├── ConfirmChoiceDialog.jsx
    │   │   ├── CustomButtons.jsx
    │   │   ├── DataTable.jsx
    │   │   ├── DateRangePicker.jsx
    │   │   ├── Dropdown.jsx
    │   │   ├── DropdownButton.jsx
    │   │   ├── Heading.jsx
    │   │   ├── Input.jsx
    │   │   ├── KeyValueTable.jsx
    │   │   ├── LinearProgress.jsx
    │   │   ├── NavLink.jsx
    │   │   ├── Paper.jsx
    │   │   ├── Pill.jsx
    │   │   ├── PrimaryButton.jsx
    │   │   ├── ReactJson.jsx
    │   │   ├── SecondaryButton.jsx
    │   │   ├── Select.jsx
    │   │   ├── SplitButton.jsx
    │   │   ├── StatusBadge.jsx
    │   │   ├── Tabs.jsx
    │   │   ├── TaskLink.jsx
    │   │   ├── TaskNameInput.jsx
    │   │   ├── TertiaryButton.jsx
    │   │   ├── Text.jsx
    │   │   ├── WorkflowNameInput.jsx
    │   │   ├── definitionList/
    │   │   │   └── DefinitionList.jsx
    │   │   ├── diagram/
    │   │   │   ├── TaskPointer.d.ts
    │   │   │   ├── TaskResult.d.ts
    │   │   │   ├── WorkflowDAG.js
    │   │   │   ├── WorkflowGraph.jsx
    │   │   │   ├── WorkflowGraph.test.cy.js
    │   │   │   └── diagram.scss
    │   │   ├── formik/
    │   │   │   ├── FormikCronEditor.jsx
    │   │   │   ├── FormikDropdown.jsx
    │   │   │   ├── FormikInput.jsx
    │   │   │   ├── FormikJsonInput.jsx
    │   │   │   ├── FormikSwitch.jsx
    │   │   │   ├── FormikVersionDropdown.jsx
    │   │   │   ├── FormikWorkflowNameInput.jsx
    │   │   │   └── cron.css
    │   │   └── index.js
    │   ├── data/
    │   │   ├── actions.js
    │   │   ├── bulkactions.js
    │   │   ├── common.js
    │   │   ├── misc.js
    │   │   ├── task.js
    │   │   └── workflow.js
    │   ├── hooks/
    │   │   └── useTime.js
    │   ├── index.css
    │   ├── index.js
    │   ├── pages/
    │   │   ├── definition/
    │   │   │   ├── EventHandler.jsx
    │   │   │   ├── ResetConfirmationDialog.jsx
    │   │   │   ├── SaveTaskDialog.jsx
    │   │   │   ├── SaveWorkflowDialog.jsx
    │   │   │   ├── TaskDefinition.jsx
    │   │   │   └── WorkflowDefinition.jsx
    │   │   ├── definitions/
    │   │   │   ├── EventHandler.jsx
    │   │   │   ├── Header.jsx
    │   │   │   ├── Task.jsx
    │   │   │   └── Workflow.jsx
    │   │   ├── execution/
    │   │   │   ├── ActionModule.jsx
    │   │   │   ├── Execution.jsx
    │   │   │   ├── ExecutionInputOutput.jsx
    │   │   │   ├── ExecutionJson.jsx
    │   │   │   ├── ExecutionSummary.jsx
    │   │   │   ├── Legend.jsx
    │   │   │   ├── RightPanel.jsx
    │   │   │   ├── TaskDetails.jsx
    │   │   │   ├── TaskList.jsx
    │   │   │   ├── TaskLogs.jsx
    │   │   │   ├── TaskPollData.jsx
    │   │   │   ├── TaskSummary.jsx
    │   │   │   ├── Timeline.jsx
    │   │   │   └── timeline.scss
    │   │   ├── executions/
    │   │   │   ├── BulkActionModule.jsx
    │   │   │   ├── ResultsTable.jsx
    │   │   │   ├── SearchTabs.jsx
    │   │   │   ├── TaskResultsTable.jsx
    │   │   │   ├── TaskSearch.jsx
    │   │   │   ├── WorkflowSearch.jsx
    │   │   │   └── executionsStyles.js
    │   │   ├── kitchensink/
    │   │   │   ├── DataTableDemo.jsx
    │   │   │   ├── DiagramTest.jsx
    │   │   │   ├── Dropdown.jsx
    │   │   │   ├── EnhancedTable.jsx
    │   │   │   ├── Examples.jsx
    │   │   │   ├── Gantt.jsx
    │   │   │   ├── KitchenSink.jsx
    │   │   │   └── sampleMovieData.js
    │   │   ├── misc/
    │   │   │   └── TaskQueue.jsx
    │   │   ├── styles.js
    │   │   └── workbench/
    │   │       ├── ExecutionHistory.jsx
    │   │       ├── RunHistory.tsx
    │   │       ├── Workbench.jsx
    │   │       └── WorkbenchForm.jsx
    │   ├── plugins/
    │   │   ├── AppBarModules.jsx
    │   │   ├── AppLogo.jsx
    │   │   ├── CustomAppBarButtons.jsx
    │   │   ├── CustomRoutes.jsx
    │   │   ├── constants.js
    │   │   ├── customTypeRenderers.jsx
    │   │   ├── env.js
    │   │   └── fetch.js
    │   ├── react-app-env.d.ts
    │   ├── schema/
    │   │   ├── task.js
    │   │   └── workflow.js
    │   ├── serviceWorker.js
    │   ├── setupProxy.js
    │   ├── setupTests.js
    │   ├── theme/
    │   │   ├── colorOverrides.js
    │   │   ├── colors.js
    │   │   ├── index.js
    │   │   ├── provider.jsx
    │   │   ├── theme.js
    │   │   └── variables.js
    │   └── utils/
    │       ├── constants.js
    │       ├── helpers.js
    │       ├── localstorage.ts
    │       └── path.js
    ├── test-karbon.sh
    └── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
# General

# Backend 
server/build/libs

# UI
**/node_modules
ui/build

================================================
FILE: .gitattributes
================================================
gradlew eol=lf
*.gradle eol=lf
*.java eol=lf
*.groovy eol=lf
spring.factories eol=lf
*.sh eol=lf

docs/* linguist-documentation
server/src/main/resources/swagger-ui/* linguist-vendored




================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ""
labels: 'type: bug'
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**Details**
Conductor version:
Persistence implementation: Cassandra, Postgres, MySQL, Dynomite etc
Queue implementation: Postgres, MySQL, Dynoqueues etc
Lock: Redis or Zookeeper?
Workflow definition:
Task definition:
Event handler definition:


**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false


================================================
FILE: .github/ISSUE_TEMPLATE/documentation.md
================================================
---
name: Documentation
about: Something in the documentation that needs improvement
title: "[DOC]: "
labels: 'type: docs'
assignees: ''

---

## What are you missing in the docs

## Proposed text


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Propose a new feature
title: "[FEATURE]: "
labels: 'type: feature'
assignees: ''

---

Please read our [contributor guide](https://github.com/Netflix/conductor/blob/main/CONTRIBUTING.md) before creating an issue.   
Also consider discussing your idea on the [discussion forum](https://github.com/Netflix/conductor/discussions) first.

## Describe the Feature Request
_A clear and concise description of what the feature request is._

## Describe Preferred Solution
_A clear and concise description of what you want to happen._

## Describe Alternatives
_A clear and concise description of any alternative solutions or features you've considered._


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "gradle"
    directory: "/"
    schedule:
      interval: "weekly"
    reviewers:
      - "aravindanr"
      - "jxu-nflx"
      - "apanicker-nflx"
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"


================================================
FILE: .github/pull_request_template.md
================================================
Pull Request type
----
- [ ] Bugfix
- [ ] Feature
- [ ] Refactoring (no functional changes, no api changes)
- [ ] Build related changes (Please run `./gradlew generateLock saveLock` to refresh dependencies)
- [ ] WHOSUSING.md
- [ ] Other (please describe):

**NOTE**: Please remember to run `./gradlew spotlessApply` to fix any format violations.

Changes in this PR
----

_Describe the new behavior from this PR, and why it's needed_
Issue #

Alternatives considered
----

_Describe alternative implementation you have considered_


================================================
FILE: .github/release-drafter.yml
================================================
template: |
  ## What’s Changed

  $CHANGES

name-template: 'v$RESOLVED_VERSION'
tag-template: 'v$RESOLVED_VERSION'

categories:
  - title: 'IMPORTANT'
    label: 'type: important'
  - title: 'New'
    label: 'type: feature'
  - title: 'Bug Fixes'
    label: 'type: bug'
  - title: 'Refactor'
    label: 'type: maintenance'
  - title: 'Documentation'
    label: 'type: docs'
  - title: 'Dependency Updates'
    label: 'type: dependencies'

version-resolver:
  minor:
    labels:
      - 'type: important'

  patch:
    labels:
      - 'type: bug'
      - 'type: maintenance'
      - 'type: docs'
      - 'type: dependencies'
      - 'type: feature'

exclude-labels:
  - 'skip-changelog'
  - 'gradle-wrapper'
  - 'github_actions'


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on: [ push, pull_request ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          fetch-depth: 0
      - name: Gradle wrapper validation
        uses: gradle/wrapper-validation-action@v1
      - name: Set up Zulu JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'zulu'
          java-version: '17'
      - name: Cache SonarCloud packages
        uses: actions/cache@v3
        with:
          path: ~/.sonar/cache
          key: ${{ runner.os }}-sonar
          restore-keys: ${{ runner.os }}-sonar
      - name: Cache Gradle packages
        uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: ${{ runner.os }}-gradle-
      - name: Build with Gradle
        if: github.ref != 'refs/heads/main'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
        run: |
          ./gradlew build --scan
      - name: Build and Publish snapshot
        if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
        run: |
          echo "Running build for commit ${{ github.sha }}"
          ./gradlew build snapshot --scan
        env:
          NETFLIX_OSS_SIGNING_KEY: ${{ secrets.ORG_SIGNING_KEY }}
          NETFLIX_OSS_SIGNING_PASSWORD: ${{ secrets.ORG_SIGNING_PASSWORD }}
          NETFLIX_OSS_REPO_USERNAME: ${{ secrets.ORG_NETFLIXOSS_USERNAME }}
          NETFLIX_OSS_REPO_PASSWORD: ${{ secrets.ORG_NETFLIXOSS_PASSWORD }}
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v3
        if: always()
        with:
          report_paths: '**/build/test-results/test/TEST-*.xml'
      - name: Upload build artifacts
        uses: actions/upload-artifact@v3
        with:
          name: build-artifacts
          path: '**/build/reports'
      - name: Store Buildscan URL
        uses: actions/upload-artifact@v3
        with:
          name: build-scan
          path: 'buildscan.log'
  build-ui:
    runs-on: ubuntu-latest
    container: cypress/browsers:node14.17.6-chrome100-ff98
    defaults:
      run:
        working-directory: ui
    steps:
      - uses: actions/checkout@v3

      - name: Install Dependencies
        run: yarn install

      - name: Build UI
        run: yarn run build

      - name: Run E2E Tests
        uses: cypress-io/github-action@v4
        with: 
          working-directory: ui
          install: false
          start: yarn run serve-build
          wait-on: 'http://localhost:5000'
      
      - name: Run Component Tests
        uses: cypress-io/github-action@v4
        with: 
          working-directory: ui
          install: false
          component: true

      - name: Archive test screenshots
        uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: cypress-screenshots
          path: ui/cypress/screenshots
      
      - name: Archive test videos
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: cypress-videos
          path: ui/cypress/videos



================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish to NetflixOSS and Maven Central
on:
  release:
    types:
      - released
      - prereleased

permissions:
  contents: read

jobs:
  publish:
    runs-on: ubuntu-latest
    name: Gradle Build and Publish
    steps:
      - uses: actions/checkout@v3
      - name: Set up Zulu JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'zulu'
          java-version: '17'
      - name: Cache Gradle packages
        uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: Publish candidate
        if: startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-rc.')
        run: ./gradlew -Prelease.useLastTag=true candidate --scan
        env:
          NETFLIX_OSS_SONATYPE_USERNAME: ${{ secrets.ORG_SONATYPE_USERNAME }}
          NETFLIX_OSS_SONATYPE_PASSWORD: ${{ secrets.ORG_SONATYPE_PASSWORD }}
          NETFLIX_OSS_SIGNING_KEY: ${{ secrets.ORG_SIGNING_KEY }}
          NETFLIX_OSS_SIGNING_PASSWORD: ${{ secrets.ORG_SIGNING_PASSWORD }}
          NETFLIX_OSS_REPO_USERNAME: ${{ secrets.ORG_NETFLIXOSS_USERNAME }}
          NETFLIX_OSS_REPO_PASSWORD: ${{ secrets.ORG_NETFLIXOSS_PASSWORD }}
      - name: Publish release
        if: startsWith(github.ref, 'refs/tags/v') && (!contains(github.ref, '-rc.'))
        run: ./gradlew -Prelease.useLastTag=true final --scan
        env:
          NETFLIX_OSS_SONATYPE_USERNAME: ${{ secrets.ORG_SONATYPE_USERNAME }}
          NETFLIX_OSS_SONATYPE_PASSWORD: ${{ secrets.ORG_SONATYPE_PASSWORD }}
          NETFLIX_OSS_SIGNING_KEY: ${{ secrets.ORG_SIGNING_KEY }}
          NETFLIX_OSS_SIGNING_PASSWORD: ${{ secrets.ORG_SIGNING_PASSWORD }}
          NETFLIX_OSS_REPO_USERNAME: ${{ secrets.ORG_NETFLIXOSS_USERNAME }}
          NETFLIX_OSS_REPO_PASSWORD: ${{ secrets.ORG_NETFLIXOSS_PASSWORD }}
      - name: Publish tag to community repo
        if: startsWith(github.ref, 'refs/tags/v')
        run: |
          export TAG=$(git describe --tags --abbrev=0)
          echo "Current release version is $TAG"
          echo "Triggering community build"
          curl \
            -H "Accept: application/vnd.github.v3+json" \
            -H "Authorization: Bearer ${{ secrets.COMMUNITY_REPO_TRIGGER }}" \
            -X POST https://api.github.com/repos/Netflix/conductor-community/dispatches \
            -d '{"event_type": "publish_build","client_payload": {"tag":"'"$TAG"'"}}'
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v3
        if: always() # always run even if the previous step fails
        with:
          report_paths: '**/build/test-results/test/TEST-*.xml'


================================================
FILE: .github/workflows/release_draft.yml
================================================
name: Release Drafter

on:
  push:
    branches:
      - main

permissions:
  contents: read

jobs:
  update_release_draft:
    permissions:
      contents: write  # for release-drafter/release-drafter to create a github release
      pull-requests: write  # for release-drafter/release-drafter to add label to PR
    runs-on: ubuntu-latest
    steps:
      - uses: release-drafter/release-drafter@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/stale.yml
================================================
name: Close stale issues and pull requests

on:
  schedule:
    - cron: "0 0 * * *"

permissions:
  contents: read

jobs:
  stale:
    permissions:
      issues: write  # for actions/stale to close stale issues
      pull-requests: write  # for actions/stale to close stale PRs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v6
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          stale-issue-message: 'This issue is stale, because it has been open for 45 days with no activity. Remove the stale label or comment, or this will be closed in 7 days.'
          close-issue-message: 'This issue was closed, because it has been stalled for 7 days with no activity.'
          stale-pr-message: 'This PR is stale, because it has been open for 45 days with no activity. Remove the stale label or comment, or this will be closed in 7 days.'
          close-pr-message: 'This PR was closed, because it has been stalled for 7 days with no activity.'
          days-before-issue-stale: 45
          days-before-issue-close: 7
          days-before-pr-stale: 45
          days-before-pr-close: 7
          exempt-issue-labels: 'type: bug,enhancement,work_in_progress,help_wanted'


================================================
FILE: .github/workflows/update-gradle-wrapper.yml
================================================
name: Update Gradle Wrapper

on:
  schedule:
    - cron: "0 0 * * *"
  workflow_dispatch:

jobs:
  update-gradle-wrapper:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Zulu JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'zulu'
          java-version: '17'
      - name: Update Gradle Wrapper
        uses: gradle-update/update-gradle-wrapper-action@v1


================================================
FILE: .gitignore
================================================
# Java Build
.gradle
.classpath
dump.rdb
out
bin
target
buildscan.log
/docs/site

# Python
/polyglot-clients/python/conductor.egg-info
*.pyc

# OS & IDE
.DS_Store
.settings
.vscode
.idea
.project
*.iml

# JS & UI Related
node_modules
/ui/build
/ui/public/monaco-editor

# publishing secrets
secrets/signing-key

# local builds
lib/
build/
*/build/

# asdf version file
.tool-versions



================================================
FILE: CHANGELOG.md
================================================
Conductor has been upgraded to use the SpringBoot framework and requires Java11 or above.  
#### NOTE: The java clients (conductor-client, conductor-client-spring, conductor-grpc-client) are still compiled using Java8 to ensure backward compatibility and smoother migration.

## Removals/Deprecations
- Removed support for EmbeddedElasticSearch
- Removed deprecated constructors in DynoQueueDAO
- Removed deprecated methods in the Worker interface
- Removed OAuth Support in HTTP task (Looking for contributions for OAuth/OAuth2.0)
- Removed deprecated fields and methods in the Workflow object
- Removed deprecated fields and methods in the Task object
- Removed deprecated fields and methods in the WorkflowTask object

Removed unused methods from QueueDAO:
- List pop(String, int, int, long)
- List pollMessages(String, int, int, long)

Removed APIs:
- GET /tasks/in_progress/{tasktype}
- GET /tasks/in_progress/{workflowId}/{taskRefName}
- POST /tasks/{taskId}/ack
- POST /tasks/queue/requeue
- DELETE /queue/{taskType}/{taskId}


- GET /event/queues
- GET /event/queues/providers


- void restart(String) in workflow client
- List getPendingTasksByType(String, String, Integer) in task client
- Task getPendingTaskForWorkflow(String, String) in task client
- boolean preAck(Task) in Worker
- int getPollCount() in Worker

## What's changed
Changes to configurations:

### `azureblob-storage` module:

| Old | New | Default |
| --- | --- | --- |
| workflow.external.payload.storage.azure_blob.connection_string | conductor.external-payload-storage.azureblob.connectionString | null |
| workflow.external.payload.storage.azure_blob.container_name | conductor.external-payload-storage.azureblob.containerName | conductor-payloads |
| workflow.external.payload.storage.azure_blob.endpoint | conductor.external-payload-storage.azureblob.endpoint | null |
| workflow.external.payload.storage.azure_blob.sas_token | conductor.external-payload-storage.azureblob.sasToken | null |
| workflow.external.payload.storage.azure_blob.signedurlexpirationseconds | conductor.external-payload-storage.azureblob.signedUrlExpirationDuration | 5s |
| workflow.external.payload.storage.azure_blob.workflow_input_path | conductor.external-payload-storage.azureblob.workflowInputPath | workflow/input/ | 
| workflow.external.payload.storage.azure_blob.workflow_output_path | conductor.external-payload-storage.azureblob.workflowOutputPath | workflow/output/ |
| workflow.external.payload.storage.azure_blob.task_input_path | conductor.external-payload-storage.azureblob.taskInputPath | task/input/ |
| workflow.external.payload.storage.azure_blob.task_output_path | conductor.external-payload-storage.azureblob.taskOutputPath | task/output/ |

### `cassandra-persistence` module:

| Old | New | Default |
| --- | --- | --- |
| workflow.cassandra.host | conductor.cassandra.hostAddress | 127.0.0.1 |
| workflow.cassandra.port | conductor.cassandra.port | 9142 |
| workflow.cassandra.cluster | conductor.cassandra.cluster | "" |
| workflow.cassandra.keyspace | conductor.cassandra.keyspace | conductor |
| workflow.cassandra.shard.size | conductor.cassandra.shardSize | 100 |
| workflow.cassandra.replication.strategy | conductor.cassandra.replicationStrategy | SimpleStrategy |
| workflow.cassandra.replication.factor.key | conductor.cassandra.replicationFactorKey | replication_factor |
| workflow.cassandra.replication.factor.value | conductor.cassandra.replicationFactorValue | 3 |
| workflow.cassandra.read.consistency.level | conductor.cassandra.readConsistencyLevel | LOCAL_QUORUM |
| workflow.cassandra.write.consistency.level | conductor.cassandra.writeConsistencyLevel | LOCAL_QUORUM |
| conductor.taskdef.cache.refresh.time.seconds | conductor.cassandra.taskDefCacheRefreshInterval | 60s |
| conductor.eventhandler.cache.refresh.time.seconds | conductor.cassandra.eventHandlerCacheRefreshInterval | 60s |
| workflow.event.execution.persistence.ttl.seconds | conductor.cassandra.eventExecutionPersistenceTTL | 0s |

### `contribs` module:

| Old | New | Default |
| --- | --- | --- |
| workflow.archival.ttl.seconds | conductor.workflow-status-listener.archival.ttlDuration | 0s |
| workflow.archival.delay.queue.worker.thread.count | conductor.workflow-status-listener.archival.delayQueueWorkerThreadCount | 5 |
| workflow.archival.delay.seconds | conductor.workflow-status-listener.archival.delaySeconds | 60 |
|  |  |
| workflowstatuslistener.publisher.success.queue | conductor.workflow-status-listener.queue-publisher.successQueue | _callbackSuccessQueue |
| workflowstatuslistener.publisher.failure.queue | conductor.workflow-status-listener.queue-publisher.failureQueue | _callbackFailureQueue |
|  |  |  |
| com.netflix.conductor.contribs.metrics.LoggingMetricsModule.reportPeriodSeconds | conductor.metrics-logger.reportInterval | 30s |
|  |  |  |
| workflow.event.queues.amqp.batchSize | conductor.event-queues.amqp.batchSize | 1 |
| workflow.event.queues.amqp.pollTimeInMs | conductor.event-queues.amqp.pollTimeDuration | 100ms |
| workflow.event.queues.amqp.hosts | conductor.event-queues.amqp.hosts | localhost |
| workflow.event.queues.amqp.username | conductor.event-queues.amqp.username | guest |
| workflow.event.queues.amqp.password | conductor.event-queues.amqp.password | guest |
| workflow.event.queues.amqp.virtualHost | conductor.event-queues.amqp.virtualHost | / |
| workflow.event.queues.amqp.port | conductor.event-queues.amqp.port.port | 5672 |
| workflow.event.queues.amqp.connectionTimeout | conductor.event-queues.amqp.connectionTimeout | 60000ms |
| workflow.event.queues.amqp.useNio | conductor.event-queues.amqp.useNio | false |
| workflow.event.queues.amqp.durable | conductor.event-queues.amqp.durable | true |
| workflow.event.queues.amqp.exclusive | conductor.event-queues.amqp.exclusive | false |
| workflow.event.queues.amqp.autoDelete | conductor.event-queues.amqp.autoDelete | false |
| workflow.event.queues.amqp.contentType | conductor.event-queues.amqp.contentType | application/json |
| workflow.event.queues.amqp.contentEncoding | conductor.event-queues.amqp.contentEncoding | UTF-8 |
| workflow.event.queues.amqp.amqp_exchange | conductor.event-queues.amqp.exchangeType | topic |
| workflow.event.queues.amqp.deliveryMode | conductor.event-queues.amqp.deliveryMode | 2 |
| workflow.listener.queue.useExchange | conductor.event-queues.amqp.useExchange | true |
| workflow.listener.queue.prefix | conductor.event-queues.amqp.listenerQueuePrefix | "" |
|  |  |  |
| io.nats.streaming.clusterId | conductor.event-queues.nats-stream.clusterId | test-cluster |
| io.nats.streaming.durableName | conductor.event-queues.nats-stream.durableName | null |
| io.nats.streaming.url | conductor.event-queues.nats-stream.url | nats://localhost:4222 |
|  |  |  |
| workflow.event.queues.sqs.batchSize | conductor.event-queues.sqs.batchSize | 1 |
| workflow.event.queues.sqs.pollTimeInMS | conductor.event-queues.sqs.pollTimeDuration | 100ms |
| workflow.event.queues.sqs.visibilityTimeoutInSeconds | conductor.event-queues.sqs.visibilityTimeout | 60s |
| workflow.listener.queue.prefix | conductor.event-queues.sqs.listenerQueuePrefix | "" |
| workflow.listener.queue.authorizedAccounts | conductor.event-queues.sqs.authorizedAccounts | "" |
|  |  |  |
| workflow.external.payload.storage.s3.bucket | conductor.external-payload-storage.s3.bucketName | conductor_payloads |
| workflow.external.payload.storage.s3.signedurlexpirationseconds | conductor.external-payload-storage.s3.signedUrlExpirationDuration | 5s |
| workflow.external.payload.storage.s3.region | conductor.external-payload-storage.s3.region | us-east-1 |
|  |  |  |
| http.task.read.timeout | conductor.tasks.http.readTimeout | 150ms |
| http.task.connect.timeout | conductor.tasks.http.connectTimeout | 100ms |
|  |  |  |
| kafka.publish.request.timeout.ms | conductor.tasks.kafka-publish.requestTimeout | 100ms |
| kafka.publish.max.block.ms | conductor.tasks.kafka-publish.maxBlock | 500ms |
| kafka.publish.producer.cache.size | conductor.tasks.kafka-publish.cacheSize | 10 |
| kafka.publish.producer.cache.time.ms | conductor.tasks.kafka-publish.cacheTime | 120000ms |

### `core` module:

| Old | New | Default |
| --- | --- | --- |
| environment | _removed_ |  |
| STACK | conductor.app.stack | test |
| APP_ID | conductor.app.appId | conductor |
| workflow.executor.service.max.threads | conductor.app.executorServiceMaxThreadCount | 50 |
| decider.sweep.frequency.seconds | conductor.app.sweepFrequency | 30s |
| workflow.sweeper.thread.count | conductor.app.sweeperThreadCount | 5 |
| - | conductor.app.sweeperWorkflowPollTimeout | 2000ms |
| workflow.event.processor.thread.count | conductor.app.eventProcessorThreadCount | 2 |
| workflow.event.message.indexing.enabled | conductor.app.eventMessageIndexingEnabled | true |
| workflow.event.execution.indexing.enabled | conductor.app.eventExecutionIndexingEnabled | true |
| workflow.decider.locking.enabled | conductor.app.workflowExecutionLockEnabled | false |
| workflow.locking.lease.time.ms | conductor.app.lockLeaseTime | 60000ms |
| workflow.locking.time.to.try.ms | conductor.app.lockTimeToTry | 500ms |
| tasks.active.worker.lastpoll | conductor.app.activeWorkerLastPollTimeout | 10s |
| task.queue.message.postponeSeconds | conductor.app.taskExecutionPostponeDuration | 60s |
| workflow.taskExecLog.indexing.enabled | conductor.app.taskExecLogIndexingEnabled | true |
| async.indexing.enabled | conductor.app.asyncIndexingEnabled | false |
| workflow.system.task.worker.thread.count | conductor.app.systemTaskWorkerThreadCount | # available processors * 2 |
| workflow.system.task.worker.callback.seconds | conductor.app.systemTaskWorkerCallbackDuration | 30s |
| workflow.system.task.worker.poll.interval | conductor.app.systemTaskWorkerPollInterval | 50s |
| workflow.system.task.worker.executionNameSpace | conductor.app.systemTaskWorkerExecutionNamespace | "" |
| workflow.isolated.system.task.worker.thread.count | conductor.app.isolatedSystemTaskWorkerThreadCount | 1 |
| workflow.system.task.queue.pollCount | conductor.app.systemTaskMaxPollCount | 1 |
| async.update.short.workflow.duration.seconds | conductor.app.asyncUpdateShortRunningWorkflowDuration | 30s |
| async.update.delay.seconds | conductor.app.asyncUpdateDelay | 60s |
| summary.input.output.json.serialization.enabled | conductor.app.summary-input-output-json-serialization.enabled | false |
| workflow.owner.email.mandatory | conductor.app.ownerEmailMandatory | true |
| workflow.repairservice.enabled | conductor.app.workflowRepairServiceEnabled | false |
| workflow.event.queue.scheduler.poll.thread.count | conductor.app.eventSchedulerPollThreadCount | # CPU cores |
| workflow.dyno.queues.pollingInterval | conductor.app.eventQueuePollInterval | 100ms |
| workflow.dyno.queues.pollCount | conductor.app.eventQueuePollCount | 10 |
| workflow.dyno.queues.longPollTimeout | conductor.app.eventQueueLongPollTimeout | 1000ms |
| conductor.workflow.input.payload.threshold.kb | conductor.app.workflowInputPayloadSizeThreshold | 5120KB |
| conductor.max.workflow.input.payload.threshold.kb | conductor.app.maxWorkflowInputPayloadSizeThreshold | 10240KB |
| conductor.workflow.output.payload.threshold.kb | conductor.app.workflowOutputPayloadSizeThreshold | 5120KB |
| conductor.max.workflow.output.payload.threshold.kb | conductor.app.maxWorkflowOutputPayloadSizeThreshold | 10240KB |
| conductor.task.input.payload.threshold.kb | conductor.app.taskInputPayloadSizeThreshold | 3072KB |
| conductor.max.task.input.payload.threshold.kb | conductor.app.maxTaskInputPayloadSizeThreshold | 10240KB |
| conductor.task.output.payload.threshold.kb | conductor.app.taskOutputPayloadSizeThreshold | 3072KB |
| conductor.max.task.output.payload.threshold.kb | conductor.app.maxTaskOutputPayloadSizeThreshold | 10240KB |
| conductor.max.workflow.variables.payload.threshold.kb | conductor.app.maxWorkflowVariablesPayloadSizeThreshold | 256KB |
|  |  |  |
| workflow.isolated.system.task.enable | conductor.app.isolatedSystemTaskEnabled | false |
| workflow.isolated.system.task.poll.time.secs | conductor.app.isolatedSystemTaskQueuePollInterval | 10s |
|  |  |  |
| workflow.task.pending.time.threshold.minutes | conductor.app.taskPendingTimeThreshold |  60m |
|  |  |  |
| workflow.monitor.metadata.refresh.counter | conductor.workflow-monitor.metadataRefreshInterval | 10 |
| workflow.monitor.stats.freq.seconds | conductor.workflow-monitor.statsFrequency | 60s |

### `es6-persistence` module:

| Old | New | Default |
| --- | --- | --- |
| workflow.elasticsearch.version | conductor.elasticsearch.version | 6 |
| workflow.elasticsearch.url | conductor.elasticsearch.url | localhost:9300 |
| workflow.elasticsearch.index.name | conductor.elasticsearch.indexPrefix | conductor |
| workflow.elasticsearch.tasklog.index.name | _removed_ |  |
| workflow.elasticsearch.cluster.health.color | conductor.elasticsearch.clusterHealthColor | green |
| workflow.elasticsearch.archive.search.batchSize | _removed_ |  |
| workflow.elasticsearch.index.batchSize | conductor.elasticsearch.indexBatchSize | 1 |
| workflow.elasticsearch.async.dao.worker.queue.size | conductor.elasticsearch.asyncWorkerQueueSize | 100 |
| workflow.elasticsearch.async.dao.max.pool.size | conductor.elasticsearch.asyncMaxPoolSize | 12 |
| workflow.elasticsearch.async.buffer.flush.timeout.seconds | conductor.elasticsearch.asyncBufferFlushTimeout | 10s |
| workflow.elasticsearch.index.shard.count | conductor.elasticsearch.indexShardCount | 5 |
| workflow.elasticsearch.index.replicas.count | conductor.elasticsearch.indexReplicasCount | 1 |
| tasklog.elasticsearch.query.size | conductor.elasticsearch.taskLogResultLimit | 10 |
| workflow.elasticsearch.rest.client.connectionRequestTimeout.milliseconds | conductor.elasticsearch.restClientConnectionRequestTimeout | -1 |
| workflow.elasticsearch.auto.index.management.enabled | conductor.elasticsearch.autoIndexManagementEnabled | true |
| workflow.elasticsearch.document.type.override | conductor.elasticsearch.documentTypeOverride | "" |

### `es7-persistence` module:

| Old | New | Default |
| --- | --- | --- |
| workflow.elasticsearch.version | conductor.elasticsearch.version | 7 |
| workflow.elasticsearch.url | conductor.elasticsearch.url | localhost:9300 |
| workflow.elasticsearch.index.name | conductor.elasticsearch.indexPrefix | conductor |
| workflow.elasticsearch.tasklog.index.name | _removed_ |  |
| workflow.elasticsearch.cluster.health.color | conductor.elasticsearch.clusterHealthColor | green |
| workflow.elasticsearch.archive.search.batchSize | _removed_ |  |
| workflow.elasticsearch.index.batchSize | conductor.elasticsearch.indexBatchSize | 1 |
| workflow.elasticsearch.async.dao.worker.queue.size | conductor.elasticsearch.asyncWorkerQueueSize | 100 |
| workflow.elasticsearch.async.dao.max.pool.size | conductor.elasticsearch.asyncMaxPoolSize | 12 |
| workflow.elasticsearch.async.buffer.flush.timeout.seconds | conductor.elasticsearch.asyncBufferFlushTimeout | 10s |
| workflow.elasticsearch.index.shard.count | conductor.elasticsearch.indexShardCount | 5 |
| workflow.elasticsearch.index.replicas.count | conductor.elasticsearch.indexReplicasCount | 1 |
| tasklog.elasticsearch.query.size | conductor.elasticsearch.taskLogResultLimit | 10 |
| workflow.elasticsearch.rest.client.connectionRequestTimeout.milliseconds | conductor.elasticsearch.restClientConnectionRequestTimeout | -1 |
| workflow.elasticsearch.auto.index.management.enabled | conductor.elasticsearch.autoIndexManagementEnabled | true |
| workflow.elasticsearch.document.type.override | conductor.elasticsearch.documentTypeOverride | "" |
| workflow.elasticsearch.basic.auth.username | conductor.elasticsearch.username | "" |
| workflow.elasticsearch.basic.auth.password | conductor.elasticsearch.password | "" |

### `grpc-server` module:

| Old | New | Default |
| --- | --- | --- |
| conductor.grpc.server.port | conductor.grpc-server.port | 8090 |
| conductor.grpc.server.reflectionEnabled | conductor.grpc-server.reflectionEnabled | true |

### `mysql-persistence` module (v3.0.0 - v3.0.5):

| Old | New | Default |
| --- | --- | --- |
| jdbc.url | conductor.mysql.jdbcUrl | jdbc:mysql://localhost:3306/conductor |
| jdbc.username | conductor.mysql.jdbcUsername | conductor |
| jdbc.password | conductor.mysql.jdbcPassword | password |
| flyway.enabled | conductor.mysql.flywayEnabled | true |
| flyway.table | conductor.mysql.flywayTable | null |
| conductor.mysql.connection.pool.size.max | conductor.mysql.connectionPoolMaxSize | -1 |
| conductor.mysql.connection.pool.idle.min | conductor.mysql.connectionPoolMinIdle | -1 |
| conductor.mysql.connection.lifetime.max | conductor.mysql.connectionMaxLifetime | 30m |
| conductor.mysql.connection.idle.timeout | conductor.mysql.connectionIdleTimeout | 10m |
| conductor.mysql.connection.timeout | conductor.mysql.connectionTimeout | 30s | 
| conductor.mysql.transaction.isolation.level | conductor.mysql.transactionIsolationLevel | "" |
| conductor.mysql.autocommit | conductor.mysql.autoCommit | false |
| conductor.taskdef.cache.refresh.time.seconds | conductor.mysql.taskDefCacheRefreshInterval | 60s |

### `mysql-persistence` module (v3.0.5+):

| Old | New |
| --- | --- |
| jdbc.url | spring.datasource.url |
| jdbc.username | spring.datasource.username |
| jdbc.password | spring.datasource.password |
| flyway.enabled | spring.flyway.enabled |
| flyway.table | spring.flyway.table |
| conductor.mysql.connection.pool.size.max | spring.datasource.hikari.maximum-pool-size |
| conductor.mysql.connection.pool.idle.min | spring.datasource.hikari.minimum-idle |
| conductor.mysql.connection.lifetime.max | spring.datasource.hikari.max-lifetime |
| conductor.mysql.connection.idle.timeout | spring.datasource.hikari.idle-timeout |
| conductor.mysql.connection.timeout | spring.datasource.hikari.connection-timeout |
| conductor.mysql.transaction.isolation.level | spring.datasource.hikari.transaction-isolation |
| conductor.mysql.autocommit | spring.datasource.hikari.auto-commit |
| conductor.taskdef.cache.refresh.time.seconds | conductor.mysql.taskDefCacheRefreshInterval |

* for more properties and default values: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#application-properties.data.spring.datasource.hikari

### `postgres-persistence` module (v3.0.0 - v3.0.5):

| Old | New | Default |
| --- | --- | --- |
| jdbc.url | conductor.postgres.jdbcUrl | jdbc:postgresql://localhost:5432/conductor |
| jdbc.username | conductor.postgres.jdbcUsername | conductor |
| jdbc.password | conductor.postgres.jdbcPassword | password |
| flyway.enabled | conductor.postgres.flywayEnabled | true |
| flyway.table | conductor.postgres.flywayTable | null |
| conductor.postgres.connection.pool.size.max | conductor.postgres.connectionPoolMaxSize | -1 |
| conductor.postgres.connection.pool.idle.min | conductor.postgres.connectionPoolMinIdle | -1 |
| conductor.postgres.connection.lifetime.max | conductor.postgres.connectionMaxLifetime | 30m |
| conductor.postgres.connection.idle.timeout | conductor.postgres.connectionIdleTimeout | 10m |
| conductor.postgres.connection.timeout | conductor.postgres.connectionTimeout | 30s |
| conductor.postgres.transaction.isolation.level | conductor.postgres.transactionIsolationLevel | "" |
| conductor.postgres.autocommit | conductor.postgres.autoCommit | false |
| conductor.taskdef.cache.refresh.time.seconds | conductor.postgres.taskDefCacheRefreshInterval | 60s |

### `postgres-persistence` module (v3.0.5+):

| Old | New |
| --- | --- |
| jdbc.url | spring.datasource.url | 
| jdbc.username | spring.datasource.username |
| jdbc.password | spring.datasource.password |
| flyway.enabled | spring.flyway.enabled |
| flyway.table | spring.flyway.table |
| conductor.postgres.connection.pool.size.max | spring.datasource.hikari.maximum-pool-size |
| conductor.postgres.connection.pool.idle.min | spring.datasource.hikari.minimum-idle |
| conductor.postgres.connection.lifetime.max | spring.datasource.hikari.max-lifetime |
| conductor.postgres.connection.idle.timeout | spring.datasource.hikari.idle-timeout |
| conductor.postgres.connection.timeout | spring.datasource.hikari.connection-timeout |
| conductor.postgres.transaction.isolation.level | spring.datasource.hikari.transaction-isolation |
| conductor.postgres.autocommit | spring.datasource.hikari.auto-commit |
| conductor.taskdef.cache.refresh.time.seconds | conductor.postgres.taskDefCacheRefreshInterval |

* for more properties and default values: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#application-properties.data.spring.datasource.hikari

### `redis-lock` module:

| Old | New | Default |
| --- | --- | --- |
| workflow.redis.locking.server.type | conductor.redis-lock.serverType | single |
| workflow.redis.locking.server.address | conductor.redis-lock.serverAddress | redis://127.0.0.1:6379 |
| workflow.redis.locking.server.password | conductor.redis-lock.serverPassword | null |
| workflow.redis.locking.server.master.name | conductor.redis-lock.serverMasterName | master |
| workflow.decider.locking.namespace | conductor.redis-lock.namespace | "" |
| workflow.decider.locking.exceptions.ignore | conductor.redis-lock.ignoreLockingExceptions | false |

### `redis-persistence` module:

| Old | New | Default |
| --- | --- | --- |
| EC2_REGION | conductor.redis.dataCenterRegion | us-east-1 |
| EC2_AVAILABILITY_ZONE | conductor.redis.availabilityZone | us-east-1c |
| workflow.dynomite.cluster | _removed_ |
| workflow.dynomite.cluster.name | conductor.redis.clusterName | "" |
| workflow.dynomite.cluster.hosts | conductor.redis.hosts | null |
| workflow.namespace.prefix | conductor.redis.workflowNamespacePrefix | null |
| workflow.namespace.queue.prefix | conductor.redis.queueNamespacePrefix | null |
| workflow.dyno.keyspace.domain | conductor.redis.keyspaceDomain | null |
| workflow.dynomite.connection.maxConnsPerHost | conductor.redis.maxConnectionsPerHost | 10 |
| workflow.dynomite.connection.max.retry.attempt | conductor.redis.maxRetryAttempts | 0 |
| workflow.dynomite.connection.max.timeout.exhausted.ms | conductor.redis.maxTimeoutWhenExhausted | 800ms |
| queues.dynomite.nonQuorum.port | conductor.redis.queuesNonQuorumPort | 22122 |
| workflow.dyno.queue.sharding.strategy | conductor.redis.queueShardingStrategy | roundRobin |
| conductor.taskdef.cache.refresh.time.seconds | conductor.redis.taskDefCacheRefreshInterval | 60s |
| workflow.event.execution.persistence.ttl.seconds | conductor.redis.eventExecutionPersistenceTTL | 60s |

### `zookeeper-lock` module:

| Old | New | Default |
| --- | --- | --- |
| workflow.zookeeper.lock.connection | conductor.zookeeper-lock.connectionString | localhost:2181 |
| workflow.zookeeper.lock.sessionTimeoutMs | conductor.zookeeper-lock.sessionTimeout | 60000ms |
| workflow.zookeeper.lock.connectionTimeoutMs | conductor.zookeeper-lock.connectionTimeout | 15000ms |
| workflow.decider.locking.namespace | conductor.zookeeper-lock.namespace | "" |

### Component configuration:

| Old | New | Default |
| --- | --- | --- |
| db | conductor.db.type | "" | 
| workflow.indexing.enabled | conductor.indexing.enabled | true |
| conductor.disable.async.workers | conductor.system-task-workers.enabled | true |
| decider.sweep.disable | conductor.workflow-reconciler.enabled | true |
| conductor.grpc.server.enabled | conductor.grpc-server.enabled | false |
| workflow.external.payload.storage | conductor.external-payload-storage.type | dummy |
| workflow.default.event.processor.enabled | conductor.default-event-processor.enabled | true |
| workflow.events.default.queue.type | conductor.default-event-queue.type | sqs |
| workflow.status.listener.type | conductor.workflow-status-listener.type | stub |
| - | conductor.task-status-listener.type | stub |
| workflow.decider.locking.server | conductor.workflow-execution-lock.type | noop_lock |
|  |  |  |
| workflow.default.event.queue.enabled | conductor.event-queues.default.enabled | true |
| workflow.sqs.event.queue.enabled | conductor.event-queues.sqs.enabled | false |
| workflow.amqp.event.queue.enabled | conductor.event-queues.amqp.enabled | false |
| workflow.nats.event.queue.enabled | conductor.event-queues.nats.enabled | false |
| workflow.nats_stream.event.queue.enabled | conductor.event-queues.nats-stream.enabled | false |
|  |  |  |
| - | conductor.metrics-logger.enabled | false |
| - | conductor.metrics-prometheus.enabled | false |
| - | conductor.metrics-datadog.enable | false |
| - | conductor.metrics-datadog.api-key | |



================================================
FILE: CODE_OF_CONDUCT.md
================================================
[Code of Conduct](docs/docs/resources/code-of-conduct.md)

================================================
FILE: CONTRIBUTING.md
================================================
[Contributing](docs/docs/resources/contributing.md)

================================================
FILE: LICENSE
================================================
Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} Netflix, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================
FILE: OSSMETADATA
================================================
osslifecycle=active


================================================
FILE: README.md
================================================
![Conductor](docs/docs/img/logo.png)

## Announcement

> Effective **December 13, 2023**, Netflix will discontinue maintenance of Conductor OSS on GitHub. This strategic decision, while difficult, is essential for realigning our resources to better serve our business objectives with our internal Conductor fork.
> 
> We are *deeply grateful* for your support and contributions over the years. While Netflix will no longer be maintaining this repo, members of the Conductor community have been active in promoting alternative forks of this project, we’ll leave the code as is and trust that the health of the community will remain strong and continue to develop moving forward.


# Conductor
[![NetflixOSS Lifecycle](https://img.shields.io/osslifecycle/Netflix/conductor.svg)]()
[![Github release](https://img.shields.io/github/v/release/Netflix/conductor.svg)](https://GitHub.com/Netflix/conductor/releases)
[![License](https://img.shields.io/github/license/Netflix/conductor.svg)](http://www.apache.org/licenses/LICENSE-2.0)

[![GitHub stars](https://img.shields.io/github/stars/Netflix/conductor.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/Netflix/conductor/stargazers/)
[![GitHub forks](https://img.shields.io/github/forks/Netflix/conductor.svg?style=social&label=Fork&maxAge=2592000)](https://GitHub.com/Netflix/conductor/network/)

Conductor is a platform created by Netflix to orchestrate workflows that span across microservices.

## Releases
The final release is [![Github release](https://img.shields.io/github/v/release/Netflix/conductor.svg)](https://GitHub.com/Netflix/conductor/releases)

## Workflow Creation in Code
Conductor supports creating workflows using JSON and Code.  
SDK support for creating workflows using code is available in multiple languages and can be found at https://github.com/conductor-sdk

## Community Contributions
The modules contributed by the community are housed at [conductor-community](https://github.com/Netflix/conductor-community). Compatible versions of the community modules are released simultaneously with releases of the main modules.

[Discussion Forum](https://github.com/Netflix/conductor/discussions): Please use the forum for questions and discussing ideas and join the community.

[List of Conductor community projects](/docs/docs/resources/related.md): Backup tool, Cron like workflow starter, Docker containers and more.

## Getting Started - Building & Running Conductor
###  Using Docker:
The easiest way to get started is with Docker containers. Please follow the instructions [here](https://conductor.netflix.com/devguide/running/docker.html). 

###  From Source:
Conductor Server is a [Spring Boot](https://spring.io/projects/spring-boot) project and follows all applicable conventions. See instructions [here](https://conductor.netflix.com/devguide/running/source.html).

## Published Artifacts
Binaries are available from the [Maven Central Repository](https://search.maven.org/search?q=g:com.netflix.conductor).

| Artifact                        | Description                                                                                     |
|---------------------------------|-------------------------------------------------------------------------------------------------|
| conductor-common                | Common models used by various conductor modules                                                 |
| conductor-core                  | Core Conductor module                                                                           |
| conductor-redis-persistence     | Persistence and queue using Redis/Dynomite                                                      |
| conductor-cassandra-persistence | Persistence using Cassandra                                                                     |
| conductor-es6-persistence       | Indexing using Elasticsearch 6.X                                                                |
| conductor-rest                  | Spring MVC resources for the core services                                                      |
| conductor-ui                    | node.js based UI for Conductor                                                                  |
| conductor-client                | Java client for Conductor that includes helpers for running worker tasks                        |
| conductor-client-spring         | Client starter kit for Spring                                                                   |
| conductor-java-sdk              | SDK for writing workflows in code                                                               |
| conductor-server                | Spring Boot Web Application                                                                     |
| conductor-redis-lock            | Workflow execution lock implementation using Redis                                              |
| conductor-awss3-storage         | External payload storage implementation using AWS S3                                            |
| conductor-awssqs-event-queue    | Event queue implementation using AWS SQS                                                        |
| conductor-http-task             | Workflow system task implementation to send make requests                                       |
| conductor-json-jq-task          | Workflow system task implementation to evaluate JSON using [jq](https://stedolan.github.io/jq/) |
| conductor-grpc                  | Protobuf models used by the server and client                                                   |
| conductor-grpc-client           | gRPC client to interact with the gRPC server                                                    |
| conductor-grpc-server           | gRPC server Application                                                                         |
| conductor-test-harness          | Integration and regression tests                                                                |

## Database Requirements

* The default persistence used is Redis
* The indexing backend is [Elasticsearch](https://www.elastic.co/) (6.x)

## Other Requirements
* JDK 17+
* UI requires Node 14 to build. Earlier Node versions may work but is untested.

## Get Support
There are several ways to get in touch with us:
* [Slack Community](https://join.slack.com/t/orkes-conductor/shared_invite/zt-xyxqyseb-YZ3hwwAgHJH97bsrYRnSZg)
* [GitHub Discussion Forum](https://github.com/Netflix/conductor/discussions)

## Contributions
Whether it is a small documentation correction, bug fix or a new feature, contributions are highly appreciated. We just ask you to follow standard OSS guidelines. The [Discussion Forum](https://github.com/Netflix/conductor/discussions) is a good place to ask questions, discuss new features and explore ideas. Please check with us before spending too much time, only to find out later that someone else is already working on a similar feature.

`main` branch is the current working branch. Please send your PR's to `main` branch, making sure that it builds on your local system successfully. Also, please make sure all the conflicts are resolved.

## License
Copyright 2022 Netflix, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


================================================
FILE: RELATED.md
================================================
[Related Projects](docs/docs/resources/related.md)


================================================
FILE: SECURITY.md
================================================
# Security Policy

## Supported Versions

| Version | Supported          |
| ------- | ------------------ |
| 3.x.x   | :white_check_mark: |
| 2.x.x   | :x:                |
| 1.x.x   | :x:                |

## Reporting a Vulnerability

Please email conductor@netflix.com to report vulnerabilities.


================================================
FILE: USERS.md
================================================

## Who uses Conductor?

We would like to keep track of whose using Conductor. Please send a pull request with your company name and Github handle.

* [Netflix](https://www.netflix.com/) [[@aravindanr](https://github.com/aravindanr)]
* [Florida Blue](http://bcbsfl.com/) [[@rickfish](https://github.com/rickfish)]
* [UWM](https://www.uwm.com/) [[@zergrushjoe](https://github.com/ZergRushJoe)]
* [Deutsche Telekom Digital Labs](https://dtdl.in) [[@jas34](https://github.com/jas34)] [[@deoramanas](https://github.com/deoramanas)]
* [VMware](https://www.vmware.com/) [[@taojwmware](https://github.com/taojwmware)] [[@venkag](https://github.com/venkag)]
* [JP Morgan Chase](https://www.chase.com/) [[@maheshyaddanapudi](https://github.com/maheshyaddanapudi)]
* [Orkes](https://orkes.io/) [[@CherishSantoshi](https://github.com/CherishSantoshi)]
* [313X](https://313x.com.br) [[@dalmoveras](https://github.com/dalmoveras)]
* [Supercharge](https://supercharge.io) [[@team-supercharge](https://github.com/team-supercharge)]
* [GE Healthcare](https://www.gehealthcare.com/) [[@flavioschuindt](https://github.com/flavioschuindt)]
* [ReliaQuest](https://www.reliaquest.com/) [[@rq-dbrady](https://github.com/rq-dbrady)] [[@alexmay48](https://github.com/alexmay48)]
* [Clari](https://www.clari.com/) [[@TeamJOF](https://github.com/clari)]
* [Atlassian](https://www.atlassian.com/) [[@LuisLainez](https://github.com/LuisLainez)] [[@aradu](https://github.com/aradu-atlassian)]


================================================
FILE: annotations/README.md
================================================
# Annotations 

- `protogen` Annotations
  - Original Author: Vicent Martí - https://github.com/vmg
  - Original Repo: https://github.com/vmg/protogen




================================================
FILE: annotations/build.gradle
================================================


dependencies {

}

================================================
FILE: annotations/src/main/java/com/netflix/conductor/annotations/protogen/ProtoEnum.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotations.protogen;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * ProtoEnum annotates an enum type that will be exposed via the GRPC API as a native Protocol
 * Buffers enum.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ProtoEnum {}


================================================
FILE: annotations/src/main/java/com/netflix/conductor/annotations/protogen/ProtoField.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotations.protogen;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * ProtoField annotates a field inside an struct with metadata on how to expose it on its
 * corresponding Protocol Buffers struct. For a field to be exposed in a ProtoBuf struct, the
 * containing struct must also be annotated with a {@link ProtoMessage} or {@link ProtoEnum} tag.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ProtoField {
    /**
     * Mandatory. Sets the Protocol Buffer ID for this specific field. Once a field has been
     * annotated with a given ID, the ID can never change to a different value or the resulting
     * Protocol Buffer struct will not be backwards compatible.
     *
     * @return the numeric ID for the field
     */
    int id();
}


================================================
FILE: annotations/src/main/java/com/netflix/conductor/annotations/protogen/ProtoMessage.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotations.protogen;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * ProtoMessage annotates a given Java class so it becomes exposed via the GRPC API as a native
 * Protocol Buffers struct. The annotated class must be a POJO.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ProtoMessage {
    /**
     * Sets whether the generated mapping code will contain a helper to translate the POJO for this
     * class into the equivalent ProtoBuf object.
     *
     * @return whether this class will generate a mapper to ProtoBuf objects
     */
    boolean toProto() default true;

    /**
     * Sets whether the generated mapping code will contain a helper to translate the ProtoBuf
     * object for this class into the equivalent POJO.
     *
     * @return whether this class will generate a mapper from ProtoBuf objects
     */
    boolean fromProto() default true;

    /**
     * Sets whether this is a wrapper class that will be used to encapsulate complex nested type
     * interfaces. Wrapper classes are not directly exposed by the ProtoBuf API and must be mapped
     * manually.
     *
     * @return whether this is a wrapper class
     */
    boolean wrapper() default false;
}


================================================
FILE: annotations-processor/README.md
================================================
[Annotations Processor](docs/docs/reference-docs/annotations-processor.md)

================================================
FILE: annotations-processor/build.gradle
================================================

sourceSets {
    example
}

dependencies {
    implementation project(':conductor-annotations')
    api 'com.google.guava:guava:32.1.2-jre'
    api 'com.squareup:javapoet:1.13.+'
    api 'com.github.jknack:handlebars:4.3.+'
    api 'com.google.protobuf:protobuf-java:3.21.12'
    api 'javax.annotation:javax.annotation-api:1.3.2'
    api gradleApi()

    exampleImplementation sourceSets.main.output
    exampleImplementation project(':conductor-annotations')
}

task exampleJar(type: Jar) {
    archiveFileName = 'example.jar'
    from sourceSets.example.output.classesDirs
}

testClasses.finalizedBy(exampleJar)


================================================
FILE: annotations-processor/src/example/java/com/example/Example.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.example;

import com.netflix.conductor.annotations.protogen.ProtoField;
import com.netflix.conductor.annotations.protogen.ProtoMessage;

@ProtoMessage
public class Example {
    @ProtoField(id = 1)
    public String name;

    @ProtoField(id = 2)
    public Long count;
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/AbstractMessage.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import com.netflix.conductor.annotations.protogen.ProtoEnum;
import com.netflix.conductor.annotations.protogen.ProtoMessage;
import com.netflix.conductor.annotationsprocessor.protogen.types.MessageType;
import com.netflix.conductor.annotationsprocessor.protogen.types.TypeMapper;

import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;

public abstract class AbstractMessage {
    protected Class<?> clazz;
    protected MessageType type;
    protected List<Field> fields = new ArrayList<Field>();
    protected List<AbstractMessage> nested = new ArrayList<>();

    public AbstractMessage(Class<?> cls, MessageType parentType) {
        assert cls.isAnnotationPresent(ProtoMessage.class)
                || cls.isAnnotationPresent(ProtoEnum.class);

        this.clazz = cls;
        this.type = TypeMapper.INSTANCE.declare(cls, parentType);

        for (Class<?> nested : clazz.getDeclaredClasses()) {
            if (nested.isEnum()) addNestedEnum(nested);
            else addNestedClass(nested);
        }
    }

    private void addNestedEnum(Class<?> cls) {
        ProtoEnum ann = (ProtoEnum) cls.getAnnotation(ProtoEnum.class);
        if (ann != null) {
            nested.add(new Enum(cls, this.type));
        }
    }

    private void addNestedClass(Class<?> cls) {
        ProtoMessage ann = (ProtoMessage) cls.getAnnotation(ProtoMessage.class);
        if (ann != null) {
            nested.add(new Message(cls, this.type));
        }
    }

    public abstract String getProtoClass();

    protected abstract void javaMapToProto(TypeSpec.Builder builder);

    protected abstract void javaMapFromProto(TypeSpec.Builder builder);

    public void generateJavaMapper(TypeSpec.Builder builder) {
        javaMapToProto(builder);
        javaMapFromProto(builder);

        for (AbstractMessage abstractMessage : this.nested) {
            abstractMessage.generateJavaMapper(builder);
        }
    }

    public void generateAbstractMethods(Set<MethodSpec> specs) {
        for (Field field : fields) {
            field.generateAbstractMethods(specs);
        }

        for (AbstractMessage elem : nested) {
            elem.generateAbstractMethods(specs);
        }
    }

    public void findDependencies(Set<String> dependencies) {
        for (Field field : fields) {
            field.getDependencies(dependencies);
        }

        for (AbstractMessage elem : nested) {
            elem.findDependencies(dependencies);
        }
    }

    public List<AbstractMessage> getNested() {
        return nested;
    }

    public List<Field> getFields() {
        return fields;
    }

    public String getName() {
        return clazz.getSimpleName();
    }

    public abstract static class Field {
        protected int protoIndex;
        protected java.lang.reflect.Field field;

        protected Field(int index, java.lang.reflect.Field field) {
            this.protoIndex = index;
            this.field = field;
        }

        public abstract String getProtoTypeDeclaration();

        public int getProtoIndex() {
            return protoIndex;
        }

        public String getName() {
            return field.getName();
        }

        public String getProtoName() {
            return field.getName().toUpperCase();
        }

        public void getDependencies(Set<String> deps) {}

        public void generateAbstractMethods(Set<MethodSpec> specs) {}
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/Enum.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen;

import javax.lang.model.element.Modifier;

import com.netflix.conductor.annotationsprocessor.protogen.types.MessageType;

import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;

public class Enum extends AbstractMessage {
    public enum MapType {
        FROM_PROTO("fromProto"),
        TO_PROTO("toProto");

        private final String methodName;

        MapType(String m) {
            methodName = m;
        }

        public String getMethodName() {
            return methodName;
        }
    }

    public Enum(Class cls, MessageType parent) {
        super(cls, parent);

        int protoIndex = 0;
        for (java.lang.reflect.Field field : cls.getDeclaredFields()) {
            if (field.isEnumConstant()) fields.add(new EnumField(protoIndex++, field));
        }
    }

    @Override
    public String getProtoClass() {
        return "enum";
    }

    private MethodSpec javaMap(MapType mt, TypeName from, TypeName to) {
        MethodSpec.Builder method = MethodSpec.methodBuilder(mt.getMethodName());
        method.addModifiers(Modifier.PUBLIC);
        method.returns(to);
        method.addParameter(from, "from");

        method.addStatement("$T to", to);
        method.beginControlFlow("switch (from)");

        for (Field field : fields) {
            String fromName = (mt == MapType.TO_PROTO) ? field.getName() : field.getProtoName();
            String toName = (mt == MapType.TO_PROTO) ? field.getProtoName() : field.getName();
            method.addStatement("case $L: to = $T.$L; break", fromName, to, toName);
        }

        method.addStatement(
                "default: throw new $T(\"Unexpected enum constant: \" + from)",
                IllegalArgumentException.class);
        method.endControlFlow();
        method.addStatement("return to");
        return method.build();
    }

    @Override
    protected void javaMapFromProto(TypeSpec.Builder type) {
        type.addMethod(
                javaMap(
                        MapType.FROM_PROTO,
                        this.type.getJavaProtoType(),
                        TypeName.get(this.clazz)));
    }

    @Override
    protected void javaMapToProto(TypeSpec.Builder type) {
        type.addMethod(
                javaMap(MapType.TO_PROTO, TypeName.get(this.clazz), this.type.getJavaProtoType()));
    }

    public class EnumField extends Field {
        protected EnumField(int index, java.lang.reflect.Field field) {
            super(index, field);
        }

        @Override
        public String getProtoTypeDeclaration() {
            return String.format("%s = %d", getProtoName(), getProtoIndex());
        }
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/Message.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen;

import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.lang.model.element.Modifier;

import com.netflix.conductor.annotations.protogen.ProtoField;
import com.netflix.conductor.annotations.protogen.ProtoMessage;
import com.netflix.conductor.annotationsprocessor.protogen.types.AbstractType;
import com.netflix.conductor.annotationsprocessor.protogen.types.MessageType;
import com.netflix.conductor.annotationsprocessor.protogen.types.TypeMapper;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;

public class Message extends AbstractMessage {
    public Message(Class<?> cls, MessageType parent) {
        super(cls, parent);

        for (java.lang.reflect.Field field : clazz.getDeclaredFields()) {
            ProtoField ann = field.getAnnotation(ProtoField.class);
            if (ann == null) continue;

            fields.add(new MessageField(ann.id(), field));
        }
    }

    protected ProtoMessage getAnnotation() {
        return (ProtoMessage) this.clazz.getAnnotation(ProtoMessage.class);
    }

    @Override
    public String getProtoClass() {
        return "message";
    }

    @Override
    protected void javaMapToProto(TypeSpec.Builder type) {
        if (!getAnnotation().toProto() || getAnnotation().wrapper()) return;

        ClassName javaProtoType = (ClassName) this.type.getJavaProtoType();
        MethodSpec.Builder method = MethodSpec.methodBuilder("toProto");
        method.addModifiers(Modifier.PUBLIC);
        method.returns(javaProtoType);
        method.addParameter(this.clazz, "from");

        method.addStatement(
                "$T to = $T.newBuilder()", javaProtoType.nestedClass("Builder"), javaProtoType);

        for (Field field : this.fields) {
            if (field instanceof MessageField) {
                AbstractType fieldType = ((MessageField) field).getAbstractType();
                fieldType.mapToProto(field.getName(), method);
            }
        }

        method.addStatement("return to.build()");
        type.addMethod(method.build());
    }

    @Override
    protected void javaMapFromProto(TypeSpec.Builder type) {
        if (!getAnnotation().fromProto() || getAnnotation().wrapper()) return;

        MethodSpec.Builder method = MethodSpec.methodBuilder("fromProto");
        method.addModifiers(Modifier.PUBLIC);
        method.returns(this.clazz);
        method.addParameter(this.type.getJavaProtoType(), "from");

        method.addStatement("$T to = new $T()", this.clazz, this.clazz);

        for (Field field : this.fields) {
            if (field instanceof MessageField) {
                AbstractType fieldType = ((MessageField) field).getAbstractType();
                fieldType.mapFromProto(field.getName(), method);
            }
        }

        method.addStatement("return to");
        type.addMethod(method.build());
    }

    public static class MessageField extends Field {
        protected AbstractType type;

        protected MessageField(int index, java.lang.reflect.Field field) {
            super(index, field);
        }

        public AbstractType getAbstractType() {
            if (type == null) {
                type = TypeMapper.INSTANCE.get(field.getGenericType());
            }
            return type;
        }

        private static Pattern CAMEL_CASE_RE = Pattern.compile("(?<=[a-z])[A-Z]");

        private static String toUnderscoreCase(String input) {
            Matcher m = CAMEL_CASE_RE.matcher(input);
            StringBuilder sb = new StringBuilder();
            while (m.find()) {
                m.appendReplacement(sb, "_" + m.group());
            }
            m.appendTail(sb);
            return sb.toString().toLowerCase();
        }

        @Override
        public String getProtoTypeDeclaration() {
            return String.format(
                    "%s %s = %d",
                    getAbstractType().getProtoType(), toUnderscoreCase(getName()), getProtoIndex());
        }

        @Override
        public void getDependencies(Set<String> deps) {
            getAbstractType().getDependencies(deps);
        }

        @Override
        public void generateAbstractMethods(Set<MethodSpec> specs) {
            getAbstractType().generateAbstractMethods(specs);
        }
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoFile.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen;

import java.util.HashSet;
import java.util.Set;

import com.netflix.conductor.annotationsprocessor.protogen.types.TypeMapper;

import com.squareup.javapoet.ClassName;

public class ProtoFile {
    public static String PROTO_SUFFIX = "Pb";

    private ClassName baseClass;
    private AbstractMessage message;
    private String filePath;

    private String protoPackageName;
    private String javaPackageName;
    private String goPackageName;

    public ProtoFile(
            Class<?> object,
            String protoPackageName,
            String javaPackageName,
            String goPackageName) {
        this.protoPackageName = protoPackageName;
        this.javaPackageName = javaPackageName;
        this.goPackageName = goPackageName;

        String className = object.getSimpleName() + PROTO_SUFFIX;
        this.filePath = "model/" + object.getSimpleName().toLowerCase() + ".proto";
        this.baseClass = ClassName.get(this.javaPackageName, className);
        this.message = new Message(object, TypeMapper.INSTANCE.baseClass(baseClass, filePath));
    }

    public String getJavaClassName() {
        return baseClass.simpleName();
    }

    public String getFilePath() {
        return filePath;
    }

    public String getProtoPackageName() {
        return protoPackageName;
    }

    public String getJavaPackageName() {
        return javaPackageName;
    }

    public String getGoPackageName() {
        return goPackageName;
    }

    public AbstractMessage getMessage() {
        return message;
    }

    public Set<String> getIncludes() {
        Set<String> includes = new HashSet<>();
        message.findDependencies(includes);
        includes.remove(this.getFilePath());
        return includes;
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGen.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.*;

import javax.annotation.Generated;
import javax.lang.model.element.Modifier;

import com.netflix.conductor.annotations.protogen.ProtoMessage;

import com.github.jknack.handlebars.EscapingStrategy;
import com.github.jknack.handlebars.Handlebars;
import com.github.jknack.handlebars.Template;
import com.github.jknack.handlebars.io.ClassPathTemplateLoader;
import com.github.jknack.handlebars.io.TemplateLoader;
import com.google.common.reflect.ClassPath;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;

public class ProtoGen {
    private static final String GENERATOR_NAME =
            "com.netflix.conductor.annotationsprocessor.protogen";

    private String protoPackageName;
    private String javaPackageName;
    private String goPackageName;
    private List<ProtoFile> protoFiles = new ArrayList<>();

    public ProtoGen(String protoPackageName, String javaPackageName, String goPackageName) {
        this.protoPackageName = protoPackageName;
        this.javaPackageName = javaPackageName;
        this.goPackageName = goPackageName;
    }

    public void writeMapper(File root, String mapperPackageName) throws IOException {
        TypeSpec.Builder protoMapper =
                TypeSpec.classBuilder("AbstractProtoMapper")
                        .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
                        .addAnnotation(
                                AnnotationSpec.builder(Generated.class)
                                        .addMember("value", "$S", GENERATOR_NAME)
                                        .build());

        Set<MethodSpec> abstractMethods = new HashSet<>();

        protoFiles.sort(
                new Comparator<ProtoFile>() {
                    public int compare(ProtoFile p1, ProtoFile p2) {
                        String n1 = p1.getMessage().getName();
                        String n2 = p2.getMessage().getName();
                        return n1.compareTo(n2);
                    }
                });

        for (ProtoFile protoFile : protoFiles) {
            AbstractMessage elem = protoFile.getMessage();
            elem.generateJavaMapper(protoMapper);
            elem.generateAbstractMethods(abstractMethods);
        }

        protoMapper.addMethods(abstractMethods);

        JavaFile javaFile =
                JavaFile.builder(mapperPackageName, protoMapper.build()).indent("    ").build();
        File filename = new File(root, "AbstractProtoMapper.java");
        try (Writer writer = new FileWriter(filename.toString())) {
            System.out.printf("protogen: writing '%s'...\n", filename);
            javaFile.writeTo(writer);
        }
    }

    public void writeProtos(File root) throws IOException {
        TemplateLoader loader = new ClassPathTemplateLoader("/templates", ".proto");
        Handlebars handlebars =
                new Handlebars(loader)
                        .infiniteLoops(true)
                        .prettyPrint(true)
                        .with(EscapingStrategy.NOOP);

        Template protoFile = handlebars.compile("file");

        for (ProtoFile file : protoFiles) {
            File filename = new File(root, file.getFilePath());
            try (Writer writer = new FileWriter(filename)) {
                System.out.printf("protogen: writing '%s'...\n", filename);
                protoFile.apply(file, writer);
            }
        }
    }

    public void processPackage(File jarFile, String packageName) throws IOException {
        if (!jarFile.isFile()) throw new IOException("missing Jar file " + jarFile);

        URL[] urls = new URL[] {jarFile.toURI().toURL()};
        ClassLoader loader =
                new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
        ClassPath cp = ClassPath.from(loader);

        System.out.printf("protogen: processing Jar '%s'\n", jarFile);
        for (ClassPath.ClassInfo info : cp.getTopLevelClassesRecursive(packageName)) {
            try {
                processClass(info.load());
            } catch (NoClassDefFoundError ignored) {
            }
        }
    }

    public void processClass(Class<?> obj) {
        if (obj.isAnnotationPresent(ProtoMessage.class)) {
            System.out.printf("protogen: found %s\n", obj.getCanonicalName());
            protoFiles.add(new ProtoFile(obj, protoPackageName, javaPackageName, goPackageName));
        }
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGenTask.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen;

import java.io.File;
import java.io.IOException;

public class ProtoGenTask {
    private String protoPackage;
    private String javaPackage;
    private String goPackage;

    private File protosDir;
    private File mapperDir;
    private String mapperPackage;

    private File sourceJar;
    private String sourcePackage;

    public String getProtoPackage() {
        return protoPackage;
    }

    public void setProtoPackage(String protoPackage) {
        this.protoPackage = protoPackage;
    }

    public String getJavaPackage() {
        return javaPackage;
    }

    public void setJavaPackage(String javaPackage) {
        this.javaPackage = javaPackage;
    }

    public String getGoPackage() {
        return goPackage;
    }

    public void setGoPackage(String goPackage) {
        this.goPackage = goPackage;
    }

    public File getProtosDir() {
        return protosDir;
    }

    public void setProtosDir(File protosDir) {
        this.protosDir = protosDir;
    }

    public File getMapperDir() {
        return mapperDir;
    }

    public void setMapperDir(File mapperDir) {
        this.mapperDir = mapperDir;
    }

    public String getMapperPackage() {
        return mapperPackage;
    }

    public void setMapperPackage(String mapperPackage) {
        this.mapperPackage = mapperPackage;
    }

    public File getSourceJar() {
        return sourceJar;
    }

    public void setSourceJar(File sourceJar) {
        this.sourceJar = sourceJar;
    }

    public String getSourcePackage() {
        return sourcePackage;
    }

    public void setSourcePackage(String sourcePackage) {
        this.sourcePackage = sourcePackage;
    }

    public void generate() {
        ProtoGen generator = new ProtoGen(protoPackage, javaPackage, goPackage);
        try {
            generator.processPackage(sourceJar, sourcePackage);
            generator.writeMapper(mapperDir, mapperPackage);
            generator.writeProtos(protosDir);
        } catch (IOException e) {
            System.err.printf("protogen: failed with %s\n", e);
        }
    }

    public static void main(String[] args) {
        if (args == null || args.length < 8) {
            throw new RuntimeException(
                    "protogen configuration incomplete, please provide all required (8) inputs");
        }
        ProtoGenTask task = new ProtoGenTask();
        int argsId = 0;
        task.setProtoPackage(args[argsId++]);
        task.setJavaPackage(args[argsId++]);
        task.setGoPackage(args[argsId++]);
        task.setProtosDir(new File(args[argsId++]));
        task.setMapperDir(new File(args[argsId++]));
        task.setMapperPackage(args[argsId++]);
        task.setSourceJar(new File(args[argsId++]));
        task.setSourcePackage(args[argsId]);
        System.out.println("Running protogen with arguments: " + task);
        task.generate();
        System.out.println("protogen completed.");
    }

    @Override
    public String toString() {
        return "ProtoGenTask{"
                + "protoPackage='"
                + protoPackage
                + '\''
                + ", javaPackage='"
                + javaPackage
                + '\''
                + ", goPackage='"
                + goPackage
                + '\''
                + ", protosDir="
                + protosDir
                + ", mapperDir="
                + mapperDir
                + ", mapperPackage='"
                + mapperPackage
                + '\''
                + ", sourceJar="
                + sourceJar
                + ", sourcePackage='"
                + sourcePackage
                + '\''
                + '}';
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/AbstractType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.Type;
import java.util.Set;

import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;

public abstract class AbstractType {
    Type javaType;
    TypeName javaProtoType;

    AbstractType(Type javaType, TypeName javaProtoType) {
        this.javaType = javaType;
        this.javaProtoType = javaProtoType;
    }

    public Type getJavaType() {
        return javaType;
    }

    public TypeName getJavaProtoType() {
        return javaProtoType;
    }

    public abstract String getProtoType();

    public abstract TypeName getRawJavaType();

    public abstract void mapToProto(String field, MethodSpec.Builder method);

    public abstract void mapFromProto(String field, MethodSpec.Builder method);

    public abstract void getDependencies(Set<String> deps);

    public abstract void generateAbstractMethods(Set<MethodSpec> specs);

    protected String javaMethodName(String m, String field) {
        String fieldName = field.substring(0, 1).toUpperCase() + field.substring(1);
        return m + fieldName;
    }

    private static class ProtoCase {
        static String convert(String s) {
            StringBuilder out = new StringBuilder(s.length());
            final int len = s.length();
            int i = 0;
            int j = -1;
            while ((j = findWordBoundary(s, ++j)) != -1) {
                out.append(normalizeWord(s.substring(i, j)));
                if (j < len && s.charAt(j) == '_') j++;
                i = j;
            }
            if (i == 0) return normalizeWord(s);
            if (i < len) out.append(normalizeWord(s.substring(i)));
            return out.toString();
        }

        private static boolean isWordBoundary(char c) {
            return (c >= 'A' && c <= 'Z');
        }

        private static int findWordBoundary(CharSequence sequence, int start) {
            int length = sequence.length();
            if (start >= length) return -1;

            if (isWordBoundary(sequence.charAt(start))) {
                int i = start;
                while (i < length && isWordBoundary(sequence.charAt(i))) i++;
                return i;
            } else {
                for (int i = start; i < length; i++) {
                    final char c = sequence.charAt(i);
                    if (c == '_' || isWordBoundary(c)) return i;
                }
                return -1;
            }
        }

        private static String normalizeWord(String word) {
            if (word.length() < 2) return word.toUpperCase();
            return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
        }
    }

    protected String protoMethodName(String m, String field) {
        return m + ProtoCase.convert(field);
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ExternMessageType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.Type;
import java.util.Set;

import javax.lang.model.element.Modifier;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;

public class ExternMessageType extends MessageType {
    private String externProtoType;

    public ExternMessageType(
            Type javaType, ClassName javaProtoType, String externProtoType, String protoFilePath) {
        super(javaType, javaProtoType, protoFilePath);
        this.externProtoType = externProtoType;
    }

    @Override
    public String getProtoType() {
        return externProtoType;
    }

    @Override
    public void generateAbstractMethods(Set<MethodSpec> specs) {
        MethodSpec fromProto =
                MethodSpec.methodBuilder("fromProto")
                        .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
                        .returns(this.getJavaType())
                        .addParameter(this.getJavaProtoType(), "in")
                        .build();

        MethodSpec toProto =
                MethodSpec.methodBuilder("toProto")
                        .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
                        .returns(this.getJavaProtoType())
                        .addParameter(this.getJavaType(), "in")
                        .build();

        specs.add(fromProto);
        specs.add(toProto);
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/GenericType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Set;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;

abstract class GenericType extends AbstractType {
    public GenericType(Type type) {
        super(type, null);
    }

    protected Class getRawType() {
        ParameterizedType tt = (ParameterizedType) this.getJavaType();
        return (Class) tt.getRawType();
    }

    protected AbstractType resolveGenericParam(int idx) {
        ParameterizedType tt = (ParameterizedType) this.getJavaType();
        Type[] types = tt.getActualTypeArguments();

        AbstractType abstractType = TypeMapper.INSTANCE.get(types[idx]);
        if (abstractType instanceof GenericType) {
            return WrappedType.wrap((GenericType) abstractType);
        }
        return abstractType;
    }

    public abstract String getWrapperSuffix();

    public abstract AbstractType getValueType();

    public abstract TypeName resolveJavaProtoType();

    @Override
    public TypeName getRawJavaType() {
        return ClassName.get(getRawType());
    }

    @Override
    public void getDependencies(Set<String> deps) {
        getValueType().getDependencies(deps);
    }

    @Override
    public void generateAbstractMethods(Set<MethodSpec> specs) {
        getValueType().generateAbstractMethods(specs);
    }

    @Override
    public TypeName getJavaProtoType() {
        if (javaProtoType == null) {
            javaProtoType = resolveJavaProtoType();
        }
        return javaProtoType;
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ListType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.Type;
import java.util.stream.Collectors;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;

public class ListType extends GenericType {
    private AbstractType valueType;

    public ListType(Type type) {
        super(type);
    }

    @Override
    public String getWrapperSuffix() {
        return "List";
    }

    @Override
    public AbstractType getValueType() {
        if (valueType == null) {
            valueType = resolveGenericParam(0);
        }
        return valueType;
    }

    @Override
    public void mapToProto(String field, MethodSpec.Builder method) {
        AbstractType subtype = getValueType();
        if (subtype instanceof ScalarType) {
            method.addStatement(
                    "to.$L( from.$L() )",
                    protoMethodName("addAll", field),
                    javaMethodName("get", field));
        } else {
            method.beginControlFlow(
                    "for ($T elem : from.$L())",
                    subtype.getJavaType(),
                    javaMethodName("get", field));
            method.addStatement("to.$L( toProto(elem) )", protoMethodName("add", field));
            method.endControlFlow();
        }
    }

    @Override
    public void mapFromProto(String field, MethodSpec.Builder method) {
        AbstractType subtype = getValueType();
        Type entryType = subtype.getJavaType();
        Class collector = TypeMapper.PROTO_LIST_TYPES.get(getRawType());

        if (subtype instanceof ScalarType) {
            if (entryType.equals(String.class)) {
                method.addStatement(
                        "to.$L( from.$L().stream().collect($T.toCollection($T::new)) )",
                        javaMethodName("set", field),
                        protoMethodName("get", field) + "List",
                        Collectors.class,
                        collector);
            } else {
                method.addStatement(
                        "to.$L( from.$L() )",
                        javaMethodName("set", field),
                        protoMethodName("get", field) + "List");
            }
        } else {
            method.addStatement(
                    "to.$L( from.$L().stream().map(this::fromProto).collect($T.toCollection($T::new)) )",
                    javaMethodName("set", field),
                    protoMethodName("get", field) + "List",
                    Collectors.class,
                    collector);
        }
    }

    @Override
    public TypeName resolveJavaProtoType() {
        return ParameterizedTypeName.get(
                (ClassName) getRawJavaType(), getValueType().getJavaProtoType());
    }

    @Override
    public String getProtoType() {
        return "repeated " + getValueType().getProtoType();
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/MapType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;

public class MapType extends GenericType {
    private AbstractType keyType;
    private AbstractType valueType;

    public MapType(Type type) {
        super(type);
    }

    @Override
    public String getWrapperSuffix() {
        return "Map";
    }

    @Override
    public AbstractType getValueType() {
        if (valueType == null) {
            valueType = resolveGenericParam(1);
        }
        return valueType;
    }

    public AbstractType getKeyType() {
        if (keyType == null) {
            keyType = resolveGenericParam(0);
        }
        return keyType;
    }

    @Override
    public void mapToProto(String field, MethodSpec.Builder method) {
        AbstractType valueType = getValueType();
        if (valueType instanceof ScalarType) {
            method.addStatement(
                    "to.$L( from.$L() )",
                    protoMethodName("putAll", field),
                    javaMethodName("get", field));
        } else {
            TypeName typeName =
                    ParameterizedTypeName.get(
                            Map.Entry.class,
                            getKeyType().getJavaType(),
                            getValueType().getJavaType());
            method.beginControlFlow(
                    "for ($T pair : from.$L().entrySet())", typeName, javaMethodName("get", field));
            method.addStatement(
                    "to.$L( pair.getKey(), toProto( pair.getValue() ) )",
                    protoMethodName("put", field));
            method.endControlFlow();
        }
    }

    @Override
    public void mapFromProto(String field, MethodSpec.Builder method) {
        AbstractType valueType = getValueType();
        if (valueType instanceof ScalarType) {
            method.addStatement(
                    "to.$L( from.$L() )",
                    javaMethodName("set", field),
                    protoMethodName("get", field) + "Map");
        } else {
            Type keyType = getKeyType().getJavaType();
            Type valueTypeJava = getValueType().getJavaType();
            TypeName valueTypePb = getValueType().getJavaProtoType();

            ParameterizedTypeName entryType =
                    ParameterizedTypeName.get(
                            ClassName.get(Map.Entry.class), TypeName.get(keyType), valueTypePb);
            ParameterizedTypeName mapType =
                    ParameterizedTypeName.get(Map.class, keyType, valueTypeJava);
            ParameterizedTypeName hashMapType =
                    ParameterizedTypeName.get(HashMap.class, keyType, valueTypeJava);
            String mapName = field + "Map";

            method.addStatement("$T $L = new $T()", mapType, mapName, hashMapType);
            method.beginControlFlow(
                    "for ($T pair : from.$L().entrySet())",
                    entryType,
                    protoMethodName("get", field) + "Map");
            method.addStatement("$L.put( pair.getKey(), fromProto( pair.getValue() ) )", mapName);
            method.endControlFlow();
            method.addStatement("to.$L($L)", javaMethodName("set", field), mapName);
        }
    }

    @Override
    public TypeName resolveJavaProtoType() {
        return ParameterizedTypeName.get(
                (ClassName) getRawJavaType(),
                getKeyType().getJavaProtoType(),
                getValueType().getJavaProtoType());
    }

    @Override
    public String getProtoType() {
        AbstractType keyType = getKeyType();
        AbstractType valueType = getValueType();
        if (!(keyType instanceof ScalarType)) {
            throw new IllegalArgumentException(
                    "cannot map non-scalar map key: " + this.getJavaType());
        }
        return String.format("map<%s, %s>", keyType.getProtoType(), valueType.getProtoType());
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/MessageType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Set;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;

public class MessageType extends AbstractType {
    private String protoFilePath;

    public MessageType(Type javaType, ClassName javaProtoType, String protoFilePath) {
        super(javaType, javaProtoType);
        this.protoFilePath = protoFilePath;
    }

    @Override
    public String getProtoType() {
        List<String> classes = ((ClassName) getJavaProtoType()).simpleNames();
        return String.join(".", classes.subList(1, classes.size()));
    }

    public String getProtoFilePath() {
        return protoFilePath;
    }

    @Override
    public TypeName getRawJavaType() {
        return getJavaProtoType();
    }

    @Override
    public void mapToProto(String field, MethodSpec.Builder method) {
        final String getter = javaMethodName("get", field);
        method.beginControlFlow("if (from.$L() != null)", getter);
        method.addStatement("to.$L( toProto( from.$L() ) )", protoMethodName("set", field), getter);
        method.endControlFlow();
    }

    private boolean isEnum() {
        Type clazz = getJavaType();
        return (clazz instanceof Class<?>) && ((Class) clazz).isEnum();
    }

    @Override
    public void mapFromProto(String field, MethodSpec.Builder method) {
        if (!isEnum()) method.beginControlFlow("if (from.$L())", protoMethodName("has", field));

        method.addStatement(
                "to.$L( fromProto( from.$L() ) )",
                javaMethodName("set", field),
                protoMethodName("get", field));

        if (!isEnum()) method.endControlFlow();
    }

    @Override
    public void getDependencies(Set<String> deps) {
        deps.add(protoFilePath);
    }

    @Override
    public void generateAbstractMethods(Set<MethodSpec> specs) {}
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ScalarType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.Type;
import java.util.Set;

import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;

public class ScalarType extends AbstractType {
    private String protoType;

    public ScalarType(Type javaType, TypeName javaProtoType, String protoType) {
        super(javaType, javaProtoType);
        this.protoType = protoType;
    }

    @Override
    public String getProtoType() {
        return protoType;
    }

    @Override
    public TypeName getRawJavaType() {
        return getJavaProtoType();
    }

    @Override
    public void mapFromProto(String field, MethodSpec.Builder method) {
        method.addStatement(
                "to.$L( from.$L() )", javaMethodName("set", field), protoMethodName("get", field));
    }

    private boolean isNullableType() {
        final Type jt = getJavaType();
        return jt.equals(Boolean.class)
                || jt.equals(Byte.class)
                || jt.equals(Character.class)
                || jt.equals(Short.class)
                || jt.equals(Integer.class)
                || jt.equals(Long.class)
                || jt.equals(Double.class)
                || jt.equals(Float.class)
                || jt.equals(String.class);
    }

    @Override
    public void mapToProto(String field, MethodSpec.Builder method) {
        final boolean nullable = isNullableType();
        String getter =
                (getJavaType().equals(boolean.class) || getJavaType().equals(Boolean.class))
                        ? javaMethodName("is", field)
                        : javaMethodName("get", field);

        if (nullable) method.beginControlFlow("if (from.$L() != null)", getter);

        method.addStatement("to.$L( from.$L() )", protoMethodName("set", field), getter);

        if (nullable) method.endControlFlow();
    }

    @Override
    public void getDependencies(Set<String> deps) {}

    @Override
    public void generateAbstractMethods(Set<MethodSpec> specs) {}
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/TypeMapper.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;

import com.google.protobuf.Any;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeName;

public class TypeMapper {
    static Map<Type, Class> PROTO_LIST_TYPES = new HashMap<>();

    static {
        PROTO_LIST_TYPES.put(List.class, ArrayList.class);
        PROTO_LIST_TYPES.put(Set.class, HashSet.class);
        PROTO_LIST_TYPES.put(LinkedList.class, LinkedList.class);
    }

    public static TypeMapper INSTANCE = new TypeMapper();

    private Map<Type, AbstractType> types = new HashMap<>();

    public void addScalarType(Type t, String protoType) {
        types.put(t, new ScalarType(t, TypeName.get(t), protoType));
    }

    public void addMessageType(Class<?> t, MessageType message) {
        types.put(t, message);
    }

    public TypeMapper() {
        addScalarType(int.class, "int32");
        addScalarType(Integer.class, "int32");
        addScalarType(long.class, "int64");
        addScalarType(Long.class, "int64");
        addScalarType(String.class, "string");
        addScalarType(boolean.class, "bool");
        addScalarType(Boolean.class, "bool");

        addMessageType(
                Object.class,
                new ExternMessageType(
                        Object.class,
                        ClassName.get("com.google.protobuf", "Value"),
                        "google.protobuf.Value",
                        "google/protobuf/struct.proto"));

        addMessageType(
                Any.class,
                new ExternMessageType(
                        Any.class,
                        ClassName.get(Any.class),
                        "google.protobuf.Any",
                        "google/protobuf/any.proto"));
    }

    public AbstractType get(Type t) {
        if (!types.containsKey(t)) {
            if (t instanceof ParameterizedType) {
                Type raw = ((ParameterizedType) t).getRawType();
                if (PROTO_LIST_TYPES.containsKey(raw)) {
                    types.put(t, new ListType(t));
                } else if (raw.equals(Map.class)) {
                    types.put(t, new MapType(t));
                }
            }
        }
        if (!types.containsKey(t)) {
            throw new IllegalArgumentException("Cannot map type: " + t);
        }
        return types.get(t);
    }

    public MessageType get(String className) {
        for (Map.Entry<Type, AbstractType> pair : types.entrySet()) {
            AbstractType t = pair.getValue();
            if (t instanceof MessageType) {
                if (((Class) t.getJavaType()).getSimpleName().equals(className))
                    return (MessageType) t;
            }
        }
        return null;
    }

    public MessageType declare(Class type, MessageType parent) {
        return declare(type, (ClassName) parent.getJavaProtoType(), parent.getProtoFilePath());
    }

    public MessageType declare(Class type, ClassName parentType, String protoFilePath) {
        String simpleName = type.getSimpleName();
        MessageType t = new MessageType(type, parentType.nestedClass(simpleName), protoFilePath);
        if (types.containsKey(type)) {
            throw new IllegalArgumentException("duplicate type declaration: " + type);
        }
        types.put(type, t);
        return t;
    }

    public MessageType baseClass(ClassName className, String protoFilePath) {
        return new MessageType(Object.class, className, protoFilePath);
    }
}


================================================
FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/WrappedType.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen.types;

import java.lang.reflect.Type;
import java.util.Set;

import javax.lang.model.element.Modifier;

import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;

public class WrappedType extends AbstractType {
    private AbstractType realType;
    private MessageType wrappedType;

    public static WrappedType wrap(GenericType realType) {
        Type valueType = realType.getValueType().getJavaType();
        if (!(valueType instanceof Class))
            throw new IllegalArgumentException("cannot wrap primitive type: " + valueType);

        String className = ((Class) valueType).getSimpleName() + realType.getWrapperSuffix();
        MessageType wrappedType = TypeMapper.INSTANCE.get(className);
        if (wrappedType == null)
            throw new IllegalArgumentException("missing wrapper class: " + className);
        return new WrappedType(realType, wrappedType);
    }

    public WrappedType(AbstractType realType, MessageType wrappedType) {
        super(realType.getJavaType(), wrappedType.getJavaProtoType());
        this.realType = realType;
        this.wrappedType = wrappedType;
    }

    @Override
    public String getProtoType() {
        return wrappedType.getProtoType();
    }

    @Override
    public TypeName getRawJavaType() {
        return realType.getRawJavaType();
    }

    @Override
    public void mapToProto(String field, MethodSpec.Builder method) {
        wrappedType.mapToProto(field, method);
    }

    @Override
    public void mapFromProto(String field, MethodSpec.Builder method) {
        wrappedType.mapFromProto(field, method);
    }

    @Override
    public void getDependencies(Set<String> deps) {
        this.realType.getDependencies(deps);
        this.wrappedType.getDependencies(deps);
    }

    @Override
    public void generateAbstractMethods(Set<MethodSpec> specs) {
        MethodSpec fromProto =
                MethodSpec.methodBuilder("fromProto")
                        .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
                        .returns(this.realType.getJavaType())
                        .addParameter(this.wrappedType.getJavaProtoType(), "in")
                        .build();

        MethodSpec toProto =
                MethodSpec.methodBuilder("toProto")
                        .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
                        .returns(this.wrappedType.getJavaProtoType())
                        .addParameter(this.realType.getJavaType(), "in")
                        .build();

        specs.add(fromProto);
        specs.add(toProto);
    }
}


================================================
FILE: annotations-processor/src/main/resources/templates/file.proto
================================================
syntax = "proto3";
package {{protoPackageName}};

{{#includes}}
import "{{this}}";
{{/includes}}

option java_package = "{{javaPackageName}}";
option java_outer_classname = "{{javaClassName}}";
option go_package = "{{goPackageName}}";

{{#message}}
{{>message}}
{{/message}}


================================================
FILE: annotations-processor/src/main/resources/templates/message.proto
================================================
{{protoClass}} {{name}} {
{{#nested}}
    {{>message}}
{{/nested}}
{{#fields}}
    {{protoTypeDeclaration}};
{{/fields}}
}


================================================
FILE: annotations-processor/src/test/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGenTest.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.annotationsprocessor.protogen;

import java.io.File;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

import com.google.common.collect.Lists;
import com.google.common.io.Files;
import com.google.common.io.Resources;

import static org.junit.Assert.*;

public class ProtoGenTest {
    private static final Charset charset = StandardCharsets.UTF_8;

    @Rule public TemporaryFolder folder = new TemporaryFolder();

    @Test
    public void happyPath() throws Exception {
        File rootDir = folder.getRoot();
        String protoPackage = "protoPackage";
        String javaPackage = "abc.protogen.example";
        String goPackage = "goPackage";
        String sourcePackage = "com.example";
        String mapperPackage = "mapperPackage";

        File jarFile = new File("./build/libs/example.jar");
        assertTrue(jarFile.exists());

        File mapperDir = new File(rootDir, "mapperDir");
        mapperDir.mkdirs();

        File protosDir = new File(rootDir, "protosDir");
        protosDir.mkdirs();

        File modelDir = new File(protosDir, "model");
        modelDir.mkdirs();

        ProtoGen generator = new ProtoGen(protoPackage, javaPackage, goPackage);
        generator.processPackage(jarFile, sourcePackage);
        generator.writeMapper(mapperDir, mapperPackage);
        generator.writeProtos(protosDir);

        List<File> models = Lists.newArrayList(modelDir.listFiles());
        assertEquals(1, models.size());
        File exampleProtoFile =
                models.stream().filter(f -> f.getName().equals("example.proto")).findFirst().get();
        assertTrue(exampleProtoFile.length() > 0);
        assertEquals(
                Resources.asCharSource(Resources.getResource("example.proto.txt"), charset).read(),
                Files.asCharSource(exampleProtoFile, charset).read());
    }
}


================================================
FILE: annotations-processor/src/test/resources/example.proto.txt
================================================
syntax = "proto3";
package protoPackage;


option java_package = "abc.protogen.example";
option java_outer_classname = "ExamplePb";
option go_package = "goPackage";

message Example {
    string name = 1;
    int64 count = 2;
}


================================================
FILE: awss3-storage/README.md
================================================


================================================
FILE: awss3-storage/build.gradle
================================================
/*
 *  Copyright 2022 Netflix, Inc.
 *  <p>
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 *  the License. You may obtain a copy of the License at
 *  <p>
 *  http://www.apache.org/licenses/LICENSE-2.0
 *  <p>
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 *  an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 *  specific language governing permissions and limitations under the License.
 */

dependencies {
    implementation project(':conductor-common')
    implementation project(':conductor-core')
    compileOnly 'org.springframework.boot:spring-boot-starter'

    implementation "com.amazonaws:aws-java-sdk-s3:${revAwsSdk}"
    implementation "org.apache.commons:commons-lang3"
}


================================================
FILE: awss3-storage/src/main/java/com/netflix/conductor/s3/config/S3Configuration.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.s3.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.netflix.conductor.common.utils.ExternalPayloadStorage;
import com.netflix.conductor.core.utils.IDGenerator;
import com.netflix.conductor.s3.storage.S3PayloadStorage;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;

@Configuration
@EnableConfigurationProperties(S3Properties.class)
@ConditionalOnProperty(name = "conductor.external-payload-storage.type", havingValue = "s3")
public class S3Configuration {

    @Bean
    public ExternalPayloadStorage s3ExternalPayloadStorage(
            IDGenerator idGenerator, S3Properties properties, AmazonS3 s3Client) {
        return new S3PayloadStorage(idGenerator, properties, s3Client);
    }

    @ConditionalOnProperty(
            name = "conductor.external-payload-storage.s3.use_default_client",
            havingValue = "true",
            matchIfMissing = true)
    @Bean
    public AmazonS3 amazonS3(S3Properties properties) {
        return AmazonS3ClientBuilder.standard().withRegion(properties.getRegion()).build();
    }
}


================================================
FILE: awss3-storage/src/main/java/com/netflix/conductor/s3/config/S3Properties.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.s3.config;

import java.time.Duration;
import java.time.temporal.ChronoUnit;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DurationUnit;

@ConfigurationProperties("conductor.external-payload-storage.s3")
public class S3Properties {

    /** The s3 bucket name where the payloads will be stored */
    private String bucketName = "conductor_payloads";

    /** The time (in seconds) for which the signed url will be valid */
    @DurationUnit(ChronoUnit.SECONDS)
    private Duration signedUrlExpirationDuration = Duration.ofSeconds(5);

    /** The AWS region of the s3 bucket */
    private String region = "us-east-1";

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }

    public Duration getSignedUrlExpirationDuration() {
        return signedUrlExpirationDuration;
    }

    public void setSignedUrlExpirationDuration(Duration signedUrlExpirationDuration) {
        this.signedUrlExpirationDuration = signedUrlExpirationDuration;
    }

    public String getRegion() {
        return region;
    }

    public void setRegion(String region) {
        this.region = region;
    }
}


================================================
FILE: awss3-storage/src/main/java/com/netflix/conductor/s3/storage/S3PayloadStorage.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.s3.storage;

import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.netflix.conductor.common.run.ExternalStorageLocation;
import com.netflix.conductor.common.utils.ExternalPayloadStorage;
import com.netflix.conductor.core.exception.NonTransientException;
import com.netflix.conductor.core.exception.TransientException;
import com.netflix.conductor.core.utils.IDGenerator;
import com.netflix.conductor.s3.config.S3Properties;

import com.amazonaws.HttpMethod;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.*;

/**
 * An implementation of {@link ExternalPayloadStorage} using AWS S3 for storing large JSON payload
 * data.
 *
 * <p><em>NOTE: The S3 client assumes that access to S3 is configured on the instance.</em>
 *
 * @see <a
 *     href="https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/index.html?com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html">DefaultAWSCredentialsProviderChain</a>
 */
public class S3PayloadStorage implements ExternalPayloadStorage {

    private static final Logger LOGGER = LoggerFactory.getLogger(S3PayloadStorage.class);
    private static final String CONTENT_TYPE = "application/json";

    private final IDGenerator idGenerator;
    private final AmazonS3 s3Client;
    private final String bucketName;
    private final long expirationSec;

    public S3PayloadStorage(IDGenerator idGenerator, S3Properties properties, AmazonS3 s3Client) {
        this.idGenerator = idGenerator;
        this.s3Client = s3Client;
        bucketName = properties.getBucketName();
        expirationSec = properties.getSignedUrlExpirationDuration().getSeconds();
    }

    /**
     * @param operation the type of {@link Operation} to be performed
     * @param payloadType the {@link PayloadType} that is being accessed
     * @return a {@link ExternalStorageLocation} object which contains the pre-signed URL and the s3
     *     object key for the json payload
     */
    @Override
    public ExternalStorageLocation getLocation(
            Operation operation, PayloadType payloadType, String path) {
        try {
            ExternalStorageLocation externalStorageLocation = new ExternalStorageLocation();

            Date expiration = new Date();
            long expTimeMillis = expiration.getTime() + 1000 * expirationSec;
            expiration.setTime(expTimeMillis);

            HttpMethod httpMethod = HttpMethod.GET;
            if (operation == Operation.WRITE) {
                httpMethod = HttpMethod.PUT;
            }

            String objectKey;
            if (StringUtils.isNotBlank(path)) {
                objectKey = path;
            } else {
                objectKey = getObjectKey(payloadType);
            }
            externalStorageLocation.setPath(objectKey);

            GeneratePresignedUrlRequest generatePresignedUrlRequest =
                    new GeneratePresignedUrlRequest(bucketName, objectKey)
                            .withMethod(httpMethod)
                            .withExpiration(expiration);

            externalStorageLocation.setUri(
                    s3Client.generatePresignedUrl(generatePresignedUrlRequest)
                            .toURI()
                            .toASCIIString());
            return externalStorageLocation;
        } catch (SdkClientException e) {
            String msg =
                    String.format(
                            "Error communicating with S3 - operation:%s, payloadType: %s, path: %s",
                            operation, payloadType, path);
            LOGGER.error(msg, e);
            throw new TransientException(msg, e);
        } catch (URISyntaxException e) {
            String msg = "Invalid URI Syntax";
            LOGGER.error(msg, e);
            throw new NonTransientException(msg, e);
        }
    }

    /**
     * Uploads the payload to the given s3 object key. It is expected that the caller retrieves the
     * object key using {@link #getLocation(Operation, PayloadType, String)} before making this
     * call.
     *
     * @param path the s3 key of the object to be uploaded
     * @param payload an {@link InputStream} containing the json payload which is to be uploaded
     * @param payloadSize the size of the json payload in bytes
     */
    @Override
    public void upload(String path, InputStream payload, long payloadSize) {
        try {
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentType(CONTENT_TYPE);
            objectMetadata.setContentLength(payloadSize);
            PutObjectRequest request =
                    new PutObjectRequest(bucketName, path, payload, objectMetadata);
            s3Client.putObject(request);
        } catch (SdkClientException e) {
            String msg =
                    String.format(
                            "Error uploading to S3 - path:%s, payloadSize: %d", path, payloadSize);
            LOGGER.error(msg, e);
            throw new TransientException(msg, e);
        }
    }

    /**
     * Downloads the payload stored in the s3 object.
     *
     * @param path the S3 key of the object
     * @return an input stream containing the contents of the object Caller is expected to close the
     *     input stream.
     */
    @Override
    public InputStream download(String path) {
        try {
            S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucketName, path));
            return s3Object.getObjectContent();
        } catch (SdkClientException e) {
            String msg = String.format("Error downloading from S3 - path:%s", path);
            LOGGER.error(msg, e);
            throw new TransientException(msg, e);
        }
    }

    private String getObjectKey(PayloadType payloadType) {
        StringBuilder stringBuilder = new StringBuilder();
        switch (payloadType) {
            case WORKFLOW_INPUT:
                stringBuilder.append("workflow/input/");
                break;
            case WORKFLOW_OUTPUT:
                stringBuilder.append("workflow/output/");
                break;
            case TASK_INPUT:
                stringBuilder.append("task/input/");
                break;
            case TASK_OUTPUT:
                stringBuilder.append("task/output/");
                break;
        }
        stringBuilder.append(idGenerator.generate()).append(".json");
        return stringBuilder.toString();
    }
}


================================================
FILE: awss3-storage/src/main/resources/META-INF/additional-spring-configuration-metadata.json
================================================
{
  "hints": [
    {
      "name": "conductor.external-payload-storage.type",
      "values": [
        {
          "value": "s3",
          "description": "Use AWS S3 as the external payload storage."
        }
      ]
    }
  ]
}


================================================
FILE: awssqs-event-queue/README.md
================================================


================================================
FILE: awssqs-event-queue/build.gradle
================================================
dependencies {
    implementation project(':conductor-common')
    implementation project(':conductor-core')
    compileOnly 'org.springframework.boot:spring-boot-starter'

    implementation "org.apache.commons:commons-lang3"
    // SBMTODO: remove guava dep
    implementation "com.google.guava:guava:${revGuava}"

    implementation "com.amazonaws:aws-java-sdk-sqs:${revAwsSdk}"

    implementation "io.reactivex:rxjava:${revRxJava}"

    testImplementation 'org.springframework.boot:spring-boot-starter'
    testImplementation project(':conductor-common').sourceSets.test.output
}

================================================
FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueConfiguration.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.sqs.config;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.netflix.conductor.core.config.ConductorProperties;
import com.netflix.conductor.core.events.EventQueueProvider;
import com.netflix.conductor.core.events.queue.ObservableQueue;
import com.netflix.conductor.model.TaskModel.Status;
import com.netflix.conductor.sqs.eventqueue.SQSObservableQueue.Builder;

import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import rx.Scheduler;

@Configuration
@EnableConfigurationProperties(SQSEventQueueProperties.class)
@ConditionalOnProperty(name = "conductor.event-queues.sqs.enabled", havingValue = "true")
public class SQSEventQueueConfiguration {

    @Autowired private SQSEventQueueProperties sqsProperties;

    private static final Logger LOGGER = LoggerFactory.getLogger(SQSEventQueueConfiguration.class);

    @Bean
    AWSCredentialsProvider createAWSCredentialsProvider() {
        return new DefaultAWSCredentialsProviderChain();
    }

    @ConditionalOnMissingBean
    @Bean
    public AmazonSQS getSQSClient(AWSCredentialsProvider credentialsProvider) {
        AmazonSQSClientBuilder builder =
                AmazonSQSClientBuilder.standard().withCredentials(credentialsProvider);
        if (!sqsProperties.getEndpoint().isEmpty()) {
            LOGGER.info("Setting custom SQS endpoint to {}", sqsProperties.getEndpoint());
            builder.withEndpointConfiguration(
                    new AwsClientBuilder.EndpointConfiguration(
                            sqsProperties.getEndpoint(), System.getenv("AWS_REGION")));
        }
        return builder.build();
    }

    @Bean
    public EventQueueProvider sqsEventQueueProvider(
            AmazonSQS sqsClient, SQSEventQueueProperties properties, Scheduler scheduler) {
        return new SQSEventQueueProvider(sqsClient, properties, scheduler);
    }

    @ConditionalOnProperty(
            name = "conductor.default-event-queue.type",
            havingValue = "sqs",
            matchIfMissing = true)
    @Bean
    public Map<Status, ObservableQueue> getQueues(
            ConductorProperties conductorProperties,
            SQSEventQueueProperties properties,
            AmazonSQS sqsClient) {
        String stack = "";
        if (conductorProperties.getStack() != null && conductorProperties.getStack().length() > 0) {
            stack = conductorProperties.getStack() + "_";
        }
        Status[] statuses = new Status[] {Status.COMPLETED, Status.FAILED};
        Map<Status, ObservableQueue> queues = new HashMap<>();
        for (Status status : statuses) {
            String queuePrefix =
                    StringUtils.isBlank(properties.getListenerQueuePrefix())
                            ? conductorProperties.getAppId() + "_sqs_notify_" + stack
                            : properties.getListenerQueuePrefix();

            String queueName = queuePrefix + status.name();

            Builder builder = new Builder().withClient(sqsClient).withQueueName(queueName);

            String auth = properties.getAuthorizedAccounts();
            String[] accounts = auth.split(",");
            for (String accountToAuthorize : accounts) {
                accountToAuthorize = accountToAuthorize.trim();
                if (accountToAuthorize.length() > 0) {
                    builder.addAccountToAuthorize(accountToAuthorize.trim());
                }
            }
            ObservableQueue queue = builder.build();
            queues.put(status, queue);
        }

        return queues;
    }
}


================================================
FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueProperties.java
================================================
/*
 * Copyright 2020 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.sqs.config;

import java.time.Duration;
import java.time.temporal.ChronoUnit;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DurationUnit;

@ConfigurationProperties("conductor.event-queues.sqs")
public class SQSEventQueueProperties {

    /** The maximum number of messages to be fetched from the queue in a single request */
    private int batchSize = 1;

    /** The polling interval (in milliseconds) */
    private Duration pollTimeDuration = Duration.ofMillis(100);

    /** The visibility timeout (in seconds) for the message on the queue */
    @DurationUnit(ChronoUnit.SECONDS)
    private Duration visibilityTimeout = Duration.ofSeconds(60);

    /** The prefix to be used for the default listener queues */
    private String listenerQueuePrefix = "";

    /** The AWS account Ids authorized to send messages to the queues */
    private String authorizedAccounts = "";

    /** The endpoint to use to connect to a local SQS server for testing */
    private String endpoint = "";

    public int getBatchSize() {
        return batchSize;
    }

    public void setBatchSize(int batchSize) {
        this.batchSize = batchSize;
    }

    public Duration getPollTimeDuration() {
        return pollTimeDuration;
    }

    public void setPollTimeDuration(Duration pollTimeDuration) {
        this.pollTimeDuration = pollTimeDuration;
    }

    public Duration getVisibilityTimeout() {
        return visibilityTimeout;
    }

    public void setVisibilityTimeout(Duration visibilityTimeout) {
        this.visibilityTimeout = visibilityTimeout;
    }

    public String getListenerQueuePrefix() {
        return listenerQueuePrefix;
    }

    public void setListenerQueuePrefix(String listenerQueuePrefix) {
        this.listenerQueuePrefix = listenerQueuePrefix;
    }

    public String getAuthorizedAccounts() {
        return authorizedAccounts;
    }

    public void setAuthorizedAccounts(String authorizedAccounts) {
        this.authorizedAccounts = authorizedAccounts;
    }

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }
}


================================================
FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueProvider.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.sqs.config;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.springframework.lang.NonNull;

import com.netflix.conductor.core.events.EventQueueProvider;
import com.netflix.conductor.core.events.queue.ObservableQueue;
import com.netflix.conductor.sqs.eventqueue.SQSObservableQueue;

import com.amazonaws.services.sqs.AmazonSQS;
import rx.Scheduler;

public class SQSEventQueueProvider implements EventQueueProvider {

    private final Map<String, ObservableQueue> queues = new ConcurrentHashMap<>();
    private final AmazonSQS client;
    private final int batchSize;
    private final long pollTimeInMS;
    private final int visibilityTimeoutInSeconds;
    private final Scheduler scheduler;

    public SQSEventQueueProvider(
            AmazonSQS client, SQSEventQueueProperties properties, Scheduler scheduler) {
        this.client = client;
        this.batchSize = properties.getBatchSize();
        this.pollTimeInMS = properties.getPollTimeDuration().toMillis();
        this.visibilityTimeoutInSeconds = (int) properties.getVisibilityTimeout().getSeconds();
        this.scheduler = scheduler;
    }

    @Override
    public String getQueueType() {
        return "sqs";
    }

    @Override
    @NonNull
    public ObservableQueue getQueue(String queueURI) {
        return queues.computeIfAbsent(
                queueURI,
                q ->
                        new SQSObservableQueue.Builder()
                                .withBatchSize(this.batchSize)
                                .withClient(client)
                                .withPollTimeInMS(this.pollTimeInMS)
                                .withQueueName(queueURI)
                                .withVisibilityTimeout(this.visibilityTimeoutInSeconds)
                                .withScheduler(scheduler)
                                .build());
    }
}


================================================
FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/eventqueue/SQSObservableQueue.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.sqs.eventqueue;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.netflix.conductor.core.events.queue.Message;
import com.netflix.conductor.core.events.queue.ObservableQueue;
import com.netflix.conductor.metrics.Monitors;

import com.amazonaws.auth.policy.Action;
import com.amazonaws.auth.policy.Policy;
import com.amazonaws.auth.policy.Principal;
import com.amazonaws.auth.policy.Resource;
import com.amazonaws.auth.policy.Statement;
import com.amazonaws.auth.policy.Statement.Effect;
import com.amazonaws.auth.policy.actions.SQSActions;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.model.BatchResultErrorEntry;
import com.amazonaws.services.sqs.model.ChangeMessageVisibilityRequest;
import com.amazonaws.services.sqs.model.CreateQueueRequest;
import com.amazonaws.services.sqs.model.CreateQueueResult;
import com.amazonaws.services.sqs.model.DeleteMessageBatchRequest;
import com.amazonaws.services.sqs.model.DeleteMessageBatchRequestEntry;
import com.amazonaws.services.sqs.model.DeleteMessageBatchResult;
import com.amazonaws.services.sqs.model.GetQueueAttributesResult;
import com.amazonaws.services.sqs.model.ListQueuesRequest;
import com.amazonaws.services.sqs.model.ListQueuesResult;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
import com.amazonaws.services.sqs.model.SendMessageBatchRequest;
import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry;
import com.amazonaws.services.sqs.model.SendMessageBatchResult;
import com.amazonaws.services.sqs.model.SetQueueAttributesResult;
import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Scheduler;

public class SQSObservableQueue implements ObservableQueue {

    private static final Logger LOGGER = LoggerFactory.getLogger(SQSObservableQueue.class);
    private static final String QUEUE_TYPE = "sqs";

    private final String queueName;
    private final int visibilityTimeoutInSeconds;
    private final int batchSize;
    private final AmazonSQS client;
    private final long pollTimeInMS;
    private final String queueURL;
    private final Scheduler scheduler;
    private volatile boolean running;

    private SQSObservableQueue(
            String queueName,
            AmazonSQS client,
            int visibilityTimeoutInSeconds,
            int batchSize,
            long pollTimeInMS,
            List<String> accountsToAuthorize,
            Scheduler scheduler) {
        this.queueName = queueName;
        this.client = client;
        this.visibilityTimeoutInSeconds = visibilityTimeoutInSeconds;
        this.batchSize = batchSize;
        this.pollTimeInMS = pollTimeInMS;
        this.queueURL = getOrCreateQueue();
        this.scheduler = scheduler;
        addPolicy(accountsToAuthorize);
    }

    @Override
    public Observable<Message> observe() {
        OnSubscribe<Message> subscriber = getOnSubscribe();
        return Observable.create(subscriber);
    }

    @Override
    public List<String> ack(List<Message> messages) {
        return delete(messages);
    }

    @Override
    public void publish(List<Message> messages) {
        publishMessages(messages);
    }

    @Override
    public long size() {
        GetQueueAttributesResult attributes =
                client.getQueueAttributes(
                        queueURL, Collections.singletonList("ApproximateNumberOfMessages"));
        String sizeAsStr = attributes.getAttributes().get("ApproximateNumberOfMessages");
        try {
            return Long.parseLong(sizeAsStr);
        } catch (Exception e) {
            return -1;
        }
    }

    @Override
    public void setUnackTimeout(Message message, long unackTimeout) {
        int unackTimeoutInSeconds = (int) (unackTimeout / 1000);
        ChangeMessageVisibilityRequest request =
                new ChangeMessageVisibilityRequest(
                        queueURL, message.getReceipt(), unackTimeoutInSeconds);
        client.changeMessageVisibility(request);
    }

    @Override
    public String getType() {
        return QUEUE_TYPE;
    }

    @Override
    public String getName() {
        return queueName;
    }

    @Override
    public String getURI() {
        return queueURL;
    }

    public long getPollTimeInMS() {
        return pollTimeInMS;
    }

    public int getBatchSize() {
        return batchSize;
    }

    public int getVisibilityTimeoutInSeconds() {
        return visibilityTimeoutInSeconds;
    }

    @Override
    public void start() {
        LOGGER.info("Started listening to {}:{}", getClass().getSimpleName(), queueName);
        running = true;
    }

    @Override
    public void stop() {
        LOGGER.info("Stopped listening to {}:{}", getClass().getSimpleName(), queueName);
        running = false;
    }

    @Override
    public boolean isRunning() {
        return running;
    }

    public static class Builder {

        private String queueName;
        private int visibilityTimeout = 30; // seconds
        private int batchSize = 5;
        private long pollTimeInMS = 100;
        private AmazonSQS client;
        private List<String> accountsToAuthorize = new LinkedList<>();
        private Scheduler scheduler;

        public Builder withQueueName(String queueName) {
            this.queueName = queueName;
            return this;
        }

        /**
         * @param visibilityTimeout Visibility timeout for the message in SECONDS
         * @return builder instance
         */
        public Builder withVisibilityTimeout(int visibilityTimeout) {
            this.visibilityTimeout = visibilityTimeout;
            return this;
        }

        public Builder withBatchSize(int batchSize) {
            this.batchSize = batchSize;
            return this;
        }

        public Builder withClient(AmazonSQS client) {
            this.client = client;
            return this;
        }

        public Builder withPollTimeInMS(long pollTimeInMS) {
            this.pollTimeInMS = pollTimeInMS;
            return this;
        }

        public Builder withAccountsToAuthorize(List<String> accountsToAuthorize) {
            this.accountsToAuthorize = accountsToAuthorize;
            return this;
        }

        public Builder addAccountToAuthorize(String accountToAuthorize) {
            this.accountsToAuthorize.add(accountToAuthorize);
            return this;
        }

        public Builder withScheduler(Scheduler scheduler) {
            this.scheduler = scheduler;
            return this;
        }

        public SQSObservableQueue build() {
            return new SQSObservableQueue(
                    queueName,
                    client,
                    visibilityTimeout,
                    batchSize,
                    pollTimeInMS,
                    accountsToAuthorize,
                    scheduler);
        }
    }

    // Private methods
    String getOrCreateQueue() {
        List<String> queueUrls = listQueues(queueName);
        if (queueUrls == null || queueUrls.isEmpty()) {
            CreateQueueRequest createQueueRequest =
                    new CreateQueueRequest().withQueueName(queueName);
            CreateQueueResult result = client.createQueue(createQueueRequest);
            return result.getQueueUrl();
        } else {
            return queueUrls.get(0);
        }
    }

    private String getQueueARN() {
        GetQueueAttributesResult response =
                client.getQueueAttributes(queueURL, Collections.singletonList("QueueArn"));
        return response.getAttributes().get("QueueArn");
    }

    private void addPolicy(List<String> accountsToAuthorize) {
        if (accountsToAuthorize == null || accountsToAuthorize.isEmpty()) {
            LOGGER.info("No additional security policies attached for the queue " + queueName);
            return;
        }
        LOGGER.info("Authorizing " + accountsToAuthorize + " to the queue " + queueName);
        Map<String, String> attributes = new HashMap<>();
        attributes.put("Policy", getPolicy(accountsToAuthorize));
        SetQueueAttributesResult result = client.setQueueAttributes(queueURL, attributes);
        LOGGER.info("policy attachment result: " + result);
        LOGGER.info(
                "policy attachment result: status="
                        + result.getSdkHttpMetadata().getHttpStatusCode());
    }

    private String getPolicy(List<String> accountIds) {
        Policy policy = new Policy("AuthorizedWorkerAccessPolicy");
        Statement stmt = new Statement(Effect.Allow);
        Action action = SQSActions.SendMessage;
        stmt.getActions().add(action);
        stmt.setResources(new LinkedList<>());
        for (String accountId : accountIds) {
            Principal principal = new Principal(accountId);
            stmt.getPrincipals().add(principal);
        }
        stmt.getResources().add(new Resource(getQueueARN()));
        policy.getStatements().add(stmt);
        return policy.toJson();
    }

    private List<String> listQueues(String queueName) {
        ListQueuesRequest listQueuesRequest =
                new ListQueuesRequest().withQueueNamePrefix(queueName);
        ListQueuesResult resultList = client.listQueues(listQueuesRequest);
        return resultList.getQueueUrls().stream()
                .filter(queueUrl -> queueUrl.contains(queueName))
                .collect(Collectors.toList());
    }

    private void publishMessages(List<Message> messages) {
        LOGGER.debug("Sending {} messages to the SQS queue: {}", messages.size(), queueName);
        SendMessageBatchRequest batch = new SendMessageBatchRequest(queueURL);
        messages.forEach(
                msg -> {
                    SendMessageBatchRequestEntry sendr =
                            new SendMessageBatchRequestEntry(msg.getId(), msg.getPayload());
                    batch.getEntries().add(sendr);
                });
        LOGGER.debug("sending {} messages in batch", batch.getEntries().size());
        SendMessageBatchResult result = client.sendMessageBatch(batch);
        LOGGER.debug("send result: {} for SQS queue: {}", result.getFailed().toString(), queueName);
    }

    List<Message> receiveMessages() {
        try {
            ReceiveMessageRequest receiveMessageRequest =
                    new ReceiveMessageRequest()
                            .withQueueUrl(queueURL)
                            .withVisibilityTimeout(visibilityTimeoutInSeconds)
                            .withMaxNumberOfMessages(batchSize);

            ReceiveMessageResult result = client.receiveMessage(receiveMessageRequest);

            List<Message> messages =
                    result.getMessages().stream()
                            .map(
                                    msg ->
                                            new Message(
                                                    msg.getMessageId(),
                                                    msg.getBody(),
                                                    msg.getReceiptHandle()))
                            .collect(Collectors.toList());
            Monitors.recordEventQueueMessagesProcessed(QUEUE_TYPE, this.queueName, messages.size());
            return messages;
        } catch (Exception e) {
            LOGGER.error("Exception while getting messages from SQS", e);
            Monitors.recordObservableQMessageReceivedErrors(QUEUE_TYPE);
        }
        return new ArrayList<>();
    }

    OnSubscribe<Message> getOnSubscribe() {
        return subscriber -> {
            Observable<Long> interval = Observable.interval(pollTimeInMS, TimeUnit.MILLISECONDS);
            interval.flatMap(
                            (Long x) -> {
                                if (!isRunning()) {
                                    LOGGER.debug(
                                            "Component stopped, skip listening for messages from SQS");
                                    return Observable.from(Collections.emptyList());
                                }
                                List<Message> messages = receiveMessages();
                                return Observable.from(messages);
                            })
                    .subscribe(subscriber::onNext, subscriber::onError);
        };
    }

    private List<String> delete(List<Message> messages) {
        if (messages == null || messages.isEmpty()) {
            return null;
        }

        DeleteMessageBatchRequest batch = new DeleteMessageBatchRequest().withQueueUrl(queueURL);
        List<DeleteMessageBatchRequestEntry> entries = batch.getEntries();

        messages.forEach(
                m ->
                        entries.add(
                                new DeleteMessageBatchRequestEntry()
                                        .withId(m.getId())
                                        .withReceiptHandle(m.getReceipt())));

        DeleteMessageBatchResult result = client.deleteMessageBatch(batch);
        List<String> failures =
                result.getFailed().stream()
                        .map(BatchResultErrorEntry::getId)
                        .collect(Collectors.toList());
        LOGGER.debug("Failed to delete messages from queue: {}: {}", queueName, failures);
        return failures;
    }
}


================================================
FILE: awssqs-event-queue/src/main/resources/META-INF/additional-spring-configuration-metadata.json
================================================
{
  "properties": [
    {
      "name": "conductor.event-queues.sqs.enabled",
      "type": "java.lang.Boolean",
      "description": "Enable the use of AWS SQS implementation to provide queues for consuming events.",
      "sourceType": "com.netflix.conductor.sqs.config.SQSEventQueueConfiguration"
    },
    {
      "name": "conductor.default-event-queue.type",
      "type": "java.lang.String",
      "description": "The default event queue type to listen on for the WAIT task.",
      "sourceType": "com.netflix.conductor.sqs.config.SQSEventQueueConfiguration"
    }
  ],
  "hints": [
    {
      "name": "conductor.default-event-queue.type",
      "values": [
        {
          "value": "sqs",
          "description": "Use AWS SQS as the event queue to listen on for the WAIT task."
        }
      ]
    }
  ]
}

================================================
FILE: awssqs-event-queue/src/test/java/com/netflix/conductor/sqs/eventqueue/DefaultEventQueueProcessorTest.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.sqs.eventqueue;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.stubbing.Answer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import com.netflix.conductor.common.config.TestObjectMapperConfiguration;
import com.netflix.conductor.common.metadata.tasks.Task;
import com.netflix.conductor.common.metadata.tasks.TaskResult;
import com.netflix.conductor.core.events.queue.DefaultEventQueueProcessor;
import com.netflix.conductor.core.events.queue.Message;
import com.netflix.conductor.core.events.queue.ObservableQueue;
import com.netflix.conductor.core.execution.WorkflowExecutor;
import com.netflix.conductor.model.TaskModel;
import com.netflix.conductor.model.TaskModel.Status;
import com.netflix.conductor.model.WorkflowModel;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.util.concurrent.Uninterruptibles;

import static com.netflix.conductor.common.metadata.tasks.TaskType.TASK_TYPE_WAIT;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;

@SuppressWarnings("unchecked")
@ContextConfiguration(classes = {TestObjectMapperConfiguration.class})
@RunWith(SpringRunner.class)
public class DefaultEventQueueProcessorTest {

    private static SQSObservableQueue queue;
    private static WorkflowExecutor workflowExecutor;
    private DefaultEventQueueProcessor defaultEventQueueProcessor;

    @Autowired private ObjectMapper objectMapper;

    private static final List<Message> messages = new LinkedList<>();
    private static final List<TaskResult> updatedTasks = new LinkedList<>();
    private static final List<Task> mappedTasks = new LinkedList<>();

    @Before
    public void init() {
        Map<Status, ObservableQueue> queues = new HashMap<>();
        queues.put(Status.COMPLETED, queue);
        defaultEventQueueProcessor =
                new DefaultEventQueueProcessor(queues, workflowExecutor, objectMapper);
    }

    @BeforeClass
    public static void setup() {

        queue = mock(SQSObservableQueue.class);
        when(queue.getOrCreateQueue()).thenReturn("junit_queue_url");
        when(queue.isRunning()).thenReturn(true);
        Answer<?> answer =
                (Answer<List<Message>>)
                        invocation -> {
                            List<Message> copy = new LinkedList<>(messages);
                            messages.clear();
                            return copy;
                        };

        when(queue.receiveMessages()).thenAnswer(answer);
        when(queue.getOnSubscribe()).thenCallRealMethod();
        when(queue.observe()).thenCallRealMethod();
        when(queue.getName()).thenReturn(Status.COMPLETED.name());

        TaskModel task0 = new TaskModel();
        task0.setStatus(Status.IN_PROGRESS);
        task0.setTaskId("t0");
        task0.setReferenceTaskName("t0");
        task0.setTaskType(TASK_TYPE_WAIT);
        WorkflowModel workflow0 = new WorkflowModel();
        workflow0.setWorkflowId("v_0");
        workflow0.getTasks().add(task0);

        TaskModel task2 = new TaskModel();
        task2.setStatus(Status.IN_PROGRESS);
        task2.setTaskId("t2");
        task2.setTaskType(TASK_TYPE_WAIT);
        WorkflowModel workflow2 = new WorkflowModel();
        workflow2.setWorkflowId("v_2");
        workflow2.getTasks().add(task2);

        doAnswer(
                        (Answer<Void>)
                                invocation -> {
                                    List<Message> msgs = invocation.getArgument(0, List.class);
                                    messages.addAll(msgs);
                                    return null;
                                })
                .when(queue)
                .publish(any());

        workflowExecutor = mock(WorkflowExecutor.class);
        assertNotNull(workflowExecutor);

        doReturn(workflow0).when(workflowExecutor).getWorkflow(eq("v_0"), anyBoolean());

        doReturn(workflow2).when(workflowExecutor).getWorkflow(eq("v_2"), anyBoolean());

        doAnswer(
                        (Answer<Void>)
                                invocation -> {
                                    updatedTasks.add(invocation.getArgument(0, TaskResult.class));
                                    return null;
                                })
                .when(workflowExecutor)
                .updateTask(any(TaskResult.class));
    }

    @Test
    public void test() throws Exception {
        defaultEventQueueProcessor.updateByTaskRefName(
                "v_0", "t0", new HashMap<>(), Status.COMPLETED);
        Uninterruptibles.sleepUninterruptibly(1_000, TimeUnit.MILLISECONDS);

        assertTrue(updatedTasks.stream().anyMatch(task -> task.getTaskId().equals("t0")));
    }

    @Test(expected = IllegalArgumentException.class)
    public void testFailure() throws Exception {
        defaultEventQueueProcessor.updateByTaskRefName(
                "v_1", "t1", new HashMap<>(), Status.CANCELED);
        Uninterruptibles.sleepUninterruptibly(1_000, TimeUnit.MILLISECONDS);
    }

    @Test
    public void testWithTaskId() throws Exception {
        defaultEventQueueProcessor.updateByTaskId("v_2", "t2", new HashMap<>(), Status.COMPLETED);
        Uninterruptibles.sleepUninterruptibly(1_000, TimeUnit.MILLISECONDS);
        assertTrue(updatedTasks.stream().anyMatch(task -> task.getTaskId().equals("t2")));
    }
}


================================================
FILE: awssqs-event-queue/src/test/java/com/netflix/conductor/sqs/eventqueue/SQSObservableQueueTest.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.sqs.eventqueue;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.junit.Test;
import org.mockito.stubbing.Answer;

import com.netflix.conductor.core.events.queue.Message;

import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.model.ListQueuesRequest;
import com.amazonaws.services.sqs.model.ListQueuesResult;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
import com.google.common.util.concurrent.Uninterruptibles;
import rx.Observable;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class SQSObservableQueueTest {

    @Test
    public void test() {

        List<Message> messages = new LinkedList<>();
        Observable.range(0, 10)
                .forEach((Integer x) -> messages.add(new Message("" + x, "payload: " + x, null)));
        assertEquals(10, messages.size());

        SQSObservableQueue queue = mock(SQSObservableQueue.class);
        when(queue.getOrCreateQueue()).thenReturn("junit_queue_url");
        Answer<?> answer = (Answer<List<Message>>) invocation -> Collections.emptyList();
        when(queue.receiveMessages()).thenReturn(messages).thenAnswer(answer);
        when(queue.isRunning()).thenReturn(true);
        when(queue.getOnSubscribe()).thenCallRealMethod();
        when(queue.observe()).thenCallRealMethod();

        List<Message> found = new LinkedList<>();
        Observable<Message> observable = queue.observe();
        assertNotNull(observable);
        observable.subscribe(found::add);

        Uninterruptibles.sleepUninterruptibly(1000, TimeUnit.MILLISECONDS);

        assertEquals(messages.size(), found.size());
        assertEquals(messages, found);
    }

    @Test
    public void testException() {
        com.amazonaws.services.sqs.model.Message message =
                new com.amazonaws.services.sqs.model.Message()
                        .withMessageId("test")
                        .withBody("")
                        .withReceiptHandle("receiptHandle");
        Answer<?> answer = (Answer<ReceiveMessageResult>) invocation -> new ReceiveMessageResult();

        AmazonSQS client = mock(AmazonSQS.class);
        when(client.listQueues(any(ListQueuesRequest.class)))
                .thenReturn(new ListQueuesResult().withQueueUrls("junit_queue_url"));
        when(client.receiveMessage(any(ReceiveMessageRequest.class)))
                .thenThrow(new RuntimeException("Error in SQS communication"))
                .thenReturn(new ReceiveMessageResult().withMessages(message))
                .thenAnswer(answer);

        SQSObservableQueue queue =
                new SQSObservableQueue.Builder().withQueueName("junit").withClient(client).build();
        queue.start();

        List<Message> found = new LinkedList<>();
        Observable<Message> observable = queue.observe();
        assertNotNull(observable);
        observable.subscribe(found::add);

        Uninterruptibles.sleepUninterruptibly(1000, TimeUnit.MILLISECONDS);
        assertEquals(1, found.size());
    }
}


================================================
FILE: build.gradle
================================================
import org.springframework.boot.gradle.plugin.SpringBootPlugin

buildscript {
    repositories {
        mavenCentral()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath 'com.netflix.nebula:gradle-extra-configurations-plugin:10.0.0'
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.7.16'
        classpath 'com.diffplug.spotless:spotless-plugin-gradle:6.+'
    }
}

plugins {
    id 'io.spring.dependency-management' version '1.1.3'
    id 'java'
    id 'application'
    id 'jacoco'
    id 'com.netflix.nebula.netflixoss' version '11.3.2'
    id 'org.sonarqube' version '3.4.0.2513'
}

/*
 *  Copyright 2021 Netflix, Inc.
 *  <p>
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 *  the License. You may obtain a copy of the License at
 *  <p>
 *  http://www.apache.org/licenses/LICENSE-2.0
 *  <p>
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 *  an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 *  specific language governing permissions and limitations under the License.
 */

// Establish version and status
ext.githubProjectName = rootProject.name // Change if github project name is not the same as the root project's name

subprojects {
    tasks.withType(Javadoc).all { enabled = false }
}

apply from: "$rootDir/dependencies.gradle"
apply from: "$rootDir/springboot-bom-overrides.gradle"

allprojects {
    apply plugin: 'com.netflix.nebula.netflixoss'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'java-library'
    apply plugin: 'project-report'

    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }

    group = 'com.netflix.conductor'

    configurations.all {
        exclude group: 'ch.qos.logback', module: 'logback-classic'
        exclude group: 'ch.qos.logback', module: 'logback-core'
        exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j'
        exclude group: 'org.slf4j', module: 'slf4j-log4j12'
        resolutionStrategy {
            force 'org.codehaus.jettison:jettison:1.5.4'
            force "org.apache.commons:commons-compress:${revCommonsCompress}"
        }
    }

    repositories {
        mavenCentral()

        // oss-candidate for -rc.* verions:
        maven {
            url "https://artifactory-oss.prod.netflix.net/artifactory/maven-oss-candidates"
        }

        /**
         * This repository locates artifacts that don't exist in maven central but we had to backup from jcenter
         * The exclusiveContent
         */
        exclusiveContent {
            forRepository {
                maven {
                    url "https://artifactory-oss.prod.netflix.net/artifactory/required-jcenter-modules-backup"
                }
            }
            filter {
                includeGroupByRegex "com\\.github\\.vmg.*"
            }
        }
    }

    dependencyManagement {
        imports {
            // dependency versions for the BOM can be found at https://docs.spring.io/spring-boot/docs/2.7.3/reference/htmlsingle/#appendix.dependency-versions
            mavenBom(SpringBootPlugin.BOM_COORDINATES)
        }
    }

    dependencies {
        implementation('org.apache.logging.log4j:log4j-core') {
            version {
                // this is the preferred version this library will use
                prefer '2.17.2'
                // the strict bounds, effectively allowing any 2.x version greater than 2.17.2
                // could also remove the upper bound entirely if we wanted too
                strictly '[2.17.2,3.0)'
            }
        }
        implementation('org.apache.logging.log4j:log4j-api') {
            version {
                // this is the preferred version this library will use
                prefer '2.17.2'
                // the strict bounds, effectively allowing any 2.x version greater than 2.17.2
                // could also remove the upper bound entirely if we wanted too
                strictly '[2.17.2,3.0)'
            }
        }
        implementation('org.apache.logging.log4j:log4j-slf4j-impl') {
            version {
                // this is the preferred version this library will use
                prefer '2.17.2'
                // the strict bounds, effectively allowing any 2.x version greater than 2.17.2
                // could also remove the upper bound entirely if we wanted too
                strictly '[2.17.2,3.0)'
            }
        }
        implementation('org.apache.logging.log4j:log4j-jul') {
            version {
                // this is the preferred version this library will use
                prefer '2.17.2'
                // the strict bounds, effectively allowing any 2.x version greater than 2.17.2
                // could also remove the upper bound entirely if we wanted too
                strictly '[2.17.2,3.0)'
            }
        }
        implementation('org.apache.logging.log4j:log4j-web') {
            version {
                // this is the preferred version this library will use
                prefer '2.17.2'
                // the strict bounds, effectively allowing any 2.x version greater than 2.17.2
                // could also remove the upper bound entirely if we wanted too
                strictly '[2.17.2,3.0)'
            }
        }
        implementation('org.yaml:snakeyaml') {
            version {
                // this is the preferred version this library will use
                prefer '2.0'
                // the strict bounds, effectively allowing any 2.x version between 2.0 and 2.1
                strictly '[2.0,2.1)'
            }
        }
        implementation('com.fasterxml.jackson.core:jackson-core') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.core:jackson-databind') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.core:jackson-annotations') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.dataformat:jackson-dataformat-smile') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.dataformat:jackson-dataformat-cbor') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.datatype:jackson-datatype-jdk8') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.datatype:jackson-datatype-joda') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('com.fasterxml.jackson.module:jackson-module-afterburner') {
            version {
                // this is the preferred version this library will use
                prefer '2.15.0'
                // the strict bounds, effectively allowing any 2.15.x version between 2.15.0 and 2.15.2
                strictly '[2.15.0,2.15.2)'
            }
        }
        implementation('org.apache.logging.log4j:log4j-core')
        implementation('org.apache.logging.log4j:log4j-api')
        implementation('org.apache.logging.log4j:log4j-slf4j-impl')
        implementation('org.apache.logging.log4j:log4j-jul')
        implementation('org.apache.logging.log4j:log4j-web') 
        annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

        testImplementation('org.springframework.boot:spring-boot-starter-test') {
            exclude group: 'org.yaml', module: 'snakeyaml'
        }
        testImplementation('org.springframework.boot:spring-boot-starter-log4j2')
        testImplementation 'junit:junit'
        testImplementation "org.junit.vintage:junit-vintage-engine"

        // Needed for build to work on m1/m2 macs
        testImplementation 'net.java.dev.jna:jna:5.13.0'
    }

    // processes additional configuration metadata json file as described here
    // https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/appendix-configuration-metadata.html#configuration-metadata-additional-metadata
    compileJava.inputs.files(processResources)

    test {
        useJUnitPlatform()
        testLogging {
            events = ["SKIPPED", "FAILED"]
            exceptionFormat = "full"
            displayGranularity = 1
            showStandardStreams = false
        }
    }
}

// all client and their related modules are published with Java 17 compatibility
["annotations", "common", "client", "client-spring", "grpc", "grpc-client"].each {
    project(":conductor-$it") {
        compileJava {
            options.release = 17
        }
    }
}

jacocoTestReport {
    reports {
        html.required = true
        xml.required = true
        csv.required = false
    }
}

task server {
    dependsOn ':conductor-server:bootRun'
}

sonarqube {
    properties {
        property "sonar.projectKey", "com.netflix.conductor:conductor"
        property "sonar.organization", "netflix"
        property "sonar.host.url", "https://sonarcloud.io"
    }
}

configure(allprojects - project(':conductor-grpc')) {
    apply plugin: 'com.diffplug.spotless'

    spotless {
        java {
            googleJavaFormat().aosp()
            removeUnusedImports()
            importOrder('java', 'javax', 'org', 'com.netflix', '', '\\#com.netflix', '\\#')
            licenseHeaderFile("$rootDir/licenseheader.txt")
        }
    }
}

['cassandra-persistence', 'core', 'redis-concurrency-limit', 'test-harness', 'client'].each {
    configure(project(":conductor-$it")) {
        spotless {
            groovy {
                importOrder('java', 'javax', 'org', 'com.netflix', '', '\\#com.netflix', '\\#')
                licenseHeaderFile("$rootDir/licenseheader.txt")
            }
        }
    }
}


================================================
FILE: cassandra-persistence/build.gradle
================================================
/*
 *  Copyright 2021 Netflix, Inc.
 *  <p>
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 *  the License. You may obtain a copy of the License at
 *  <p>
 *  http://www.apache.org/licenses/LICENSE-2.0
 *  <p>
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 *  an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 *  specific language governing permissions and limitations under the License.
 */
apply plugin: 'groovy'

dependencies {
    compileOnly 'org.springframework.boot:spring-boot-starter'

    implementation project(':conductor-common')
    implementation project(':conductor-core')
    implementation "com.datastax.cassandra:cassandra-driver-core:${revCassandra}"
    implementation "org.apache.commons:commons-lang3"

    testImplementation project(':conductor-core').sourceSets.test.output
    testImplementation project(':conductor-common').sourceSets.test.output

    testImplementation "org.codehaus.groovy:groovy-all:${revGroovy}"
    testImplementation "org.spockframework:spock-core:${revSpock}"
    testImplementation "org.spockframework:spock-spring:${revSpock}"
    testImplementation "org.testcontainers:spock:${revTestContainer}"
    testImplementation "org.testcontainers:cassandra:${revTestContainer}"
    testImplementation "com.google.protobuf:protobuf-java:${revProtoBuf}"
}


================================================
FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/CassandraConfiguration.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.netflix.conductor.cassandra.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.netflix.conductor.cassandra.config.cache.CacheableEventHandlerDAO;
import com.netflix.conductor.cassandra.config.cache.CacheableMetadataDAO;
import com.netflix.conductor.cassandra.dao.CassandraEventHandlerDAO;
import com.netflix.conductor.cassandra.dao.CassandraExecutionDAO;
import com.netflix.conductor.cassandra.dao.CassandraMetadataDAO;
import com.netflix.conductor.cassandra.dao.CassandraPollDataDAO;
import com.netflix.conductor.cassandra.util.Statements;
import com.netflix.conductor.dao.EventHandlerDAO;
import com.netflix.conductor.dao.ExecutionDAO;
import com.netflix.conductor.dao.MetadataDAO;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;
import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(CassandraProperties.class)
@ConditionalOnProperty(name = "conductor.db.type", havingValue = "cassandra")
public class CassandraConfiguration {

    private static final Logger LOGGER = LoggerFactory.getLogger(CassandraConfiguration.class);

    @Bean
    public Cluster cluster(CassandraProperties properties) {
        String host = properties.getHostAddress();
        int port = properties.getPort();

        LOGGER.info("Connecting to cassandra cluster with host:{}, port:{}", host, port);

        Cluster cluster = Cluster.builder().addContactPoint(host).withPort(port).build();

        Metadata metadata = cluster.getMetadata();
        LOGGER.info("Connected to cluster: {}", metadata.getClusterName());
        metadata.getAllHosts()
                .forEach(
                        h ->
                                LOGGER.info(
                                        "Datacenter:{}, host:{}, rack: {}",
                                        h.getDatacenter(),
                                        h.getEndPoint().resolve().getHostName(),
                                        h.getRack()));
        return cluster;
    }

    @Bean
    public Session session(Cluster cluster) {
        LOGGER.info("Initializing cassandra session");
        return cluster.connect();
    }

    @Bean
    public MetadataDAO cassandraMetadataDAO(
            Session session,
            ObjectMapper objectMapper,
            CassandraProperties properties,
            Statements statements,
            CacheManager cacheManager) {
        CassandraMetadataDAO cassandraMetadataDAO =
                new CassandraMetadataDAO(session, objectMapper, properties, statements);
        return new CacheableMetadataDAO(cassandraMetadataDAO, properties, cacheManager);
    }

    @Bean
    public ExecutionDAO cassandraExecutionDAO(
            Session session,
            ObjectMapper objectMapper,
            CassandraProperties properties,
            Statements statements) {
        return new CassandraExecutionDAO(session, objectMapper, properties, statements);
    }

    @Bean
    public EventHandlerDAO cassandraEventHandlerDAO(
            Session session,
            ObjectMapper objectMapper,
            CassandraProperties properties,
            Statements statements,
            CacheManager cacheManager) {
        CassandraEventHandlerDAO cassandraEventHandlerDAO =
                new CassandraEventHandlerDAO(session, objectMapper, properties, statements);
        return new CacheableEventHandlerDAO(cassandraEventHandlerDAO, properties, cacheManager);
    }

    @Bean
    public CassandraPollDataDAO cassandraPollDataDAO() {
        return new CassandraPollDataDAO();
    }

    @Bean
    public Statements statements(CassandraProperties cassandraProperties) {
        return new Statements(cassandraProperties.getKeyspace());
    }
}


================================================
FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/CassandraProperties.java
================================================
/*
 * Copyright 2022 Netflix, Inc.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the Lic
Download .txt
gitextract_cp2gulur/

├── .dockerignore
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   ├── documentation.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   ├── release-drafter.yml
│   └── workflows/
│       ├── ci.yml
│       ├── publish.yml
│       ├── release_draft.yml
│       ├── stale.yml
│       └── update-gradle-wrapper.yml
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── OSSMETADATA
├── README.md
├── RELATED.md
├── SECURITY.md
├── USERS.md
├── annotations/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── annotations/
│                               └── protogen/
│                                   ├── ProtoEnum.java
│                                   ├── ProtoField.java
│                                   └── ProtoMessage.java
├── annotations-processor/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       ├── example/
│       │   └── java/
│       │       └── com/
│       │           └── example/
│       │               └── Example.java
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── annotationsprocessor/
│       │   │                   └── protogen/
│       │   │                       ├── AbstractMessage.java
│       │   │                       ├── Enum.java
│       │   │                       ├── Message.java
│       │   │                       ├── ProtoFile.java
│       │   │                       ├── ProtoGen.java
│       │   │                       ├── ProtoGenTask.java
│       │   │                       └── types/
│       │   │                           ├── AbstractType.java
│       │   │                           ├── ExternMessageType.java
│       │   │                           ├── GenericType.java
│       │   │                           ├── ListType.java
│       │   │                           ├── MapType.java
│       │   │                           ├── MessageType.java
│       │   │                           ├── ScalarType.java
│       │   │                           ├── TypeMapper.java
│       │   │                           └── WrappedType.java
│       │   └── resources/
│       │       └── templates/
│       │           ├── file.proto
│       │           └── message.proto
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── annotationsprocessor/
│           │                   └── protogen/
│           │                       └── ProtoGenTest.java
│           └── resources/
│               └── example.proto.txt
├── awss3-storage/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── s3/
│           │                   ├── config/
│           │                   │   ├── S3Configuration.java
│           │                   │   └── S3Properties.java
│           │                   └── storage/
│           │                       └── S3PayloadStorage.java
│           └── resources/
│               └── META-INF/
│                   └── additional-spring-configuration-metadata.json
├── awssqs-event-queue/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── sqs/
│       │   │                   ├── config/
│       │   │                   │   ├── SQSEventQueueConfiguration.java
│       │   │                   │   ├── SQSEventQueueProperties.java
│       │   │                   │   └── SQSEventQueueProvider.java
│       │   │                   └── eventqueue/
│       │   │                       └── SQSObservableQueue.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── sqs/
│                               └── eventqueue/
│                                   ├── DefaultEventQueueProcessorTest.java
│                                   └── SQSObservableQueueTest.java
├── build.gradle
├── cassandra-persistence/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── cassandra/
│       │   │                   ├── config/
│       │   │                   │   ├── CassandraConfiguration.java
│       │   │                   │   ├── CassandraProperties.java
│       │   │                   │   └── cache/
│       │   │                   │       ├── CacheableEventHandlerDAO.java
│       │   │                   │       ├── CacheableMetadataDAO.java
│       │   │                   │       └── CachingConfig.java
│       │   │                   ├── dao/
│       │   │                   │   ├── CassandraBaseDAO.java
│       │   │                   │   ├── CassandraEventHandlerDAO.java
│       │   │                   │   ├── CassandraExecutionDAO.java
│       │   │                   │   ├── CassandraMetadataDAO.java
│       │   │                   │   └── CassandraPollDataDAO.java
│       │   │                   └── util/
│       │   │                       ├── Constants.java
│       │   │                       └── Statements.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── groovy/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── cassandra/
│                               ├── dao/
│                               │   ├── CassandraEventHandlerDAOSpec.groovy
│                               │   ├── CassandraExecutionDAOSpec.groovy
│                               │   ├── CassandraMetadataDAOSpec.groovy
│                               │   └── CassandraSpec.groovy
│                               └── util/
│                                   └── StatementsSpec.groovy
├── client/
│   ├── build.gradle
│   ├── spotbugsExclude.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── client/
│       │                       ├── automator/
│       │                       │   ├── PollingSemaphore.java
│       │                       │   ├── TaskPollExecutor.java
│       │                       │   └── TaskRunnerConfigurer.java
│       │                       ├── config/
│       │                       │   ├── ConductorClientConfiguration.java
│       │                       │   ├── DefaultConductorClientConfiguration.java
│       │                       │   └── PropertyFactory.java
│       │                       ├── exception/
│       │                       │   └── ConductorClientException.java
│       │                       ├── http/
│       │                       │   ├── ClientBase.java
│       │                       │   ├── ClientRequestHandler.java
│       │                       │   ├── EventClient.java
│       │                       │   ├── MetadataClient.java
│       │                       │   ├── PayloadStorage.java
│       │                       │   ├── TaskClient.java
│       │                       │   └── WorkflowClient.java
│       │                       ├── telemetry/
│       │                       │   └── MetricsContainer.java
│       │                       └── worker/
│       │                           └── Worker.java
│       └── test/
│           ├── groovy/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   └── http/
│           │                       ├── ClientSpecification.groovy
│           │                       ├── EventClientSpec.groovy
│           │                       ├── MetadataClientSpec.groovy
│           │                       ├── TaskClientSpec.groovy
│           │                       └── WorkflowClientSpec.groovy
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   ├── automator/
│           │                   │   ├── PollingSemaphoreTest.java
│           │                   │   ├── TaskPollExecutorTest.java
│           │                   │   └── TaskRunnerConfigurerTest.java
│           │                   ├── config/
│           │                   │   └── TestPropertyFactory.java
│           │                   ├── sample/
│           │                   │   ├── Main.java
│           │                   │   └── SampleWorker.java
│           │                   ├── testing/
│           │                   │   ├── AbstractWorkflowTests.java
│           │                   │   ├── LoanWorkflowInput.java
│           │                   │   ├── LoanWorkflowTest.java
│           │                   │   ├── RegressionTest.java
│           │                   │   └── SubWorkflowTest.java
│           │                   └── worker/
│           │                       └── TestWorkflowTask.java
│           └── resources/
│               ├── config.properties
│               ├── tasks.json
│               ├── test_data/
│               │   ├── loan_workflow_input.json
│               │   └── workflow1_run.json
│               └── workflows/
│                   ├── PopulationMinMax.json
│                   ├── calculate_loan_workflow.json
│                   ├── kitchensink.json
│                   └── workflow1.json
├── client-spring/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── client/
│       │   │                   └── spring/
│       │   │                       ├── ClientProperties.java
│       │   │                       ├── ConductorClientAutoConfiguration.java
│       │   │                       ├── ConductorWorkerAutoConfiguration.java
│       │   │                       └── SpringWorkerConfiguration.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   └── spring/
│           │                       ├── ExampleClient.java
│           │                       └── Workers.java
│           └── resources/
│               └── application.properties
├── common/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── common/
│       │                       ├── config/
│       │                       │   ├── ObjectMapperBuilderConfiguration.java
│       │                       │   ├── ObjectMapperConfiguration.java
│       │                       │   └── ObjectMapperProvider.java
│       │                       ├── constraints/
│       │                       │   ├── NoSemiColonConstraint.java
│       │                       │   ├── OwnerEmailMandatoryConstraint.java
│       │                       │   ├── TaskReferenceNameUniqueConstraint.java
│       │                       │   └── TaskTimeoutConstraint.java
│       │                       ├── jackson/
│       │                       │   └── JsonProtoModule.java
│       │                       ├── metadata/
│       │                       │   ├── Auditable.java
│       │                       │   ├── BaseDef.java
│       │                       │   ├── acl/
│       │                       │   │   └── Permission.java
│       │                       │   ├── events/
│       │                       │   │   ├── EventExecution.java
│       │                       │   │   └── EventHandler.java
│       │                       │   ├── tasks/
│       │                       │   │   ├── PollData.java
│       │                       │   │   ├── Task.java
│       │                       │   │   ├── TaskDef.java
│       │                       │   │   ├── TaskExecLog.java
│       │                       │   │   ├── TaskResult.java
│       │                       │   │   └── TaskType.java
│       │                       │   └── workflow/
│       │                       │       ├── DynamicForkJoinTask.java
│       │                       │       ├── DynamicForkJoinTaskList.java
│       │                       │       ├── RerunWorkflowRequest.java
│       │                       │       ├── SkipTaskRequest.java
│       │                       │       ├── StartWorkflowRequest.java
│       │                       │       ├── SubWorkflowParams.java
│       │                       │       ├── WorkflowDef.java
│       │                       │       ├── WorkflowDefSummary.java
│       │                       │       └── WorkflowTask.java
│       │                       ├── model/
│       │                       │   └── BulkResponse.java
│       │                       ├── run/
│       │                       │   ├── ExternalStorageLocation.java
│       │                       │   ├── SearchResult.java
│       │                       │   ├── TaskSummary.java
│       │                       │   ├── Workflow.java
│       │                       │   ├── WorkflowSummary.java
│       │                       │   └── WorkflowTestRequest.java
│       │                       ├── utils/
│       │                       │   ├── ConstraintParamUtil.java
│       │                       │   ├── EnvUtils.java
│       │                       │   ├── ExternalPayloadStorage.java
│       │                       │   ├── SummaryUtil.java
│       │                       │   └── TaskUtils.java
│       │                       └── validation/
│       │                           ├── ErrorResponse.java
│       │                           └── ValidationError.java
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── common/
│                               ├── config/
│                               │   └── TestObjectMapperConfiguration.java
│                               ├── events/
│                               │   └── EventHandlerTest.java
│                               ├── run/
│                               │   └── TaskSummaryTest.java
│                               ├── tasks/
│                               │   ├── TaskDefTest.java
│                               │   ├── TaskResultTest.java
│                               │   └── TaskTest.java
│                               ├── utils/
│                               │   ├── ConstraintParamUtilTest.java
│                               │   └── SummaryUtilTest.java
│                               └── workflow/
│                                   ├── SubWorkflowParamsTest.java
│                                   ├── WorkflowDefValidatorTest.java
│                                   └── WorkflowTaskTest.java
├── core/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               ├── annotations/
│       │   │               │   ├── Audit.java
│       │   │               │   ├── Trace.java
│       │   │               │   └── VisibleForTesting.java
│       │   │               ├── core/
│       │   │               │   ├── LifecycleAwareComponent.java
│       │   │               │   ├── WorkflowContext.java
│       │   │               │   ├── config/
│       │   │               │   │   ├── ConductorCoreConfiguration.java
│       │   │               │   │   ├── ConductorProperties.java
│       │   │               │   │   └── SchedulerConfiguration.java
│       │   │               │   ├── dal/
│       │   │               │   │   └── ExecutionDAOFacade.java
│       │   │               │   ├── event/
│       │   │               │   │   ├── WorkflowCreationEvent.java
│       │   │               │   │   └── WorkflowEvaluationEvent.java
│       │   │               │   ├── events/
│       │   │               │   │   ├── ActionProcessor.java
│       │   │               │   │   ├── DefaultEventProcessor.java
│       │   │               │   │   ├── DefaultEventQueueManager.java
│       │   │               │   │   ├── EventQueueManager.java
│       │   │               │   │   ├── EventQueueProvider.java
│       │   │               │   │   ├── EventQueues.java
│       │   │               │   │   ├── ScriptEvaluator.java
│       │   │               │   │   ├── SimpleActionProcessor.java
│       │   │               │   │   └── queue/
│       │   │               │   │       ├── ConductorEventQueueProvider.java
│       │   │               │   │       ├── ConductorObservableQueue.java
│       │   │               │   │       ├── DefaultEventQueueProcessor.java
│       │   │               │   │       ├── Message.java
│       │   │               │   │       └── ObservableQueue.java
│       │   │               │   ├── exception/
│       │   │               │   │   ├── ConflictException.java
│       │   │               │   │   ├── NonTransientException.java
│       │   │               │   │   ├── NotFoundException.java
│       │   │               │   │   ├── TerminateWorkflowException.java
│       │   │               │   │   └── TransientException.java
│       │   │               │   ├── execution/
│       │   │               │   │   ├── AsyncSystemTaskExecutor.java
│       │   │               │   │   ├── DeciderService.java
│       │   │               │   │   ├── StartWorkflowInput.java
│       │   │               │   │   ├── WorkflowExecutor.java
│       │   │               │   │   ├── evaluators/
│       │   │               │   │   │   ├── Evaluator.java
│       │   │               │   │   │   ├── JavascriptEvaluator.java
│       │   │               │   │   │   └── ValueParamEvaluator.java
│       │   │               │   │   ├── mapper/
│       │   │               │   │   │   ├── DecisionTaskMapper.java
│       │   │               │   │   │   ├── DoWhileTaskMapper.java
│       │   │               │   │   │   ├── DynamicTaskMapper.java
│       │   │               │   │   │   ├── EventTaskMapper.java
│       │   │               │   │   │   ├── ExclusiveJoinTaskMapper.java
│       │   │               │   │   │   ├── ForkJoinDynamicTaskMapper.java
│       │   │               │   │   │   ├── ForkJoinTaskMapper.java
│       │   │               │   │   │   ├── HTTPTaskMapper.java
│       │   │               │   │   │   ├── HumanTaskMapper.java
│       │   │               │   │   │   ├── InlineTaskMapper.java
│       │   │               │   │   │   ├── JoinTaskMapper.java
│       │   │               │   │   │   ├── JsonJQTransformTaskMapper.java
│       │   │               │   │   │   ├── KafkaPublishTaskMapper.java
│       │   │               │   │   │   ├── LambdaTaskMapper.java
│       │   │               │   │   │   ├── NoopTaskMapper.java
│       │   │               │   │   │   ├── SetVariableTaskMapper.java
│       │   │               │   │   │   ├── SimpleTaskMapper.java
│       │   │               │   │   │   ├── StartWorkflowTaskMapper.java
│       │   │               │   │   │   ├── SubWorkflowTaskMapper.java
│       │   │               │   │   │   ├── SwitchTaskMapper.java
│       │   │               │   │   │   ├── TaskMapper.java
│       │   │               │   │   │   ├── TaskMapperContext.java
│       │   │               │   │   │   ├── TerminateTaskMapper.java
│       │   │               │   │   │   ├── UserDefinedTaskMapper.java
│       │   │               │   │   │   └── WaitTaskMapper.java
│       │   │               │   │   └── tasks/
│       │   │               │   │       ├── Decision.java
│       │   │               │   │       ├── DoWhile.java
│       │   │               │   │       ├── Event.java
│       │   │               │   │       ├── ExclusiveJoin.java
│       │   │               │   │       ├── ExecutionConfig.java
│       │   │               │   │       ├── Fork.java
│       │   │               │   │       ├── Human.java
│       │   │               │   │       ├── Inline.java
│       │   │               │   │       ├── IsolatedTaskQueueProducer.java
│       │   │               │   │       ├── Join.java
│       │   │               │   │       ├── Lambda.java
│       │   │               │   │       ├── Noop.java
│       │   │               │   │       ├── SetVariable.java
│       │   │               │   │       ├── StartWorkflow.java
│       │   │               │   │       ├── SubWorkflow.java
│       │   │               │   │       ├── Switch.java
│       │   │               │   │       ├── SystemTaskRegistry.java
│       │   │               │   │       ├── SystemTaskWorker.java
│       │   │               │   │       ├── SystemTaskWorkerCoordinator.java
│       │   │               │   │       ├── Terminate.java
│       │   │               │   │       ├── Wait.java
│       │   │               │   │       └── WorkflowSystemTask.java
│       │   │               │   ├── index/
│       │   │               │   │   ├── NoopIndexDAO.java
│       │   │               │   │   └── NoopIndexDAOConfiguration.java
│       │   │               │   ├── listener/
│       │   │               │   │   ├── TaskStatusListener.java
│       │   │               │   │   ├── TaskStatusListenerStub.java
│       │   │               │   │   ├── WorkflowStatusListener.java
│       │   │               │   │   └── WorkflowStatusListenerStub.java
│       │   │               │   ├── metadata/
│       │   │               │   │   └── MetadataMapperService.java
│       │   │               │   ├── operation/
│       │   │               │   │   ├── StartWorkflowOperation.java
│       │   │               │   │   └── WorkflowOperation.java
│       │   │               │   ├── reconciliation/
│       │   │               │   │   ├── WorkflowReconciler.java
│       │   │               │   │   ├── WorkflowRepairService.java
│       │   │               │   │   └── WorkflowSweeper.java
│       │   │               │   ├── storage/
│       │   │               │   │   └── DummyPayloadStorage.java
│       │   │               │   ├── sync/
│       │   │               │   │   ├── Lock.java
│       │   │               │   │   ├── local/
│       │   │               │   │   │   ├── LocalOnlyLock.java
│       │   │               │   │   │   └── LocalOnlyLockConfiguration.java
│       │   │               │   │   └── noop/
│       │   │               │   │       └── NoopLock.java
│       │   │               │   └── utils/
│       │   │               │       ├── DateTimeUtils.java
│       │   │               │       ├── ExternalPayloadStorageUtils.java
│       │   │               │       ├── IDGenerator.java
│       │   │               │       ├── JsonUtils.java
│       │   │               │       ├── ParametersUtils.java
│       │   │               │       ├── QueueUtils.java
│       │   │               │       ├── SemaphoreUtil.java
│       │   │               │       └── Utils.java
│       │   │               ├── dao/
│       │   │               │   ├── ConcurrentExecutionLimitDAO.java
│       │   │               │   ├── EventHandlerDAO.java
│       │   │               │   ├── ExecutionDAO.java
│       │   │               │   ├── IndexDAO.java
│       │   │               │   ├── MetadataDAO.java
│       │   │               │   ├── PollDataDAO.java
│       │   │               │   ├── QueueDAO.java
│       │   │               │   └── RateLimitingDAO.java
│       │   │               ├── metrics/
│       │   │               │   ├── Monitors.java
│       │   │               │   └── WorkflowMonitor.java
│       │   │               ├── model/
│       │   │               │   ├── TaskModel.java
│       │   │               │   └── WorkflowModel.java
│       │   │               ├── service/
│       │   │               │   ├── AdminService.java
│       │   │               │   ├── AdminServiceImpl.java
│       │   │               │   ├── EventService.java
│       │   │               │   ├── EventServiceImpl.java
│       │   │               │   ├── ExecutionLockService.java
│       │   │               │   ├── ExecutionService.java
│       │   │               │   ├── MetadataService.java
│       │   │               │   ├── MetadataServiceImpl.java
│       │   │               │   ├── TaskService.java
│       │   │               │   ├── TaskServiceImpl.java
│       │   │               │   ├── WorkflowBulkService.java
│       │   │               │   ├── WorkflowBulkServiceImpl.java
│       │   │               │   ├── WorkflowService.java
│       │   │               │   ├── WorkflowServiceImpl.java
│       │   │               │   └── WorkflowTestService.java
│       │   │               └── validations/
│       │   │                   ├── ValidationContext.java
│       │   │                   └── WorkflowTaskTypeConstraint.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── additional-spring-configuration-metadata.json
│       │           ├── validation/
│       │           │   └── constraints.xml
│       │           └── validation.xml
│       └── test/
│           ├── groovy/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               ├── core/
│           │               │   ├── execution/
│           │               │   │   ├── AsyncSystemTaskExecutorTest.groovy
│           │               │   │   └── tasks/
│           │               │   │       ├── DoWhileSpec.groovy
│           │               │   │       ├── EventSpec.groovy
│           │               │   │       ├── IsolatedTaskQueueProducerSpec.groovy
│           │               │   │       └── StartWorkflowSpec.groovy
│           │               │   └── operation/
│           │               │       └── StartWorkflowOperationSpec.groovy
│           │               └── model/
│           │                   ├── TaskModelSpec.groovy
│           │                   └── WorkflowModelSpec.groovy
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               ├── TestUtils.java
│           │               ├── core/
│           │               │   ├── dal/
│           │               │   │   └── ExecutionDAOFacadeTest.java
│           │               │   ├── events/
│           │               │   │   ├── MockObservableQueue.java
│           │               │   │   ├── MockQueueProvider.java
│           │               │   │   ├── TestDefaultEventProcessor.java
│           │               │   │   ├── TestScriptEval.java
│           │               │   │   └── TestSimpleActionProcessor.java
│           │               │   ├── execution/
│           │               │   │   ├── TestDeciderOutcomes.java
│           │               │   │   ├── TestDeciderService.java
│           │               │   │   ├── TestWorkflowDef.java
│           │               │   │   ├── TestWorkflowExecutor.java
│           │               │   │   ├── WorkflowSystemTaskStub.java
│           │               │   │   ├── mapper/
│           │               │   │   │   ├── DecisionTaskMapperTest.java
│           │               │   │   │   ├── DoWhileTaskMapperTest.java
│           │               │   │   │   ├── DynamicTaskMapperTest.java
│           │               │   │   │   ├── EventTaskMapperTest.java
│           │               │   │   │   ├── ForkJoinDynamicTaskMapperTest.java
│           │               │   │   │   ├── ForkJoinTaskMapperTest.java
│           │               │   │   │   ├── HTTPTaskMapperTest.java
│           │               │   │   │   ├── HumanTaskMapperTest.java
│           │               │   │   │   ├── InlineTaskMapperTest.java
│           │               │   │   │   ├── JoinTaskMapperTest.java
│           │               │   │   │   ├── JsonJQTransformTaskMapperTest.java
│           │               │   │   │   ├── KafkaPublishTaskMapperTest.java
│           │               │   │   │   ├── LambdaTaskMapperTest.java
│           │               │   │   │   ├── NoopTaskMapperTest.java
│           │               │   │   │   ├── SetVariableTaskMapperTest.java
│           │               │   │   │   ├── SimpleTaskMapperTest.java
│           │               │   │   │   ├── SubWorkflowTaskMapperTest.java
│           │               │   │   │   ├── SwitchTaskMapperTest.java
│           │               │   │   │   ├── TerminateTaskMapperTest.java
│           │               │   │   │   ├── UserDefinedTaskMapperTest.java
│           │               │   │   │   └── WaitTaskMapperTest.java
│           │               │   │   └── tasks/
│           │               │   │       ├── EventQueueResolutionTest.java
│           │               │   │       ├── InlineTest.java
│           │               │   │       ├── TestLambda.java
│           │               │   │       ├── TestNoop.java
│           │               │   │       ├── TestSubWorkflow.java
│           │               │   │       ├── TestSystemTaskWorker.java
│           │               │   │       ├── TestSystemTaskWorkerCoordinator.java
│           │               │   │       └── TestTerminate.java
│           │               │   ├── metadata/
│           │               │   │   └── MetadataMapperServiceTest.java
│           │               │   ├── reconciliation/
│           │               │   │   ├── TestWorkflowRepairService.java
│           │               │   │   └── TestWorkflowSweeper.java
│           │               │   ├── storage/
│           │               │   │   └── DummyPayloadStorageTest.java
│           │               │   ├── sync/
│           │               │   │   └── local/
│           │               │   │       └── LocalOnlyLockTest.java
│           │               │   └── utils/
│           │               │       ├── ExternalPayloadStorageUtilsTest.java
│           │               │       ├── JsonUtilsTest.java
│           │               │       ├── ParametersUtilsTest.java
│           │               │       ├── QueueUtilsTest.java
│           │               │       └── SemaphoreUtilTest.java
│           │               ├── dao/
│           │               │   ├── ExecutionDAOTest.java
│           │               │   └── PollDataDAOTest.java
│           │               ├── metrics/
│           │               │   └── WorkflowMonitorTest.java
│           │               ├── service/
│           │               │   ├── EventServiceTest.java
│           │               │   ├── ExecutionServiceTest.java
│           │               │   ├── MetadataServiceTest.java
│           │               │   ├── TaskServiceTest.java
│           │               │   ├── WorkflowBulkServiceTest.java
│           │               │   └── WorkflowServiceTest.java
│           │               └── validations/
│           │                   ├── WorkflowDefConstraintTest.java
│           │                   └── WorkflowTaskTypeConstraintTest.java
│           └── resources/
│               ├── completed.json
│               ├── conditional_flow.json
│               ├── conditional_flow_with_switch.json
│               ├── payload.json
│               └── test.json
├── dependencies.gradle
├── docker/
│   ├── README.md
│   ├── ci/
│   │   └── Dockerfile
│   ├── docker-compose-mysql.yaml
│   ├── docker-compose-postgres.yaml
│   ├── docker-compose.yaml
│   ├── server/
│   │   ├── Dockerfile
│   │   ├── config/
│   │   │   ├── config-mysql.properties
│   │   │   ├── config-postgres.properties
│   │   │   ├── config-redis.properties
│   │   │   ├── config.properties
│   │   │   ├── log4j-file-appender.properties
│   │   │   ├── log4j.properties
│   │   │   └── redis.conf
│   │   └── nginx/
│   │       └── nginx.conf
│   └── ui/
│       ├── Dockerfile
│       └── README.md
├── docs/
│   ├── docs/
│   │   ├── apispec.md
│   │   ├── architecture/
│   │   │   ├── overview.md
│   │   │   └── tasklifecycle.md
│   │   ├── bestpractices.md
│   │   ├── configuration/
│   │   │   ├── eventhandlers.md
│   │   │   ├── isolationgroups.md
│   │   │   ├── sysoperator.md
│   │   │   ├── systask.md
│   │   │   ├── taskdef.md
│   │   │   ├── taskdomains.md
│   │   │   ├── workerdef.md
│   │   │   └── workflowdef.md
│   │   ├── css/
│   │   │   └── custom.css
│   │   ├── extend.md
│   │   ├── externalpayloadstorage.md
│   │   ├── faq.md
│   │   ├── gettingstarted/
│   │   │   ├── basicconcepts.md
│   │   │   ├── client.md
│   │   │   ├── docker.md
│   │   │   ├── hosted.md
│   │   │   ├── intro.md
│   │   │   ├── source.md
│   │   │   ├── startworkflow.md
│   │   │   └── steps.md
│   │   ├── googleba55068fa3e0e553.html
│   │   ├── how-tos/
│   │   │   ├── Monitoring/
│   │   │   │   └── Conductor-LogLevel.md
│   │   │   ├── Tasks/
│   │   │   │   ├── creating-tasks.md
│   │   │   │   ├── dynamic-vs-switch-tasks.md
│   │   │   │   ├── extending-system-tasks.md
│   │   │   │   ├── monitoring-task-queues.md
│   │   │   │   ├── reusing-tasks.md
│   │   │   │   ├── task-configurations.md
│   │   │   │   ├── task-inputs.md
│   │   │   │   ├── task-timeouts.md
│   │   │   │   └── updating-tasks.md
│   │   │   ├── Test/
│   │   │   │   └── testing-workflows.md
│   │   │   ├── Workers/
│   │   │   │   ├── build-a-golang-task-worker.md
│   │   │   │   ├── build-a-java-task-worker.md
│   │   │   │   └── build-a-python-task-worker.md
│   │   │   ├── Workflows/
│   │   │   │   ├── debugging-workflows.md
│   │   │   │   ├── handling-errors.md
│   │   │   │   ├── searching-workflows.md
│   │   │   │   ├── starting-workflows.md
│   │   │   │   ├── updating-workflows.md
│   │   │   │   ├── versioning-workflows.md
│   │   │   │   └── view-workflow-executions.md
│   │   │   ├── clojure-sdk.md
│   │   │   ├── csharp-sdk.md
│   │   │   ├── go-sdk.md
│   │   │   ├── java-sdk.md
│   │   │   └── python-sdk.md
│   │   ├── index.md
│   │   ├── labs/
│   │   │   ├── beginner.md
│   │   │   ├── eventhandlers.md
│   │   │   ├── kitchensink.md
│   │   │   └── running-first-workflow.md
│   │   ├── metrics/
│   │   │   ├── client.md
│   │   │   └── server.md
│   │   ├── reference-docs/
│   │   │   ├── annotation-processor.md
│   │   │   ├── archival-of-workflows.md
│   │   │   ├── azureblob-storage.md
│   │   │   ├── directed-acyclic-graph.md
│   │   │   ├── do-while-task.md
│   │   │   ├── dynamic-fork-task.md
│   │   │   ├── dynamic-task.md
│   │   │   ├── event-task.md
│   │   │   ├── fork-task.md
│   │   │   ├── http-task.md
│   │   │   ├── human-task.md
│   │   │   ├── inline-task.md
│   │   │   ├── join-task.md
│   │   │   ├── json-jq-transform-task.md
│   │   │   ├── kafka-publish-task.md
│   │   │   ├── redis.md
│   │   │   ├── set-variable-task.md
│   │   │   ├── start-workflow-task.md
│   │   │   ├── sub-workflow-task.md
│   │   │   ├── switch-task.md
│   │   │   ├── terminate-task.md
│   │   │   └── wait-task.md
│   │   ├── resources/
│   │   │   ├── code-of-conduct.md
│   │   │   ├── contributing.md
│   │   │   ├── license.md
│   │   │   └── related.md
│   │   └── technicaldetails.md
│   ├── kitchensink.json
│   ├── mkdocs.yml
│   └── theme/
│       ├── main.html
│       ├── toc-sub.html
│       └── toc.html
├── es6-persistence/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── es6/
│       │   │                   ├── config/
│       │   │                   │   ├── ElasticSearchConditions.java
│       │   │                   │   ├── ElasticSearchProperties.java
│       │   │                   │   ├── ElasticSearchV6Configuration.java
│       │   │                   │   ├── IsHttpProtocol.java
│       │   │                   │   └── IsTcpProtocol.java
│       │   │                   └── dao/
│       │   │                       ├── index/
│       │   │                       │   ├── BulkRequestBuilderWrapper.java
│       │   │                       │   ├── BulkRequestWrapper.java
│       │   │                       │   ├── ElasticSearchBaseDAO.java
│       │   │                       │   ├── ElasticSearchDAOV6.java
│       │   │                       │   └── ElasticSearchRestDAOV6.java
│       │   │                       └── query/
│       │   │                           └── parser/
│       │   │                               ├── Expression.java
│       │   │                               ├── FilterProvider.java
│       │   │                               ├── GroupedExpression.java
│       │   │                               ├── NameValue.java
│       │   │                               └── internal/
│       │   │                                   ├── AbstractNode.java
│       │   │                                   ├── BooleanOp.java
│       │   │                                   ├── ComparisonOp.java
│       │   │                                   ├── ConstValue.java
│       │   │                                   ├── FunctionThrowingException.java
│       │   │                                   ├── ListConst.java
│       │   │                                   ├── Name.java
│       │   │                                   ├── ParserException.java
│       │   │                                   └── Range.java
│       │   └── resources/
│       │       ├── mappings_docType_task.json
│       │       ├── mappings_docType_workflow.json
│       │       ├── template_event.json
│       │       ├── template_message.json
│       │       └── template_task_log.json
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── es6/
│           │                   ├── dao/
│           │                   │   ├── index/
│           │                   │   │   ├── ElasticSearchDaoBaseTest.java
│           │                   │   │   ├── ElasticSearchRestDaoBaseTest.java
│           │                   │   │   ├── ElasticSearchTest.java
│           │                   │   │   ├── TestElasticSearchDAOV6.java
│           │                   │   │   ├── TestElasticSearchDAOV6Batch.java
│           │                   │   │   ├── TestElasticSearchRestDAOV6.java
│           │                   │   │   └── TestElasticSearchRestDAOV6Batch.java
│           │                   │   └── query/
│           │                   │       └── parser/
│           │                   │           ├── TestExpression.java
│           │                   │           └── internal/
│           │                   │               ├── TestAbstractParser.java
│           │                   │               ├── TestBooleanOp.java
│           │                   │               ├── TestComparisonOp.java
│           │                   │               ├── TestConstValue.java
│           │                   │               └── TestName.java
│           │                   └── utils/
│           │                       └── TestUtils.java
│           └── resources/
│               ├── expected_template_task_log.json
│               ├── task_summary.json
│               └── workflow_summary.json
├── family.properties
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── grpc/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── grpc/
│       │   │                   ├── AbstractProtoMapper.java
│       │   │                   └── ProtoMapper.java
│       │   └── proto/
│       │       ├── grpc/
│       │       │   ├── event_service.proto
│       │       │   ├── metadata_service.proto
│       │       │   ├── search.proto
│       │       │   ├── task_service.proto
│       │       │   └── workflow_service.proto
│       │       └── model/
│       │           ├── dynamicforkjointask.proto
│       │           ├── dynamicforkjointasklist.proto
│       │           ├── eventexecution.proto
│       │           ├── eventhandler.proto
│       │           ├── polldata.proto
│       │           ├── rerunworkflowrequest.proto
│       │           ├── skiptaskrequest.proto
│       │           ├── startworkflowrequest.proto
│       │           ├── subworkflowparams.proto
│       │           ├── task.proto
│       │           ├── taskdef.proto
│       │           ├── taskexeclog.proto
│       │           ├── taskresult.proto
│       │           ├── tasksummary.proto
│       │           ├── workflow.proto
│       │           ├── workflowdef.proto
│       │           ├── workflowdefsummary.proto
│       │           ├── workflowsummary.proto
│       │           └── workflowtask.proto
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── grpc/
│                               └── TestProtoMapper.java
├── grpc-client/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── client/
│       │                       └── grpc/
│       │                           ├── ClientBase.java
│       │                           ├── EventClient.java
│       │                           ├── MetadataClient.java
│       │                           ├── TaskClient.java
│       │                           └── WorkflowClient.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── client/
│           │                   └── grpc/
│           │                       ├── EventClientTest.java
│           │                       ├── TaskClientTest.java
│           │                       └── WorkflowClientTest.java
│           └── resources/
│               └── mockito-extensions/
│                   └── org.mockito.plugins.MockMaker
├── grpc-server/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── grpc/
│       │                       └── server/
│       │                           ├── GRPCServer.java
│       │                           ├── GRPCServerProperties.java
│       │                           ├── GrpcConfiguration.java
│       │                           └── service/
│       │                               ├── EventServiceImpl.java
│       │                               ├── GRPCHelper.java
│       │                               ├── HealthServiceImpl.java
│       │                               ├── MetadataServiceImpl.java
│       │                               ├── TaskServiceImpl.java
│       │                               └── WorkflowServiceImpl.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── grpc/
│           │                   └── server/
│           │                       └── service/
│           │                           ├── HealthServiceImplTest.java
│           │                           ├── TaskServiceImplTest.java
│           │                           └── WorkflowServiceImplTest.java
│           └── resources/
│               └── log4j.properties
├── http-task/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── tasks/
│       │   │                   └── http/
│       │   │                       ├── HttpTask.java
│       │   │                       └── providers/
│       │   │                           ├── DefaultRestTemplateProvider.java
│       │   │                           └── RestTemplateProvider.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── tasks/
│                               └── http/
│                                   ├── HttpTaskTest.java
│                                   └── providers/
│                                       └── DefaultRestTemplateProviderTest.java
├── java-sdk/
│   ├── README.md
│   ├── build.gradle
│   ├── example/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── netflix/
│   │   │           └── conductor/
│   │   │               └── sdk/
│   │   │                   └── example/
│   │   │                       └── shipment/
│   │   │                           ├── Order.java
│   │   │                           ├── Shipment.java
│   │   │                           ├── ShipmentState.java
│   │   │                           ├── ShipmentWorkers.java
│   │   │                           ├── ShipmentWorkflow.java
│   │   │                           └── User.java
│   │   └── resources/
│   │       └── script.js
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/
│   │   │   │       └── netflix/
│   │   │   │           └── conductor/
│   │   │   │               └── sdk/
│   │   │   │                   ├── healthcheck/
│   │   │   │                   │   └── HealthCheckClient.java
│   │   │   │                   ├── testing/
│   │   │   │                   │   ├── LocalServerRunner.java
│   │   │   │                   │   └── WorkflowTestRunner.java
│   │   │   │                   └── workflow/
│   │   │   │                       ├── def/
│   │   │   │                       │   ├── ConductorWorkflow.java
│   │   │   │                       │   ├── ValidationError.java
│   │   │   │                       │   ├── WorkflowBuilder.java
│   │   │   │                       │   └── tasks/
│   │   │   │                       │       ├── DoWhile.java
│   │   │   │                       │       ├── Dynamic.java
│   │   │   │                       │       ├── DynamicFork.java
│   │   │   │                       │       ├── DynamicForkInput.java
│   │   │   │                       │       ├── Event.java
│   │   │   │                       │       ├── ForkJoin.java
│   │   │   │                       │       ├── Http.java
│   │   │   │                       │       ├── JQ.java
│   │   │   │                       │       ├── Javascript.java
│   │   │   │                       │       ├── Join.java
│   │   │   │                       │       ├── SetVariable.java
│   │   │   │                       │       ├── SimpleTask.java
│   │   │   │                       │       ├── SubWorkflow.java
│   │   │   │                       │       ├── Switch.java
│   │   │   │                       │       ├── Task.java
│   │   │   │                       │       ├── TaskRegistry.java
│   │   │   │                       │       ├── Terminate.java
│   │   │   │                       │       └── Wait.java
│   │   │   │                       ├── executor/
│   │   │   │                       │   ├── WorkflowExecutor.java
│   │   │   │                       │   └── task/
│   │   │   │                       │       ├── AnnotatedWorker.java
│   │   │   │                       │       ├── AnnotatedWorkerExecutor.java
│   │   │   │                       │       ├── DynamicForkWorker.java
│   │   │   │                       │       ├── NonRetryableException.java
│   │   │   │                       │       ├── TaskContext.java
│   │   │   │                       │       └── WorkerConfiguration.java
│   │   │   │                       ├── task/
│   │   │   │                       │   ├── InputParam.java
│   │   │   │                       │   ├── OutputParam.java
│   │   │   │                       │   └── WorkerTask.java
│   │   │   │                       └── utils/
│   │   │   │                           ├── InputOutputGetter.java
│   │   │   │                           ├── MapBuilder.java
│   │   │   │                           └── ObjectMapperProvider.java
│   │   │   └── resources/
│   │   │       └── test-server.properties
│   │   └── test/
│   │       ├── java/
│   │       │   └── com/
│   │       │       └── netflix/
│   │       │           └── conductor/
│   │       │               └── sdk/
│   │       │                   └── workflow/
│   │       │                       ├── def/
│   │       │                       │   ├── TaskConversionsTests.java
│   │       │                       │   ├── WorkflowCreationTests.java
│   │       │                       │   ├── WorkflowDefTaskTests.java
│   │       │                       │   └── WorkflowState.java
│   │       │                       ├── executor/
│   │       │                       │   └── task/
│   │       │                       │       ├── AnnotatedWorkerTests.java
│   │       │                       │       └── TestWorkerConfig.java
│   │       │                       └── testing/
│   │       │                           ├── Task1Input.java
│   │       │                           ├── TestWorkflowInput.java
│   │       │                           └── WorkflowTestFrameworkTests.java
│   │       └── resources/
│   │           ├── application-integrationtest.properties
│   │           ├── log4j2.xml
│   │           ├── script.js
│   │           ├── simple_workflow.json
│   │           └── tasks.json
│   ├── testing_framework.md
│   ├── worker_sdk.md
│   └── workflow_sdk.md
├── json-jq-task/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── tasks/
│       │                       └── json/
│       │                           └── JsonJqTransform.java
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── tasks/
│                               └── json/
│                                   └── JsonJqTransformTest.java
├── licenseheader.txt
├── polyglot-clients/
│   └── README.md
├── redis-concurrency-limit/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── redis/
│       │                       └── limit/
│       │                           ├── RedisConcurrentExecutionLimitDAO.java
│       │                           └── config/
│       │                               ├── RedisConcurrentExecutionLimitConfiguration.java
│       │                               └── RedisConcurrentExecutionLimitProperties.java
│       └── test/
│           └── groovy/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── redis/
│                               └── limit/
│                                   └── RedisConcurrentExecutionLimitDAOSpec.groovy
├── redis-lock/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── redislock/
│       │   │                   ├── config/
│       │   │                   │   ├── RedisLockConfiguration.java
│       │   │                   │   └── RedisLockProperties.java
│       │   │                   └── lock/
│       │   │                       └── RedisLock.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── additional-spring-configuration-metadata.json
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── redis/
│                               └── lock/
│                                   └── RedisLockTest.java
├── redis-persistence/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── netflix/
│       │               └── conductor/
│       │                   └── redis/
│       │                       ├── config/
│       │                       │   ├── AnyRedisCondition.java
│       │                       │   ├── DynomiteClusterConfiguration.java
│       │                       │   ├── InMemoryRedisConfiguration.java
│       │                       │   ├── JedisCommandsConfigurer.java
│       │                       │   ├── RedisClusterConfiguration.java
│       │                       │   ├── RedisCommonConfiguration.java
│       │                       │   ├── RedisProperties.java
│       │                       │   ├── RedisSentinelConfiguration.java
│       │                       │   └── RedisStandaloneConfiguration.java
│       │                       ├── dao/
│       │                       │   ├── BaseDynoDAO.java
│       │                       │   ├── DynoQueueDAO.java
│       │                       │   ├── RedisEventHandlerDAO.java
│       │                       │   ├── RedisExecutionDAO.java
│       │                       │   ├── RedisMetadataDAO.java
│       │                       │   ├── RedisPollDataDAO.java
│       │                       │   └── RedisRateLimitingDAO.java
│       │                       ├── dynoqueue/
│       │                       │   ├── ConfigurationHostSupplier.java
│       │                       │   ├── LocalhostHostSupplier.java
│       │                       │   └── RedisQueuesShardingStrategyProvider.java
│       │                       └── jedis/
│       │                           ├── JedisCluster.java
│       │                           ├── JedisMock.java
│       │                           ├── JedisProxy.java
│       │                           ├── JedisSentinel.java
│       │                           └── JedisStandalone.java
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── redis/
│                               ├── config/
│                               │   └── utils/
│                               │       └── RedisQueuesShardingStrategyProviderTest.java
│                               ├── dao/
│                               │   ├── BaseDynoDAOTest.java
│                               │   ├── DynoQueueDAOTest.java
│                               │   ├── RedisEventHandlerDAOTest.java
│                               │   ├── RedisExecutionDAOTest.java
│                               │   ├── RedisMetadataDAOTest.java
│                               │   ├── RedisPollDataDAOTest.java
│                               │   └── RedisRateLimitDAOTest.java
│                               └── jedis/
│                                   ├── ConfigurationHostSupplierTest.java
│                                   ├── JedisClusterTest.java
│                                   └── JedisSentinelTest.java
├── rest/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── rest/
│       │   │                   ├── config/
│       │   │                   │   ├── RequestMappingConstants.java
│       │   │                   │   └── RestConfiguration.java
│       │   │                   ├── controllers/
│       │   │                   │   ├── AdminResource.java
│       │   │                   │   ├── ApplicationExceptionMapper.java
│       │   │                   │   ├── EventResource.java
│       │   │                   │   ├── HealthCheckResource.java
│       │   │                   │   ├── MetadataResource.java
│       │   │                   │   ├── QueueAdminResource.java
│       │   │                   │   ├── TaskResource.java
│       │   │                   │   ├── ValidationExceptionMapper.java
│       │   │                   │   ├── WorkflowBulkResource.java
│       │   │                   │   └── WorkflowResource.java
│       │   │                   └── startup/
│       │   │                       └── KitchenSinkInitializer.java
│       │   └── resources/
│       │       ├── kitchensink/
│       │       │   ├── kitchenSink-ephemeralWorkflowWithEphemeralTasks.json
│       │       │   ├── kitchenSink-ephemeralWorkflowWithStoredTasks.json
│       │       │   ├── kitchensink.json
│       │       │   ├── sub_flow_1.json
│       │       │   ├── wf1.json
│       │       │   └── wf2.json
│       │       └── static/
│       │           └── index.html
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── rest/
│                               └── controllers/
│                                   ├── AdminResourceTest.java
│                                   ├── EventResourceTest.java
│                                   ├── MetadataResourceTest.java
│                                   ├── TaskResourceTest.java
│                                   └── WorkflowResourceTest.java
├── server/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── netflix/
│       │   │           └── conductor/
│       │   │               └── Conductor.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── additional-spring-configuration-metadata.json
│       │       ├── application.properties
│       │       ├── banner.txt
│       │       └── log4j2.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── netflix/
│                       └── conductor/
│                           └── common/
│                               └── config/
│                                   └── ConductorObjectMapperTest.java
├── settings.gradle
├── springboot-bom-overrides.gradle
├── test-harness/
│   ├── build.gradle
│   └── src/
│       └── test/
│           ├── groovy/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               └── test/
│           │                   ├── base/
│           │                   │   ├── AbstractResiliencySpecification.groovy
│           │                   │   └── AbstractSpecification.groovy
│           │                   ├── integration/
│           │                   │   ├── DecisionTaskSpec.groovy
│           │                   │   ├── DoWhileSpec.groovy
│           │                   │   ├── DynamicForkJoinSpec.groovy
│           │                   │   ├── EventTaskSpec.groovy
│           │                   │   ├── ExclusiveJoinSpec.groovy
│           │                   │   ├── ExternalPayloadStorageSpec.groovy
│           │                   │   ├── FailureWorkflowSpec.groovy
│           │                   │   ├── ForkJoinSpec.groovy
│           │                   │   ├── HierarchicalForkJoinSubworkflowRerunSpec.groovy
│           │                   │   ├── HierarchicalForkJoinSubworkflowRestartSpec.groovy
│           │                   │   ├── HierarchicalForkJoinSubworkflowRetrySpec.groovy
│           │                   │   ├── JsonJQTransformSpec.groovy
│           │                   │   ├── LambdaAndTerminateTaskSpec.groovy
│           │                   │   ├── NestedForkJoinSubWorkflowSpec.groovy
│           │                   │   ├── SetVariableTaskSpec.groovy
│           │                   │   ├── SimpleWorkflowSpec.groovy
│           │                   │   ├── StartWorkflowSpec.groovy
│           │                   │   ├── SubWorkflowRerunSpec.groovy
│           │                   │   ├── SubWorkflowRestartSpec.groovy
│           │                   │   ├── SubWorkflowRetrySpec.groovy
│           │                   │   ├── SubWorkflowSpec.groovy
│           │                   │   ├── SwitchTaskSpec.groovy
│           │                   │   ├── SystemTaskSpec.groovy
│           │                   │   ├── TaskLimitsWorkflowSpec.groovy
│           │                   │   ├── TestWorkflowSpec.groovy
│           │                   │   ├── WaitTaskSpec.groovy
│           │                   │   └── WorkflowAndTaskConfigurationSpec.groovy
│           │                   ├── resiliency/
│           │                   │   ├── QueueResiliencySpec.groovy
│           │                   │   └── TaskResiliencySpec.groovy
│           │                   └── util/
│           │                       └── WorkflowTestUtil.groovy
│           ├── java/
│           │   └── com/
│           │       └── netflix/
│           │           └── conductor/
│           │               ├── ConductorTestApp.java
│           │               └── test/
│           │                   ├── integration/
│           │                   │   ├── AbstractEndToEndTest.java
│           │                   │   ├── grpc/
│           │                   │   │   ├── AbstractGrpcEndToEndTest.java
│           │                   │   │   └── GrpcEndToEndTest.java
│           │                   │   └── http/
│           │                   │       ├── AbstractHttpEndToEndTest.java
│           │                   │       └── HttpEndToEndTest.java
│           │                   └── utils/
│           │                       ├── MockExternalPayloadStorage.java
│           │                       └── UserTask.java
│           └── resources/
│               ├── application-integrationtest.properties
│               ├── concurrency_limited_task_workflow_integration_test.json
│               ├── conditional_switch_task_workflow_integration_test.json
│               ├── conditional_system_task_workflow_integration_test.json
│               ├── conditional_task_workflow_integration_test.json
│               ├── decision_and_fork_join_integration_test.json
│               ├── decision_and_terminate_integration_test.json
│               ├── do_while_as_subtask_integration_test.json
│               ├── do_while_five_loop_over_integration_test.json
│               ├── do_while_integration_test.json
│               ├── do_while_iteration_fix_test.json
│               ├── do_while_multiple_integration_test.json
│               ├── do_while_set_variable_fix.json
│               ├── do_while_sub_workflow_integration_test.json
│               ├── do_while_system_tasks.json
│               ├── do_while_with_decision_task.json
│               ├── dynamic_fork_join_integration_test.json
│               ├── event_workflow_integration_test.json
│               ├── exclusive_join_integration_test.json
│               ├── failure_workflow_for_terminate_task_workflow.json
│               ├── fork_join_integration_test.json
│               ├── fork_join_sub_workflow.json
│               ├── fork_join_with_no_task_retry_integration_test.json
│               ├── fork_join_with_optional_sub_workflow_forks_integration_test.json
│               ├── hierarchical_fork_join_swf.json
│               ├── input.json
│               ├── json_jq_transform_result_integration_test.json
│               ├── nested_fork_join_integration_test.json
│               ├── nested_fork_join_swf.json
│               ├── nested_fork_join_with_sub_workflow_integration_test.json
│               ├── output.json
│               ├── rate_limited_simple_task_workflow_integration_test.json
│               ├── rate_limited_system_task_workflow_integration_test.json
│               ├── sequential_json_jq_transform_integration_test.json
│               ├── set_variable_workflow_integration_test.json
│               ├── simple_decision_task_integration_test.json
│               ├── simple_json_jq_transform_integration_test.json
│               ├── simple_lambda_workflow_integration_test.json
│               ├── simple_one_task_sub_workflow_integration_test.json
│               ├── simple_set_variable_workflow_integration_test.json
│               ├── simple_switch_task_integration_test.json
│               ├── simple_wait_task_workflow_integration_test.json
│               ├── simple_workflow_1_input_template_integration_test.json
│               ├── simple_workflow_1_integration_test.json
│               ├── simple_workflow_3_integration_test.json
│               ├── simple_workflow_with_async_complete_system_task_integration_test.json
│               ├── simple_workflow_with_optional_task_integration_test.json
│               ├── simple_workflow_with_resp_time_out_integration_test.json
│               ├── simple_workflow_with_sub_workflow_inline_def_integration_test.json
│               ├── start_workflow_input.json
│               ├── switch_and_fork_join_integration_test.json
│               ├── switch_and_terminate_integration_test.json
│               ├── switch_with_no_default_case_integration_test.json
│               ├── terminate_task_completed_workflow_integration_test.json
│               ├── terminate_task_failed_workflow_integration.json
│               ├── terminate_task_parent_workflow.json
│               ├── terminate_task_sub_workflow.json
│               ├── test_task_failed_parent_workflow.json
│               ├── test_task_failed_sub_workflow.json
│               ├── wait_workflow_integration_test.json
│               ├── workflow_that_starts_another_workflow.json
│               ├── workflow_with_sub_workflow_1_integration_test.json
│               └── workflow_with_synchronous_system_task.json
└── ui/
    ├── .eslintrc
    ├── .gitignore
    ├── .prettierignore
    ├── .prettierrc.json
    ├── README.md
    ├── cypress/
    │   ├── e2e/
    │   │   └── spec.cy.js
    │   ├── fixtures/
    │   │   ├── doWhile/
    │   │   │   └── doWhileSwitch.json
    │   │   ├── dynamicFork/
    │   │   │   ├── externalizedInput.json
    │   │   │   ├── noneSpawned.json
    │   │   │   ├── notExecuted.json
    │   │   │   ├── oneFailed.json
    │   │   │   └── success.json
    │   │   ├── dynamicFork.json
    │   │   ├── metadataTasks.json
    │   │   ├── metadataWorkflow.json
    │   │   ├── taskSearch.json
    │   │   └── workflowSearch.json
    │   └── support/
    │       ├── commands.ts
    │       ├── component-index.html
    │       ├── component.ts
    │       └── e2e.ts
    ├── cypress.config.ts
    ├── package.json
    ├── public/
    │   ├── index.html
    │   └── robots.txt
    ├── src/
    │   ├── App.jsx
    │   ├── components/
    │   │   ├── Banner.jsx
    │   │   ├── Button.jsx
    │   │   ├── ButtonGroup.jsx
    │   │   ├── ConfirmChoiceDialog.jsx
    │   │   ├── CustomButtons.jsx
    │   │   ├── DataTable.jsx
    │   │   ├── DateRangePicker.jsx
    │   │   ├── Dropdown.jsx
    │   │   ├── DropdownButton.jsx
    │   │   ├── Heading.jsx
    │   │   ├── Input.jsx
    │   │   ├── KeyValueTable.jsx
    │   │   ├── LinearProgress.jsx
    │   │   ├── NavLink.jsx
    │   │   ├── Paper.jsx
    │   │   ├── Pill.jsx
    │   │   ├── PrimaryButton.jsx
    │   │   ├── ReactJson.jsx
    │   │   ├── SecondaryButton.jsx
    │   │   ├── Select.jsx
    │   │   ├── SplitButton.jsx
    │   │   ├── StatusBadge.jsx
    │   │   ├── Tabs.jsx
    │   │   ├── TaskLink.jsx
    │   │   ├── TaskNameInput.jsx
    │   │   ├── TertiaryButton.jsx
    │   │   ├── Text.jsx
    │   │   ├── WorkflowNameInput.jsx
    │   │   ├── definitionList/
    │   │   │   └── DefinitionList.jsx
    │   │   ├── diagram/
    │   │   │   ├── TaskPointer.d.ts
    │   │   │   ├── TaskResult.d.ts
    │   │   │   ├── WorkflowDAG.js
    │   │   │   ├── WorkflowGraph.jsx
    │   │   │   ├── WorkflowGraph.test.cy.js
    │   │   │   └── diagram.scss
    │   │   ├── formik/
    │   │   │   ├── FormikCronEditor.jsx
    │   │   │   ├── FormikDropdown.jsx
    │   │   │   ├── FormikInput.jsx
    │   │   │   ├── FormikJsonInput.jsx
    │   │   │   ├── FormikSwitch.jsx
    │   │   │   ├── FormikVersionDropdown.jsx
    │   │   │   ├── FormikWorkflowNameInput.jsx
    │   │   │   └── cron.css
    │   │   └── index.js
    │   ├── data/
    │   │   ├── actions.js
    │   │   ├── bulkactions.js
    │   │   ├── common.js
    │   │   ├── misc.js
    │   │   ├── task.js
    │   │   └── workflow.js
    │   ├── hooks/
    │   │   └── useTime.js
    │   ├── index.css
    │   ├── index.js
    │   ├── pages/
    │   │   ├── definition/
    │   │   │   ├── EventHandler.jsx
    │   │   │   ├── ResetConfirmationDialog.jsx
    │   │   │   ├── SaveTaskDialog.jsx
    │   │   │   ├── SaveWorkflowDialog.jsx
    │   │   │   ├── TaskDefinition.jsx
    │   │   │   └── WorkflowDefinition.jsx
    │   │   ├── definitions/
    │   │   │   ├── EventHandler.jsx
    │   │   │   ├── Header.jsx
    │   │   │   ├── Task.jsx
    │   │   │   └── Workflow.jsx
    │   │   ├── execution/
    │   │   │   ├── ActionModule.jsx
    │   │   │   ├── Execution.jsx
    │   │   │   ├── ExecutionInputOutput.jsx
    │   │   │   ├── ExecutionJson.jsx
    │   │   │   ├── ExecutionSummary.jsx
    │   │   │   ├── Legend.jsx
    │   │   │   ├── RightPanel.jsx
    │   │   │   ├── TaskDetails.jsx
    │   │   │   ├── TaskList.jsx
    │   │   │   ├── TaskLogs.jsx
    │   │   │   ├── TaskPollData.jsx
    │   │   │   ├── TaskSummary.jsx
    │   │   │   ├── Timeline.jsx
    │   │   │   └── timeline.scss
    │   │   ├── executions/
    │   │   │   ├── BulkActionModule.jsx
    │   │   │   ├── ResultsTable.jsx
    │   │   │   ├── SearchTabs.jsx
    │   │   │   ├── TaskResultsTable.jsx
    │   │   │   ├── TaskSearch.jsx
    │   │   │   ├── WorkflowSearch.jsx
    │   │   │   └── executionsStyles.js
    │   │   ├── kitchensink/
    │   │   │   ├── DataTableDemo.jsx
    │   │   │   ├── DiagramTest.jsx
    │   │   │   ├── Dropdown.jsx
    │   │   │   ├── EnhancedTable.jsx
    │   │   │   ├── Examples.jsx
    │   │   │   ├── Gantt.jsx
    │   │   │   ├── KitchenSink.jsx
    │   │   │   └── sampleMovieData.js
    │   │   ├── misc/
    │   │   │   └── TaskQueue.jsx
    │   │   ├── styles.js
    │   │   └── workbench/
    │   │       ├── ExecutionHistory.jsx
    │   │       ├── RunHistory.tsx
    │   │       ├── Workbench.jsx
    │   │       └── WorkbenchForm.jsx
    │   ├── plugins/
    │   │   ├── AppBarModules.jsx
    │   │   ├── AppLogo.jsx
    │   │   ├── CustomAppBarButtons.jsx
    │   │   ├── CustomRoutes.jsx
    │   │   ├── constants.js
    │   │   ├── customTypeRenderers.jsx
    │   │   ├── env.js
    │   │   └── fetch.js
    │   ├── react-app-env.d.ts
    │   ├── schema/
    │   │   ├── task.js
    │   │   └── workflow.js
    │   ├── serviceWorker.js
    │   ├── setupProxy.js
    │   ├── setupTests.js
    │   ├── theme/
    │   │   ├── colorOverrides.js
    │   │   ├── colors.js
    │   │   ├── index.js
    │   │   ├── provider.jsx
    │   │   ├── theme.js
    │   │   └── variables.js
    │   └── utils/
    │       ├── constants.js
    │       ├── helpers.js
    │       ├── localstorage.ts
    │       └── path.js
    ├── test-karbon.sh
    └── tsconfig.json
Download .txt
Showing preview only (521K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6536 symbols across 587 files)

FILE: annotations-processor/src/example/java/com/example/Example.java
  class Example (line 18) | @ProtoMessage

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/AbstractMessage.java
  class AbstractMessage (line 27) | public abstract class AbstractMessage {
    method AbstractMessage (line 33) | public AbstractMessage(Class<?> cls, MessageType parentType) {
    method addNestedEnum (line 46) | private void addNestedEnum(Class<?> cls) {
    method addNestedClass (line 53) | private void addNestedClass(Class<?> cls) {
    method getProtoClass (line 60) | public abstract String getProtoClass();
    method javaMapToProto (line 62) | protected abstract void javaMapToProto(TypeSpec.Builder builder);
    method javaMapFromProto (line 64) | protected abstract void javaMapFromProto(TypeSpec.Builder builder);
    method generateJavaMapper (line 66) | public void generateJavaMapper(TypeSpec.Builder builder) {
    method generateAbstractMethods (line 75) | public void generateAbstractMethods(Set<MethodSpec> specs) {
    method findDependencies (line 85) | public void findDependencies(Set<String> dependencies) {
    method getNested (line 95) | public List<AbstractMessage> getNested() {
    method getFields (line 99) | public List<Field> getFields() {
    method getName (line 103) | public String getName() {
    class Field (line 107) | public abstract static class Field {
      method Field (line 111) | protected Field(int index, java.lang.reflect.Field field) {
      method getProtoTypeDeclaration (line 116) | public abstract String getProtoTypeDeclaration();
      method getProtoIndex (line 118) | public int getProtoIndex() {
      method getName (line 122) | public String getName() {
      method getProtoName (line 126) | public String getProtoName() {
      method getDependencies (line 130) | public void getDependencies(Set<String> deps) {}
      method generateAbstractMethods (line 132) | public void generateAbstractMethods(Set<MethodSpec> specs) {}

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/Enum.java
  class Enum (line 23) | public class Enum extends AbstractMessage {
    type MapType (line 24) | public enum MapType {
      method MapType (line 30) | MapType(String m) {
      method getMethodName (line 34) | public String getMethodName() {
    method Enum (line 39) | public Enum(Class cls, MessageType parent) {
    method getProtoClass (line 48) | @Override
    method javaMap (line 53) | private MethodSpec javaMap(MapType mt, TypeName from, TypeName to) {
    method javaMapFromProto (line 76) | @Override
    method javaMapToProto (line 85) | @Override
    class EnumField (line 91) | public class EnumField extends Field {
      method EnumField (line 92) | protected EnumField(int index, java.lang.reflect.Field field) {
      method getProtoTypeDeclaration (line 96) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/Message.java
  class Message (line 31) | public class Message extends AbstractMessage {
    method Message (line 32) | public Message(Class<?> cls, MessageType parent) {
    method getAnnotation (line 43) | protected ProtoMessage getAnnotation() {
    method getProtoClass (line 47) | @Override
    method javaMapToProto (line 52) | @Override
    method javaMapFromProto (line 76) | @Override
    class MessageField (line 98) | public static class MessageField extends Field {
      method MessageField (line 101) | protected MessageField(int index, java.lang.reflect.Field field) {
      method getAbstractType (line 105) | public AbstractType getAbstractType() {
      method toUnderscoreCase (line 114) | private static String toUnderscoreCase(String input) {
      method getProtoTypeDeclaration (line 124) | @Override
      method getDependencies (line 131) | @Override
      method generateAbstractMethods (line 136) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoFile.java
  class ProtoFile (line 22) | public class ProtoFile {
    method ProtoFile (line 33) | public ProtoFile(
    method getJavaClassName (line 48) | public String getJavaClassName() {
    method getFilePath (line 52) | public String getFilePath() {
    method getProtoPackageName (line 56) | public String getProtoPackageName() {
    method getJavaPackageName (line 60) | public String getJavaPackageName() {
    method getGoPackageName (line 64) | public String getGoPackageName() {
    method getMessage (line 68) | public AbstractMessage getMessage() {
    method getIncludes (line 72) | public Set<String> getIncludes() {

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGen.java
  class ProtoGen (line 39) | public class ProtoGen {
    method ProtoGen (line 48) | public ProtoGen(String protoPackageName, String javaPackageName, Strin...
    method writeMapper (line 54) | public void writeMapper(File root, String mapperPackageName) throws IO...
    method writeProtos (line 91) | public void writeProtos(File root) throws IOException {
    method processPackage (line 110) | public void processPackage(File jarFile, String packageName) throws IO...
    method processClass (line 127) | public void processClass(Class<?> obj) {

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGenTask.java
  class ProtoGenTask (line 18) | public class ProtoGenTask {
    method getProtoPackage (line 30) | public String getProtoPackage() {
    method setProtoPackage (line 34) | public void setProtoPackage(String protoPackage) {
    method getJavaPackage (line 38) | public String getJavaPackage() {
    method setJavaPackage (line 42) | public void setJavaPackage(String javaPackage) {
    method getGoPackage (line 46) | public String getGoPackage() {
    method setGoPackage (line 50) | public void setGoPackage(String goPackage) {
    method getProtosDir (line 54) | public File getProtosDir() {
    method setProtosDir (line 58) | public void setProtosDir(File protosDir) {
    method getMapperDir (line 62) | public File getMapperDir() {
    method setMapperDir (line 66) | public void setMapperDir(File mapperDir) {
    method getMapperPackage (line 70) | public String getMapperPackage() {
    method setMapperPackage (line 74) | public void setMapperPackage(String mapperPackage) {
    method getSourceJar (line 78) | public File getSourceJar() {
    method setSourceJar (line 82) | public void setSourceJar(File sourceJar) {
    method getSourcePackage (line 86) | public String getSourcePackage() {
    method setSourcePackage (line 90) | public void setSourcePackage(String sourcePackage) {
    method generate (line 94) | public void generate() {
    method main (line 105) | public static void main(String[] args) {
    method toString (line 125) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/AbstractType.java
  class AbstractType (line 21) | public abstract class AbstractType {
    method AbstractType (line 25) | AbstractType(Type javaType, TypeName javaProtoType) {
    method getJavaType (line 30) | public Type getJavaType() {
    method getJavaProtoType (line 34) | public TypeName getJavaProtoType() {
    method getProtoType (line 38) | public abstract String getProtoType();
    method getRawJavaType (line 40) | public abstract TypeName getRawJavaType();
    method mapToProto (line 42) | public abstract void mapToProto(String field, MethodSpec.Builder method);
    method mapFromProto (line 44) | public abstract void mapFromProto(String field, MethodSpec.Builder met...
    method getDependencies (line 46) | public abstract void getDependencies(Set<String> deps);
    method generateAbstractMethods (line 48) | public abstract void generateAbstractMethods(Set<MethodSpec> specs);
    method javaMethodName (line 50) | protected String javaMethodName(String m, String field) {
    class ProtoCase (line 55) | private static class ProtoCase {
      method convert (line 56) | static String convert(String s) {
      method isWordBoundary (line 71) | private static boolean isWordBoundary(char c) {
      method findWordBoundary (line 75) | private static int findWordBoundary(CharSequence sequence, int start) {
      method normalizeWord (line 92) | private static String normalizeWord(String word) {
    method protoMethodName (line 98) | protected String protoMethodName(String m, String field) {

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ExternMessageType.java
  class ExternMessageType (line 23) | public class ExternMessageType extends MessageType {
    method ExternMessageType (line 26) | public ExternMessageType(
    method getProtoType (line 32) | @Override
    method generateAbstractMethods (line 37) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/GenericType.java
  class GenericType (line 23) | abstract class GenericType extends AbstractType {
    method GenericType (line 24) | public GenericType(Type type) {
    method getRawType (line 28) | protected Class getRawType() {
    method resolveGenericParam (line 33) | protected AbstractType resolveGenericParam(int idx) {
    method getWrapperSuffix (line 44) | public abstract String getWrapperSuffix();
    method getValueType (line 46) | public abstract AbstractType getValueType();
    method resolveJavaProtoType (line 48) | public abstract TypeName resolveJavaProtoType();
    method getRawJavaType (line 50) | @Override
    method getDependencies (line 55) | @Override
    method generateAbstractMethods (line 60) | @Override
    method getJavaProtoType (line 65) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ListType.java
  class ListType (line 23) | public class ListType extends GenericType {
    method ListType (line 26) | public ListType(Type type) {
    method getWrapperSuffix (line 30) | @Override
    method getValueType (line 35) | @Override
    method mapToProto (line 43) | @Override
    method mapFromProto (line 61) | @Override
    method resolveJavaProtoType (line 91) | @Override
    method getProtoType (line 97) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/MapType.java
  class MapType (line 24) | public class MapType extends GenericType {
    method MapType (line 28) | public MapType(Type type) {
    method getWrapperSuffix (line 32) | @Override
    method getValueType (line 37) | @Override
    method getKeyType (line 45) | public AbstractType getKeyType() {
    method mapToProto (line 52) | @Override
    method mapFromProto (line 75) | @Override
    method resolveJavaProtoType (line 108) | @Override
    method getProtoType (line 116) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/MessageType.java
  class MessageType (line 23) | public class MessageType extends AbstractType {
    method MessageType (line 26) | public MessageType(Type javaType, ClassName javaProtoType, String prot...
    method getProtoType (line 31) | @Override
    method getProtoFilePath (line 37) | public String getProtoFilePath() {
    method getRawJavaType (line 41) | @Override
    method mapToProto (line 46) | @Override
    method isEnum (line 54) | private boolean isEnum() {
    method mapFromProto (line 59) | @Override
    method getDependencies (line 71) | @Override
    method generateAbstractMethods (line 76) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ScalarType.java
  class ScalarType (line 21) | public class ScalarType extends AbstractType {
    method ScalarType (line 24) | public ScalarType(Type javaType, TypeName javaProtoType, String protoT...
    method getProtoType (line 29) | @Override
    method getRawJavaType (line 34) | @Override
    method mapFromProto (line 39) | @Override
    method isNullableType (line 45) | private boolean isNullableType() {
    method mapToProto (line 58) | @Override
    method getDependencies (line 73) | @Override
    method generateAbstractMethods (line 76) | @Override

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/TypeMapper.java
  class TypeMapper (line 23) | public class TypeMapper {
    method addScalarType (line 36) | public void addScalarType(Type t, String protoType) {
    method addMessageType (line 40) | public void addMessageType(Class<?> t, MessageType message) {
    method TypeMapper (line 44) | public TypeMapper() {
    method get (line 70) | public AbstractType get(Type t) {
    method get (line 87) | public MessageType get(String className) {
    method declare (line 98) | public MessageType declare(Class type, MessageType parent) {
    method declare (line 102) | public MessageType declare(Class type, ClassName parentType, String pr...
    method baseClass (line 112) | public MessageType baseClass(ClassName className, String protoFilePath) {

FILE: annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/WrappedType.java
  class WrappedType (line 23) | public class WrappedType extends AbstractType {
    method wrap (line 27) | public static WrappedType wrap(GenericType realType) {
    method WrappedType (line 39) | public WrappedType(AbstractType realType, MessageType wrappedType) {
    method getProtoType (line 45) | @Override
    method getRawJavaType (line 50) | @Override
    method mapToProto (line 55) | @Override
    method mapFromProto (line 60) | @Override
    method getDependencies (line 65) | @Override
    method generateAbstractMethods (line 71) | @Override

FILE: annotations-processor/src/test/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGenTest.java
  class ProtoGenTest (line 30) | public class ProtoGenTest {
    method happyPath (line 35) | @Test

FILE: awss3-storage/src/main/java/com/netflix/conductor/s3/config/S3Configuration.java
  class S3Configuration (line 27) | @Configuration
    method s3ExternalPayloadStorage (line 32) | @Bean
    method amazonS3 (line 38) | @ConditionalOnProperty(

FILE: awss3-storage/src/main/java/com/netflix/conductor/s3/config/S3Properties.java
  class S3Properties (line 21) | @ConfigurationProperties("conductor.external-payload-storage.s3")
    method getBucketName (line 34) | public String getBucketName() {
    method setBucketName (line 38) | public void setBucketName(String bucketName) {
    method getSignedUrlExpirationDuration (line 42) | public Duration getSignedUrlExpirationDuration() {
    method setSignedUrlExpirationDuration (line 46) | public void setSignedUrlExpirationDuration(Duration signedUrlExpiratio...
    method getRegion (line 50) | public String getRegion() {
    method setRegion (line 54) | public void setRegion(String region) {

FILE: awss3-storage/src/main/java/com/netflix/conductor/s3/storage/S3PayloadStorage.java
  class S3PayloadStorage (line 44) | public class S3PayloadStorage implements ExternalPayloadStorage {
    method S3PayloadStorage (line 54) | public S3PayloadStorage(IDGenerator idGenerator, S3Properties properti...
    method getLocation (line 67) | @Override
    method upload (line 123) | @Override
    method download (line 148) | @Override
    method getObjectKey (line 160) | private String getObjectKey(PayloadType payloadType) {

FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueConfiguration.java
  class SQSEventQueueConfiguration (line 41) | @Configuration
    method createAWSCredentialsProvider (line 50) | @Bean
    method getSQSClient (line 55) | @ConditionalOnMissingBean
    method sqsEventQueueProvider (line 69) | @Bean
    method getQueues (line 75) | @ConditionalOnProperty(

FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueProperties.java
  class SQSEventQueueProperties (line 21) | @ConfigurationProperties("conductor.event-queues.sqs")
    method getBatchSize (line 43) | public int getBatchSize() {
    method setBatchSize (line 47) | public void setBatchSize(int batchSize) {
    method getPollTimeDuration (line 51) | public Duration getPollTimeDuration() {
    method setPollTimeDuration (line 55) | public void setPollTimeDuration(Duration pollTimeDuration) {
    method getVisibilityTimeout (line 59) | public Duration getVisibilityTimeout() {
    method setVisibilityTimeout (line 63) | public void setVisibilityTimeout(Duration visibilityTimeout) {
    method getListenerQueuePrefix (line 67) | public String getListenerQueuePrefix() {
    method setListenerQueuePrefix (line 71) | public void setListenerQueuePrefix(String listenerQueuePrefix) {
    method getAuthorizedAccounts (line 75) | public String getAuthorizedAccounts() {
    method setAuthorizedAccounts (line 79) | public void setAuthorizedAccounts(String authorizedAccounts) {
    method getEndpoint (line 83) | public String getEndpoint() {
    method setEndpoint (line 87) | public void setEndpoint(String endpoint) {

FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueProvider.java
  class SQSEventQueueProvider (line 27) | public class SQSEventQueueProvider implements EventQueueProvider {
    method SQSEventQueueProvider (line 36) | public SQSEventQueueProvider(
    method getQueueType (line 45) | @Override
    method getQueue (line 50) | @Override

FILE: awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/eventqueue/SQSObservableQueue.java
  class SQSObservableQueue (line 59) | public class SQSObservableQueue implements ObservableQueue {
    method SQSObservableQueue (line 73) | private SQSObservableQueue(
    method observe (line 91) | @Override
    method ack (line 97) | @Override
    method publish (line 102) | @Override
    method size (line 107) | @Override
    method setUnackTimeout (line 120) | @Override
    method getType (line 129) | @Override
    method getName (line 134) | @Override
    method getURI (line 139) | @Override
    method getPollTimeInMS (line 144) | public long getPollTimeInMS() {
    method getBatchSize (line 148) | public int getBatchSize() {
    method getVisibilityTimeoutInSeconds (line 152) | public int getVisibilityTimeoutInSeconds() {
    method start (line 156) | @Override
    method stop (line 162) | @Override
    method isRunning (line 168) | @Override
    class Builder (line 173) | public static class Builder {
      method withQueueName (line 183) | public Builder withQueueName(String queueName) {
      method withVisibilityTimeout (line 192) | public Builder withVisibilityTimeout(int visibilityTimeout) {
      method withBatchSize (line 197) | public Builder withBatchSize(int batchSize) {
      method withClient (line 202) | public Builder withClient(AmazonSQS client) {
      method withPollTimeInMS (line 207) | public Builder withPollTimeInMS(long pollTimeInMS) {
      method withAccountsToAuthorize (line 212) | public Builder withAccountsToAuthorize(List<String> accountsToAuthor...
      method addAccountToAuthorize (line 217) | public Builder addAccountToAuthorize(String accountToAuthorize) {
      method withScheduler (line 222) | public Builder withScheduler(Scheduler scheduler) {
      method build (line 227) | public SQSObservableQueue build() {
    method getOrCreateQueue (line 240) | String getOrCreateQueue() {
    method getQueueARN (line 252) | private String getQueueARN() {
    method addPolicy (line 258) | private void addPolicy(List<String> accountsToAuthorize) {
    method getPolicy (line 273) | private String getPolicy(List<String> accountIds) {
    method listQueues (line 288) | private List<String> listQueues(String queueName) {
    method publishMessages (line 297) | private void publishMessages(List<Message> messages) {
    method receiveMessages (line 311) | List<Message> receiveMessages() {
    method getOnSubscribe (line 339) | OnSubscribe<Message> getOnSubscribe() {
    method delete (line 356) | private List<String> delete(List<Message> messages) {

FILE: awssqs-event-queue/src/test/java/com/netflix/conductor/sqs/eventqueue/DefaultEventQueueProcessorTest.java
  class DefaultEventQueueProcessorTest (line 51) | @SuppressWarnings("unchecked")
    method init (line 66) | @Before
    method setup (line 74) | @BeforeClass
    method test (line 137) | @Test
    method testFailure (line 146) | @Test(expected = IllegalArgumentException.class)
    method testWithTaskId (line 153) | @Test

FILE: awssqs-event-queue/src/test/java/com/netflix/conductor/sqs/eventqueue/SQSObservableQueueTest.java
  class SQSObservableQueueTest (line 39) | public class SQSObservableQueueTest {
    method test (line 41) | @Test
    method testException (line 68) | @Test

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/CassandraConfiguration.java
  class CassandraConfiguration (line 39) | @Configuration(proxyBeanMethods = false)
    method cluster (line 46) | @Bean
    method session (line 68) | @Bean
    method cassandraMetadataDAO (line 74) | @Bean
    method cassandraExecutionDAO (line 86) | @Bean
    method cassandraEventHandlerDAO (line 95) | @Bean
    method cassandraPollDataDAO (line 107) | @Bean
    method statements (line 112) | @Bean

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/CassandraProperties.java
  class CassandraProperties (line 23) | @ConfigurationProperties("conductor.cassandra")
    method getHostAddress (line 71) | public String getHostAddress() {
    method setHostAddress (line 75) | public void setHostAddress(String hostAddress) {
    method getPort (line 79) | public int getPort() {
    method setPort (line 83) | public void setPort(int port) {
    method getCluster (line 87) | public String getCluster() {
    method setCluster (line 91) | public void setCluster(String cluster) {
    method getKeyspace (line 95) | public String getKeyspace() {
    method setKeyspace (line 99) | public void setKeyspace(String keyspace) {
    method getShardSize (line 103) | public int getShardSize() {
    method setShardSize (line 107) | public void setShardSize(int shardSize) {
    method getReplicationStrategy (line 111) | public String getReplicationStrategy() {
    method setReplicationStrategy (line 115) | public void setReplicationStrategy(String replicationStrategy) {
    method getReplicationFactorKey (line 119) | public String getReplicationFactorKey() {
    method setReplicationFactorKey (line 123) | public void setReplicationFactorKey(String replicationFactorKey) {
    method getReplicationFactorValue (line 127) | public int getReplicationFactorValue() {
    method setReplicationFactorValue (line 131) | public void setReplicationFactorValue(int replicationFactorValue) {
    method getReadConsistencyLevel (line 135) | public ConsistencyLevel getReadConsistencyLevel() {
    method setReadConsistencyLevel (line 139) | public void setReadConsistencyLevel(ConsistencyLevel readConsistencyLe...
    method getWriteConsistencyLevel (line 143) | public ConsistencyLevel getWriteConsistencyLevel() {
    method setWriteConsistencyLevel (line 147) | public void setWriteConsistencyLevel(ConsistencyLevel writeConsistency...
    method getTaskDefCacheRefreshInterval (line 151) | public Duration getTaskDefCacheRefreshInterval() {
    method setTaskDefCacheRefreshInterval (line 155) | public void setTaskDefCacheRefreshInterval(Duration taskDefCacheRefres...
    method getEventHandlerCacheRefreshInterval (line 159) | public Duration getEventHandlerCacheRefreshInterval() {
    method setEventHandlerCacheRefreshInterval (line 163) | public void setEventHandlerCacheRefreshInterval(Duration eventHandlerC...
    method getEventExecutionPersistenceTtl (line 167) | public Duration getEventExecutionPersistenceTtl() {
    method setEventExecutionPersistenceTtl (line 171) | public void setEventExecutionPersistenceTtl(Duration eventExecutionPer...

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/cache/CacheableEventHandlerDAO.java
  class CacheableEventHandlerDAO (line 41) | @Trace
    method CacheableEventHandlerDAO (line 53) | public CacheableEventHandlerDAO(
    method scheduleEventHandlerRefresh (line 62) | @PostConstruct
    method addEventHandler (line 70) | @Override
    method updateEventHandler (line 76) | @Override
    method removeEventHandler (line 82) | @Override
    method getAllEventHandlers (line 88) | @Override
    method getEventHandlersForEvent (line 105) | @Override
    method refreshEventHandlersCache (line 119) | private List<EventHandler> refreshEventHandlersCache() {

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/cache/CacheableMetadataDAO.java
  class CacheableMetadataDAO (line 43) | @Trace
    method CacheableMetadataDAO (line 55) | public CacheableMetadataDAO(
    method scheduleCacheRefresh (line 64) | @PostConstruct
    method createTaskDef (line 74) | @Override
    method updateTaskDef (line 81) | @Override
    method getTaskDef (line 87) | @Override
    method getAllTaskDefs (line 93) | @Override
    method removeTaskDef (line 110) | @Override
    method createWorkflowDef (line 116) | @Override
    method updateWorkflowDef (line 121) | @Override
    method getLatestWorkflowDef (line 126) | @Override
    method getWorkflowDef (line 131) | @Override
    method removeWorkflowDef (line 136) | @Override
    method getAllWorkflowDefs (line 141) | @Override
    method getAllWorkflowDefsLatestVersions (line 146) | @Override
    method refreshTaskDefsCache (line 151) | private List<TaskDef> refreshTaskDefsCache() {

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/cache/CachingConfig.java
  class CachingConfig (line 21) | @Configuration
    method cacheManager (line 27) | @Bean

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraBaseDAO.java
  class CassandraBaseDAO (line 96) | public abstract class CassandraBaseDAO {
    method CassandraBaseDAO (line 106) | public CassandraBaseDAO(
    method toUUID (line 115) | protected static UUID toUUID(String uuidString, String message) {
    method init (line 123) | private void init() {
    method getCreateKeyspaceStatement (line 145) | private String getCreateKeyspaceStatement() {
    method getCreateWorkflowsTableStatement (line 159) | private String getCreateWorkflowsTableStatement() {
    method getCreateTaskLookupTableStatement (line 172) | private String getCreateTaskLookupTableStatement() {
    method getCreateTaskDefLimitTableStatement (line 180) | private String getCreateTaskDefLimitTableStatement() {
    method getCreateWorkflowDefsTableStatement (line 189) | private String getCreateWorkflowDefsTableStatement() {
    method getCreateWorkflowDefsIndexTableStatement (line 198) | private String getCreateWorkflowDefsIndexTableStatement() {
    method getCreateTaskDefsTableStatement (line 207) | private String getCreateTaskDefsTableStatement() {
    method getCreateEventHandlersTableStatement (line 216) | private String getCreateEventHandlersTableStatement() {
    method getCreateEventExecutionsTableStatement (line 225) | private String getCreateEventExecutionsTableStatement() {
    method toJson (line 235) | String toJson(Object value) {
    method readValue (line 243) | <T> T readValue(String json, Class<T> clazz) {
    method recordCassandraDaoRequests (line 251) | void recordCassandraDaoRequests(String action) {
    method recordCassandraDaoRequests (line 255) | void recordCassandraDaoRequests(String action, String taskType, String...
    method recordCassandraDaoEventRequests (line 259) | void recordCassandraDaoEventRequests(String action, String event) {
    method recordCassandraDaoPayloadSize (line 263) | void recordCassandraDaoPayloadSize(
    class WorkflowMetadata (line 268) | static class WorkflowMetadata {
      method getTotalTasks (line 273) | public int getTotalTasks() {
      method setTotalTasks (line 277) | public void setTotalTasks(int totalTasks) {
      method getTotalPartitions (line 281) | public int getTotalPartitions() {
      method setTotalPartitions (line 285) | public void setTotalPartitions(int totalPartitions) {

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraEventHandlerDAO.java
  class CassandraEventHandlerDAO (line 40) | @Trace
    method CassandraEventHandlerDAO (line 50) | public CassandraEventHandlerDAO(
    method addEventHandler (line 68) | @Override
    method updateEventHandler (line 73) | @Override
    method removeEventHandler (line 78) | @Override
    method getAllEventHandlers (line 91) | @Override
    method getEventHandlersForEvent (line 96) | @Override
    method getAllEventHandlersFromDB (line 110) | @SuppressWarnings("unchecked")
    method insertOrUpdateEventHandler (line 132) | private void insertOrUpdateEventHandler(EventHandler eventHandler) {

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java
  class CassandraExecutionDAO (line 43) | @Trace
    method CassandraExecutionDAO (line 77) | public CassandraExecutionDAO(
    method getPendingTasksByWorkflow (line 156) | @Override
    method getTasks (line 169) | @Override
    method createTasks (line 182) | @Override
    method updateTask (line 242) | @Override
    method exceedsLimit (line 279) | @Override
    method removeTask (line 324) | @Override
    method getTask (line 334) | @Override
    method getTasks (line 370) | @Override
    method getPendingTasksForTaskType (line 387) | @Override
    method getTasksForWorkflow (line 393) | @Override
    method createWorkflow (line 398) | @Override
    method updateWorkflow (line 423) | @Override
    method removeWorkflow (line 446) | @Override
    method removeWorkflowWithExpiry (line 474) | @Override
    method removeFromPendingWorkflow (line 484) | @Override
    method getWorkflow (line 490) | @Override
    method getWorkflow (line 495) | @Override
    method getRunningWorkflowIds (line 562) | @Override
    method getPendingWorkflowsByType (line 572) | @Override
    method getPendingWorkflowCount (line 582) | @Override
    method getInProgressTaskCount (line 592) | @Override
    method getWorkflowsByType (line 602) | @Override
    method getWorkflowsByCorrelationId (line 613) | @Override
    method canSearchAcrossWorkflows (line 620) | @Override
    method addEventExecution (line 625) | @Override
    method updateEventExecution (line 650) | @Override
    method removeEventExecution (line 675) | @Override
    method getEventExecutions (line 695) | @VisibleForTesting
    method addTaskToLimit (line 716) | @Override
    method removeTaskFromLimit (line 737) | @Override
    method removeTask (line 756) | protected boolean removeTask(TaskModel task) {
    method removeTaskLookup (line 793) | protected void removeTaskLookup(TaskModel task) {
    method validateTasks (line 810) | @VisibleForTesting
    method getWorkflowMetadata (line 835) | @VisibleForTesting
    method lookupWorkflowIdFromTaskId (line 855) | @VisibleForTesting

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraMetadataDAO.java
  class CassandraMetadataDAO (line 54) | @Trace
    method CassandraMetadataDAO (line 79) | public CassandraMetadataDAO(
    method createTaskDef (line 130) | @Override
    method updateTaskDef (line 135) | @Override
    method getTaskDef (line 140) | @Override
    method getAllTaskDefs (line 145) | @Override
    method removeTaskDef (line 150) | @Override
    method createWorkflowDef (line 163) | @Override
    method updateWorkflowDef (line 196) | @Override
    method getLatestWorkflowDef (line 222) | @Override
    method getWorkflowDef (line 232) | @Override
    method removeWorkflowDef (line 254) | @Override
    method getAllWorkflowDefs (line 270) | @SuppressWarnings("unchecked")
    method getAllWorkflowDefsLatestVersions (line 300) | @Override
    method getTaskDefFromDB (line 342) | private TaskDef getTaskDefFromDB(String name) {
    method getAllTaskDefsFromDB (line 355) | @SuppressWarnings("unchecked")
    method getAllWorkflowDefVersions (line 373) | private List<WorkflowDef> getAllWorkflowDefVersions(String name) {
    method insertOrUpdateTaskDef (line 398) | private TaskDef insertOrUpdateTaskDef(TaskDef taskDef) {
    method getWorkflowDefIndexValue (line 415) | @VisibleForTesting
    method getWorkflowNameAndVersion (line 420) | @VisibleForTesting
    method setDefaults (line 443) | private TaskDef setDefaults(Row row) {

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraPollDataDAO.java
  class CassandraPollDataDAO (line 24) | public class CassandraPollDataDAO implements PollDataDAO {
    method updateLastPollData (line 26) | @Override
    method getPollData (line 32) | @Override
    method getPollData (line 38) | @Override

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/util/Constants.java
  type Constants (line 15) | public interface Constants {

FILE: cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/util/Statements.java
  class Statements (line 128) | public class Statements {
    method Statements (line 132) | public Statements(String keyspace) {
    method getInsertWorkflowDefStatement (line 143) | public String getInsertWorkflowDefStatement() {
    method getInsertWorkflowDefVersionIndexStatement (line 156) | public String getInsertWorkflowDefVersionIndexStatement() {
    method getInsertTaskDefStatement (line 167) | public String getInsertTaskDefStatement() {
    method getSelectWorkflowDefStatement (line 181) | public String getSelectWorkflowDefStatement() {
    method getSelectAllWorkflowDefVersionsByNameStatement (line 193) | public String getSelectAllWorkflowDefVersionsByNameStatement() {
    method getSelectAllWorkflowDefsStatement (line 205) | public String getSelectAllWorkflowDefsStatement() {
    method getSelectAllWorkflowDefsLatestVersionsStatement (line 213) | public String getSelectAllWorkflowDefsLatestVersionsStatement() {
    method getSelectTaskDefStatement (line 225) | public String getSelectTaskDefStatement() {
    method getSelectAllTaskDefsStatement (line 237) | public String getSelectAllTaskDefsStatement() {
    method getUpdateWorkflowDefStatement (line 251) | public String getUpdateWorkflowDefStatement() {
    method getDeleteWorkflowDefStatement (line 265) | public String getDeleteWorkflowDefStatement() {
    method getDeleteWorkflowDefIndexStatement (line 277) | public String getDeleteWorkflowDefIndexStatement() {
    method getDeleteTaskDefStatement (line 289) | public String getDeleteTaskDefStatement() {
    method getInsertWorkflowStatement (line 303) | public String getInsertWorkflowStatement() {
    method getInsertTaskStatement (line 318) | public String getInsertTaskStatement() {
    method getInsertEventExecutionStatement (line 331) | public String getInsertEventExecutionStatement() {
    method getSelectTotalStatement (line 347) | public String getSelectTotalStatement() {
    method getSelectTaskStatement (line 358) | public String getSelectTaskStatement() {
    method getSelectWorkflowStatement (line 372) | public String getSelectWorkflowStatement() {
    method getSelectWorkflowWithTasksStatement (line 384) | public String getSelectWorkflowWithTasksStatement() {
    method getSelectTaskFromLookupTableStatement (line 397) | public String getSelectTaskFromLookupTableStatement() {
    method getSelectTasksFromTaskDefLimitStatement (line 408) | public String getSelectTasksFromTaskDefLimitStatement() {
    method getSelectAllEventExecutionsForMessageFromEventExecutionsStatement (line 420) | public String getSelectAllEventExecutionsForMessageFromEventExecutions...
    method getUpdateWorkflowStatement (line 434) | public String getUpdateWorkflowStatement() {
    method getUpdateTotalTasksStatement (line 448) | public String getUpdateTotalTasksStatement() {
    method getUpdateTotalPartitionsStatement (line 460) | public String getUpdateTotalPartitionsStatement() {
    method getUpdateTaskLookupStatement (line 473) | public String getUpdateTaskLookupStatement() {
    method getUpdateTaskDefLimitStatement (line 483) | public String getUpdateTaskDefLimitStatement() {
    method getUpdateEventExecutionStatement (line 494) | public String getUpdateEventExecutionStatement() {
    method getDeleteWorkflowStatement (line 509) | public String getDeleteWorkflowStatement() {
    method getDeleteTaskLookupStatement (line 521) | public String getDeleteTaskLookupStatement() {
    method getDeleteTaskStatement (line 531) | public String getDeleteTaskStatement() {
    method getDeleteTaskDefLimitStatement (line 544) | public String getDeleteTaskDefLimitStatement() {
    method getDeleteEventExecutionsStatement (line 555) | public String getDeleteEventExecutionsStatement() {
    method getInsertEventHandlerStatement (line 570) | public String getInsertEventHandlerStatement() {
    method getSelectAllEventHandlersStatement (line 583) | public String getSelectAllEventHandlersStatement() {
    method getDeleteEventHandlerStatement (line 597) | public String getDeleteEventHandlerStatement() {

FILE: client-spring/src/main/java/com/netflix/conductor/client/spring/ClientProperties.java
  class ClientProperties (line 21) | @ConfigurationProperties("conductor.client")
    method getRootUri (line 40) | public String getRootUri() {
    method setRootUri (line 44) | public void setRootUri(String rootUri) {
    method getWorkerNamePrefix (line 48) | public String getWorkerNamePrefix() {
    method setWorkerNamePrefix (line 52) | public void setWorkerNamePrefix(String workerNamePrefix) {
    method getThreadCount (line 56) | public int getThreadCount() {
    method setThreadCount (line 60) | public void setThreadCount(int threadCount) {
    method getSleepWhenRetryDuration (line 64) | public Duration getSleepWhenRetryDuration() {
    method setSleepWhenRetryDuration (line 68) | public void setSleepWhenRetryDuration(Duration sleepWhenRetryDuration) {
    method getUpdateRetryCount (line 72) | public int getUpdateRetryCount() {
    method setUpdateRetryCount (line 76) | public void setUpdateRetryCount(int updateRetryCount) {
    method getTaskToDomain (line 80) | public Map<String, String> getTaskToDomain() {
    method setTaskToDomain (line 84) | public void setTaskToDomain(Map<String, String> taskToDomain) {
    method getShutdownGracePeriodSeconds (line 88) | public int getShutdownGracePeriodSeconds() {
    method setShutdownGracePeriodSeconds (line 92) | public void setShutdownGracePeriodSeconds(int shutdownGracePeriodSecon...
    method getTaskThreadCount (line 96) | public Map<String, Integer> getTaskThreadCount() {
    method setTaskThreadCount (line 100) | public void setTaskThreadCount(Map<String, Integer> taskThreadCount) {

FILE: client-spring/src/main/java/com/netflix/conductor/client/spring/ConductorClientAutoConfiguration.java
  class ConductorClientAutoConfiguration (line 30) | @Configuration(proxyBeanMethods = false)
    method taskClient (line 40) | @ConditionalOnMissingBean
    method annotatedWorkerExecutor (line 48) | @ConditionalOnMissingBean
    method taskRunnerConfigurer (line 54) | @ConditionalOnMissingBean

FILE: client-spring/src/main/java/com/netflix/conductor/client/spring/ConductorWorkerAutoConfiguration.java
  class ConductorWorkerAutoConfiguration (line 28) | @Component
    method onApplicationEvent (line 34) | @Override

FILE: client-spring/src/main/java/com/netflix/conductor/client/spring/SpringWorkerConfiguration.java
  class SpringWorkerConfiguration (line 19) | public class SpringWorkerConfiguration extends WorkerConfiguration {
    method SpringWorkerConfiguration (line 23) | public SpringWorkerConfiguration(Environment environment) {
    method getPollingInterval (line 27) | @Override
    method getThreadCount (line 33) | @Override
    method getDomain (line 39) | @Override

FILE: client-spring/src/test/java/com/netflix/conductor/client/spring/ExampleClient.java
  class ExampleClient (line 23) | @SpringBootApplication
    method main (line 26) | public static void main(String[] args) {
    method worker (line 31) | @Bean

FILE: client-spring/src/test/java/com/netflix/conductor/client/spring/Workers.java
  class Workers (line 23) | @Component
    method helloWorld (line 26) | @WorkerTask(value = "hello", threadCount = 3)
    method helloAgain (line 38) | @WorkerTask(value = "hello_again", pollingInterval = 333)

FILE: client/src/main/java/com/netflix/conductor/client/automator/PollingSemaphore.java
  class PollingSemaphore (line 24) | class PollingSemaphore {
    method PollingSemaphore (line 29) | PollingSemaphore(int numSlots) {
    method complete (line 35) | void complete(int numSlots) {
    method availableSlots (line 45) | int availableSlots() {
    method acquireSlots (line 58) | public boolean acquireSlots(int numSlots) {

FILE: client/src/main/java/com/netflix/conductor/client/automator/TaskPollExecutor.java
  class TaskPollExecutor (line 47) | class TaskPollExecutor {
    method TaskPollExecutor (line 69) | TaskPollExecutor(
    method pollAndExecute (line 110) | void pollAndExecute(Worker worker) {
    method shutdown (line 208) | void shutdown(int timeout) {
    method shutdownAndAwaitTermination (line 214) | void shutdownAndAwaitTermination(ExecutorService executorService, int ...
    method processTask (line 238) | private Task processTask(Task task, Worker worker, PollingSemaphore po...
    method executeTask (line 257) | private void executeTask(Worker worker, Task task) {
    method finalizeTask (line 297) | private void finalizeTask(Task task, Throwable throwable) {
    method updateTaskResult (line 320) | private void updateTaskResult(int count, Task task, TaskResult result,...
    method upload (line 354) | private Optional<String> upload(TaskResult result, String taskType) {
    method retryOperation (line 365) | private <T, R> R retryOperation(Function<T, R> operation, int count, T...
    method handleException (line 382) | private void handleException(Throwable t, TaskResult result, Worker wo...
    method getPollingSemaphore (line 395) | private PollingSemaphore getPollingSemaphore(String taskType) {
    method extendLease (line 399) | private Runnable extendLease(Task task, CompletableFuture<Task> taskCo...

FILE: client/src/main/java/com/netflix/conductor/client/automator/TaskRunnerConfigurer.java
  class TaskRunnerConfigurer (line 36) | public class TaskRunnerConfigurer {
    method TaskRunnerConfigurer (line 62) | private TaskRunnerConfigurer(Builder builder) {
    class Builder (line 102) | public static class Builder {
      method Builder (line 115) | public Builder(TaskClient taskClient, Iterable<Worker> workers) {
      method withWorkerNamePrefix (line 127) | public Builder withWorkerNamePrefix(String workerNamePrefix) {
      method withSleepWhenRetry (line 137) | public Builder withSleepWhenRetry(int sleepWhenRetry) {
      method withUpdateRetryCount (line 147) | public Builder withUpdateRetryCount(int updateRetryCount) {
      method withThreadCount (line 158) | @Deprecated
      method withShutdownGracePeriodSeconds (line 171) | public Builder withShutdownGracePeriodSeconds(int shutdownGracePerio...
      method withEurekaClient (line 186) | public Builder withEurekaClient(EurekaClient eurekaClient) {
      method withTaskToDomain (line 191) | public Builder withTaskToDomain(Map<String, String> taskToDomain) {
      method withTaskThreadCount (line 196) | public Builder withTaskThreadCount(Map<String, Integer> taskThreadCo...
      method build (line 207) | public TaskRunnerConfigurer build() {
    method getThreadCount (line 215) | @Deprecated
    method getTaskThreadCount (line 223) | public Map<String, Integer> getTaskThreadCount() {
    method getShutdownGracePeriodSeconds (line 230) | public int getShutdownGracePeriodSeconds() {
    method getSleepWhenRetry (line 238) | public int getSleepWhenRetry() {
    method getUpdateRetryCount (line 246) | public int getUpdateRetryCount() {
    method getWorkerNamePrefix (line 253) | public String getWorkerNamePrefix() {
    method init (line 260) | public synchronized void init() {
    method shutdown (line 284) | public void shutdown() {

FILE: client/src/main/java/com/netflix/conductor/client/config/ConductorClientConfiguration.java
  type ConductorClientConfiguration (line 15) | public interface ConductorClientConfiguration {
    method getWorkflowInputPayloadThresholdKB (line 22) | int getWorkflowInputPayloadThresholdKB();
    method getWorkflowInputMaxPayloadThresholdKB (line 28) | int getWorkflowInputMaxPayloadThresholdKB();
    method getTaskOutputPayloadThresholdKB (line 35) | int getTaskOutputPayloadThresholdKB();
    method getTaskOutputMaxPayloadThresholdKB (line 41) | int getTaskOutputMaxPayloadThresholdKB();
    method isExternalPayloadStorageEnabled (line 49) | boolean isExternalPayloadStorageEnabled();

FILE: client/src/main/java/com/netflix/conductor/client/config/DefaultConductorClientConfiguration.java
  class DefaultConductorClientConfiguration (line 19) | public class DefaultConductorClientConfiguration implements ConductorCli...
    method getWorkflowInputPayloadThresholdKB (line 21) | @Override
    method getWorkflowInputMaxPayloadThresholdKB (line 26) | @Override
    method getTaskOutputPayloadThresholdKB (line 31) | @Override
    method getTaskOutputMaxPayloadThresholdKB (line 36) | @Override
    method isExternalPayloadStorageEnabled (line 41) | @Override

FILE: client/src/main/java/com/netflix/conductor/client/config/PropertyFactory.java
  class PropertyFactory (line 20) | public class PropertyFactory {
    method PropertyFactory (line 30) | private PropertyFactory(String prefix, String propName, String workerN...
    method getInteger (line 40) | public Integer getInteger(int defaultValue) {
    method getString (line 53) | public String getString(String defaultValue) {
    method getBoolean (line 66) | public Boolean getBoolean(Boolean defaultValue) {
    method getInteger (line 74) | public static Integer getInteger(String workerName, String property, I...
    method getBoolean (line 78) | public static Boolean getBoolean(String workerName, String property, B...
    method getString (line 82) | public static String getString(String workerName, String property, Str...
    method getPropertyFactory (line 86) | private static PropertyFactory getPropertyFactory(String workerName, S...

FILE: client/src/main/java/com/netflix/conductor/client/exception/ConductorClientException.java
  class ConductorClientException (line 21) | public class ConductorClientException extends RuntimeException {
    method getValidationErrors (line 29) | public List<ValidationError> getValidationErrors() {
    method setValidationErrors (line 33) | public void setValidationErrors(List<ValidationError> validationErrors) {
    method ConductorClientException (line 39) | public ConductorClientException() {
    method ConductorClientException (line 43) | public ConductorClientException(String message) {
    method ConductorClientException (line 48) | public ConductorClientException(String message, Throwable cause) {
    method ConductorClientException (line 53) | public ConductorClientException(int status, String message) {
    method ConductorClientException (line 59) | public ConductorClientException(int status, ErrorResponse errorRespons...
    method toString (line 69) | @Override
    method getCode (line 100) | public String getCode() {
    method setCode (line 104) | public void setCode(String code) {
    method setStatus (line 108) | public void setStatus(int status) {
    method setMessage (line 112) | public void setMessage(String message) {
    method getInstance (line 116) | public String getInstance() {
    method setInstance (line 120) | public void setInstance(String instance) {
    method isRetryable (line 124) | public boolean isRetryable() {
    method setRetryable (line 128) | public void setRetryable(boolean retryable) {
    method getMessage (line 132) | @Override
    method getStatus (line 137) | public int getStatus() {

FILE: client/src/main/java/com/netflix/conductor/client/http/ClientBase.java
  class ClientBase (line 49) | public abstract class ClientBase {
    method ClientBase (line 63) | protected ClientBase(
    method setRootURI (line 79) | public void setRootURI(String root) {
    method delete (line 83) | protected void delete(String url, Object... uriVariables) {
    method deleteWithUriVariables (line 87) | protected void deleteWithUriVariables(
    method deleteWithRequestBody (line 92) | protected BulkResponse deleteWithRequestBody(Object[] queryParams, Str...
    method delete (line 96) | private BulkResponse delete(
    method put (line 111) | protected void put(String url, Object[] queryParams, Object request, O...
    method postForEntityWithRequestOnly (line 121) | protected void postForEntityWithRequestOnly(String url, Object request) {
    method postForEntityWithUriVariablesOnly (line 126) | protected void postForEntityWithUriVariablesOnly(String url, Object......
    method postForEntity (line 131) | protected <T> T postForEntity(
    method postForEntity (line 146) | protected <T> T postForEntity(
    method postForEntity (line 161) | private <T> T postForEntity(
    method getForEntity (line 185) | protected <T> T getForEntity(
    method getForEntity (line 191) | protected <T> T getForEntity(
    method getForEntity (line 197) | private <T> T getForEntity(
    method uploadToExternalPayloadStorage (line 230) | protected String uploadToExternalPayloadStorage(
    method downloadFromExternalStorage (line 254) | @SuppressWarnings("unchecked")
    method getURIBuilder (line 272) | private UriBuilder getURIBuilder(String path, Object[] queryParams) {
    method isNewerJacksonVersion (line 294) | protected boolean isNewerJacksonVersion() {
    method handleClientHandlerException (line 299) | private void handleClientHandlerException(ClientHandlerException excep...
    method handleRuntimeException (line 308) | private void handleRuntimeException(RuntimeException exception, URI ur...
    method handleUniformInterfaceException (line 317) | private void handleUniformInterfaceException(UniformInterfaceException...
    method handleException (line 351) | private void handleException(URI uri, RuntimeException e) {
    method clientResponseToString (line 365) | private String clientResponseToString(ClientResponse response) {

FILE: client/src/main/java/com/netflix/conductor/client/http/ClientRequestHandler.java
  class ClientRequestHandler (line 33) | public class ClientRequestHandler {
    method ClientRequestHandler (line 36) | public ClientRequestHandler(
    method delete (line 59) | public BulkResponse delete(URI uri, Object body) {
    method get (line 70) | public ClientResponse get(URI uri) {
    method getWebResourceBuilder (line 76) | public WebResource.Builder getWebResourceBuilder(URI URI, Object entit...
    method isNewerJacksonVersion (line 83) | private boolean isNewerJacksonVersion() {

FILE: client/src/main/java/com/netflix/conductor/client/http/EventClient.java
  class EventClient (line 30) | public class EventClient extends ClientBase {
    method EventClient (line 35) | public EventClient() {
    method EventClient (line 42) | public EventClient(ClientConfig clientConfig) {
    method EventClient (line 51) | public EventClient(ClientConfig clientConfig, ClientHandler clientHand...
    method EventClient (line 61) | public EventClient(ClientConfig config, ClientHandler handler, ClientF...
    method EventClient (line 73) | public EventClient(
    method EventClient (line 81) | EventClient(ClientRequestHandler requestHandler) {
    method registerEventHandler (line 90) | public void registerEventHandler(EventHandler eventHandler) {
    method updateEventHandler (line 100) | public void updateEventHandler(EventHandler eventHandler) {
    method getEventHandlers (line 110) | public List<EventHandler> getEventHandlers(String event, boolean activ...
    method unregisterEventHandler (line 122) | public void unregisterEventHandler(String name) {

FILE: client/src/main/java/com/netflix/conductor/client/http/MetadataClient.java
  class MetadataClient (line 30) | public class MetadataClient extends ClientBase {
    method MetadataClient (line 36) | public MetadataClient() {
    method MetadataClient (line 43) | public MetadataClient(ClientConfig clientConfig) {
    method MetadataClient (line 52) | public MetadataClient(ClientConfig clientConfig, ClientHandler clientH...
    method MetadataClient (line 62) | public MetadataClient(ClientConfig config, ClientHandler handler, Clie...
    method MetadataClient (line 74) | public MetadataClient(
    method MetadataClient (line 82) | MetadataClient(ClientRequestHandler requestHandler) {
    method registerWorkflowDef (line 93) | public void registerWorkflowDef(WorkflowDef workflowDef) {
    method validateWorkflowDef (line 98) | public void validateWorkflowDef(WorkflowDef workflowDef) {
    method updateWorkflowDefs (line 108) | public void updateWorkflowDefs(List<WorkflowDef> workflowDefs) {
    method getWorkflowDef (line 120) | public WorkflowDef getWorkflowDef(String name, Integer version) {
    method getAllWorkflowsWithLatestVersions (line 130) | public List<WorkflowDef> getAllWorkflowsWithLatestVersions() {
    method unregisterWorkflowDef (line 142) | public void unregisterWorkflowDef(String name, Integer version) {
    method registerTaskDefs (line 155) | public void registerTaskDefs(List<TaskDef> taskDefs) {
    method updateTaskDef (line 165) | public void updateTaskDef(TaskDef taskDef) {
    method getTaskDef (line 176) | public TaskDef getTaskDef(String taskType) {
    method unregisterTaskDef (line 186) | public void unregisterTaskDef(String taskType) {

FILE: client/src/main/java/com/netflix/conductor/client/http/PayloadStorage.java
  class PayloadStorage (line 36) | class PayloadStorage implements ExternalPayloadStorage {
    method PayloadStorage (line 42) | PayloadStorage(ClientBase clientBase) {
    method getLocation (line 50) | @Override
    method upload (line 91) | @Override
    method download (line 150) | @Override

FILE: client/src/main/java/com/netflix/conductor/client/http/TaskClient.java
  class TaskClient (line 48) | public class TaskClient extends ClientBase {
    method TaskClient (line 70) | public TaskClient() {
    method TaskClient (line 77) | public TaskClient(ClientConfig config) {
    method TaskClient (line 86) | public TaskClient(ClientConfig config, ClientHandler handler) {
    method TaskClient (line 96) | public TaskClient(ClientConfig config, ClientHandler handler, ClientFi...
    method TaskClient (line 108) | public TaskClient(
    method TaskClient (line 116) | TaskClient(ClientRequestHandler requestHandler) {
    method pollTask (line 128) | public Task pollTask(String taskType, String workerId, String domain) {
    method batchPollTasksByTaskType (line 151) | public List<Task> batchPollTasksByTaskType(
    method batchPollTasksInDomain (line 177) | public List<Task> batchPollTasksInDomain(
    method populateTaskPayloads (line 205) | private void populateTaskPayloads(Task task) {
    method updateTask (line 238) | public void updateTask(TaskResult taskResult) {
    method evaluateAndUploadLargePayload (line 243) | public Optional<String> evaluateAndUploadLargePayload(
    method ack (line 287) | public Boolean ack(String taskId, String workerId) {
    method logMessageForTask (line 306) | public void logMessageForTask(String taskId, String logMessage) {
    method getTaskLogs (line 316) | public List<TaskExecLog> getTaskLogs(String taskId) {
    method getTaskDetails (line 327) | public Task getTaskDetails(String taskId) {
    method removeTaskFromQueue (line 338) | public void removeTaskFromQueue(String taskType, String taskId) {
    method getQueueSizeForTask (line 345) | public int getQueueSizeForTask(String taskType) {
    method getQueueSizeForTask (line 356) | public int getQueueSizeForTask(
    method getPollData (line 393) | public List<PollData> getPollData(String taskType) {
    method getAllPollData (line 405) | public List<PollData> getAllPollData() {
    method requeueAllPendingTasks (line 414) | public String requeueAllPendingTasks() {
    method requeuePendingTasksByTaskType (line 423) | public String requeuePendingTasksByTaskType(String taskType) {
    method search (line 435) | public SearchResult<TaskSummary> search(String query) {
    method searchV2 (line 445) | public SearchResult<Task> searchV2(String query) {
    method search (line 459) | public SearchResult<TaskSummary> search(
    method searchV2 (line 478) | public SearchResult<Task> searchV2(

FILE: client/src/main/java/com/netflix/conductor/client/http/WorkflowClient.java
  class WorkflowClient (line 43) | public class WorkflowClient extends ClientBase {
    method WorkflowClient (line 54) | public WorkflowClient() {
    method WorkflowClient (line 61) | public WorkflowClient(ClientConfig config) {
    method WorkflowClient (line 70) | public WorkflowClient(ClientConfig config, ClientHandler handler) {
    method WorkflowClient (line 80) | public WorkflowClient(ClientConfig config, ClientHandler handler, Clie...
    method WorkflowClient (line 92) | public WorkflowClient(
    method WorkflowClient (line 100) | WorkflowClient(ClientRequestHandler requestHandler) {
    method startWorkflow (line 118) | public String startWorkflow(StartWorkflowRequest startWorkflowRequest) {
    method getWorkflow (line 196) | public Workflow getWorkflow(String workflowId, boolean includeTasks) {
    method getWorkflows (line 217) | public List<Workflow> getWorkflows(
    method populateWorkflowOutput (line 241) | private void populateWorkflowOutput(Workflow workflow) {
    method deleteWorkflow (line 261) | public void deleteWorkflow(String workflowId, boolean archiveWorkflow) {
    method terminateWorkflows (line 275) | public BulkResponse terminateWorkflows(List<String> workflowIds, Strin...
    method getRunningWorkflow (line 291) | public List<String> getRunningWorkflow(String workflowName, Integer ve...
    method getWorkflowsByTimePeriod (line 309) | public List<String> getWorkflowsByTimePeriod(
    method runDecider (line 329) | public void runDecider(String workflowId) {
    method pauseWorkflow (line 339) | public void pauseWorkflow(String workflowId) {
    method resumeWorkflow (line 349) | public void resumeWorkflow(String workflowId) {
    method skipTaskFromWorkflow (line 360) | public void skipTaskFromWorkflow(String workflowId, String taskReferen...
    method rerunWorkflow (line 379) | public String rerunWorkflow(String workflowId, RerunWorkflowRequest re...
    method restart (line 399) | public void restart(String workflowId, boolean useLatestDefinitions) {
    method retryLastFailedTask (line 410) | public void retryLastFailedTask(String workflowId) {
    method resetCallbacksForInProgressTasks (line 420) | public void resetCallbacksForInProgressTasks(String workflowId) {
    method terminateWorkflow (line 431) | public void terminateWorkflow(String workflowId, String reason) {
    method search (line 443) | public SearchResult<WorkflowSummary> search(String query) {
    method searchV2 (line 454) | public SearchResult<Workflow> searchV2(String query) {
    method search (line 469) | public SearchResult<WorkflowSummary> search(
    method searchV2 (line 488) | public SearchResult<Workflow> searchV2(
    method testWorkflow (line 497) | public Workflow testWorkflow(WorkflowTestRequest testRequest) {

FILE: client/src/main/java/com/netflix/conductor/client/telemetry/MetricsContainer.java
  class MetricsContainer (line 31) | public class MetricsContainer {
    method MetricsContainer (line 65) | private MetricsContainer() {}
    method getPollTimer (line 67) | public static Timer getPollTimer(String taskType) {
    method getExecutionTimer (line 71) | public static Timer getExecutionTimer(String taskType) {
    method getTimer (line 75) | private static Timer getTimer(String name, String... additionalTags) {
    method getTags (line 86) | @SuppressWarnings({"rawtypes", "unchecked"})
    method incrementCount (line 97) | private static void incrementCount(String name, String... additionalTa...
    method getCounter (line 101) | private static Counter getCounter(String name, String... additionalTag...
    method getGauge (line 111) | private static AtomicLong getGauge(String name, String... additionalTa...
    method incrementTaskExecutionQueueFullCount (line 121) | public static void incrementTaskExecutionQueueFullCount(String taskTyp...
    method incrementUncaughtExceptionCount (line 125) | public static void incrementUncaughtExceptionCount() {
    method incrementTaskPollErrorCount (line 129) | public static void incrementTaskPollErrorCount(String taskType, Except...
    method incrementTaskPausedCount (line 134) | public static void incrementTaskPausedCount(String taskType) {
    method incrementTaskExecutionErrorCount (line 138) | public static void incrementTaskExecutionErrorCount(String taskType, T...
    method incrementTaskAckFailedCount (line 143) | public static void incrementTaskAckFailedCount(String taskType) {
    method incrementTaskAckErrorCount (line 147) | public static void incrementTaskAckErrorCount(String taskType, Excepti...
    method recordTaskResultPayloadSize (line 152) | public static void recordTaskResultPayloadSize(String taskType, long p...
    method incrementTaskUpdateErrorCount (line 156) | public static void incrementTaskUpdateErrorCount(String taskType, Thro...
    method incrementTaskLeaseExtendErrorCount (line 161) | public static void incrementTaskLeaseExtendErrorCount(String taskType,...
    method incrementTaskLeaseExtendCount (line 170) | public static void incrementTaskLeaseExtendCount(String taskType, int ...
    method incrementTaskPollCount (line 174) | public static void incrementTaskPollCount(String taskType, int taskCou...
    method recordWorkflowInputPayloadSize (line 178) | public static void recordWorkflowInputPayloadSize(
    method incrementExternalPayloadUsedCount (line 184) | public static void incrementExternalPayloadUsedCount(
    method incrementWorkflowStartErrorCount (line 196) | public static void incrementWorkflowStartErrorCount(String workflowTyp...

FILE: client/src/main/java/com/netflix/conductor/client/worker/Worker.java
  type Worker (line 28) | public interface Worker {
    method getTaskDefName (line 35) | String getTaskDefName();
    method execute (line 44) | TaskResult execute(Task task);
    method onErrorUpdate (line 52) | default void onErrorUpdate(Task task) {}
    method paused (line 59) | default boolean paused() {
    method getIdentity (line 68) | default String getIdentity() {
    method getPollingInterval (line 90) | default int getPollingInterval() {
    method leaseExtendEnabled (line 94) | default boolean leaseExtendEnabled() {
    method getBatchPollTimeoutInMS (line 98) | default int getBatchPollTimeoutInMS() {
    method create (line 102) | static Worker create(String taskType, Function<Task, TaskResult> execu...
  class LoggerHolder (line 123) | final class LoggerHolder {

FILE: client/src/test/java/com/netflix/conductor/client/automator/PollingSemaphoreTest.java
  class PollingSemaphoreTest (line 28) | public class PollingSemaphoreTest {
    method testBlockAfterAvailablePermitsExhausted (line 30) | @Test
    method testAllowsPollingWhenPermitBecomesAvailable (line 57) | @Test

FILE: client/src/test/java/com/netflix/conductor/client/automator/TaskPollExecutorTest.java
  class TaskPollExecutorTest (line 48) | public class TaskPollExecutorTest {
    method testTaskExecutionException (line 55) | @Test
    method testMultipleTasksExecution (line 92) | @SuppressWarnings("rawtypes")
    method testLargePayloadCanFailUpdateWithRetry (line 152) | @SuppressWarnings("unchecked")
    method testLargePayloadLocationUpdate (line 199) | @Test
    method testTaskPollException (line 244) | @Test
    method testTaskPoll (line 282) | @Test
    method testTaskPollDomain (line 319) | @Test
    method testPollOutOfDiscoveryForTask (line 351) | @Test
    method testPollOutOfDiscoveryAsDefaultFalseForTask (line 397) | @Test
    method testPollOutOfDiscoveryAsExplicitFalseForTask (line 439) | @Test
    method testPollOutOfDiscoveryIsIgnoredWhenDiscoveryIsUp (line 481) | @Test
    method testTaskThreadCount (line 526) | @Test
    method testTaskLeaseExtend (line 559) | @Test
    method testBatchTasksExecution (line 599) | @Test
    method testTask (line 669) | private Task testTask() {

FILE: client/src/test/java/com/netflix/conductor/client/automator/TaskRunnerConfigurerTest.java
  class TaskRunnerConfigurerTest (line 43) | public class TaskRunnerConfigurerTest {
    method setup (line 49) | @Before
    method testNoWorkersException (line 54) | @Test(expected = NullPointerException.class)
    method testInvalidThreadConfig (line 59) | @Test(expected = ConductorClientException.class)
    method testMissingTaskThreadConfig (line 72) | @Test
    method testPerTaskThreadPool (line 89) | @Test
    method testSharedThreadPool (line 106) | @Test
    method testMultipleWorkersExecution (line 141) | @Test
    method testTask (line 223) | private Task testTask(String taskDefName) {

FILE: client/src/test/java/com/netflix/conductor/client/config/TestPropertyFactory.java
  class TestPropertyFactory (line 26) | public class TestPropertyFactory {
    method testIdentity (line 28) | @Test
    method test (line 36) | @Test
    method testProperty (line 66) | @Test

FILE: client/src/test/java/com/netflix/conductor/client/sample/Main.java
  class Main (line 21) | public class Main {
    method main (line 23) | public static void main(String[] args) {

FILE: client/src/test/java/com/netflix/conductor/client/sample/SampleWorker.java
  class SampleWorker (line 20) | public class SampleWorker implements Worker {
    method SampleWorker (line 24) | public SampleWorker(String taskDefName) {
    method getTaskDefName (line 28) | @Override
    method execute (line 33) | @Override

FILE: client/src/test/java/com/netflix/conductor/client/testing/AbstractWorkflowTests.java
  class AbstractWorkflowTests (line 41) | @TestInstance(TestInstance.Lifecycle.PER_CLASS)
    method setup (line 53) | @BeforeAll
    method getWorkflowTestRequest (line 64) | protected WorkflowTestRequest getWorkflowTestRequest(WorkflowDef def) ...
    method getWorkflowDef (line 112) | protected WorkflowDef getWorkflowDef(String path) throws IOException {
    method getWorkflow (line 120) | protected Workflow getWorkflow(String path) throws IOException {
    method getTestInputs (line 128) | protected Map<String, List<WorkflowTestRequest.TaskMock>> getTestInput...

FILE: client/src/test/java/com/netflix/conductor/client/testing/LoanWorkflowInput.java
  class LoanWorkflowInput (line 17) | public class LoanWorkflowInput {
    method getUserEmail (line 23) | public String getUserEmail() {
    method setUserEmail (line 27) | public void setUserEmail(String userEmail) {
    method getLoanAmount (line 31) | public BigDecimal getLoanAmount() {
    method setLoanAmount (line 35) | public void setLoanAmount(BigDecimal loanAmount) {

FILE: client/src/test/java/com/netflix/conductor/client/testing/LoanWorkflowTest.java
  class LoanWorkflowTest (line 29) | public class LoanWorkflowTest extends AbstractWorkflowTests {
    method verifyWorkflowExecutionWithMockInputs (line 34) | public void verifyWorkflowExecutionWithMockInputs() throws IOException {

FILE: client/src/test/java/com/netflix/conductor/client/testing/RegressionTest.java
  class RegressionTest (line 39) | public class RegressionTest extends AbstractWorkflowTests {
    method verifyWorkflowOutput (line 44) | public void verifyWorkflowOutput()

FILE: client/src/test/java/com/netflix/conductor/client/testing/SubWorkflowTest.java
  class SubWorkflowTest (line 25) | public class SubWorkflowTest extends AbstractWorkflowTests {
    method verifySubWorkflowExecutions (line 29) | public void verifySubWorkflowExecutions() throws IOException {

FILE: client/src/test/java/com/netflix/conductor/client/worker/TestWorkflowTask.java
  class TestWorkflowTask (line 31) | public class TestWorkflowTask {
    method setup (line 35) | @Before
    method test (line 40) | @Test
    method testObjectMapper (line 66) | @SuppressWarnings("unchecked")

FILE: common/src/main/java/com/netflix/conductor/common/config/ObjectMapperBuilderConfiguration.java
  class ObjectMapperBuilderConfiguration (line 23) | @Configuration
    method conductorJackson2ObjectMapperBuilderCustomizer (line 27) | @Bean

FILE: common/src/main/java/com/netflix/conductor/common/config/ObjectMapperConfiguration.java
  class ObjectMapperConfiguration (line 23) | @Configuration
    method ObjectMapperConfiguration (line 28) | public ObjectMapperConfiguration(ObjectMapper objectMapper) {
    method customizeDefaultObjectMapper (line 33) | @PostConstruct

FILE: common/src/main/java/com/netflix/conductor/common/config/ObjectMapperProvider.java
  class ObjectMapperProvider (line 27) | public class ObjectMapperProvider {
    method getObjectMapper (line 41) | public ObjectMapper getObjectMapper() {

FILE: common/src/main/java/com/netflix/conductor/common/constraints/NoSemiColonConstraint.java
  class NoSemiColonValidator (line 43) | class NoSemiColonValidator implements ConstraintValidator<NoSemiColonCon...
    method initialize (line 45) | @Override
    method isValid (line 48) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/constraints/OwnerEmailMandatoryConstraint.java
  class WorkflowTaskValidValidator (line 46) | class WorkflowTaskValidValidator
    method initialize (line 49) | @Override
    method isValid (line 52) | @Override
    method setOwnerEmailMandatory (line 59) | public static void setOwnerEmailMandatory(boolean ownerEmailMandatory) {

FILE: common/src/main/java/com/netflix/conductor/common/constraints/TaskReferenceNameUniqueConstraint.java
  class TaskReferenceNameUniqueValidator (line 56) | class TaskReferenceNameUniqueValidator
    method initialize (line 59) | @Override
    method isValid (line 62) | @Override
    method verifyTaskInputParameters (line 86) | private boolean verifyTaskInputParameters(

FILE: common/src/main/java/com/netflix/conductor/common/constraints/TaskTimeoutConstraint.java
  class TaskTimeoutValidator (line 45) | class TaskTimeoutValidator implements ConstraintValidator<TaskTimeoutCon...
    method initialize (line 47) | @Override
    method isValid (line 50) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/jackson/JsonProtoModule.java
  class JsonProtoModule (line 45) | @Component(JsonProtoModule.NAME)
    class AnySerializer (line 96) | @SuppressWarnings("InnerClassMayBeStatic")
      method serialize (line 99) | @Override
    class AnyDeserializer (line 115) | @SuppressWarnings("InnerClassMayBeStatic")
      method deserialize (line 118) | @Override
    method JsonProtoModule (line 141) | public JsonProtoModule() {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/Auditable.java
  class Auditable (line 15) | public abstract class Auditable {
    method getOwnerApp (line 30) | public String getOwnerApp() {
    method setOwnerApp (line 37) | public void setOwnerApp(String ownerApp) {
    method getCreateTime (line 44) | public Long getCreateTime() {
    method setCreateTime (line 51) | public void setCreateTime(Long createTime) {
    method getUpdateTime (line 58) | public Long getUpdateTime() {
    method setUpdateTime (line 65) | public void setUpdateTime(Long updateTime) {
    method getCreatedBy (line 72) | public String getCreatedBy() {
    method setCreatedBy (line 79) | public void setCreatedBy(String createdBy) {
    method getUpdatedBy (line 86) | public String getUpdatedBy() {
    method setUpdatedBy (line 93) | public void setUpdatedBy(String updatedBy) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/BaseDef.java
  class BaseDef (line 25) | public abstract class BaseDef extends Auditable {
    method addPermission (line 29) | public void addPermission(Permission permission, String allowedAuthori...
    method addPermissionIfAbsent (line 33) | public void addPermissionIfAbsent(Permission permission, String allowe...
    method removePermission (line 37) | public void removePermission(Permission permission) {
    method getAllowedAuthority (line 41) | public String getAllowedAuthority(Permission permission) {
    method clearAccessPolicy (line 45) | public void clearAccessPolicy() {
    method getAccessPolicy (line 49) | public Map<Permission, String> getAccessPolicy() {
    method setAccessPolicy (line 53) | public void setAccessPolicy(Map<Permission, String> accessPolicy) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/acl/Permission.java
  type Permission (line 17) | @ProtoEnum

FILE: common/src/main/java/com/netflix/conductor/common/metadata/events/EventExecution.java
  class EventExecution (line 24) | @ProtoMessage
    type Status (line 27) | @ProtoEnum
    method EventExecution (line 59) | public EventExecution() {}
    method EventExecution (line 61) | public EventExecution(String id, String messageId) {
    method getId (line 69) | public String getId() {
    method setId (line 76) | public void setId(String id) {
    method getMessageId (line 83) | public String getMessageId() {
    method setMessageId (line 90) | public void setMessageId(String messageId) {
    method getName (line 97) | public String getName() {
    method setName (line 104) | public void setName(String name) {
    method getEvent (line 111) | public String getEvent() {
    method setEvent (line 118) | public void setEvent(String event) {
    method getCreated (line 125) | public long getCreated() {
    method setCreated (line 132) | public void setCreated(long created) {
    method getStatus (line 139) | public Status getStatus() {
    method setStatus (line 146) | public void setStatus(Status status) {
    method getAction (line 153) | public Action.Type getAction() {
    method setAction (line 160) | public void setAction(Action.Type action) {
    method getOutput (line 167) | public Map<String, Object> getOutput() {
    method setOutput (line 174) | public void setOutput(Map<String, Object> output) {
    method equals (line 178) | @Override
    method hashCode (line 197) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/events/EventHandler.java
  class EventHandler (line 32) | @ProtoMessage
    method EventHandler (line 57) | public EventHandler() {}
    method getName (line 62) | public String getName() {
    method setName (line 69) | public void setName(String name) {
    method getEvent (line 76) | public String getEvent() {
    method setEvent (line 83) | public void setEvent(String event) {
    method getCondition (line 90) | public String getCondition() {
    method setCondition (line 97) | public void setCondition(String condition) {
    method getActions (line 104) | public List<Action> getActions() {
    method setActions (line 111) | public void setActions(List<Action> actions) {
    method isActive (line 118) | public boolean isActive() {
    method setActive (line 125) | public void setActive(boolean active) {
    method getEvaluatorType (line 132) | public String getEvaluatorType() {
    method setEvaluatorType (line 139) | public void setEvaluatorType(String evaluatorType) {
    class Action (line 143) | @ProtoMessage
      type Type (line 146) | @ProtoEnum
      method getAction (line 171) | public Type getAction() {
      method setAction (line 178) | public void setAction(Type action) {
      method getStart_workflow (line 185) | public StartWorkflow getStart_workflow() {
      method setStart_workflow (line 192) | public void setStart_workflow(StartWorkflow start_workflow) {
      method getComplete_task (line 199) | public TaskDetails getComplete_task() {
      method setComplete_task (line 206) | public void setComplete_task(TaskDetails complete_task) {
      method getFail_task (line 213) | public TaskDetails getFail_task() {
      method setFail_task (line 220) | public void setFail_task(TaskDetails fail_task) {
      method setExpandInlineJSON (line 228) | public void setExpandInlineJSON(boolean expandInlineJSON) {
      method isExpandInlineJSON (line 235) | public boolean isExpandInlineJSON() {
    class TaskDetails (line 240) | @ProtoMessage
      method getWorkflowId (line 262) | public String getWorkflowId() {
      method setWorkflowId (line 269) | public void setWorkflowId(String workflowId) {
      method getTaskRefName (line 276) | public String getTaskRefName() {
      method setTaskRefName (line 283) | public void setTaskRefName(String taskRefName) {
      method getOutput (line 290) | public Map<String, Object> getOutput() {
      method setOutput (line 297) | public void setOutput(Map<String, Object> output) {
      method getOutputMessage (line 301) | public Any getOutputMessage() {
      method setOutputMessage (line 305) | public void setOutputMessage(Any outputMessage) {
      method getTaskId (line 312) | public String getTaskId() {
      method setTaskId (line 319) | public void setTaskId(String taskId) {
    class StartWorkflow (line 324) | @ProtoMessage
      method getName (line 349) | public String getName() {
      method setName (line 356) | public void setName(String name) {
      method getVersion (line 363) | public Integer getVersion() {
      method setVersion (line 370) | public void setVersion(Integer version) {
      method getCorrelationId (line 377) | public String getCorrelationId() {
      method setCorrelationId (line 384) | public void setCorrelationId(String correlationId) {
      method getInput (line 391) | public Map<String, Object> getInput() {
      method setInput (line 398) | public void setInput(Map<String, Object> input) {
      method getInputMessage (line 402) | public Any getInputMessage() {
      method setInputMessage (line 406) | public void setInputMessage(Any inputMessage) {
      method getTaskToDomain (line 410) | public Map<String, String> getTaskToDomain() {
      method setTaskToDomain (line 414) | public void setTaskToDomain(Map<String, String> taskToDomain) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/tasks/PollData.java
  class PollData (line 20) | @ProtoMessage
    method PollData (line 35) | public PollData() {
    method PollData (line 39) | public PollData(String queueName, String domain, String workerId, long...
    method getQueueName (line 47) | public String getQueueName() {
    method setQueueName (line 51) | public void setQueueName(String queueName) {
    method getDomain (line 55) | public String getDomain() {
    method setDomain (line 59) | public void setDomain(String domain) {
    method getWorkerId (line 63) | public String getWorkerId() {
    method setWorkerId (line 67) | public void setWorkerId(String workerId) {
    method getLastPollTime (line 71) | public long getLastPollTime() {
    method setLastPollTime (line 75) | public void setLastPollTime(long lastPollTime) {
    method equals (line 79) | @Override
    method hashCode (line 94) | @Override
    method toString (line 99) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/tasks/Task.java
  class Task (line 30) | @ProtoMessage
    type Status (line 33) | @ProtoEnum
      method Status (line 54) | Status(boolean terminal, boolean successful, boolean retriable) {
      method isTerminal (line 60) | public boolean isTerminal() {
      method isSuccessful (line 64) | public boolean isSuccessful() {
      method isRetriable (line 68) | public boolean isRetriable() {
    method Task (line 205) | public Task() {}
    method getTaskType (line 211) | public String getTaskType() {
    method setTaskType (line 215) | public void setTaskType(String taskType) {
    method getStatus (line 222) | public Status getStatus() {
    method setStatus (line 229) | public void setStatus(Status status) {
    method getInputData (line 233) | public Map<String, Object> getInputData() {
    method setInputData (line 237) | public void setInputData(Map<String, Object> inputData) {
    method getReferenceTaskName (line 247) | public String getReferenceTaskName() {
    method setReferenceTaskName (line 254) | public void setReferenceTaskName(String referenceTaskName) {
    method getCorrelationId (line 261) | public String getCorrelationId() {
    method setCorrelationId (line 268) | public void setCorrelationId(String correlationId) {
    method getRetryCount (line 275) | public int getRetryCount() {
    method setRetryCount (line 282) | public void setRetryCount(int retryCount) {
    method getScheduledTime (line 289) | public long getScheduledTime() {
    method setScheduledTime (line 296) | public void setScheduledTime(long scheduledTime) {
    method getStartTime (line 303) | public long getStartTime() {
    method setStartTime (line 310) | public void setStartTime(long startTime) {
    method getEndTime (line 317) | public long getEndTime() {
    method setEndTime (line 324) | public void setEndTime(long endTime) {
    method getStartDelayInSeconds (line 331) | public int getStartDelayInSeconds() {
    method setStartDelayInSeconds (line 338) | public void setStartDelayInSeconds(int startDelayInSeconds) {
    method getRetriedTaskId (line 345) | public String getRetriedTaskId() {
    method setRetriedTaskId (line 352) | public void setRetriedTaskId(String retriedTaskId) {
    method getSeq (line 359) | public int getSeq() {
    method setSeq (line 366) | public void setSeq(int seq) {
    method getUpdateTime (line 373) | public long getUpdateTime() {
    method setUpdateTime (line 380) | public void setUpdateTime(long updateTime) {
    method getQueueWaitTime (line 387) | public long getQueueWaitTime() {
    method isRetried (line 404) | public boolean isRetried() {
    method setRetried (line 411) | public void setRetried(boolean retried) {
    method isExecuted (line 419) | public boolean isExecuted() {
    method setExecuted (line 426) | public void setExecuted(boolean executed) {
    method getPollCount (line 433) | public int getPollCount() {
    method setPollCount (line 437) | public void setPollCount(int pollCount) {
    method incrementPollCount (line 441) | public void incrementPollCount() {
    method isCallbackFromWorker (line 445) | public boolean isCallbackFromWorker() {
    method setCallbackFromWorker (line 449) | public void setCallbackFromWorker(boolean callbackFromWorker) {
    method getTaskDefName (line 456) | public String getTaskDefName() {
    method setTaskDefName (line 466) | public void setTaskDefName(String taskDefName) {
    method getResponseTimeoutSeconds (line 473) | public long getResponseTimeoutSeconds() {
    method setResponseTimeoutSeconds (line 481) | public void setResponseTimeoutSeconds(long responseTimeoutSeconds) {
    method getWorkflowInstanceId (line 488) | public String getWorkflowInstanceId() {
    method setWorkflowInstanceId (line 495) | public void setWorkflowInstanceId(String workflowInstanceId) {
    method getWorkflowType (line 499) | public String getWorkflowType() {
    method setWorkflowType (line 507) | public com.netflix.conductor.common.metadata.tasks.Task setWorkflowTyp...
    method getTaskId (line 515) | public String getTaskId() {
    method setTaskId (line 522) | public void setTaskId(String taskId) {
    method getReasonForIncompletion (line 529) | public String getReasonForIncompletion() {
    method setReasonForIncompletion (line 536) | public void setReasonForIncompletion(String reasonForIncompletion) {
    method getCallbackAfterSeconds (line 543) | public long getCallbackAfterSeconds() {
    method setCallbackAfterSeconds (line 550) | public void setCallbackAfterSeconds(long callbackAfterSeconds) {
    method getWorkerId (line 557) | public String getWorkerId() {
    method setWorkerId (line 564) | public void setWorkerId(String workerId) {
    method getOutputData (line 571) | public Map<String, Object> getOutputData() {
    method setOutputData (line 578) | public void setOutputData(Map<String, Object> outputData) {
    method getWorkflowTask (line 588) | public WorkflowTask getWorkflowTask() {
    method setWorkflowTask (line 595) | public void setWorkflowTask(WorkflowTask workflowTask) {
    method getDomain (line 602) | public String getDomain() {
    method setDomain (line 609) | public void setDomain(String domain) {
    method getInputMessage (line 613) | public Any getInputMessage() {
    method setInputMessage (line 617) | public void setInputMessage(Any inputMessage) {
    method getOutputMessage (line 621) | public Any getOutputMessage() {
    method setOutputMessage (line 625) | public void setOutputMessage(Any outputMessage) {
    method getTaskDefinition (line 632) | public Optional<TaskDef> getTaskDefinition() {
    method getRateLimitPerFrequency (line 636) | public int getRateLimitPerFrequency() {
    method setRateLimitPerFrequency (line 640) | public void setRateLimitPerFrequency(int rateLimitPerFrequency) {
    method getRateLimitFrequencyInSeconds (line 644) | public int getRateLimitFrequencyInSeconds() {
    method setRateLimitFrequencyInSeconds (line 648) | public void setRateLimitFrequencyInSeconds(int rateLimitFrequencyInSec...
    method getExternalInputPayloadStoragePath (line 655) | public String getExternalInputPayloadStoragePath() {
    method setExternalInputPayloadStoragePath (line 663) | public void setExternalInputPayloadStoragePath(String externalInputPay...
    method getExternalOutputPayloadStoragePath (line 670) | public String getExternalOutputPayloadStoragePath() {
    method setExternalOutputPayloadStoragePath (line 678) | public void setExternalOutputPayloadStoragePath(String externalOutputP...
    method setIsolationGroupId (line 682) | public void setIsolationGroupId(String isolationGroupId) {
    method getIsolationGroupId (line 686) | public String getIsolationGroupId() {
    method getExecutionNameSpace (line 690) | public String getExecutionNameSpace() {
    method setExecutionNameSpace (line 694) | public void setExecutionNameSpace(String executionNameSpace) {
    method getIteration (line 701) | public int getIteration() {
    method setIteration (line 708) | public void setIteration(int iteration) {
    method isLoopOverTask (line 712) | public boolean isLoopOverTask() {
    method getWorkflowPriority (line 717) | public int getWorkflowPriority() {
    method setWorkflowPriority (line 724) | public void setWorkflowPriority(int workflowPriority) {
    method isSubworkflowChanged (line 728) | public boolean isSubworkflowChanged() {
    method setSubworkflowChanged (line 732) | public void setSubworkflowChanged(boolean subworkflowChanged) {
    method getSubWorkflowId (line 736) | public String getSubWorkflowId() {
    method setSubWorkflowId (line 749) | public void setSubWorkflowId(String subWorkflowId) {
    method copy (line 757) | public Task copy() {
    method deepCopy (line 802) | public Task deepCopy() {
    method toString (line 814) | @Override
    method equals (line 914) | @Override
    method hashCode (line 967) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskDef.java
  class TaskDef (line 34) | @ProtoMessage
    type TimeoutPolicy (line 39) | @ProtoEnum
    type RetryLogic (line 46) | @ProtoEnum
    method TaskDef (line 128) | public TaskDef() {}
    method TaskDef (line 130) | public TaskDef(String name) {
    method TaskDef (line 134) | public TaskDef(String name, String description) {
    method TaskDef (line 139) | public TaskDef(String name, String description, int retryCount, long t...
    method TaskDef (line 146) | public TaskDef(
    method getName (line 164) | public String getName() {
    method setName (line 171) | public void setName(String name) {
    method getDescription (line 178) | public String getDescription() {
    method setDescription (line 185) | public void setDescription(String description) {
    method getRetryCount (line 192) | public int getRetryCount() {
    method setRetryCount (line 199) | public void setRetryCount(int retryCount) {
    method getTimeoutSeconds (line 206) | public long getTimeoutSeconds() {
    method setTimeoutSeconds (line 213) | public void setTimeoutSeconds(long timeoutSeconds) {
    method getInputKeys (line 220) | public List<String> getInputKeys() {
    method setInputKeys (line 227) | public void setInputKeys(List<String> inputKeys) {
    method getOutputKeys (line 234) | public List<String> getOutputKeys() {
    method setOutputKeys (line 241) | public void setOutputKeys(List<String> outputKeys) {
    method getTimeoutPolicy (line 248) | public TimeoutPolicy getTimeoutPolicy() {
    method setTimeoutPolicy (line 255) | public void setTimeoutPolicy(TimeoutPolicy timeoutPolicy) {
    method getRetryLogic (line 262) | public RetryLogic getRetryLogic() {
    method setRetryLogic (line 269) | public void setRetryLogic(RetryLogic retryLogic) {
    method getRetryDelaySeconds (line 276) | public int getRetryDelaySeconds() {
    method getResponseTimeoutSeconds (line 283) | public long getResponseTimeoutSeconds() {
    method setResponseTimeoutSeconds (line 291) | public void setResponseTimeoutSeconds(long responseTimeoutSeconds) {
    method setRetryDelaySeconds (line 298) | public void setRetryDelaySeconds(int retryDelaySeconds) {
    method getInputTemplate (line 305) | public Map<String, Object> getInputTemplate() {
    method getRateLimitPerFrequency (line 313) | public Integer getRateLimitPerFrequency() {
    method setRateLimitPerFrequency (line 321) | public void setRateLimitPerFrequency(Integer rateLimitPerFrequency) {
    method getRateLimitFrequencyInSeconds (line 329) | public Integer getRateLimitFrequencyInSeconds() {
    method setRateLimitFrequencyInSeconds (line 338) | public void setRateLimitFrequencyInSeconds(Integer rateLimitFrequencyI...
    method setConcurrentExecLimit (line 346) | public void setConcurrentExecLimit(Integer concurrentExecLimit) {
    method getConcurrentExecLimit (line 353) | public Integer getConcurrentExecLimit() {
    method concurrencyLimit (line 360) | public int concurrencyLimit() {
    method setInputTemplate (line 367) | public void setInputTemplate(Map<String, Object> inputTemplate) {
    method getIsolationGroupId (line 371) | public String getIsolationGroupId() {
    method setIsolationGroupId (line 375) | public void setIsolationGroupId(String isolationGroupId) {
    method getExecutionNameSpace (line 379) | public String getExecutionNameSpace() {
    method setExecutionNameSpace (line 383) | public void setExecutionNameSpace(String executionNameSpace) {
    method getOwnerEmail (line 390) | public String getOwnerEmail() {
    method setOwnerEmail (line 397) | public void setOwnerEmail(String ownerEmail) {
    method setPollTimeoutSeconds (line 404) | public void setPollTimeoutSeconds(Integer pollTimeoutSeconds) {
    method getPollTimeoutSeconds (line 411) | public Integer getPollTimeoutSeconds() {
    method setBackoffScaleFactor (line 418) | public void setBackoffScaleFactor(Integer backoffScaleFactor) {
    method getBackoffScaleFactor (line 425) | public Integer getBackoffScaleFactor() {
    method toString (line 429) | @Override
    method equals (line 434) | @Override
    method hashCode (line 462) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskExecLog.java
  class TaskExecLog (line 21) | @ProtoMessage
    method TaskExecLog (line 33) | public TaskExecLog() {}
    method TaskExecLog (line 35) | public TaskExecLog(String log) {
    method getLog (line 43) | public String getLog() {
    method setLog (line 50) | public void setLog(String log) {
    method getTaskId (line 57) | public String getTaskId() {
    method setTaskId (line 64) | public void setTaskId(String taskId) {
    method getCreatedTime (line 71) | public long getCreatedTime() {
    method setCreatedTime (line 78) | public void setCreatedTime(long createdTime) {
    method equals (line 82) | @Override
    method hashCode (line 96) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskResult.java
  class TaskResult (line 32) | @ProtoMessage
    type Status (line 35) | @ProtoEnum
    method TaskResult (line 78) | public TaskResult(Task task) {
    method TaskResult (line 103) | public TaskResult() {}
    method getWorkflowInstanceId (line 108) | public String getWorkflowInstanceId() {
    method setWorkflowInstanceId (line 112) | public void setWorkflowInstanceId(String workflowInstanceId) {
    method getTaskId (line 116) | public String getTaskId() {
    method setTaskId (line 120) | public void setTaskId(String taskId) {
    method getReasonForIncompletion (line 124) | public String getReasonForIncompletion() {
    method setReasonForIncompletion (line 128) | public void setReasonForIncompletion(String reasonForIncompletion) {
    method getCallbackAfterSeconds (line 132) | public long getCallbackAfterSeconds() {
    method setCallbackAfterSeconds (line 145) | public void setCallbackAfterSeconds(long callbackAfterSeconds) {
    method getWorkerId (line 149) | public String getWorkerId() {
    method setWorkerId (line 158) | public void setWorkerId(String workerId) {
    method getStatus (line 165) | public Status getStatus() {
    method setStatus (line 178) | public void setStatus(Status status) {
    method getOutputData (line 182) | public Map<String, Object> getOutputData() {
    method setOutputData (line 189) | public void setOutputData(Map<String, Object> outputData) {
    method addOutputData (line 200) | public TaskResult addOutputData(String key, Object value) {
    method getOutputMessage (line 205) | public Any getOutputMessage() {
    method setOutputMessage (line 209) | public void setOutputMessage(Any outputMessage) {
    method getLogs (line 216) | public List<TaskExecLog> getLogs() {
    method setLogs (line 223) | public void setLogs(List<TaskExecLog> logs) {
    method log (line 231) | public TaskResult log(String log) {
    method getExternalOutputPayloadStoragePath (line 239) | public String getExternalOutputPayloadStoragePath() {
    method setExternalOutputPayloadStoragePath (line 247) | public void setExternalOutputPayloadStoragePath(String externalOutputP...
    method getSubWorkflowId (line 251) | public String getSubWorkflowId() {
    method setSubWorkflowId (line 255) | public void setSubWorkflowId(String subWorkflowId) {
    method isExtendLease (line 259) | public boolean isExtendLease() {
    method setExtendLease (line 263) | public void setExtendLease(boolean extendLease) {
    method toString (line 267) | @Override
    method complete (line 304) | public static TaskResult complete() {
    method failed (line 308) | public static TaskResult failed() {
    method failed (line 312) | public static TaskResult failed(String failureReason) {
    method inProgress (line 318) | public static TaskResult inProgress() {
    method newTaskResult (line 322) | public static TaskResult newTaskResult(Status status) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskType.java
  type TaskType (line 20) | @ProtoEnum
    method of (line 96) | public static TaskType of(String taskType) {
    method isBuiltIn (line 104) | public static boolean isBuiltIn(String taskType) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/DynamicForkJoinTask.java
  class DynamicForkJoinTask (line 22) | @ProtoMessage
    method DynamicForkJoinTask (line 40) | public DynamicForkJoinTask() {}
    method DynamicForkJoinTask (line 42) | public DynamicForkJoinTask(
    method DynamicForkJoinTask (line 51) | public DynamicForkJoinTask(
    method getTaskName (line 65) | public String getTaskName() {
    method setTaskName (line 69) | public void setTaskName(String taskName) {
    method getWorkflowName (line 73) | public String getWorkflowName() {
    method setWorkflowName (line 77) | public void setWorkflowName(String workflowName) {
    method getReferenceName (line 81) | public String getReferenceName() {
    method setReferenceName (line 85) | public void setReferenceName(String referenceName) {
    method getInput (line 89) | public Map<String, Object> getInput() {
    method setInput (line 93) | public void setInput(Map<String, Object> input) {
    method getType (line 97) | public String getType() {
    method setType (line 101) | public void setType(String type) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/DynamicForkJoinTaskList.java
  class DynamicForkJoinTaskList (line 22) | @ProtoMessage
    method add (line 28) | public void add(
    method add (line 33) | public void add(DynamicForkJoinTask dtask) {
    method getDynamicTasks (line 37) | public List<DynamicForkJoinTask> getDynamicTasks() {
    method setDynamicTasks (line 41) | public void setDynamicTasks(List<DynamicForkJoinTask> dynamicTasks) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/RerunWorkflowRequest.java
  class RerunWorkflowRequest (line 20) | @ProtoMessage
    method getReRunFromWorkflowId (line 38) | public String getReRunFromWorkflowId() {
    method setReRunFromWorkflowId (line 42) | public void setReRunFromWorkflowId(String reRunFromWorkflowId) {
    method getWorkflowInput (line 46) | public Map<String, Object> getWorkflowInput() {
    method setWorkflowInput (line 50) | public void setWorkflowInput(Map<String, Object> workflowInput) {
    method getReRunFromTaskId (line 54) | public String getReRunFromTaskId() {
    method setReRunFromTaskId (line 58) | public void setReRunFromTaskId(String reRunFromTaskId) {
    method getTaskInput (line 62) | public Map<String, Object> getTaskInput() {
    method setTaskInput (line 66) | public void setTaskInput(Map<String, Object> taskInput) {
    method getCorrelationId (line 70) | public String getCorrelationId() {
    method setCorrelationId (line 74) | public void setCorrelationId(String correlationId) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/SkipTaskRequest.java
  class SkipTaskRequest (line 23) | @ProtoMessage(toProto = false)
    method getTaskInput (line 40) | public Map<String, Object> getTaskInput() {
    method setTaskInput (line 44) | public void setTaskInput(Map<String, Object> taskInput) {
    method getTaskOutput (line 48) | public Map<String, Object> getTaskOutput() {
    method setTaskOutput (line 52) | public void setTaskOutput(Map<String, Object> taskOutput) {
    method getTaskInputMessage (line 56) | public Any getTaskInputMessage() {
    method setTaskInputMessage (line 60) | public void setTaskInputMessage(Any taskInputMessage) {
    method getTaskOutputMessage (line 64) | public Any getTaskOutputMessage() {
    method setTaskOutputMessage (line 68) | public void setTaskOutputMessage(Any taskOutputMessage) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/StartWorkflowRequest.java
  class StartWorkflowRequest (line 26) | @ProtoMessage
    method getName (line 57) | public String getName() {
    method setName (line 61) | public void setName(String name) {
    method withName (line 65) | public StartWorkflowRequest withName(String name) {
    method getVersion (line 70) | public Integer getVersion() {
    method setVersion (line 74) | public void setVersion(Integer version) {
    method withVersion (line 78) | public StartWorkflowRequest withVersion(Integer version) {
    method getCorrelationId (line 83) | public String getCorrelationId() {
    method setCorrelationId (line 87) | public void setCorrelationId(String correlationId) {
    method withCorrelationId (line 91) | public StartWorkflowRequest withCorrelationId(String correlationId) {
    method getExternalInputPayloadStoragePath (line 96) | public String getExternalInputPayloadStoragePath() {
    method setExternalInputPayloadStoragePath (line 100) | public void setExternalInputPayloadStoragePath(String externalInputPay...
    method withExternalInputPayloadStoragePath (line 104) | public StartWorkflowRequest withExternalInputPayloadStoragePath(
    method getPriority (line 110) | public Integer getPriority() {
    method setPriority (line 114) | public void setPriority(Integer priority) {
    method withPriority (line 118) | public StartWorkflowRequest withPriority(Integer priority) {
    method getInput (line 123) | public Map<String, Object> getInput() {
    method setInput (line 127) | public void setInput(Map<String, Object> input) {
    method withInput (line 131) | public StartWorkflowRequest withInput(Map<String, Object> input) {
    method getTaskToDomain (line 136) | public Map<String, String> getTaskToDomain() {
    method setTaskToDomain (line 140) | public void setTaskToDomain(Map<String, String> taskToDomain) {
    method withTaskToDomain (line 144) | public StartWorkflowRequest withTaskToDomain(Map<String, String> taskT...
    method getWorkflowDef (line 149) | public WorkflowDef getWorkflowDef() {
    method setWorkflowDef (line 153) | public void setWorkflowDef(WorkflowDef workflowDef) {
    method withWorkflowDef (line 157) | public StartWorkflowRequest withWorkflowDef(WorkflowDef workflowDef) {

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/SubWorkflowParams.java
  class SubWorkflowParams (line 27) | @ProtoMessage
    method getName (line 49) | public String getName() {
    method setName (line 60) | public void setName(String name) {
    method getVersion (line 67) | public Integer getVersion() {
    method setVersion (line 78) | public void setVersion(Integer version) {
    method getTaskToDomain (line 85) | public Map<String, String> getTaskToDomain() {
    method setTaskToDomain (line 92) | public void setTaskToDomain(Map<String, String> taskToDomain) {
    method getWorkflowDefinition (line 99) | public Object getWorkflowDefinition() {
    method getWorkflowDef (line 106) | @JsonGetter("workflowDefinition")
    method setWorkflowDefinition (line 114) | public void setWorkflowDefinition(Object workflowDef) {
    method setWorkflowDef (line 125) | @JsonSetter("workflowDefinition")
    method equals (line 130) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/WorkflowDef.java
  class WorkflowDef (line 38) | @ProtoMessage
    type TimeoutPolicy (line 42) | @ProtoEnum
    method getName (line 107) | public String getName() {
    method setName (line 114) | public void setName(String name) {
    method getDescription (line 121) | public String getDescription() {
    method setDescription (line 128) | public void setDescription(String description) {
    method getTasks (line 135) | public List<WorkflowTask> getTasks() {
    method setTasks (line 142) | public void setTasks(List<@Valid WorkflowTask> tasks) {
    method getInputParameters (line 149) | public List<String> getInputParameters() {
    method setInputParameters (line 156) | public void setInputParameters(List<String> inputParameters) {
    method getOutputParameters (line 163) | public Map<String, Object> getOutputParameters() {
    method setOutputParameters (line 170) | public void setOutputParameters(Map<String, Object> outputParameters) {
    method getVersion (line 177) | public int getVersion() {
    method getFailureWorkflow (line 184) | public String getFailureWorkflow() {
    method setFailureWorkflow (line 191) | public void setFailureWorkflow(String failureWorkflow) {
    method setVersion (line 198) | public void setVersion(int version) {
    method isRestartable (line 207) | public boolean isRestartable() {
    method setRestartable (line 217) | public void setRestartable(boolean restartable) {
    method getSchemaVersion (line 224) | public int getSchemaVersion() {
    method setSchemaVersion (line 231) | public void setSchemaVersion(int schemaVersion) {
    method isWorkflowStatusListenerEnabled (line 238) | public boolean isWorkflowStatusListenerEnabled() {
    method setWorkflowStatusListenerEnabled (line 248) | public void setWorkflowStatusListenerEnabled(boolean workflowStatusLis...
    method getOwnerEmail (line 255) | public String getOwnerEmail() {
    method setOwnerEmail (line 262) | public void setOwnerEmail(String ownerEmail) {
    method getTimeoutPolicy (line 269) | public TimeoutPolicy getTimeoutPolicy() {
    method setTimeoutPolicy (line 276) | public void setTimeoutPolicy(TimeoutPolicy timeoutPolicy) {
    method getTimeoutSeconds (line 283) | public long getTimeoutSeconds() {
    method setTimeoutSeconds (line 290) | public void setTimeoutSeconds(long timeoutSeconds) {
    method getVariables (line 297) | public Map<String, Object> getVariables() {
    method setVariables (line 304) | public void setVariables(Map<String, Object> variables) {
    method getInputTemplate (line 308) | public Map<String, Object> getInputTemplate() {
    method setInputTemplate (line 312) | public void setInputTemplate(Map<String, Object> inputTemplate) {
    method key (line 316) | public String key() {
    method getKey (line 320) | public static String getKey(String name, int version) {
    method containsType (line 324) | public boolean containsType(String taskType) {
    method getNextTask (line 328) | public WorkflowTask getNextTask(String taskReferenceName) {
    method getTaskByRefName (line 361) | public WorkflowTask getTaskByRefName(String taskReferenceName) {
    method collectTasks (line 370) | public List<WorkflowTask> collectTasks() {
    method equals (line 378) | @Override
    method hashCode (line 399) | @Override
    method toString (line 414) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/WorkflowDefSummary.java
  class WorkflowDefSummary (line 23) | @ProtoMessage
    method getVersion (line 41) | public int getVersion() {
    method getName (line 48) | public String getName() {
    method getCreateTime (line 55) | public Long getCreateTime() {
    method equals (line 59) | @Override
    method setName (line 71) | public void setName(String name) {
    method setVersion (line 75) | public void setVersion(int version) {
    method setCreateTime (line 79) | public void setCreateTime(Long createTime) {
    method hashCode (line 83) | @Override
    method toString (line 88) | @Override
    method compareTo (line 93) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/metadata/workflow/WorkflowTask.java
  class WorkflowTask (line 39) | @ProtoMessage
    class WorkflowTaskList (line 73) | @ProtoMessage(wrapper = true)
      method getTasks (line 76) | public List<WorkflowTask> getTasks() {
      method setTasks (line 80) | public void setTasks(List<WorkflowTask> tasks) {
    method getName (line 159) | public String getName() {
    method setName (line 166) | public void setName(String name) {
    method getTaskReferenceName (line 173) | public String getTaskReferenceName() {
    method setTaskReferenceName (line 180) | public void setTaskReferenceName(String taskReferenceName) {
    method getDescription (line 187) | public String getDescription() {
    method setDescription (line 194) | public void setDescription(String description) {
    method getInputParameters (line 201) | public Map<String, Object> getInputParameters() {
    method setInputParameters (line 208) | public void setInputParameters(Map<String, Object> inputParameters) {
    method getType (line 215) | public String getType() {
    method setWorkflowTaskType (line 219) | public void setWorkflowTaskType(TaskType type) {
    method setType (line 226) | public void setType(@NotEmpty(message = "WorkTask type cannot be null ...
    method getDecisionCases (line 233) | public Map<String, List<WorkflowTask>> getDecisionCases() {
    method setDecisionCases (line 240) | public void setDecisionCases(Map<String, List<WorkflowTask>> decisionC...
    method getDefaultCase (line 247) | public List<WorkflowTask> getDefaultCase() {
    method setDefaultCase (line 254) | public void setDefaultCase(List<WorkflowTask> defaultCase) {
    method getForkTasks (line 261) | public List<List<WorkflowTask>> getForkTasks() {
    method setForkTasks (line 268) | public void setForkTasks(List<List<WorkflowTask>> forkTasks) {
    method getStartDelay (line 275) | public int getStartDelay() {
    method setStartDelay (line 282) | public void setStartDelay(int startDelay) {
    method getRetryCount (line 289) | public Integer getRetryCount() {
    method setRetryCount (line 296) | public void setRetryCount(final Integer retryCount) {
    method getDynamicTaskNameParam (line 303) | public String getDynamicTaskNameParam() {
    method setDynamicTaskNameParam (line 310) | public void setDynamicTaskNameParam(String dynamicTaskNameParam) {
    method getCaseValueParam (line 319) | @Deprecated
    method getDynamicForkJoinTasksParam (line 324) | @Deprecated
    method setDynamicForkJoinTasksParam (line 329) | @Deprecated
    method getDynamicForkTasksParam (line 334) | public String getDynamicForkTasksParam() {
    method setDynamicForkTasksParam (line 338) | public void setDynamicForkTasksParam(String dynamicForkTasksParam) {
    method getDynamicForkTasksInputParamName (line 342) | public String getDynamicForkTasksInputParamName() {
    method setDynamicForkTasksInputParamName (line 346) | public void setDynamicForkTasksInputParamName(String dynamicForkTasksI...
    method setCaseValueParam (line 355) | @Deprecated
    method getCaseExpression (line 367) | @Deprecated
    method setCaseExpression (line 378) | @Deprecated
    method getScriptExpression (line 383) | public String getScriptExpression() {
    method setScriptExpression (line 387) | public void setScriptExpression(String expression) {
    method getSubWorkflowParam (line 394) | public SubWorkflowParams getSubWorkflowParam() {
    method setSubWorkflowParam (line 401) | public void setSubWorkflowParam(SubWorkflowParams subWorkflow) {
    method getJoinOn (line 408) | public List<String> getJoinOn() {
    method setJoinOn (line 415) | public void setJoinOn(List<String> joinOn) {
    method getLoopCondition (line 422) | public String getLoopCondition() {
    method setLoopCondition (line 429) | public void setLoopCondition(String loopCondition) {
    method getLoopOver (line 436) | public List<WorkflowTask> getLoopOver() {
    method setLoopOver (line 443) | public void setLoopOver(List<WorkflowTask> loopOver) {
    method getSink (line 450) | public String getSink() {
    method setSink (line 457) | public void setSink(String sink) {
    method isAsyncComplete (line 464) | public Boolean isAsyncComplete() {
    method setAsyncComplete (line 468) | public void setAsyncComplete(Boolean asyncComplete) {
    method isOptional (line 476) | public boolean isOptional() {
    method getTaskDefinition (line 483) | public TaskDef getTaskDefinition() {
    method setTaskDefinition (line 490) | public void setTaskDefinition(TaskDef taskDefinition) {
    method setOptional (line 497) | public void setOptional(boolean optional) {
    method getRateLimited (line 501) | public Boolean getRateLimited() {
    method setRateLimited (line 505) | public void setRateLimited(Boolean rateLimited) {
    method isRateLimited (line 509) | public Boolean isRateLimited() {
    method getDefaultExclusiveJoinTask (line 513) | public List<String> getDefaultExclusiveJoinTask() {
    method setDefaultExclusiveJoinTask (line 517) | public void setDefaultExclusiveJoinTask(List<String> defaultExclusiveJ...
    method getEvaluatorType (line 524) | public String getEvaluatorType() {
    method setEvaluatorType (line 531) | public void setEvaluatorType(String evaluatorType) {
    method getExpression (line 540) | public String getExpression() {
    method setExpression (line 547) | public void setExpression(String expression) {
    method children (line 551) | private Collection<List<WorkflowTask>> children() {
    method collectTasks (line 572) | public List<WorkflowTask> collectTasks() {
    method next (line 583) | public WorkflowTask next(String taskReferenceName, WorkflowTask parent) {
    method has (line 658) | public boolean has(String taskReferenceName) {
    method get (line 682) | public WorkflowTask get(String taskReferenceName) {
    method toString (line 698) | @Override
    method equals (line 703) | @Override
    method hashCode (line 741) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/model/BulkResponse.java
  class BulkResponse (line 25) | public class BulkResponse {
    method BulkResponse (line 33) | public BulkResponse() {
    method getBulkSuccessfulResults (line 38) | public List<String> getBulkSuccessfulResults() {
    method getBulkErrorResults (line 42) | public Map<String, String> getBulkErrorResults() {
    method appendSuccessResponse (line 46) | public void appendSuccessResponse(String id) {
    method appendFailedResponse (line 50) | public void appendFailedResponse(String id, String errorMessage) {
    method equals (line 54) | @Override
    method hashCode (line 67) | @Override
    method toString (line 72) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/run/ExternalStorageLocation.java
  class ExternalStorageLocation (line 25) | public class ExternalStorageLocation {
    method getUri (line 30) | public String getUri() {
    method setUri (line 34) | public void setUri(String uri) {
    method getPath (line 38) | public String getPath() {
    method setPath (line 42) | public void setPath(String path) {
    method toString (line 46) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/run/SearchResult.java
  class SearchResult (line 17) | public class SearchResult<T> {
    method SearchResult (line 23) | public SearchResult() {}
    method SearchResult (line 25) | public SearchResult(long totalHits, List<T> results) {
    method getTotalHits (line 34) | public long getTotalHits() {
    method getResults (line 41) | public List<T> getResults() {
    method setTotalHits (line 48) | public void setTotalHits(long totalHits) {
    method setResults (line 55) | public void setResults(List<T> results) {

FILE: common/src/main/java/com/netflix/conductor/common/run/TaskSummary.java
  class TaskSummary (line 28) | @ProtoMessage
    method TaskSummary (line 94) | public TaskSummary() {}
    method TaskSummary (line 96) | public TaskSummary(Task task) {
    method getWorkflowId (line 139) | public String getWorkflowId() {
    method setWorkflowId (line 146) | public void setWorkflowId(String workflowId) {
    method getWorkflowType (line 153) | public String getWorkflowType() {
    method setWorkflowType (line 160) | public void setWorkflowType(String workflowType) {
    method getCorrelationId (line 167) | public String getCorrelationId() {
    method setCorrelationId (line 174) | public void setCorrelationId(String correlationId) {
    method getScheduledTime (line 181) | public String getScheduledTime() {
    method setScheduledTime (line 188) | public void setScheduledTime(String scheduledTime) {
    method getStartTime (line 195) | public String getStartTime() {
    method setStartTime (line 202) | public void setStartTime(String startTime) {
    method getUpdateTime (line 209) | public String getUpdateTime() {
    method setUpdateTime (line 216) | public void setUpdateTime(String updateTime) {
    method getEndTime (line 223) | public String getEndTime() {
    method setEndTime (line 230) | public void setEndTime(String endTime) {
    method getStatus (line 237) | public Status getStatus() {
    method setStatus (line 244) | public void setStatus(Status status) {
    method getReasonForIncompletion (line 251) | public String getReasonForIncompletion() {
    method setReasonForIncompletion (line 258) | public void setReasonForIncompletion(String reasonForIncompletion) {
    method getExecutionTime (line 265) | public long getExecutionTime() {
    method setExecutionTime (line 272) | public void setExecutionTime(long executionTime) {
    method getQueueWaitTime (line 279) | public long getQueueWaitTime() {
    method setQueueWaitTime (line 286) | public void setQueueWaitTime(long queueWaitTime) {
    method getTaskDefName (line 293) | public String getTaskDefName() {
    method setTaskDefName (line 300) | public void setTaskDefName(String taskDefName) {
    method getTaskType (line 307) | public String getTaskType() {
    method setTaskType (line 314) | public void setTaskType(String taskType) {
    method getInput (line 321) | public String getInput() {
    method setInput (line 328) | public void setInput(String input) {
    method getOutput (line 335) | public String getOutput() {
    method setOutput (line 342) | public void setOutput(String output) {
    method getTaskId (line 349) | public String getTaskId() {
    method setTaskId (line 356) | public void setTaskId(String taskId) {
    method getExternalInputPayloadStoragePath (line 363) | public String getExternalInputPayloadStoragePath() {
    method setExternalInputPayloadStoragePath (line 371) | public void setExternalInputPayloadStoragePath(String externalInputPay...
    method getExternalOutputPayloadStoragePath (line 378) | public String getExternalOutputPayloadStoragePath() {
    method setExternalOutputPayloadStoragePath (line 386) | public void setExternalOutputPayloadStoragePath(String externalOutputP...
    method getWorkflowPriority (line 393) | public int getWorkflowPriority() {
    method setWorkflowPriority (line 400) | public void setWorkflowPriority(int workflowPriority) {
    method getDomain (line 407) | public String getDomain() {
    method setDomain (line 414) | public void setDomain(String domain) {
    method equals (line 418) | @Override
    method hashCode (line 445) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/run/Workflow.java
  class Workflow (line 30) | @ProtoMessage
    type WorkflowStatus (line 33) | @ProtoEnum
      method WorkflowStatus (line 46) | WorkflowStatus(boolean terminal, boolean successful) {
      method isTerminal (line 51) | public boolean isTerminal() {
      method isSuccessful (line 55) | public boolean isSuccessful() {
    method Workflow (line 129) | public Workflow() {}
    method getStatus (line 134) | public WorkflowStatus getStatus() {
    method setStatus (line 141) | public void setStatus(WorkflowStatus status) {
    method getStartTime (line 148) | public long getStartTime() {
    method setStartTime (line 155) | public void setStartTime(long startTime) {
    method getEndTime (line 162) | public long getEndTime() {
    method setEndTime (line 169) | public void setEndTime(long endTime) {
    method getWorkflowId (line 176) | public String getWorkflowId() {
    method setWorkflowId (line 183) | public void setWorkflowId(String workflowId) {
    method getTasks (line 190) | public List<Task> getTasks() {
    method setTasks (line 197) | public void setTasks(List<Task> tasks) {
    method getInput (line 204) | public Map<String, Object> getInput() {
    method setInput (line 211) | public void setInput(Map<String, Object> input) {
    method getTaskToDomain (line 221) | public Map<String, String> getTaskToDomain() {
    method setTaskToDomain (line 228) | public void setTaskToDomain(Map<String, String> taskToDomain) {
    method getOutput (line 235) | public Map<String, Object> getOutput() {
    method setOutput (line 242) | public void setOutput(Map<String, Object> output) {
    method getCorrelationId (line 252) | public String getCorrelationId() {
    method setCorrelationId (line 259) | public void setCorrelationId(String correlationId) {
    method getReRunFromWorkflowId (line 263) | public String getReRunFromWorkflowId() {
    method setReRunFromWorkflowId (line 267) | public void setReRunFromWorkflowId(String reRunFromWorkflowId) {
    method getReasonForIncompletion (line 271) | public String getReasonForIncompletion() {
    method setReasonForIncompletion (line 275) | public void setReasonForIncompletion(String reasonForIncompletion) {
    method getParentWorkflowId (line 282) | public String getParentWorkflowId() {
    method setParentWorkflowId (line 289) | public void setParentWorkflowId(String parentWorkflowId) {
    method getParentWorkflowTaskId (line 296) | public String getParentWorkflowTaskId() {
    method setParentWorkflowTaskId (line 303) | public void setParentWorkflowTaskId(String parentWorkflowTaskId) {
    method getEvent (line 310) | public String getEvent() {
    method setEvent (line 317) | public void setEvent(String event) {
    method getFailedReferenceTaskNames (line 321) | public Set<String> getFailedReferenceTaskNames() {
    method setFailedReferenceTaskNames (line 325) | public void setFailedReferenceTaskNames(Set<String> failedReferenceTas...
    method getFailedTaskNames (line 329) | public Set<String> getFailedTaskNames() {
    method setFailedTaskNames (line 333) | public void setFailedTaskNames(Set<String> failedTaskNames) {
    method getWorkflowDefinition (line 337) | public WorkflowDef getWorkflowDefinition() {
    method setWorkflowDefinition (line 341) | public void setWorkflowDefinition(WorkflowDef workflowDefinition) {
    method getExternalInputPayloadStoragePath (line 348) | public String getExternalInputPayloadStoragePath() {
    method setExternalInputPayloadStoragePath (line 356) | public void setExternalInputPayloadStoragePath(String externalInputPay...
    method getExternalOutputPayloadStoragePath (line 363) | public String getExternalOutputPayloadStoragePath() {
    method getPriority (line 370) | public int getPriority() {
    method setPriority (line 377) | public void setPriority(int priority) {
    method getWorkflowName (line 389) | public String getWorkflowName() {
    method getWorkflowVersion (line 401) | public int getWorkflowVersion() {
    method setExternalOutputPayloadStoragePath (line 412) | public void setExternalOutputPayloadStoragePath(String externalOutputP...
    method getVariables (line 419) | public Map<String, Object> getVariables() {
    method setVariables (line 426) | public void setVariables(Map<String, Object> variables) {
    method getLastRetriedTime (line 435) | public long getLastRetriedTime() {
    method setLastRetriedTime (line 442) | public void setLastRetriedTime(long lastRetriedTime) {
    method hasParent (line 446) | public boolean hasParent() {
    method getTaskByRefName (line 450) | public Task getTaskByRefName(String refName) {
    method copy (line 478) | public Workflow copy() {
    method toString (line 504) | @Override
    method toShortString (line 515) | public String toShortString() {
    method equals (line 521) | @Override
    method hashCode (line 560) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/run/WorkflowSummary.java
  class WorkflowSummary (line 31) | @ProtoMessage
    method WorkflowSummary (line 91) | public WorkflowSummary() {}
    method WorkflowSummary (line 93) | public WorkflowSummary(Workflow workflow) {
    method getWorkflowType (line 138) | public String getWorkflowType() {
    method getVersion (line 145) | public int getVersion() {
    method getWorkflowId (line 152) | public String getWorkflowId() {
    method getCorrelationId (line 159) | public String getCorrelationId() {
    method getStartTime (line 166) | public String getStartTime() {
    method getEndTime (line 173) | public String getEndTime() {
    method getStatus (line 180) | public WorkflowStatus getStatus() {
    method getInput (line 187) | public String getInput() {
    method getInputSize (line 191) | public long getInputSize() {
    method getOutput (line 198) | public String getOutput() {
    method getOutputSize (line 202) | public long getOutputSize() {
    method getReasonForIncompletion (line 209) | public String getReasonForIncompletion() {
    method getExecutionTime (line 216) | public long getExecutionTime() {
    method getUpdateTime (line 223) | public String getUpdateTime() {
    method getEvent (line 230) | public String getEvent() {
    method setEvent (line 237) | public void setEvent(String event) {
    method getFailedReferenceTaskNames (line 241) | public String getFailedReferenceTaskNames() {
    method setFailedReferenceTaskNames (line 245) | public void setFailedReferenceTaskNames(String failedReferenceTaskName...
    method getFailedTaskNames (line 249) | public Set<String> getFailedTaskNames() {
    method setFailedTaskNames (line 253) | public void setFailedTaskNames(Set<String> failedTaskNames) {
    method setWorkflowType (line 257) | public void setWorkflowType(String workflowType) {
    method setVersion (line 261) | public void setVersion(int version) {
    method setWorkflowId (line 265) | public void setWorkflowId(String workflowId) {
    method setCorrelationId (line 269) | public void setCorrelationId(String correlationId) {
    method setStartTime (line 273) | public void setStartTime(String startTime) {
    method setUpdateTime (line 277) | public void setUpdateTime(String updateTime) {
    method setEndTime (line 281) | public void setEndTime(String endTime) {
    method setStatus (line 285) | public void setStatus(WorkflowStatus status) {
    method setInput (line 289) | public void setInput(String input) {
    method setOutput (line 293) | public void setOutput(String output) {
    method setReasonForIncompletion (line 297) | public void setReasonForIncompletion(String reasonForIncompletion) {
    method setExecutionTime (line 301) | public void setExecutionTime(long executionTime) {
    method getExternalInputPayloadStoragePath (line 308) | public String getExternalInputPayloadStoragePath() {
    method setExternalInputPayloadStoragePath (line 316) | public void setExternalInputPayloadStoragePath(String externalInputPay...
    method getExternalOutputPayloadStoragePath (line 323) | public String getExternalOutputPayloadStoragePath() {
    method setExternalOutputPayloadStoragePath (line 331) | public void setExternalOutputPayloadStoragePath(String externalOutputP...
    method getPriority (line 338) | public int getPriority() {
    method setPriority (line 345) | public void setPriority(int priority) {
    method equals (line 349) | @Override
    method hashCode (line 372) | @Override

FILE: common/src/main/java/com/netflix/conductor/common/run/WorkflowTestRequest.java
  class WorkflowTestRequest (line 22) | public class WorkflowTestRequest extends StartWorkflowRequest {
    class TaskMock (line 31) | public static class TaskMock {
      method TaskMock (line 38) | public TaskMock() {}
      method TaskMock (line 40) | public TaskMock(TaskResult.Status status, Map<String, Object> output) {
      method getStatus (line 45) | public TaskResult.Status getStatus() {
      method setStatus (line 49) | public void setStatus(TaskResult.Status status) {
      method getOutput (line 53) | public Map<String, Object> getOutput() {
      method setOutput (line 57) | public void setOutput(Map<String, Object> output) {
      method getExecutionTime (line 61) | public long getExecutionTime() {
      method setExecutionTime (line 65) | public void setExecutionTime(long executionTime) {
      method getQueueWaitTime (line 69) | public long getQueueWaitTime() {
      method setQueueWaitTime (line 73) | public void setQueueWaitTime(long queueWaitTime) {
    method getTaskRefToMockOutput (line 78) | public Map<String, List<TaskMock>> getTaskRefToMockOutput() {
    method setTaskRefToMockOutput (line 82) | public void setTaskRefToMockOutput(Map<String, List<TaskMock>> taskRef...
    method getSubWorkflowTestRequest (line 86) | public Map<String, WorkflowTestRequest> getSubWorkflowTestRequest() {
    method setSubWorkflowTestRequest (line 90) | public void setSubWorkflowTestRequest(Map<String, WorkflowTestRequest>...

FILE: common/src/main/java/com/netflix/conductor/common/utils/ConstraintParamUtil.java
  class ConstraintParamUtil (line 26) | @SuppressWarnings("unchecked")
    method validateInputParam (line 37) | public static List<String> validateInputParam(
    method extractListInputParam (line 61) | private static List<String> extractListInputParam(
    method extractParamPathComponentsFromString (line 79) | private static List<String> extractParamPathComponentsFromString(

FILE: common/src/main/java/com/netflix/conductor/common/utils/EnvUtils.java
  class EnvUtils (line 17) | public class EnvUtils {
    type SystemParameters (line 19) | public enum SystemParameters {
    method isEnvironmentVariable (line 25) | public static boolean isEnvironmentVariable(String test) {
    method getSystemParametersValue (line 36) | public static String getSystemParametersValue(String sysParam, String ...

FILE: common/src/main/java/com/netflix/conductor/common/utils/ExternalPayloadStorage.java
  type ExternalPayloadStorage (line 23) | public interface ExternalPayloadStorage {
    type Operation (line 25) | enum Operation {
    type PayloadType (line 30) | enum PayloadType {
    method getLocation (line 47) | ExternalStorageLocation getLocation(Operation operation, PayloadType p...
    method getLocation (line 61) | default ExternalStorageLocation getLocation(
    method upload (line 73) | void upload(String path, InputStream payload, long payloadSize);
    method download (line 81) | InputStream download(String path);

FILE: common/src/main/java/com/netflix/conductor/common/utils/SummaryUtil.java
  class SummaryUtil (line 29) | @Component
    method init (line 40) | @PostConstruct
    method serializeInputOutput (line 52) | public static String serializeInputOutput(Map<String, Object> object) {

FILE: common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java
  class TaskUtils (line 15) | public class TaskUtils {
    method appendIteration (line 19) | public static String appendIteration(String name, int iteration) {
    method getLoopOverTaskRefNameSuffix (line 23) | public static String getLoopOverTaskRefNameSuffix(int iteration) {
    method removeIterationFromTaskRefName (line 27) | public static String removeIterationFromTaskRefName(String referenceTa...

FILE: common/src/main/java/com/netflix/conductor/common/validation/ErrorResponse.java
  class ErrorResponse (line 17) | public class ErrorResponse {
    method getStatus (line 26) | public int getStatus() {
    method setStatus (line 30) | public void setStatus(int status) {
    method getValidationErrors (line 34) | public List<ValidationError> getValidationErrors() {
    method setValidationErrors (line 38) | public void setValidationErrors(List<ValidationError> validationErrors) {
    method isRetryable (line 42) | public boolean isRetryable() {
    method setRetryable (line 46) | public void setRetryable(boolean retryable) {
    method getCode (line 50) | public String getCode() {
    method setCode (line 54) | public void setCode(String code) {
    method getMessage (line 58) | public String getMessage() {
    method setMessage (line 62) | public void setMessage(String message) {
    method getInstance (line 66) | public String getInstance() {
    method setInstance (line 70) | public void setInstance(String instance) {

FILE: common/src/main/java/com/netflix/conductor/common/validation/ValidationError.java
  class ValidationError (line 18) | public class ValidationError {
    method ValidationError (line 24) | public ValidationError() {}
    method ValidationError (line 26) | public ValidationError(String path, String message, String invalidValu...
    method getPath (line 32) | public String getPath() {
    method getMessage (line 36) | public String getMessage() {
    method getInvalidValue (line 40) | public String getInvalidValue() {
    method setPath (line 44) | public void setPath(String path) {
    method setMessage (line 48) | public void setMessage(String message) {
    method setInvalidValue (line 52) | public void setInvalidValue(String invalidValue) {
    method toString (line 56) | @Override

FILE: common/src/test/java/com/netflix/conductor/common/config/TestObjectMapperConfiguration.java
  class TestObjectMapperConfiguration (line 21) | @Configuration
    method testObjectMapper (line 24) | @Bean

FILE: common/src/test/java/com/netflix/conductor/common/events/EventHandlerTest.java
  class EventHandlerTest (line 31) | public class EventHandlerTest {
    method testWorkflowTaskName (line 33) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/run/TaskSummaryTest.java
  class TaskSummaryTest (line 28) | @ContextConfiguration(classes = {TestObjectMapperConfiguration.class})
    method testJsonSerializing (line 34) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/tasks/TaskDefTest.java
  class TaskDefTest (line 32) | public class TaskDefTest {
    method setup (line 36) | @Before
    method test (line 42) | @Test
    method testTaskDef (line 56) | @Test
    method testTaskDefNameAndOwnerNotSet (line 77) | @Test
    method testTaskDefInvalidEmail (line 95) | @Test
    method testTaskDefValidEmail (line 113) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/tasks/TaskResultTest.java
  class TaskResultTest (line 25) | public class TaskResultTest {
    method setUp (line 30) | @Before
    method testCanceledTask (line 42) | @Test
    method testCompletedWithErrorsTask (line 50) | @Test
    method testScheduledTask (line 58) | @Test
    method testCompltetedTask (line 66) | @Test
    method validateTaskResult (line 74) | private void validateTaskResult() {

FILE: common/src/test/java/com/netflix/conductor/common/tasks/TaskTest.java
  class TaskTest (line 35) | public class TaskTest {
    method test (line 37) | @Test
    method testTaskDefinitionIfAvailable (line 61) | @Test
    method testTaskQueueWaitTime (line 79) | @Test
    method testDeepCopyTask (line 96) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/utils/ConstraintParamUtilTest.java
  class ConstraintParamUtilTest (line 29) | public class ConstraintParamUtilTest {
    method before (line 31) | @Before
    method constructWorkflowDef (line 38) | private WorkflowDef constructWorkflowDef() {
    method testExtractParamPathComponents (line 45) | @Test
    method testExtractParamPathComponentsWithMissingEnvVariable (line 69) | @Test
    method testExtractParamPathComponentsWithValidEnvVariable (line 93) | @Test
    method testExtractParamPathComponentsWithValidMap (line 117) | @Test
    method testExtractParamPathComponentsWithInvalidEnv (line 148) | @Test
    method testExtractParamPathComponentsWithInputParamEmpty (line 177) | @Test
    method testExtractParamPathComponentsWithListInputParamWithEmptyString (line 200) | @Test
    method testExtractParamPathComponentsWithInputFieldWithSpace (line 223) | @Test
    method testExtractParamPathComponentsWithPredefineEnums (line 246) | @Test
    method testExtractParamPathComponentsWithEscapedChar (line 271) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/utils/SummaryUtilTest.java
  class SummaryUtilTest (line 36) | @ContextConfiguration(
    class SummaryUtilTestConfiguration (line 44) | @Configuration
      method summaryUtil (line 47) | @Bean
    method init (line 57) | @Before
    method testSerializeInputOutput_defaultToString (line 71) | @Test
    method testSerializeInputOutput_jsonSerializationEnabled (line 88) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/workflow/SubWorkflowParamsTest.java
  class SubWorkflowParamsTest (line 44) | @ContextConfiguration(classes = {TestObjectMapperConfiguration.class})
    method testWorkflowTaskName (line 50) | @Test
    method testWorkflowSetTaskToDomain (line 66) | @Test
    method testSetWorkflowDefinition (line 75) | @Test(expected = IllegalArgumentException.class)
    method testGetWorkflowDef (line 82) | @Test
    method testWorkflowDefJson (line 98) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/workflow/WorkflowDefValidatorTest.java
  class WorkflowDefValidatorTest (line 36) | public class WorkflowDefValidatorTest {
    method before (line 38) | @Before
    method testWorkflowDefConstraints (line 45) | @Test
    method testWorkflowDefConstraintsWithMultipleEnvVariable (line 64) | @Test
    method testWorkflowDefConstraintsSingleEnvVariable (line 106) | @Test
    method testWorkflowDefConstraintsDualEnvVariable (line 134) | @Test
    method testWorkflowDefConstraintsWithMapAsInputParam (line 162) | @Test
    method testWorkflowTaskInputParamInvalid (line 197) | @Test
    method testWorkflowTaskEmptyStringInputParamValue (line 228) | @Test
    method testWorkflowTasklistInputParamWithEmptyString (line 253) | @Test
    method testWorkflowSchemaVersion1 (line 279) | @Test
    method testWorkflowOwnerInvalidEmail (line 309) | @Test
    method testWorkflowOwnerValidEmail (line 338) | @Test

FILE: common/src/test/java/com/netflix/conductor/common/workflow/WorkflowTaskTest.java
  class WorkflowTaskTest (line 34) | public class WorkflowTaskTest {
    method test (line 36) | @Test
    method testOptional (line 51) | @Test
    method testWorkflowTaskName (line 63) | @Test

FILE: core/src/main/java/com/netflix/conductor/core/LifecycleAwareComponent.java
  class LifecycleAwareComponent (line 19) | public abstract class LifecycleAwareComponent implements SmartLifecycle {
    method start (line 25) | @Override
    method stop (line 32) | @Override
    method isRunning (line 39) | @Override
    method doStart (line 44) | public void doStart() {}
    method doStop (line 46) | public void doStop() {}

FILE: core/src/main/java/com/netflix/conductor/core/WorkflowContext.java
  class WorkflowContext (line 16) | public class WorkflowContext {
    method WorkflowContext (line 25) | public WorkflowContext(String clientApp) {
    method WorkflowContext (line 30) | public WorkflowContext(String clientApp, String userName) {
    method get (line 35) | public static WorkflowContext get() {
    method set (line 39) | public static void set(WorkflowContext ctx) {
    method unset (line 43) | public static void unset() {
    method getClientApp (line 50) | public String getClientApp() {
    method getUserName (line 57) | public String getUserName() {

FILE: core/src/main/java/com/netflix/conductor/core/config/ConductorCoreConfiguration.java
  class ConductorCoreConfiguration (line 51) | @Configuration(proxyBeanMethods = false)
    method provideLock (line 57) | @ConditionalOnProperty(
    method dummyExternalPayloadStorage (line 66) | @ConditionalOnProperty(
    method workflowStatusListener (line 76) | @ConditionalOnProperty(
    method taskStatusListener (line 85) | @ConditionalOnProperty(
    method executorService (line 94) | @Bean
    method getTaskMappers (line 105) | @Bean
    method asyncSystemTasks (line 111) | @Bean
    method getEventQueueProviders (line 119) | @Bean
    method onTransientErrorRetryTemplate (line 127) | @Bean

FILE: core/src/main/java/com/netflix/conductor/core/config/ConductorProperties.java
  class ConductorProperties (line 27) | @ConfigurationProperties("conductor.app")
    method getStack (line 216) | public String getStack() {
    method setStack (line 220) | public void setStack(String stack) {
    method getAppId (line 224) | public String getAppId() {
    method setAppId (line 228) | public void setAppId(String appId) {
    method getExecutorServiceMaxThreadCount (line 232) | public int getExecutorServiceMaxThreadCount() {
    method setExecutorServiceMaxThreadCount (line 236) | public void setExecutorServiceMaxThreadCount(int executorServiceMaxThr...
    method getWorkflowOffsetTimeout (line 240) | public Duration getWorkflowOffsetTimeout() {
    method setWorkflowOffsetTimeout (line 244) | public void setWorkflowOffsetTimeout(Duration workflowOffsetTimeout) {
    method getSweeperThreadCount (line 248) | public int getSweeperThreadCount() {
    method setSweeperThreadCount (line 252) | public void setSweeperThreadCount(int sweeperThreadCount) {
    method getSweeperWorkflowPollTimeout (line 256) | public Duration getSweeperWorkflowPollTimeout() {
    method setSweeperWorkflowPollTimeout (line 260) | public void setSweeperWorkflowPollTimeout(Duration sweeperWorkflowPoll...
    method getEventProcessorThreadCount (line 264) | public int getEventProcessorThreadCount() {
    method setEventProcessorThreadCount (line 268) | public void setEventProcessorThreadCount(int eventProcessorThreadCount) {
    method isEventMessageIndexingEnabled (line 272) | public boolean isEventMessageIndexingEnabled() {
    method setEventMessageIndexingEnabled (line 276) | public void setEventMessageIndexingEnabled(boolean eventMessageIndexin...
    method isEventExecutionIndexingEnabled (line 280) | public boolean isEventExecutionIndexingEnabled() {
    method setEventExecutionIndexingEnabled (line 284) | public void setEventExecutionIndexingEnabled(boolean eventExecutionInd...
    method isWorkflowExecutionLockEnabled (line 288) | public boolean isWorkflowExecutionLockEnabled() {
    method setWorkflowExecutionLockEnabled (line 292) | public void setWorkflowExecutionLockEnabled(boolean workflowExecutionL...
    method getLockLeaseTime (line 296) | public Duration getLockLeaseTime() {
    method setLockLeaseTime (line 300) | public void setLockLeaseTime(Duration lockLeaseTime) {
    method getLockTimeToTry (line 304) | public Duration getLockTimeToTry() {
    method setLockTimeToTry (line 308) | public void setLockTimeToTry(Duration lockTimeToTry) {
    method getActiveWorkerLastPollTimeout (line 312) | public Duration getActiveWorkerLastPollTimeout() {
    method setActiveWorkerLastPollTimeout (line 316) | public void setActiveWorkerLastPollTimeout(Duration activeWorkerLastPo...
    method getTaskExecutionPostponeDuration (line 320) | public Duration getTaskExecutionPostponeDuration() {
    method setTaskExecutionPostponeDuration (line 324) | public void setTaskExecutionPostponeDuration(Duration taskExecutionPos...
    method isTaskExecLogIndexingEnabled (line 328) | public boolean isTaskExecLogIndexingEnabled() {
    method setTaskExecLogIndexingEnabled (line 332) | public void setTaskExecLogIndexingEnabled(boolean taskExecLogIndexingE...
    method isAsyncIndexingEnabled (line 336) | public boolean isAsyncIndexingEnabled() {
    method setAsyncIndexingEnabled (line 340) | public void setAsyncIndexingEnabled(boolean asyncIndexingEnabled) {
    method getSystemTaskWorkerThreadCount (line 344) | public int getSystemTaskWorkerThreadCount() {
    method setSystemTaskWorkerThreadCount (line 348) | public void setSystemTaskWorkerThreadCount(int systemTaskWorkerThreadC...
    method getSystemTaskWorkerCallbackDuration (line 352) | public Duration getSystemTaskWorkerCallbackDuration() {
    method setSystemTaskWorkerCallbackDuration (line 356) | public void setSystemTaskWorkerCallbackDuration(Duration systemTaskWor...
    method getSystemTaskWorkerPollInterval (line 360) | public Duration getSystemTaskWorkerPollInterval() {
    method setSystemTaskWorkerPollInterval (line 364) | public void setSystemTaskWorkerPollInterval(Duration systemTaskWorkerP...
    method getSystemTaskWorkerExecutionNamespace (line 368) | public String getSystemTaskWorkerExecutionNamespace() {
    method setSystemTaskWorkerExecutionNamespace (line 372) | public void setSystemTaskWorkerExecutionNamespace(String systemTaskWor...
    method getIsolatedSystemTaskWorkerThreadCount (line 376) | public int getIsolatedSystemTaskWorkerThreadCount() {
    method setIsolatedSystemTaskWorkerThreadCount (line 380) | public void setIsolatedSystemTaskWorkerThreadCount(int isolatedSystemT...
    method getAsyncUpdateShortRunningWorkflowDuration (line 384) | public Duration getAsyncUpdateShortRunningWorkflowDuration() {
    method setAsyncUpdateShortRunningWorkflowDuration (line 388) | public void setAsyncUpdateShortRunningWorkflowDuration(
    method getAsyncUpdateDelay (line 393) | public Duration getAsyncUpdateDelay() {
    method setAsyncUpdateDelay (line 397) | public void setAsyncUpdateDelay(Duration asyncUpdateDelay) {
    method isOwnerEmailMandatory (line 401) | public boolean isOwnerEmailMandatory() {
    method setOwnerEmailMandatory (line 405) | public void setOwnerEmailMandatory(boolean ownerEmailMandatory) {
    method getEventQueueSchedulerPollThreadCount (line 409) | public int getEventQueueSchedulerPollThreadCount() {
    method setEventQueueSchedulerPollThreadCount (line 413) | public void setEventQueueSchedulerPollThreadCount(int eventQueueSchedu...
    method getEventQueuePollInterval (line 417) | public Duration getEventQueuePollInterval() {
    method setEventQueuePollInterval (line 421) | public void setEventQueuePollInterval(Duration eventQueuePollInterval) {
    method getEventQueuePollCount (line 425) | public int getEventQueuePollCount() {
    method setEventQueuePollCount (line 429) | public void setEventQueuePollCount(int eventQueuePollCount) {
    method getEventQueueLongPollTimeout (line 433) | public Duration getEventQueueLongPollTimeout() {
    method setEventQueueLongPollTimeout (line 437) | public void setEventQueueLongPollTimeout(Duration eventQueueLongPollTi...
    method getWorkflowInputPayloadSizeThreshold (line 441) | public DataSize getWorkflowInputPayloadSizeThreshold() {
    method setWorkflowInputPayloadSizeThreshold (line 445) | public void setWorkflowInputPayloadSizeThreshold(DataSize workflowInpu...
    method getMaxWorkflowInputPayloadSizeThreshold (line 449) | public DataSize getMaxWorkflowInputPayloadSizeThreshold() {
    method setMaxWorkflowInputPayloadSizeThreshold (line 453) | public void setMaxWorkflowInputPayloadSizeThreshold(
    method getWorkflowOutputPayloadSizeThreshold (line 458) | public DataSize getWorkflowOutputPayloadSizeThreshold() {
    method setWorkflowOutputPayloadSizeThreshold (line 462) | public void setWorkflowOutputPayloadSizeThreshold(DataSize workflowOut...
    method getMaxWorkflowOutputPayloadSizeThreshold (line 466) | public DataSize getMaxWorkflowOutputPayloadSizeThreshold() {
    method setMaxWorkflowOutputPayloadSizeThreshold (line 470) | public void setMaxWorkflowOutputPayloadSizeThreshold(
    method getTaskInputPayloadSizeThreshold (line 475) | public DataSize getTaskInputPayloadSizeThreshold() {
    method setTaskInputPayloadSizeThreshold (line 479) | public void setTaskInputPayloadSizeThreshold(DataSize taskInputPayload...
    method getMaxTaskInputPayloadSizeThreshold (line 483) | public DataSize getMaxTaskInputPayloadSizeThreshold() {
    method setMaxTaskInputPayloadSizeThreshold (line 487) | public void setMaxTaskInputPayloadSizeThreshold(DataSize maxTaskInputP...
    method getTaskOutputPayloadSizeThreshold (line 491) | public DataSize getTaskOutputPayloadSizeThreshold() {
    method setTaskOutputPayloadSizeThreshold (line 495) | public void setTaskOutputPayloadSizeThreshold(DataSize taskOutputPaylo...
    method getMaxTaskOutputPayloadSizeThreshold (line 499) | public DataSize getMaxTaskOutputPayloadSizeThreshold() {
    method setMaxTaskOutputPayloadSizeThreshold (line 503) | public void setMaxTaskOutputPayloadSizeThreshold(DataSize maxTaskOutpu...
    method getMaxWorkflowVariablesPayloadSizeThreshold (line 507) | public DataSize getMaxWorkflowVariablesPayloadSizeThreshold() {
    method setMaxWorkflowVariablesPayloadSizeThreshold (line 511) | public void setMaxWorkflowVariablesPayloadSizeThreshold(
    method getTaskExecLogSizeLimit (line 516) | public int getTaskExecLogSizeLimit() {
    method setTaskExecLogSizeLimit (line 520) | public void setTaskExecLogSizeLimit(int taskExecLogSizeLimit) {
    method getAll (line 527) | public Map<String, Object> getAll() {

FILE: core/src/main/java/com/netflix/conductor/core/config/SchedulerConfiguration.java
  class SchedulerConfiguration (line 31) | @Configuration(proxyBeanMethods = false)
    method scheduler (line 43) | @Bean
    method sweeperExecutor (line 56) | @Bean(SWEEPER_EXECUTOR_NAME)
    method configureTasks (line 67) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/dal/ExecutionDAOFacade.java
  class ExecutionDAOFacade (line 62) | @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    method ExecutionDAOFacade (line 83) | public ExecutionDAOFacade(
    method shutdownExecutorService (line 115) | @PreDestroy
    method getWorkflowModel (line 137) | public WorkflowModel getWorkflowModel(String workflowId, boolean inclu...
    method getWorkflow (line 153) | public Workflow getWorkflow(String workflowId, boolean includeTasks) {
    method getWorkflowModelFromDataStore (line 157) | private WorkflowModel getWorkflowModelFromDataStore(String workflowId,...
    method getWorkflowsByCorrelationId (line 192) | public List<Workflow> getWorkflowsByCorrelationId(
    method getWorkflowsByName (line 225) | public List<Workflow> getWorkflowsByName(String workflowName, Long sta...
    method getPendingWorkflowsByName (line 231) | public List<Workflow> getPendingWorkflowsByName(String workflowName, i...
    method getRunningWorkflowIds (line 237) | public List<String> getRunningWorkflowIds(String workflowName, int ver...
    method getPendingWorkflowCount (line 241) | public long getPendingWorkflowCount(String workflowName) {
    method createWorkflow (line 251) | public String createWorkflow(WorkflowModel workflowModel) {
    method externalizeTaskData (line 268) | private void externalizeTaskData(TaskModel taskModel) {
    method externalizeWorkflowData (line 275) | private void externalizeWorkflowData(WorkflowModel workflowModel) {
    method updateWorkflow (line 288) | public String updateWorkflow(WorkflowModel workflowModel) {
    method removeFromPendingWorkflow (line 328) | public void removeFromPendingWorkflow(String workflowType, String work...
    method removeWorkflow (line 339) | public void removeWorkflow(String workflowId, boolean archiveWorkflow) {
    method removeWorkflowIndex (line 381) | private void removeWorkflowIndex(WorkflowModel workflow, boolean archi...
    method removeWorkflowWithExpiry (line 403) | public void removeWorkflowWithExpiry(
    method resetWorkflow (line 423) | public void resetWorkflow(String workflowId) {
    method createTasks (line 437) | public List<TaskModel> createTasks(List<TaskModel> tasks) {
    method getTasksForWorkflow (line 442) | public List<Task> getTasksForWorkflow(String workflowId) {
    method getTaskModel (line 448) | public TaskModel getTaskModel(String taskId) {
    method getTask (line 456) | public Task getTask(String taskId) {
    method getTaskFromDatastore (line 464) | private TaskModel getTaskFromDatastore(String taskId) {
    method getTasksByName (line 468) | public List<Task> getTasksByName(String taskName, String startKey, int...
    method getPendingTasksForTaskType (line 474) | public List<Task> getPendingTasksForTaskType(String taskType) {
    method getInProgressTaskCount (line 480) | public long getInProgressTaskCount(String taskDefName) {
    method updateTask (line 494) | public void updateTask(TaskModel taskModel) {
    method updateTasks (line 529) | public void updateTasks(List<TaskModel> tasks) {
    method removeTask (line 533) | public void removeTask(String taskId) {
    method removeTaskIndex (line 537) | private void removeTaskIndex(WorkflowModel workflow, TaskModel task, b...
    method extendLease (line 560) | public void extendLease(TaskModel taskModel) {
    method getTaskPollData (line 565) | public List<PollData> getTaskPollData(String taskName) {
    method getAllPollData (line 569) | public List<PollData> getAllPollData() {
    method getTaskPollDataByDomain (line 573) | public PollData getTaskPollDataByDomain(String taskName, String domain) {
    method updateTaskLastPoll (line 583) | public void updateTaskLastPoll(String taskName, String domain, String ...
    method addEventExecution (line 604) | public boolean addEventExecution(EventExecution eventExecution) {
    method updateEventExecution (line 614) | public void updateEventExecution(EventExecution eventExecution) {
    method indexEventExecution (line 619) | private void indexEventExecution(EventExecution eventExecution) {
    method removeEventExecution (line 629) | public void removeEventExecution(EventExecution eventExecution) {
    method exceedsInProgressLimit (line 633) | public boolean exceedsInProgressLimit(TaskModel task) {
    method exceedsRateLimitPerFrequency (line 637) | public boolean exceedsRateLimitPerFrequency(TaskModel task, TaskDef ta...
    method addTaskExecLog (line 641) | public void addTaskExecLog(List<TaskExecLog> logs) {
    method addMessage (line 661) | public void addMessage(String queue, Message message) {
    method searchWorkflows (line 669) | public SearchResult<String> searchWorkflows(
    method searchWorkflowSummary (line 674) | public SearchResult<WorkflowSummary> searchWorkflowSummary(
    method searchTasks (line 679) | public SearchResult<String> searchTasks(
    method searchTaskSummary (line 684) | public SearchResult<TaskSummary> searchTaskSummary(
    method getTaskExecutionLogs (line 689) | public List<TaskExecLog> getTaskExecutionLogs(String taskId) {
    method populateWorkflowAndTaskPayloadData (line 702) | public void populateWorkflowAndTaskPayloadData(WorkflowModel workflowM...
    method populateTaskData (line 728) | public void populateTaskData(TaskModel taskModel) {
    class DelayWorkflowUpdate (line 752) | class DelayWorkflowUpdate implements Runnable {
      method DelayWorkflowUpdate (line 756) | DelayWorkflowUpdate(String workflowId) {
      method run (line 760) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/event/WorkflowCreationEvent.java
  class WorkflowCreationEvent (line 19) | public class WorkflowCreationEvent implements Serializable {
    method WorkflowCreationEvent (line 23) | public WorkflowCreationEvent(StartWorkflowInput startWorkflowInput) {
    method getStartWorkflowInput (line 27) | public StartWorkflowInput getStartWorkflowInput() {

FILE: core/src/main/java/com/netflix/conductor/core/event/WorkflowEvaluationEvent.java
  class WorkflowEvaluationEvent (line 19) | public final class WorkflowEvaluationEvent implements Serializable {
    method WorkflowEvaluationEvent (line 23) | public WorkflowEvaluationEvent(WorkflowModel workflowModel) {
    method getWorkflowModel (line 27) | public WorkflowModel getWorkflowModel() {

FILE: core/src/main/java/com/netflix/conductor/core/events/ActionProcessor.java
  type ActionProcessor (line 19) | public interface ActionProcessor {
    method execute (line 21) | Map<String, Object> execute(

FILE: core/src/main/java/com/netflix/conductor/core/events/DefaultEventProcessor.java
  class DefaultEventProcessor (line 59) | @Component
    method DefaultEventProcessor (line 79) | public DefaultEventProcessor(
    method handle (line 113) | public void handle(ObservableQueue queue, Message msg) {
    method executeEvent (line 152) | protected List<EventExecution> executeEvent(String event, Message msg)...
    method processTransientFailures (line 225) | protected List<EventExecution> processTransientFailures(List<EventExec...
    method executeActionsForEventHandler (line 236) | protected CompletableFuture<List<EventExecution>> executeActionsForEve...
    method execute (line 272) | protected EventExecution execute(EventExecution eventExecution, Action...
    method getPayloadObject (line 319) | private Object getPayloadObject(String payload) {

FILE: core/src/main/java/com/netflix/conductor/core/events/DefaultEventQueueManager.java
  class DefaultEventQueueManager (line 47) | @Component
    method DefaultEventQueueManager (line 62) | public DefaultEventQueueManager(
    method getQueues (line 76) | @Override
    method getQueueSizes (line 83) | @Override
    method doStart (line 95) | @Override
    method doStop (line 112) | @Override
    method refreshEventQueues (line 129) | @Scheduled(fixedDelay = 60_000)
    method listen (line 177) | private void listen(ObservableQueue queue) {

FILE: core/src/main/java/com/netflix/conductor/core/events/EventQueueManager.java
  type EventQueueManager (line 17) | public interface EventQueueManager {
    method getQueues (line 19) | Map<String, String> getQueues();
    method getQueueSizes (line 21) | Map<String, Map<String, Long>> getQueueSizes();

FILE: core/src/main/java/com/netflix/conductor/core/events/EventQueueProvider.java
  type EventQueueProvider (line 19) | public interface EventQueueProvider {
    method getQueueType (line 21) | String getQueueType();
    method getQueue (line 31) | @NonNull

FILE: core/src/main/java/com/netflix/conductor/core/events/EventQueues.java
  class EventQueues (line 30) | @Component
    method EventQueues (line 40) | @Autowired
    method getProviders (line 48) | public List<String> getProviders() {
    method getQueue (line 54) | @NonNull

FILE: core/src/main/java/com/netflix/conductor/core/events/ScriptEvaluator.java
  class ScriptEvaluator (line 20) | public class ScriptEvaluator {
    method ScriptEvaluator (line 24) | private ScriptEvaluator() {}
    method evalBool (line 35) | public static Boolean evalBool(String script, Object input) throws Scr...
    method eval (line 47) | public static Object eval(String script, Object input) throws ScriptEx...
    method toBoolean (line 68) | public static Boolean toBoolean(Object input) {

FILE: core/src/main/java/com/netflix/conductor/core/events/SimpleActionProcessor.java
  class SimpleActionProcessor (line 41) | @Component
    method SimpleActionProcessor (line 51) | public SimpleActionProcessor(
    method execute (line 62) | public Map<String, Object> execute(
    method completeTask (line 102) | private Map<String, Object> completeTask(
    method startWorkflow (line 194) | private Map<String, Object> startWorkflow(

FILE: core/src/main/java/com/netflix/conductor/core/events/queue/ConductorEventQueueProvider.java
  class ConductorEventQueueProvider (line 38) | @Component
    method ConductorEventQueueProvider (line 51) | public ConductorEventQueueProvider(
    method getQueueType (line 58) | @Override
    method getQueue (line 63) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/events/queue/ConductorObservableQueue.java
  class ConductorObservableQueue (line 35) | public class ConductorObservableQueue implements ObservableQueue {
    method ConductorObservableQueue (line 49) | ConductorObservableQueue(
    method observe (line 62) | @Override
    method ack (line 68) | @Override
    method setUnackTimeout (line 76) | public void setUnackTimeout(Message message, long unackTimeout) {
    method publish (line 80) | @Override
    method size (line 85) | @Override
    method getType (line 90) | @Override
    method getName (line 95) | @Override
    method getURI (line 100) | @Override
    method receiveMessages (line 105) | private List<Message> receiveMessages() {
    method getOnSubscribe (line 118) | private OnSubscribe<Message> getOnSubscribe() {
    method start (line 136) | @Override
    method stop (line 142) | @Override
    method isRunning (line 148) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/events/queue/DefaultEventQueueProcessor.java
  class DefaultEventQueueProcessor (line 45) | @Component
    method DefaultEventQueueProcessor (line 58) | public DefaultEventQueueProcessor(
    method startMonitor (line 70) | private void startMonitor(Status status, ObservableQueue queue) {
    method getValue (line 172) | private String getValue(String fieldName, JsonNode json) {
    method size (line 180) | public Map<String, Long> size() {
    method queues (line 186) | public Map<Status, String> queues() {
    method updateByTaskRefName (line 192) | public void updateByTaskRefName(
    method updateByTaskId (line 202) | public void updateByTaskId(
    method update (line 212) | private void update(

FILE: core/src/main/java/com/netflix/conductor/core/events/queue/Message.java
  class Message (line 17) | public class Message {
    method Message (line 24) | public Message() {}
    method Message (line 26) | public Message(String id, String payload, String receipt) {
    method Message (line 32) | public Message(String id, String payload, String receipt, int priority) {
    method getPayload (line 42) | public String getPayload() {
    method setPayload (line 49) | public void setPayload(String payload) {
    method getId (line 56) | public String getId() {
    method setId (line 63) | public void setId(String id) {
    method getReceipt (line 70) | public String getReceipt() {
    method setReceipt (line 77) | public void setReceipt(String receipt) {
    method getPriority (line 86) | public int getPriority() {
    method setPriority (line 96) | public void setPriority(int priority) {
    method toString (line 100) | @Override
    method equals (line 105) | @Override
    method hashCode (line 120) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/events/queue/ObservableQueue.java
  type ObservableQueue (line 21) | public interface ObservableQueue extends Lifecycle {
    method observe (line 26) | Observable<Message> observe();
    method getType (line 31) | String getType();
    method getName (line 36) | String getName();
    method getURI (line 41) | String getURI();
    method ack (line 47) | List<String> ack(List<Message> messages);
    method nack (line 52) | default void nack(List<Message> messages) {}
    method publish (line 57) | void publish(List<Message> messages);
    method rePublishIfNoAck (line 67) | default boolean rePublishIfNoAck() {
    method setUnackTimeout (line 78) | void setUnackTimeout(Message message, long unackTimeout);
    method size (line 84) | long size();
    method close (line 87) | default void close() {}

FILE: core/src/main/java/com/netflix/conductor/core/exception/ConflictException.java
  class ConflictException (line 15) | public class ConflictException extends RuntimeException {
    method ConflictException (line 17) | public ConflictException(String message) {
    method ConflictException (line 21) | public ConflictException(String message, Object... args) {
    method ConflictException (line 25) | public ConflictException(String message, Throwable cause) {

FILE: core/src/main/java/com/netflix/conductor/core/exception/NonTransientException.java
  class NonTransientException (line 15) | public class NonTransientException extends RuntimeException {
    method NonTransientException (line 17) | public NonTransientException(String message) {
    method NonTransientException (line 21) | public NonTransientException(String message, Throwable cause) {

FILE: core/src/main/java/com/netflix/conductor/core/exception/NotFoundException.java
  class NotFoundException (line 15) | public class NotFoundException extends RuntimeException {
    method NotFoundException (line 17) | public NotFoundException(String message) {
    method NotFoundException (line 21) | public NotFoundException(String message, Object... args) {
    method NotFoundException (line 25) | public NotFoundException(String message, Throwable cause) {

FILE: core/src/main/java/com/netflix/conductor/core/exception/TerminateWorkflowException.java
  class TerminateWorkflowException (line 20) | public class TerminateWorkflowException extends RuntimeException {
    method TerminateWorkflowException (line 25) | public TerminateWorkflowException(String reason) {
    method TerminateWorkflowException (line 29) | public TerminateWorkflowException(String reason, WorkflowModel.Status ...
    method TerminateWorkflowException (line 33) | public TerminateWorkflowException(
    method getWorkflowStatus (line 40) | public WorkflowModel.Status getWorkflowStatus() {
    method getTask (line 44) | public TaskModel getTask() {

FILE: core/src/main/java/com/netflix/conductor/core/exception/TransientException.java
  class TransientException (line 15) | public class TransientException extends RuntimeException {
    method TransientException (line 17) | public TransientException(String message) {
    method TransientException (line 21) | public TransientException(String message, Throwable cause) {

FILE: core/src/main/java/com/netflix/conductor/core/execution/AsyncSystemTaskExecutor.java
  class AsyncSystemTaskExecutor (line 29) | @Component
    method AsyncSystemTaskExecutor (line 41) | public AsyncSystemTaskExecutor(
    method execute (line 63) | public void execute(WorkflowSystemTask systemTask, String taskId) {
    method postponeQuietly (line 202) | private void postponeQuietly(String queueName, TaskModel task) {
    method loadTaskQuietly (line 214) | private TaskModel loadTaskQuietly(String taskId) {

FILE: core/src/main/java/com/netflix/conductor/core/execution/DeciderService.java
  class DeciderService (line 56) | @Service
    method DeciderService (line 71) | public DeciderService(
    method decide (line 89) | public DeciderOutcome decide(WorkflowModel workflow) throws TerminateW...
    method decide (line 112) | private DeciderOutcome decide(final WorkflowModel workflow, List<TaskM...
    method filterNextLoopOverTasks (line 263) | @VisibleForTesting
    method startWorkflow (line 292) | private List<TaskModel> startWorkflow(WorkflowModel workflow)
    method updateWorkflowOutput (line 354) | void updateWorkflowOutput(final WorkflowModel workflow, TaskModel task) {
    method checkForWorkflowCompletion (line 405) | public boolean checkForWorkflowCompletion(final WorkflowModel workflow)
    method getNextTask (line 459) | List<TaskModel> getNextTask(WorkflowModel workflow, TaskModel task) {
    method getNextTasksToBeScheduled (line 498) | private String getNextTasksToBeScheduled(WorkflowModel workflow, TaskM...
    method retry (line 509) | @VisibleForTesting
    method checkWorkflowTimeout (line 621) | @VisibleForTesting
    method checkTaskTimeout (line 664) | @VisibleForTesting
    method checkTaskPollTimeout (line 700) | @VisibleForTesting
    method timeoutTaskWithTimeoutPolicy (line 735) | void timeoutTaskWithTimeoutPolicy(String reason, TaskDef taskDef, Task...
    method isResponseTimedOut (line 753) | @VisibleForTesting
    method timeoutTask (line 812) | private void timeoutTask(TaskDef taskDef, TaskModel task) {
    method getTasksToBeScheduled (line 825) | public List<TaskModel> getTasksToBeScheduled(
    method getTasksToBeScheduled (line 830) | public List<TaskModel> getTasksToBeScheduled(
    method isTaskSkipped (line 877) | private boolean isTaskSkipped(WorkflowTask taskToSchedule, WorkflowMod...
    method isAyncCompleteSystemTask (line 894) | private boolean isAyncCompleteSystemTask(TaskModel task) {
    class DeciderOutcome (line 899) | public static class DeciderOutcome {
      method DeciderOutcome (line 906) | private DeciderOutcome() {}

FILE: core/src/main/java/com/netflix/conductor/core/execution/StartWorkflowInput.java
  class StartWorkflowInput (line 21) | public class StartWorkflowInput {
    method StartWorkflowInput (line 37) | public StartWorkflowInput() {}
    method StartWorkflowInput (line 39) | public StartWorkflowInput(StartWorkflowRequest startWorkflowRequest) {
    method getName (line 51) | public String getName() {
    method setName (line 55) | public void setName(String name) {
    method getVersion (line 59) | public Integer getVersion() {
    method setVersion (line 63) | public void setVersion(Integer version) {
    method getWorkflowDefinition (line 67) | public WorkflowDef getWorkflowDefinition() {
    method setWorkflowDefinition (line 71) | public void setWorkflowDefinition(WorkflowDef workflowDefinition) {
    method getWorkflowInput (line 75) | public Map<String, Object> getWorkflowInput() {
    method setWorkflowInput (line 79) | public void setWorkflowInput(Map<String, Object> workflowInput) {
    method getExternalInputPayloadStoragePath (line 83) | public String getExternalInputPayloadStoragePath() {
    method setExternalInputPayloadStoragePath (line 87) | public void setExternalInputPayloadStoragePath(String externalInputPay...
    method getCorrelationId (line 91) | public String getCorrelationId() {
    method setCorrelationId (line 95) | public void setCorrelationId(String correlationId) {
    method getPriority (line 99) | public Integer getPriority() {
    method setPriority (line 103) | public void setPriority(Integer priority) {
    method getParentWorkflowId (line 107) | public String getParentWorkflowId() {
    method setParentWorkflowId (line 111) | public void setParentWorkflowId(String parentWorkflowId) {
    method getParentWorkflowTaskId (line 115) | public String getParentWorkflowTaskId() {
    method setParentWorkflowTaskId (line 119) | public void setParentWorkflowTaskId(String parentWorkflowTaskId) {
    method getEvent (line 123) | public String getEvent() {
    method setEvent (line 127) | public void setEvent(String event) {
    method getTaskToDomain (line 131) | public Map<String, String> getTaskToDomain() {
    method setTaskToDomain (line 135) | public void setTaskToDomain(Map<String, String> taskToDomain) {
    method getWorkflowId (line 139) | public String getWorkflowId() {
    method setWorkflowId (line 143) | public void setWorkflowId(String workflowId) {
    method getTriggeringWorkflowId (line 147) | public String getTriggeringWorkflowId() {
    method setTriggeringWorkflowId (line 151) | public void setTriggeringWorkflowId(String triggeringWorkflowId) {
    method equals (line 155) | @Override
    method hashCode (line 176) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/WorkflowExecutor.java
  class WorkflowExecutor (line 63) | @Trace
    method WorkflowExecutor (line 96) | public WorkflowExecutor(
    method resetCallbacksForWorkflow (line 130) | public void resetCallbacksForWorkflow(String workflowId) {
    method rerun (line 155) | public String rerun(RerunWorkflowRequest request) {
    method restart (line 177) | public void restart(String workflowId, boolean useLatestDefinitions) {
    method retry (line 262) | public void retry(String workflowId, boolean resumeSubworkflowTasks) {
    method updateAndPushParents (line 286) | private void updateAndPushParents(WorkflowModel workflow, String opera...
    method retry (line 329) | private void retry(WorkflowModel workflow) {
    method findLastFailedSubWorkflowIfAny (line 402) | private WorkflowModel findLastFailedSubWorkflowIfAny(
    method taskToBeRescheduled (line 423) | private TaskModel taskToBeRescheduled(WorkflowModel workflow, TaskMode...
    method endExecution (line 456) | private void endExecution(WorkflowModel workflow, TaskModel terminateT...
    method completeWorkflow (line 495) | @VisibleForTesting
    method terminateWorkflow (line 562) | public void terminateWorkflow(String workflowId, String reason) {
    method terminateWorkflow (line 577) | public WorkflowModel terminateWorkflow(
    method updateTask (line 707) | public void updateTask(TaskResult taskResult) {
    method notifyTaskStatusListener (line 878) | private void notifyTaskStatusListener(TaskModel task) {
    method extendLease (line 905) | private void extendLease(TaskResult taskResult) {
    method isLazyEvaluateWorkflow (line 947) | @VisibleForTesting
    method getTask (line 975) | public TaskModel getTask(String taskId) {
    method getRunningWorkflows (line 987) | public List<Workflow> getRunningWorkflows(String workflowName, int ver...
    method getWorkflows (line 991) | public List<String> getWorkflows(String name, Integer version, Long st...
    method getRunningWorkflowIds (line 998) | public List<String> getRunningWorkflowIds(String workflowName, int ver...
    method handleWorkflowEvaluationEvent (line 1002) | @EventListener(WorkflowEvaluationEvent.class)
    method decide (line 1008) | public WorkflowModel decide(String workflowId) {
    method decideWithLock (line 1037) | public WorkflowModel decideWithLock(WorkflowModel workflow) {
    method decide (line 1062) | public WorkflowModel decide(WorkflowModel workflow) {
    method adjustStateIfSubWorkflowChanged (line 1127) | private void adjustStateIfSubWorkflowChanged(WorkflowModel workflow) {
    method findChangedSubWorkflowTask (line 1159) | private Optional<TaskModel> findChangedSubWorkflowTask(WorkflowModel w...
    method cancelNonTerminalTasks (line 1186) | @VisibleForTesting
    method dedupAndAddTasks (line 1226) | @VisibleForTesting
    method pauseWorkflow (line 1250) | public void pauseWorkflow(String workflowId) {
    method resumeWorkflow (line 1285) | public void resumeWorkflow(String workflowId) {
    method skipTaskFromWorkflow (line 1313) | public void skipTaskFromWorkflow(
    method getWorkflow (line 1371) | public WorkflowModel getWorkflow(String workflowId, boolean includeTas...
    method addTaskToQueue (line 1375) | public void addTaskToQueue(TaskModel task) {
    method setTaskDomains (line 1395) | @VisibleForTesting
    method getActiveDomain (line 1439) | @VisibleForTesting
    method getTaskDuration (line 1458) | private long getTaskDuration(long s, TaskModel task) {
    method scheduleTask (line 1467) | @VisibleForTesting
    method addTaskToQueue (line 1567) | private void addTaskToQueue(final List<TaskModel> tasks) {
    method terminate (line 1583) | private WorkflowModel terminate(
    method rerunWF (line 1608) | private boolean rerunWF(
    method scheduleNextIteration (line 1749) | public void scheduleNextIteration(TaskModel loopTask, WorkflowModel wo...
    method getTaskDefinition (line 1770) | public TaskDef getTaskDefinition(TaskModel task) {
    method updateParentWorkflowTask (line 1788) | @VisibleForTesting
    method executeSubworkflowTaskAndSyncData (line 1796) | private void executeSubworkflowTaskAndSyncData(
    method expediteLazyWorkflowEvaluation (line 1808) | private void expediteLazyWorkflowEvaluation(String workflowId) {

FILE: core/src/main/java/com/netflix/conductor/core/execution/evaluators/Evaluator.java
  type Evaluator (line 15) | public interface Evaluator {
    method evaluate (line 24) | Object evaluate(String expression, Object input);

FILE: core/src/main/java/com/netflix/conductor/core/execution/evaluators/JavascriptEvaluator.java
  class JavascriptEvaluator (line 24) | @Component(JavascriptEvaluator.NAME)
    method evaluate (line 30) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/evaluators/ValueParamEvaluator.java
  class ValueParamEvaluator (line 23) | @Component(ValueParamEvaluator.NAME)
    method evaluate (line 29) | @SuppressWarnings("unchecked")

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/DecisionTaskMapper.java
  class DecisionTaskMapper (line 46) | @Deprecated
    method getTaskType (line 52) | @Override
    method getMappedTasks (line 73) | @Override
    method getEvaluatedCaseValue (line 132) | @VisibleForTesting

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/DoWhileTaskMapper.java
  class DoWhileTaskMapper (line 37) | @Component
    method DoWhileTaskMapper (line 45) | @Autowired
    method getTaskType (line 51) | @Override
    method getMappedTasks (line 65) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/DynamicTaskMapper.java
  class DynamicTaskMapper (line 41) | @Component
    method DynamicTaskMapper (line 49) | @Autowired
    method getTaskType (line 55) | @Override
    method getMappedTasks (line 68) | @Override
    method getDynamicTaskName (line 118) | @VisibleForTesting
    method getDynamicTaskDefinition (line 142) | @VisibleForTesting

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/EventTaskMapper.java
  class EventTaskMapper (line 31) | @Component
    method EventTaskMapper (line 38) | @Autowired
    method getTaskType (line 43) | @Override
    method getMappedTasks (line 48) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/ExclusiveJoinTaskMapper.java
  class ExclusiveJoinTaskMapper (line 27) | @Component
    method getTaskType (line 32) | @Override
    method getMappedTasks (line 37) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/ForkJoinDynamicTaskMapper.java
  class ForkJoinDynamicTaskMapper (line 52) | @Component
    method ForkJoinDynamicTaskMapper (line 64) | @Autowired
    method getTaskType (line 76) | @Override
    method getMappedTasks (line 121) | @Override
    method createDynamicForkTask (line 248) | @VisibleForTesting
    method createJoinTask (line 282) | @VisibleForTesting
    method getDynamicForkTasksAndInput (line 319) | @SuppressWarnings("unchecked")
    method getDynamicForkJoinTasksAndInput (line 367) | @VisibleForTesting

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/ForkJoinTaskMapper.java
  class ForkJoinTaskMapper (line 35) | @Component
    method getTaskType (line 40) | @Override
    method getMappedTasks (line 61) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/HTTPTaskMapper.java
  class HTTPTaskMapper (line 37) | @Component
    method HTTPTaskMapper (line 45) | @Autowired
    method getTaskType (line 51) | @Override
    method getMappedTasks (line 65) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/HumanTaskMapper.java
  class HumanTaskMapper (line 36) | @Component
    method HumanTaskMapper (line 43) | public HumanTaskMapper(ParametersUtils parametersUtils) {
    method getTaskType (line 47) | @Override
    method getMappedTasks (line 52) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/InlineTaskMapper.java
  class InlineTaskMapper (line 37) | @Component
    method InlineTaskMapper (line 44) | public InlineTaskMapper(ParametersUtils parametersUtils, MetadataDAO m...
    method getTaskType (line 49) | @Override
    method getMappedTasks (line 54) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/JoinTaskMapper.java
  class JoinTaskMapper (line 33) | @Component
    method getTaskType (line 38) | @Override
    method getMappedTasks (line 52) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/JsonJQTransformTaskMapper.java
  class JsonJQTransformTaskMapper (line 31) | @Component
    method JsonJQTransformTaskMapper (line 38) | public JsonJQTransformTaskMapper(ParametersUtils parametersUtils, Meta...
    method getTaskType (line 43) | @Override
    method getMappedTasks (line 48) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/KafkaPublishTaskMapper.java
  class KafkaPublishTaskMapper (line 36) | @Component
    method KafkaPublishTaskMapper (line 44) | @Autowired
    method getTaskType (line 50) | @Override
    method getMappedTasks (line 64) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/LambdaTaskMapper.java
  class LambdaTaskMapper (line 37) | @Deprecated
    method LambdaTaskMapper (line 45) | public LambdaTaskMapper(ParametersUtils parametersUtils, MetadataDAO m...
    method getTaskType (line 50) | @Override
    method getMappedTasks (line 55) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/NoopTaskMapper.java
  class NoopTaskMapper (line 26) | @Component
    method getTaskType (line 31) | @Override
    method getMappedTasks (line 36) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/SetVariableTaskMapper.java
  class SetVariableTaskMapper (line 25) | @Component
    method getTaskType (line 30) | @Override
    method getMappedTasks (line 35) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/SimpleTaskMapper.java
  class SimpleTaskMapper (line 37) | @Component
    method SimpleTaskMapper (line 43) | public SimpleTaskMapper(ParametersUtils parametersUtils) {
    method getTaskType (line 47) | @Override
    method getMappedTasks (line 61) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/StartWorkflowTaskMapper.java
  class StartWorkflowTaskMapper (line 28) | @Component
    method getTaskType (line 33) | @Override
    method getMappedTasks (line 38) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapper.java
  class SubWorkflowTaskMapper (line 34) | @Component
    method SubWorkflowTaskMapper (line 42) | public SubWorkflowTaskMapper(ParametersUtils parametersUtils, Metadata...
    method getTaskType (line 47) | @Override
    method getMappedTasks (line 52) | @SuppressWarnings("rawtypes")
    method getSubWorkflowParams (line 90) | @VisibleForTesting
    method getSubWorkflowInputParameters (line 105) | private Map<String, Object> getSubWorkflowInputParameters(
    method getSubWorkflowVersion (line 130) | private Integer getSubWorkflowVersion(

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/SwitchTaskMapper.java
  class SwitchTaskMapper (line 38) | @Component
    method SwitchTaskMapper (line 45) | @Autowired
    method getTaskType (line 50) | @Override
    method getMappedTasks (line 72) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/TaskMapper.java
  type TaskMapper (line 20) | public interface TaskMapper {
    method getTaskType (line 22) | String getTaskType();
    method getMappedTasks (line 24) | List<TaskModel> getMappedTasks(TaskMapperContext taskMapperContext)

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/TaskMapperContext.java
  class TaskMapperContext (line 25) | public class TaskMapperContext {
    method TaskMapperContext (line 36) | private TaskMapperContext(Builder builder) {
    method newBuilder (line 47) | public static Builder newBuilder() {
    method newBuilder (line 51) | public static Builder newBuilder(TaskMapperContext copy) {
    method getWorkflowDefinition (line 64) | public WorkflowDef getWorkflowDefinition() {
    method getWorkflowModel (line 68) | public WorkflowModel getWorkflowModel() {
    method getTaskDefinition (line 72) | public TaskDef getTaskDefinition() {
    method getWorkflowTask (line 76) | public WorkflowTask getWorkflowTask() {
    method getRetryCount (line 80) | public int getRetryCount() {
    method getRetryTaskId (line 84) | public String getRetryTaskId() {
    method getTaskId (line 88) | public String getTaskId() {
    method getTaskInput (line 92) | public Map<String, Object> getTaskInput() {
    method getDeciderService (line 96) | public DeciderService getDeciderService() {
    method createTaskModel (line 100) | public TaskModel createTaskModel() {
    method toString (line 118) | @Override
    method equals (line 140) | @Override
    method hashCode (line 174) | @Override
    class Builder (line 187) | public static final class Builder {
      method Builder (line 198) | private Builder() {}
      method withWorkflowModel (line 207) | public Builder withWorkflowModel(WorkflowModel val) {
      method withTaskDefinition (line 219) | public Builder withTaskDefinition(TaskDef val) {
      method withWorkflowTask (line 231) | public Builder withWorkflowTask(WorkflowTask val) {
      method withTaskInput (line 243) | public Builder withTaskInput(Map<String, Object> val) {
      method withRetryCount (line 255) | public Builder withRetryCount(int val) {
      method withRetryTaskId (line 267) | public Builder withRetryTaskId(String val) {
      method withTaskId (line 279) | public Builder withTaskId(String val) {
      method withDeciderService (line 291) | public Builder withDeciderService(DeciderService val) {
      method build (line 302) | public TaskMapperContext build() {

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/TerminateTaskMapper.java
  class TerminateTaskMapper (line 29) | @Component
    method TerminateTaskMapper (line 35) | public TerminateTaskMapper(ParametersUtils parametersUtils) {
    method getTaskType (line 39) | @Override
    method getMappedTasks (line 44) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/UserDefinedTaskMapper.java
  class UserDefinedTaskMapper (line 38) | @Component
    method UserDefinedTaskMapper (line 46) | public UserDefinedTaskMapper(ParametersUtils parametersUtils, Metadata...
    method getTaskType (line 51) | @Override
    method getMappedTasks (line 65) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/mapper/WaitTaskMapper.java
  class WaitTaskMapper (line 46) | @Component
    method WaitTaskMapper (line 53) | public WaitTaskMapper(ParametersUtils parametersUtils) {
    method getTaskType (line 57) | @Override
    method getMappedTasks (line 62) | @Override
    method setCallbackAfter (line 86) | void setCallbackAfter(TaskModel task) {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Decision.java
  class Decision (line 28) | @Deprecated
    method Decision (line 32) | public Decision() {
    method execute (line 36) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/DoWhile.java
  class DoWhile (line 36) | @Component(TASK_TYPE_DO_WHILE)
    method DoWhile (line 43) | public DoWhile(ParametersUtils parametersUtils) {
    method cancel (line 48) | @Override
    method execute (line 53) | @Override
    method isIterationComplete (line 167) | private boolean isIterationComplete(
    method scheduleNextIteration (line 202) | boolean scheduleNextIteration(
    method markTaskFailure (line 213) | boolean markTaskFailure(TaskModel taskModel, TaskModel.Status status, ...
    method markTaskSuccess (line 220) | boolean markTaskSuccess(TaskModel taskModel) {
    method evaluateCondition (line 229) | @VisibleForTesting

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Event.java
  class Event (line 38) | @Component(TASK_TYPE_EVENT)
    method Event (line 50) | public Event(
    method start (line 58) | @Override
    method execute (line 82) | @Override
    method cancel (line 114) | @Override
    method computeQueueName (line 122) | @VisibleForTesting
    method getQueue (line 154) | @VisibleForTesting
    method getPopulatedMessage (line 171) | Message getPopulatedMessage(TaskModel task) throws JsonProcessingExcep...

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/ExclusiveJoin.java
  class ExclusiveJoin (line 29) | @Component(TASK_TYPE_EXCLUSIVE_JOIN)
    method ExclusiveJoin (line 36) | public ExclusiveJoin() {
    method execute (line 40) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/ExecutionConfig.java
  class ExecutionConfig (line 22) | class ExecutionConfig {
    method ExecutionConfig (line 27) | ExecutionConfig(int threadCount, String threadNameFormat) {
    method getExecutorService (line 37) | public ExecutorService getExecutorService() {
    method getSemaphoreUtil (line 41) | public SemaphoreUtil getSemaphoreUtil() {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Fork.java
  class Fork (line 19) | @Component(TASK_TYPE_FORK)
    method Fork (line 22) | public Fork() {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Human.java
  class Human (line 24) | @Component(TASK_TYPE_HUMAN)
    method Human (line 27) | public Human() {
    method start (line 31) | @Override
    method cancel (line 36) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Inline.java
  class Inline (line 54) | @Component(TASK_TYPE_INLINE)
    method Inline (line 64) | public Inline(Map<String, Evaluator> evaluators) {
    method execute (line 69) | @Override
    method checkEvaluatorType (line 103) | private void checkEvaluatorType(String evaluatorType) {
    method checkExpression (line 118) | private void checkExpression(String expression) {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/IsolatedTaskQueueProducer.java
  class IsolatedTaskQueueProducer (line 39) | @Component
    method IsolatedTaskQueueProducer (line 53) | public IsolatedTaskQueueProducer(
    method getIsolationExecutionNameSpaces (line 80) | private Set<TaskDef> getIsolationExecutionNameSpaces() {
    method addTaskQueues (line 100) | @VisibleForTesting

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Join.java
  class Join (line 28) | @Component(TASK_TYPE_JOIN)
    method Join (line 31) | public Join() {
    method execute (line 35) | @Override
    method getEvaluationOffset (line 102) | @Override
    method isAsync (line 111) | public boolean isAsync() {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Lambda.java
  class Lambda (line 53) | @Deprecated
    method Lambda (line 61) | public Lambda() {
    method execute (line 65) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Noop.java
  class Noop (line 23) | @Component(TASK_TYPE_NOOP)
    method Noop (line 26) | public Noop() {
    method execute (line 30) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/SetVariable.java
  class SetVariable (line 36) | @Component(TASK_TYPE_SET_VARIABLE)
    method SetVariable (line 46) | public SetVariable(
    method validateVariablesSize (line 56) | private boolean validateVariablesSize(
    method execute (line 84) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java
  class StartWorkflow (line 39) | @Component(TASK_TYPE_START_WORKFLOW)
    method StartWorkflow (line 51) | public StartWorkflow(
    method start (line 61) | @Override
    method getRequest (line 103) | private StartWorkflowRequest getRequest(TaskModel taskModel) {
    method startWorkflow (line 147) | private String startWorkflow(StartWorkflowRequest request, String work...
    method isAsync (line 153) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/SubWorkflow.java
  class SubWorkflow (line 35) | @Component(TASK_TYPE_SUB_WORKFLOW)
    method SubWorkflow (line 44) | public SubWorkflow(ObjectMapper objectMapper, StartWorkflowOperation s...
    method start (line 50) | @SuppressWarnings("unchecked")
    method execute (line 116) | @Override
    method cancel (line 134) | @Override
    method isAsync (line 150) | @Override
    method isAsyncComplete (line 163) | @Override
    method updateTaskStatus (line 168) | private void updateTaskStatus(WorkflowModel subworkflow, TaskModel tas...
    method isTaskRetrievalRequired (line 214) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Switch.java
  class Switch (line 24) | @Component(TASK_TYPE_SWITCH)
    method Switch (line 27) | public Switch() {
    method execute (line 31) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/SystemTaskRegistry.java
  class SystemTaskRegistry (line 27) | @Component
    method SystemTaskRegistry (line 34) | public SystemTaskRegistry(Set<WorkflowSystemTask> tasks) {
    method get (line 42) | public WorkflowSystemTask get(String taskType) {
    method isSystemTask (line 50) | public boolean isSystemTask(String taskType) {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/SystemTaskWorker.java
  class SystemTaskWorker (line 39) | @Component
    method SystemTaskWorker (line 58) | public SystemTaskWorker(
    method startPolling (line 74) | public void startPolling(WorkflowSystemTask systemTask) {
    method startPolling (line 78) | public void startPolling(WorkflowSystemTask systemTask, String queueNa...
    method pollAndExecute (line 88) | void pollAndExecute(WorkflowSystemTask systemTask, String queueName) {
    method getExecutionConfig (line 158) | @VisibleForTesting
    method createExecutionConfig (line 167) | private ExecutionConfig createExecutionConfig() {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/SystemTaskWorkerCoordinator.java
  class SystemTaskWorkerCoordinator (line 32) | @Component
    method SystemTaskWorkerCoordinator (line 45) | public SystemTaskWorkerCoordinator(
    method initSystemTaskExecutor (line 54) | @EventListener(ApplicationReadyEvent.class)
    method isFromCoordinatorExecutionNameSpace (line 65) | @VisibleForTesting

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Terminate.java
  class Terminate (line 57) | @Component(TASK_TYPE_TERMINATE)
    method Terminate (line 64) | public Terminate() {
    method execute (line 68) | @Override
    method getTerminationStatusParameter (line 83) | public static String getTerminationStatusParameter() {
    method getTerminationReasonParameter (line 87) | public static String getTerminationReasonParameter() {
    method getTerminationWorkflowOutputParameter (line 91) | public static String getTerminationWorkflowOutputParameter() {
    method validateInputStatus (line 95) | public static Boolean validateInputStatus(String status) {
    method getInputFromParam (line 101) | @SuppressWarnings("unchecked")

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/Wait.java
  class Wait (line 24) | @Component(TASK_TYPE_WAIT)
    method Wait (line 30) | public Wait() {
    method cancel (line 34) | @Override
    method execute (line 39) | @Override
    method isAsync (line 54) | public boolean isAsync() {

FILE: core/src/main/java/com/netflix/conductor/core/execution/tasks/WorkflowSystemTask.java
  class WorkflowSystemTask (line 22) | public abstract class WorkflowSystemTask {
    method WorkflowSystemTask (line 26) | public WorkflowSystemTask(String taskType) {
    method start (line 39) | public void start(WorkflowModel workflow, TaskModel task, WorkflowExec...
    method execute (line 54) | public boolean execute(
    method cancel (line 66) | public void cancel(WorkflowModel workflow, TaskModel task, WorkflowExe...
    method getEvaluationOffset (line 68) | public Optional<Long> getEvaluationOffset(TaskModel taskModel, long de...
    method isAsync (line 75) | public boolean isAsync() {
    method isAsyncComplete (line 83) | public boolean isAsyncComplete(TaskModel task) {
    method getTaskType (line 98) | public String getTaskType() {
    method isTaskRetrievalRequired (line 109) | public boolean isTaskRetrievalRequired() {
    method toString (line 113) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/index/NoopIndexDAO.java
  class NoopIndexDAO (line 31) | public class NoopIndexDAO implements IndexDAO {
    method setup (line 33) | @Override
    method indexWorkflow (line 36) | @Override
    method asyncIndexWorkflow (line 39) | @Override
    method indexTask (line 44) | @Override
    method asyncIndexTask (line 47) | @Override
    method searchWorkflows (line 52) | @Override
    method searchWorkflowSummary (line 58) | @Override
    method searchTasks (line 64) | @Override
    method searchTaskSummary (line 70) | @Override
    method removeWorkflow (line 76) | @Override
    method asyncRemoveWorkflow (line 79) | @Override
    method updateWorkflow (line 84) | @Override
    method asyncUpdateWorkflow (line 87) | @Override
    method removeTask (line 93) | @Override
    method asyncRemoveTask (line 96) | @Override
    method updateTask (line 101) | @Override
    method asyncUpdateTask (line 104) | @Override
    method get (line 110) | @Override
    method addTaskExecutionLogs (line 115) | @Override
    method asyncAddTaskExecutionLogs (line 118) | @Override
    method getTaskExecutionLogs (line 123) | @Override
    method addEventExecution (line 128) | @Override
    method getEventExecutions (line 131) | @Override
    method asyncAddEventExecution (line 136) | @Override
    method addMessage (line 141) | @Override
    method asyncAddMessage (line 144) | @Override
    method getMessages (line 149) | @Override
    method searchArchivableWorkflows (line 154) | @Override
    method getWorkflowCount (line 159) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/index/NoopIndexDAOConfiguration.java
  class NoopIndexDAOConfiguration (line 21) | @Configuration(proxyBeanMethods = false)
    method noopIndexDAO (line 25) | @Bean

FILE: core/src/main/java/com/netflix/conductor/core/listener/TaskStatusListener.java
  type TaskStatusListener (line 21) | public interface TaskStatusListener {
    method onTaskScheduled (line 23) | default void onTaskScheduled(TaskModel task) {}
    method onTaskInProgress (line 25) | default void onTaskInProgress(TaskModel task) {}
    method onTaskCanceled (line 27) | default void onTaskCanceled(TaskModel task) {}
    method onTaskFailed (line 29) | default void onTaskFailed(TaskModel task) {}
    method onTaskFailedWithTerminalError (line 31) | default void onTaskFailedWithTerminalError(TaskModel task) {}
    method onTaskCompleted (line 33) | default void onTaskCompleted(TaskModel task) {}
    method onTaskCompletedWithErrors (line 35) | default void onTaskCompletedWithErrors(TaskModel task) {}
    method onTaskTimedOut (line 37) | default void onTaskTimedOut(TaskModel task) {}
    method onTaskSkipped (line 39) | default void onTaskSkipped(TaskModel task) {}

FILE: core/src/main/java/com/netflix/conductor/core/listener/TaskStatusListenerStub.java
  class TaskStatusListenerStub (line 21) | public class TaskStatusListenerStub implements TaskStatusListener {
    method onTaskScheduled (line 25) | @Override
    method onTaskCanceled (line 30) | @Override
    method onTaskCompleted (line 35) | @Override
    method onTaskCompletedWithErrors (line 40) | @Override
    method onTaskFailed (line 45) | @Override
    method onTaskFailedWithTerminalError (line 50) | @Override
    method onTaskInProgress (line 55) | @Override
    method onTaskSkipped (line 60) | @Override
    method onTaskTimedOut (line 65) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/listener/WorkflowStatusListener.java
  type WorkflowStatusListener (line 18) | public interface WorkflowStatusListener {
    method onWorkflowCompletedIfEnabled (line 20) | default void onWorkflowCompletedIfEnabled(WorkflowModel workflow) {
    method onWorkflowTerminatedIfEnabled (line 26) | default void onWorkflowTerminatedIfEnabled(WorkflowModel workflow) {
    method onWorkflowFinalizedIfEnabled (line 32) | default void onWorkflowFinalizedIfEnabled(WorkflowModel workflow) {
    method onWorkflowCompleted (line 38) | void onWorkflowCompleted(WorkflowModel workflow);
    method onWorkflowTerminated (line 40) | void onWorkflowTerminated(WorkflowModel workflow);
    method onWorkflowFinalized (line 42) | default void onWorkflowFinalized(WorkflowModel workflow) {}

FILE: core/src/main/java/com/netflix/conductor/core/listener/WorkflowStatusListenerStub.java
  class WorkflowStatusListenerStub (line 21) | public class WorkflowStatusListenerStub implements WorkflowStatusListener {
    method onWorkflowCompleted (line 25) | @Override
    method onWorkflowTerminated (line 30) | @Override
    method onWorkflowFinalized (line 35) | @Override

FILE: core/src/main/java/com/netflix/conductor/core/metadata/MetadataMapperService.java
  class MetadataMapperService (line 49) | @Component
    method MetadataMapperService (line 55) | public MetadataMapperService(MetadataDAO metadataDAO) {
    method lookupForWorkflowDefinition (line 59) | public WorkflowDef lookupForWorkflowDefinition(String name, Integer ve...
    method lookupWorkflowDefinition (line 77) | @VisibleForTesting
    method lookupLatestWorkflowDefinition (line 85) | @VisibleForTesting
    method populateWorkflowWithDefinitions (line 93) | public WorkflowModel populateWorkflowWithDefinitions(WorkflowModel wor...
    method populateTaskDefinitions (line 113) | public WorkflowDef populateTaskDefinitions(WorkflowDef workflow
Condensed preview — 1030 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,420K chars).
[
  {
    "path": ".dockerignore",
    "chars": 70,
    "preview": "# General\n\n# Backend \nserver/build/libs\n\n# UI\n**/node_modules\nui/build"
  },
  {
    "path": ".gitattributes",
    "chars": 187,
    "preview": "gradlew eol=lf\n*.gradle eol=lf\n*.java eol=lf\n*.groovy eol=lf\nspring.factories eol=lf\n*.sh eol=lf\n\ndocs/* linguist-docume"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 790,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"\"\nlabels: 'type: bug'\nassignees: ''\n\n---\n\n**Descr"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 28,
    "preview": "blank_issues_enabled: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.md",
    "chars": 197,
    "preview": "---\nname: Documentation\nabout: Something in the documentation that needs improvement\ntitle: \"[DOC]: \"\nlabels: 'type: doc"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 680,
    "preview": "---\nname: Feature request\nabout: Propose a new feature\ntitle: \"[FEATURE]: \"\nlabels: 'type: feature'\nassignees: ''\n\n---\n\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 288,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"gradle\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    review"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 532,
    "preview": "Pull Request type\n----\n- [ ] Bugfix\n- [ ] Feature\n- [ ] Refactoring (no functional changes, no api changes)\n- [ ] Build "
  },
  {
    "path": ".github/release-drafter.yml",
    "chars": 729,
    "preview": "template: |\n  ## What’s Changed\n\n  $CHANGES\n\nname-template: 'v$RESOLVED_VERSION'\ntag-template: 'v$RESOLVED_VERSION'\n\ncat"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 3331,
    "preview": "name: CI\n\non: [ push, pull_request ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkou"
  },
  {
    "path": ".github/workflows/publish.yml",
    "chars": 2827,
    "preview": "name: Publish to NetflixOSS and Maven Central\non:\n  release:\n    types:\n      - released\n      - prereleased\n\npermission"
  },
  {
    "path": ".github/workflows/release_draft.yml",
    "chars": 466,
    "preview": "name: Release Drafter\n\non:\n  push:\n    branches:\n      - main\n\npermissions:\n  contents: read\n\njobs:\n  update_release_dra"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 1209,
    "preview": "name: Close stale issues and pull requests\n\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n\npermissions:\n  contents: read\n\njobs"
  },
  {
    "path": ".github/workflows/update-gradle-wrapper.yml",
    "chars": 433,
    "preview": "name: Update Gradle Wrapper\n\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n  workflow_dispatch:\n\njobs:\n  update-gradle-wrapper"
  },
  {
    "path": ".gitignore",
    "chars": 385,
    "preview": "# Java Build\n.gradle\n.classpath\ndump.rdb\nout\nbin\ntarget\nbuildscan.log\n/docs/site\n\n# Python\n/polyglot-clients/python/cond"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 24610,
    "preview": "Conductor has been upgraded to use the SpringBoot framework and requires Java11 or above.  \n#### NOTE: The java clients "
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 57,
    "preview": "[Code of Conduct](docs/docs/resources/code-of-conduct.md)"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 51,
    "preview": "[Contributing](docs/docs/resources/contributing.md)"
  },
  {
    "path": "LICENSE",
    "chars": 11311,
    "preview": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licens"
  },
  {
    "path": "OSSMETADATA",
    "chars": 20,
    "preview": "osslifecycle=active\n"
  },
  {
    "path": "README.md",
    "chars": 7688,
    "preview": "![Conductor](docs/docs/img/logo.png)\n\n## Announcement\n\n> Effective **December 13, 2023**, Netflix will discontinue maint"
  },
  {
    "path": "RELATED.md",
    "chars": 51,
    "preview": "[Related Projects](docs/docs/resources/related.md)\n"
  },
  {
    "path": "SECURITY.md",
    "chars": 300,
    "preview": "# Security Policy\n\n## Supported Versions\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 3.x.x   | "
  },
  {
    "path": "USERS.md",
    "chars": 1464,
    "preview": "\n## Who uses Conductor?\n\nWe would like to keep track of whose using Conductor. Please send a pull request with your comp"
  },
  {
    "path": "annotations/README.md",
    "chars": 153,
    "preview": "# Annotations \n\n- `protogen` Annotations\n  - Original Author: Vicent Martí - https://github.com/vmg\n  - Original Repo: h"
  },
  {
    "path": "annotations/build.gradle",
    "chars": 19,
    "preview": "\n\ndependencies {\n\n}"
  },
  {
    "path": "annotations/src/main/java/com/netflix/conductor/annotations/protogen/ProtoEnum.java",
    "chars": 1024,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations/src/main/java/com/netflix/conductor/annotations/protogen/ProtoField.java",
    "chars": 1531,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations/src/main/java/com/netflix/conductor/annotations/protogen/ProtoMessage.java",
    "chars": 1974,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/README.md",
    "chars": 74,
    "preview": "[Annotations Processor](docs/docs/reference-docs/annotations-processor.md)"
  },
  {
    "path": "annotations-processor/build.gradle",
    "chars": 615,
    "preview": "\nsourceSets {\n    example\n}\n\ndependencies {\n    implementation project(':conductor-annotations')\n    api 'com.google.gua"
  },
  {
    "path": "annotations-processor/src/example/java/com/example/Example.java",
    "chars": 880,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/AbstractMessage.java",
    "chars": 4164,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/Enum.java",
    "chars": 3363,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/Message.java",
    "chars": 5008,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoFile.java",
    "chars": 2406,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGen.java",
    "chars": 5330,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGenTask.java",
    "chars": 4333,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/AbstractType.java",
    "chars": 3427,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ExternMessageType.java",
    "chars": 2034,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/GenericType.java",
    "chars": 2281,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ListType.java",
    "chars": 3575,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/MapType.java",
    "chars": 4738,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/MessageType.java",
    "chars": 2598,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/ScalarType.java",
    "chars": 2648,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/TypeMapper.java",
    "chars": 4195,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/java/com/netflix/conductor/annotationsprocessor/protogen/types/WrappedType.java",
    "chars": 3255,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/main/resources/templates/file.proto",
    "chars": 275,
    "preview": "syntax = \"proto3\";\npackage {{protoPackageName}};\n\n{{#includes}}\nimport \"{{this}}\";\n{{/includes}}\n\noption java_package = "
  },
  {
    "path": "annotations-processor/src/main/resources/templates/message.proto",
    "chars": 123,
    "preview": "{{protoClass}} {{name}} {\n{{#nested}}\n    {{>message}}\n{{/nested}}\n{{#fields}}\n    {{protoTypeDeclaration}};\n{{/fields}}"
  },
  {
    "path": "annotations-processor/src/test/java/com/netflix/conductor/annotationsprocessor/protogen/ProtoGenTest.java",
    "chars": 2596,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "annotations-processor/src/test/resources/example.proto.txt",
    "chars": 228,
    "preview": "syntax = \"proto3\";\npackage protoPackage;\n\n\noption java_package = \"abc.protogen.example\";\noption java_outer_classname = \""
  },
  {
    "path": "awss3-storage/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "awss3-storage/build.gradle",
    "chars": 900,
    "preview": "/*\n *  Copyright 2022 Netflix, Inc.\n *  <p>\n *  Licensed under the Apache License, Version 2.0 (the \"License\"); you may "
  },
  {
    "path": "awss3-storage/src/main/java/com/netflix/conductor/s3/config/S3Configuration.java",
    "chars": 1956,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awss3-storage/src/main/java/com/netflix/conductor/s3/config/S3Properties.java",
    "chars": 1900,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awss3-storage/src/main/java/com/netflix/conductor/s3/storage/S3PayloadStorage.java",
    "chars": 7241,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awss3-storage/src/main/resources/META-INF/additional-spring-configuration-metadata.json",
    "chars": 232,
    "preview": "{\n  \"hints\": [\n    {\n      \"name\": \"conductor.external-payload-storage.type\",\n      \"values\": [\n        {\n          \"val"
  },
  {
    "path": "awssqs-event-queue/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "awssqs-event-queue/build.gradle",
    "chars": 584,
    "preview": "dependencies {\n    implementation project(':conductor-common')\n    implementation project(':conductor-core')\n    compile"
  },
  {
    "path": "awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueConfiguration.java",
    "chars": 4877,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueProperties.java",
    "chars": 2850,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/config/SQSEventQueueProvider.java",
    "chars": 2513,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awssqs-event-queue/src/main/java/com/netflix/conductor/sqs/eventqueue/SQSObservableQueue.java",
    "chars": 14229,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awssqs-event-queue/src/main/resources/META-INF/additional-spring-configuration-metadata.json",
    "chars": 821,
    "preview": "{\n  \"properties\": [\n    {\n      \"name\": \"conductor.event-queues.sqs.enabled\",\n      \"type\": \"java.lang.Boolean\",\n      \""
  },
  {
    "path": "awssqs-event-queue/src/test/java/com/netflix/conductor/sqs/eventqueue/DefaultEventQueueProcessorTest.java",
    "chars": 6437,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "awssqs-event-queue/src/test/java/com/netflix/conductor/sqs/eventqueue/SQSObservableQueueTest.java",
    "chars": 3947,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "build.gradle",
    "chars": 12803,
    "preview": "import org.springframework.boot.gradle.plugin.SpringBootPlugin\n\nbuildscript {\n    repositories {\n        mavenCentral()\n"
  },
  {
    "path": "cassandra-persistence/build.gradle",
    "chars": 1514,
    "preview": "/*\n *  Copyright 2021 Netflix, Inc.\n *  <p>\n *  Licensed under the Apache License, Version 2.0 (the \"License\"); you may "
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/CassandraConfiguration.java",
    "chars": 4756,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/CassandraProperties.java",
    "chars": 5639,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/cache/CacheableEventHandlerDAO.java",
    "chars": 5486,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/cache/CacheableMetadataDAO.java",
    "chars": 6028,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/config/cache/CachingConfig.java",
    "chars": 1282,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraBaseDAO.java",
    "chars": 13152,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraEventHandlerDAO.java",
    "chars": 6181,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java",
    "chars": 39920,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraMetadataDAO.java",
    "chars": 20556,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraPollDataDAO.java",
    "chars": 1721,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/util/Constants.java",
    "chars": 2317,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/util/Statements.java",
    "chars": 25034,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/main/resources/META-INF/additional-spring-configuration-metadata.json",
    "chars": 724,
    "preview": "{\n  \"properties\": [\n    {\n      \"name\": \"conductor.cassandra.write-consistency-level\",\n      \"defaultValue\": \"LOCAL_QUOR"
  },
  {
    "path": "cassandra-persistence/src/test/groovy/com/netflix/conductor/cassandra/dao/CassandraEventHandlerDAOSpec.groovy",
    "chars": 3499,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/test/groovy/com/netflix/conductor/cassandra/dao/CassandraExecutionDAOSpec.groovy",
    "chars": 20413,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/test/groovy/com/netflix/conductor/cassandra/dao/CassandraMetadataDAOSpec.groovy",
    "chars": 7551,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/test/groovy/com/netflix/conductor/cassandra/dao/CassandraSpec.groovy",
    "chars": 2531,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "cassandra-persistence/src/test/groovy/com/netflix/conductor/cassandra/util/StatementsSpec.groovy",
    "chars": 5611,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/build.gradle",
    "chars": 1607,
    "preview": "buildscript {\n    repositories {\n        maven {\n            url \"https://plugins.gradle.org/m2/\"\n        }\n    }\n    de"
  },
  {
    "path": "client/spotbugsExclude.xml",
    "chars": 433,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<FindBugsFilter\n        xmlns=\"https://github.com/spotbugs/filter/3.0.0\"\n        "
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/automator/PollingSemaphore.java",
    "chars": 2243,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/automator/TaskPollExecutor.java",
    "chars": 18544,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/automator/TaskRunnerConfigurer.java",
    "chars": 11305,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/config/ConductorClientConfiguration.java",
    "chars": 2121,
    "preview": "/*\n * Copyright 2018 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/config/DefaultConductorClientConfiguration.java",
    "chars": 1342,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/config/PropertyFactory.java",
    "chars": 3468,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/exception/ConductorClientException.java",
    "chars": 3854,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/http/ClientBase.java",
    "chars": 15540,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/http/ClientRequestHandler.java",
    "chars": 3212,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/http/EventClient.java",
    "chars": 4915,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/http/MetadataClient.java",
    "chars": 7228,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/http/PayloadStorage.java",
    "chars": 7390,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/http/TaskClient.java",
    "chars": 19753,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/http/WorkflowClient.java",
    "chars": 22036,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/telemetry/MetricsContainer.java",
    "chars": 8664,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/main/java/com/netflix/conductor/client/worker/Worker.java",
    "chars": 4075,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/groovy/com/netflix/conductor/client/http/ClientSpecification.groovy",
    "chars": 1244,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/groovy/com/netflix/conductor/client/http/EventClientSpec.groovy",
    "chars": 2570,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/groovy/com/netflix/conductor/client/http/MetadataClientSpec.groovy",
    "chars": 2872,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/groovy/com/netflix/conductor/client/http/TaskClientSpec.groovy",
    "chars": 4140,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/groovy/com/netflix/conductor/client/http/WorkflowClientSpec.groovy",
    "chars": 4474,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/automator/PollingSemaphoreTest.java",
    "chars": 3292,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/automator/TaskPollExecutorTest.java",
    "chars": 29354,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/automator/TaskRunnerConfigurerTest.java",
    "chars": 10286,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/config/TestPropertyFactory.java",
    "chars": 2758,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/sample/Main.java",
    "chars": 1681,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/sample/SampleWorker.java",
    "chars": 1531,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/testing/AbstractWorkflowTests.java",
    "chars": 6066,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/testing/LoanWorkflowInput.java",
    "chars": 1109,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/testing/LoanWorkflowTest.java",
    "chars": 4873,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/testing/RegressionTest.java",
    "chars": 3262,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/testing/SubWorkflowTest.java",
    "chars": 3085,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/java/com/netflix/conductor/client/worker/TestWorkflowTask.java",
    "chars": 2586,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client/src/test/resources/config.properties",
    "chars": 500,
    "preview": "conductor.worker.pollingInterval=2\nconductor.worker.paused=false\nconductor.worker.workerA.paused=true\nconductor.worker.w"
  },
  {
    "path": "client/src/test/resources/tasks.json",
    "chars": 1832,
    "preview": "[\n  {\n    \"taskType\": \"task_1\",\n    \"status\": \"IN_PROGRESS\",\n    \"inputData\": {\n      \"mod\": null,\n      \"oddEven\": null"
  },
  {
    "path": "client/src/test/resources/test_data/loan_workflow_input.json",
    "chars": 338,
    "preview": "{\n  \"fetch_user_details\": [{\n    \"status\": \"COMPLETED\",\n    \"output\": {\n      \"userAccount\": 12345\n    }\n  }],\n  \"get_cr"
  },
  {
    "path": "client/src/test/resources/test_data/workflow1_run.json",
    "chars": 5939,
    "preview": "{\n  \"createTime\": 1675903039613,\n  \"updateTime\": 1675903040396,\n  \"createdBy\": \"\",\n  \"updatedBy\": \"\",\n  \"status\": \"COMPL"
  },
  {
    "path": "client/src/test/resources/workflows/PopulationMinMax.json",
    "chars": 992,
    "preview": "{\n  \"createTime\": 1670136356629,\n  \"updateTime\": 1670136356636,\n  \"name\": \"PopulationMinMax\",\n  \"description\": \"Edit or "
  },
  {
    "path": "client/src/test/resources/workflows/calculate_loan_workflow.json",
    "chars": 1178,
    "preview": "{\n  \"name\": \"test_workflow\",\n  \"description\": \"Edit or extend this sample workflow. Set the workflow name to get started"
  },
  {
    "path": "client/src/test/resources/workflows/kitchensink.json",
    "chars": 15370,
    "preview": "{\n  \"createTime\": 1670136330055,\n  \"updateTime\": 1670176591044,\n  \"name\": \"kitchensink\",\n  \"version\": 1,\n  \"tasks\": [\n  "
  },
  {
    "path": "client/src/test/resources/workflows/workflow1.json",
    "chars": 1033,
    "preview": "{\n  \"createTime\": 1674453020104,\n  \"updateTime\": 1674453020105,\n  \"name\": \"test_http\",\n  \"description\": \"v1\",\n  \"version"
  },
  {
    "path": "client-spring/build.gradle",
    "chars": 283,
    "preview": "\ndependencies {\n\n    implementation project(':conductor-common')\n    api project(':conductor-client')\n    api project(':"
  },
  {
    "path": "client-spring/src/main/java/com/netflix/conductor/client/spring/ClientProperties.java",
    "chars": 2930,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client-spring/src/main/java/com/netflix/conductor/client/spring/ConductorClientAutoConfiguration.java",
    "chars": 2936,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client-spring/src/main/java/com/netflix/conductor/client/spring/ConductorWorkerAutoConfiguration.java",
    "chars": 2180,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client-spring/src/main/java/com/netflix/conductor/client/spring/SpringWorkerConfiguration.java",
    "chars": 1608,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client-spring/src/main/resources/META-INF/spring.factories",
    "chars": 136,
    "preview": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\\n  com.netflix.conductor.client.spring.ConductorClientAu"
  },
  {
    "path": "client-spring/src/test/java/com/netflix/conductor/client/spring/ExampleClient.java",
    "chars": 1487,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client-spring/src/test/java/com/netflix/conductor/client/spring/Workers.java",
    "chars": 1906,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "client-spring/src/test/resources/application.properties",
    "chars": 131,
    "preview": "conductor.client.rootUri=http://localhost:8080/api/\nconductor.worker.hello.threadCount=100\nconductor.worker.hello_again."
  },
  {
    "path": "common/build.gradle",
    "chars": 2199,
    "preview": "configurations {\n    annotationsProcessorCodegen\n}\n\ndependencies {\n    implementation project(':conductor-annotations')\n"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/config/ObjectMapperBuilderConfiguration.java",
    "chars": 1629,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/config/ObjectMapperConfiguration.java",
    "chars": 1547,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/config/ObjectMapperProvider.java",
    "chars": 2469,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/constraints/NoSemiColonConstraint.java",
    "chars": 2077,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/constraints/OwnerEmailMandatoryConstraint.java",
    "chars": 2288,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/constraints/TaskReferenceNameUniqueConstraint.java",
    "chars": 4893,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/constraints/TaskTimeoutConstraint.java",
    "chars": 2643,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/jackson/JsonProtoModule.java",
    "chars": 6663,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/Auditable.java",
    "chars": 2163,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/BaseDef.java",
    "chars": 1966,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/acl/Permission.java",
    "chars": 772,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/events/EventExecution.java",
    "chars": 4503,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/events/EventHandler.java",
    "chars": 9788,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/tasks/PollData.java",
    "chars": 3084,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/tasks/Task.java",
    "chars": 28623,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskDef.java",
    "chars": 14110,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskExecLog.java",
    "chars": 2450,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskResult.java",
    "chars": 9629,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskType.java",
    "chars": 3883,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/DynamicForkJoinTask.java",
    "chars": 2811,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/DynamicForkJoinTaskList.java",
    "chars": 1537,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/RerunWorkflowRequest.java",
    "chars": 2176,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/SkipTaskRequest.java",
    "chars": 2001,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/StartWorkflowRequest.java",
    "chars": 4444,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/SubWorkflowParams.java",
    "chars": 4129,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/WorkflowDef.java",
    "chars": 12925,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/WorkflowDefSummary.java",
    "chars": 2778,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/metadata/workflow/WorkflowTask.java",
    "chars": 22898,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/model/BulkResponse.java",
    "chars": 2624,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/run/ExternalStorageLocation.java",
    "chars": 1432,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/run/SearchResult.java",
    "chars": 1448,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/run/TaskSummary.java",
    "chars": 12292,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/run/Workflow.java",
    "chars": 17694,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/run/WorkflowSummary.java",
    "chars": 10782,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/run/WorkflowTestRequest.java",
    "chars": 3183,
    "preview": "/*\n * Copyright 2023 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/utils/ConstraintParamUtil.java",
    "chars": 6356,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/utils/EnvUtils.java",
    "chars": 1519,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/utils/ExternalPayloadStorage.java",
    "chars": 3372,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/utils/SummaryUtil.java",
    "chars": 2490,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java",
    "chars": 1227,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/validation/ErrorResponse.java",
    "chars": 1852,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/main/java/com/netflix/conductor/common/validation/ValidationError.java",
    "chars": 1878,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/config/TestObjectMapperConfiguration.java",
    "chars": 1080,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/events/EventHandlerTest.java",
    "chars": 1893,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/run/TaskSummaryTest.java",
    "chars": 1635,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/tasks/TaskDefTest.java",
    "chars": 4451,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/tasks/TaskResultTest.java",
    "chars": 3067,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/tasks/TaskTest.java",
    "chars": 5408,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/utils/ConstraintParamUtilTest.java",
    "chars": 10658,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/utils/SummaryUtilTest.java",
    "chars": 3916,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/workflow/SubWorkflowParamsTest.java",
    "chars": 5031,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/workflow/WorkflowDefValidatorTest.java",
    "chars": 13811,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "common/src/test/java/com/netflix/conductor/common/workflow/WorkflowTaskTest.java",
    "chars": 2792,
    "preview": "/*\n * Copyright 2020 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "core/build.gradle",
    "chars": 2713,
    "preview": "/*\n *  Copyright 2021 Netflix, Inc.\n *  <p>\n *  Licensed under the Apache License, Version 2.0 (the \"License\"); you may "
  },
  {
    "path": "core/src/main/java/com/netflix/conductor/annotations/Audit.java",
    "chars": 945,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "core/src/main/java/com/netflix/conductor/annotations/Trace.java",
    "chars": 893,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "core/src/main/java/com/netflix/conductor/annotations/VisibleForTesting.java",
    "chars": 958,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "core/src/main/java/com/netflix/conductor/core/LifecycleAwareComponent.java",
    "chars": 1425,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "core/src/main/java/com/netflix/conductor/core/WorkflowContext.java",
    "chars": 1683,
    "preview": "/*\n * Copyright 2022 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "core/src/main/java/com/netflix/conductor/core/config/ConductorCoreConfiguration.java",
    "chars": 5361,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  },
  {
    "path": "core/src/main/java/com/netflix/conductor/core/config/ConductorProperties.java",
    "chars": 19499,
    "preview": "/*\n * Copyright 2021 Netflix, Inc.\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not"
  }
]

// ... and 830 more files (download for full content)

About this extraction

This page contains the full source code of the Netflix/conductor GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1030 files (5.8 MB), approximately 1.6M tokens, and a symbol index with 6536 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!