validation: async()

in wrappers/validators/comparator-validator.ts [219:286]


            validation: async (root: IBuiltStage, subtree: IBuiltStage) => {

                /* signal ingestion to move to timeout phase */
                signalMoveToTimeoutIngestion();
                
                /* wait for grace timeout phase */
                const graceStartTime = Date.now();
                const validationCompleted = await ingestionCompleteOrTimeout();
                const validationGraceDuration = ingestionLatestTime - graceStartTime;

                /* ingest source generator logs */
                const stageGeneratorLogCount = config.stageGeneratorLogCount ?? validationLogTotalCount;
                for (let i = 0; i < stageGeneratorLogCount; ++i) {
                    const stageLog = await stageGeneratorInstance.next();
                    if (stageLog.value ===  null) {
                        break;
                    }
                    ingestStageLogBatch(stageLog.value);
                    if (stageLog.done) {
                        break;
                    }
                }

                /* verify logs in both + only_stage_log */
                let duplicate = 0;
                let loss = 0;
                for (const myHash in stageLogHashCounts) {
                    const stageCount = stageLogHashCounts[myHash] ?? 0;
                    const validationCount = validationLogHashCounts[myHash] ?? 0;

                    if (stageCount > validationCount) {
                        loss += stageCount - validationCount;
                    }
                    if (validationCount > stageCount) {
                        duplicate += validationCount - stageCount;
                    }
                }

                /* verify logs in only_validation_count */
                for (const myHash in validationLogHashCounts) {
                    if (stageLogHashCounts.hasOwnProperty(myHash)) {
                        /* In stageHashCounts */
                        continue;
                    }
                    const validationCount = validationLogHashCounts[myHash] ?? 0;
                    duplicate += validationCount;
                }

                /* additional metrics */
                const testDuration = Date.now() - testStartTime;
                const validationGraceAndMetricsDuration = Date.now() - graceStartTime;

                return {
                    isValidationSuccess: true,
                    // Other data can be added here for validation metric collection.
                    validationData: {
                        testDuration: testDuration,
                        validationLogTotalCount: validationLogTotalCount,
                        duplicate: duplicate,
                        loss: loss,
                        
                        validationGraceDuration: validationGraceDuration,
                        validationGraceAndMetricsDuration: validationGraceAndMetricsDuration,
                        isValidationCompleted: validationCompleted,
                    } as IComparatorWrapperMetrics,
                    /* May want to add hidden validation data */
                };
            },