private async addTaskCollection()

in packages/azure-services/src/azure-batch/batch.ts [251:296]


    private async addTaskCollection(jobId: string, messages: Message[]): Promise<JobTask[]> {
        if (messages.length === 0) {
            return [];
        }

        const jobTasks: Map<string, JobTask> = new Map();
        const taskAddParameters: BatchServiceModels.TaskAddParameter[] = [];
        let sasUrl: string;

        try {
            sasUrl = await this.containerSASUrlProvider.generateSASUrl(Batch.batchLogContainerName);
        } catch (error) {
            this.logger.logError(`Encountered the error while generating Blob Storage SAS URL`, {
                error: System.serializeError(error),
                blobContainerName: Batch.batchLogContainerName,
            });
        }

        await Promise.all(
            messages.map(async (message) => {
                const jobTask = new JobTask(message.messageId);
                jobTasks.set(jobTask.id, jobTask);
                const taskAddParameter = await this.getTaskAddParameter(jobId, jobTask.id, message.messageText, sasUrl);
                taskAddParameters.push(taskAddParameter);
            }),
        );

        const client = await this.batchClientProvider();
        const taskAddCollectionResult = await client.task.addCollection(jobId, taskAddParameters);
        taskAddCollectionResult.value.forEach((taskAddResult) => {
            if (/success/i.test(taskAddResult.status)) {
                jobTasks.get(taskAddResult.taskId).state = JobTaskState.queued;
            } else {
                jobTasks.get(taskAddResult.taskId).state = JobTaskState.failed;
                jobTasks.get(taskAddResult.taskId).error = taskAddResult.error.message.value;
                this.logger.logError(`An error occurred while adding new task to the job.`, {
                    correlatedBatchJobId: jobId,
                    correlatedBatchTaskId: taskAddResult.taskId,
                    error: taskAddResult.error.message.value,
                    taskAddResult: JSON.stringify(taskAddResult),
                });
            }
        });

        return Array.from(jobTasks.values());
    }