public void populateTaskData(TaskModel taskModel) {
        if (StringUtils.isNotBlank(taskModel.getExternalOutputPayloadStoragePath())) {
            Map<String, Object> outputData =
                    externalPayloadStorageUtils.downloadPayload(
                            taskModel.getExternalOutputPayloadStoragePath());
            taskModel.internalizeOutput(outputData);
            Monitors.recordExternalPayloadStorageUsage(
                    taskModel.getTaskDefName(),
                    ExternalPayloadStorage.Operation.READ.toString(),
                    ExternalPayloadStorage.PayloadType.TASK_OUTPUT.toString());
        }

        if (StringUtils.isNotBlank(taskModel.getExternalInputPayloadStoragePath())) {
            Map<String, Object> inputData =
                    externalPayloadStorageUtils.downloadPayload(
                            taskModel.getExternalInputPayloadStoragePath());
            taskModel.internalizeInput(inputData);
            Monitors.recordExternalPayloadStorageUsage(
                    taskModel.getTaskDefName(),
                    ExternalPayloadStorage.Operation.READ.toString(),
                    ExternalPayloadStorage.PayloadType.TASK_INPUT.toString());
        }
    }
Populates the workflow input data and the tasks input/output data if stored in external
payload storage.

@param workflowModel the workflowModel for which the payload data needs to be populated from
    external storage (if applicable)
core/src/main/java/com/netflix/conductor/core/dal/ExecutionDAOFacade.java