MainframeMaster

COBOL Checkpoint Processing

Checkpoint processing in COBOL provides essential recovery mechanisms for long-running applications by saving program state at strategic points. This enables programs to restart from the last checkpoint after system failures, reducing reprocessing time and ensuring data integrity.

Understanding Checkpoint Processing

Checkpoint processing involves saving the current state of a program at specific intervals, including file positions, processing counters, and intermediate results. This allows for efficient recovery and restart capabilities in case of system failures or interruptions.

Checkpoint Implementation

1. Basic Checkpoint Structure

Define checkpoint records that capture all necessary state information for program recovery and restart.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
WORKING-STORAGE SECTION. 01 CHECKPOINT-RECORD. 05 CHECKPOINT-ID PIC X(8) VALUE 'CHKPOINT'. 05 CHECKPOINT-TIMESTAMP PIC X(20). 05 CHECKPOINT-SEQUENCE PIC 9(6). 05 FILE-POSITIONS. 10 INPUT-FILE-POS PIC 9(8). 10 OUTPUT-FILE-POS PIC 9(8). 10 WORK-FILE-POS PIC 9(8). 05 PROCESSING-STATUS. 10 RECORDS-PROCESSED PIC 9(8). 10 RECORDS-ERROR PIC 9(8). 10 CURRENT-BATCH PIC 9(4). 05 INTERMEDIATE-RESULTS. 10 TOTAL-AMOUNT PIC 9(12)V99. 10 RECORD-COUNT PIC 9(8). 10 ERROR-COUNT PIC 9(4). 01 CHECKPOINT-CONTROL. 05 CHECKPOINT-INTERVAL PIC 9(4) VALUE 1000. 05 CHECKPOINT-COUNT PIC 9(6) VALUE 0. 05 LAST-CHECKPOINT PIC 9(6) VALUE 0. 05 CHECKPOINT-REQUIRED PIC X(1). 88 CHECKPOINT-NEEDED VALUE 'Y'. 88 CHECKPOINT-NOT-NEEDED VALUE 'N'. PROCEDURE DIVISION. INITIALIZE-CHECKPOINT. MOVE 0 TO CHECKPOINT-SEQUENCE MOVE 0 TO RECORDS-PROCESSED MOVE 0 TO RECORDS-ERROR MOVE 0 TO TOTAL-AMOUNT MOVE 0 TO RECORD-COUNT MOVE 0 TO ERROR-COUNT MOVE 'N' TO CHECKPOINT-REQUIRED.

2. Checkpoint Creation

Implement checkpoint creation logic that saves current program state at regular intervals or specific conditions.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
PROCEDURE DIVISION. CREATE-CHECKPOINT. ADD 1 TO CHECKPOINT-SEQUENCE ACCEPT CHECKPOINT-TIMESTAMP FROM DATE YYYYMMDD ACCEPT CHECKPOINT-TIMESTAMP(9:8) FROM TIME PERFORM SAVE-FILE-POSITIONS PERFORM SAVE-PROCESSING-STATUS PERFORM SAVE-INTERMEDIATE-RESULTS PERFORM WRITE-CHECKPOINT-RECORD MOVE CHECKPOINT-SEQUENCE TO LAST-CHECKPOINT MOVE 'N' TO CHECKPOINT-REQUIRED. SAVE-FILE-POSITIONS. MOVE CURRENT-INPUT-POS TO INPUT-FILE-POS MOVE CURRENT-OUTPUT-POS TO OUTPUT-FILE-POS MOVE CURRENT-WORK-POS TO WORK-FILE-POS. SAVE-PROCESSING-STATUS. MOVE RECORDS-PROCESSED TO RECORDS-PROCESSED MOVE RECORDS-ERROR TO RECORDS-ERROR MOVE CURRENT-BATCH-NUMBER TO CURRENT-BATCH. SAVE-INTERMEDIATE-RESULTS. MOVE RUNNING-TOTAL TO TOTAL-AMOUNT MOVE PROCESSED-COUNT TO RECORD-COUNT MOVE ERROR-TOTAL TO ERROR-COUNT. WRITE-CHECKPOINT-RECORD. WRITE CHECKPOINT-RECORD INVALID KEY DISPLAY 'CHECKPOINT WRITE FAILED' PERFORM HANDLE-CHECKPOINT-ERROR END-WRITE.

3. Checkpoint Restart

Implement restart logic that reads the last checkpoint and restores program state to continue processing from the saved point.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PROCEDURE DIVISION. RESTART-FROM-CHECKPOINT. PERFORM READ-LAST-CHECKPOINT IF CHECKPOINT-FOUND PERFORM RESTORE-FILE-POSITIONS PERFORM RESTORE-PROCESSING-STATUS PERFORM RESTORE-INTERMEDIATE-RESULTS PERFORM VALIDATE-CHECKPOINT-DATA DISPLAY 'RESTARTING FROM CHECKPOINT: ' CHECKPOINT-SEQUENCE ELSE DISPLAY 'NO CHECKPOINT FOUND - STARTING FRESH' PERFORM INITIALIZE-PROCESSING END-IF. READ-LAST-CHECKPOINT. MOVE 'N' TO CHECKPOINT-FOUND-FLAG PERFORM VARYING CHECKPOINT-INDEX FROM 999999 BY -1 UNTIL CHECKPOINT-INDEX = 0 OR CHECKPOINT-FOUND MOVE CHECKPOINT-INDEX TO CHECKPOINT-SEQUENCE READ CHECKPOINT-FILE KEY IS CHECKPOINT-SEQUENCE INVALID KEY CONTINUE NOT INVALID KEY MOVE 'Y' TO CHECKPOINT-FOUND-FLAG END-READ END-PERFORM. RESTORE-FILE-POSITIONS. MOVE INPUT-FILE-POS TO CURRENT-INPUT-POS MOVE OUTPUT-FILE-POS TO CURRENT-OUTPUT-POS MOVE WORK-FILE-POS TO CURRENT-WORK-POS PERFORM POSITION-INPUT-FILE PERFORM POSITION-OUTPUT-FILE PERFORM POSITION-WORK-FILE. RESTORE-PROCESSING-STATUS. MOVE RECORDS-PROCESSED TO PROCESSED-COUNT MOVE RECORDS-ERROR TO ERROR-TOTAL MOVE CURRENT-BATCH TO BATCH-NUMBER. RESTORE-INTERMEDIATE-RESULTS. MOVE TOTAL-AMOUNT TO RUNNING-TOTAL MOVE RECORD-COUNT TO PROCESSED-COUNT MOVE ERROR-COUNT TO ERROR-TOTAL.

Checkpoint Strategies

1. Time-Based Checkpoints

Create checkpoints at regular time intervals to ensure consistent recovery points regardless of processing volume.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WORKING-STORAGE SECTION. 01 TIME-BASED-CHECKPOINT. 05 CHECKPOINT-TIMER PIC 9(8). 05 CHECKPOINT-INTERVAL PIC 9(4) VALUE 300. 05 LAST-CHECKPOINT-TIME PIC 9(8). 05 CURRENT-TIME PIC 9(8). PROCEDURE DIVISION. CHECK-TIME-BASED-CHECKPOINT. ACCEPT CURRENT-TIME FROM TIME COMPUTE TIME-DIFFERENCE = CURRENT-TIME - LAST-CHECKPOINT-TIME IF TIME-DIFFERENCE >= CHECKPOINT-INTERVAL MOVE 'Y' TO CHECKPOINT-REQUIRED MOVE CURRENT-TIME TO LAST-CHECKPOINT-TIME END-IF.

2. Record-Based Checkpoints

Create checkpoints after processing a specific number of records to ensure regular state saving during high-volume processing.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
WORKING-STORAGE SECTION. 01 RECORD-BASED-CHECKPOINT. 05 RECORDS-SINCE-CHECKPOINT PIC 9(8) VALUE 0. 05 CHECKPOINT-RECORD-COUNT PIC 9(4) VALUE 1000. PROCEDURE DIVISION. CHECK-RECORD-BASED-CHECKPOINT. ADD 1 TO RECORDS-SINCE-CHECKPOINT IF RECORDS-SINCE-CHECKPOINT >= CHECKPOINT-RECORD-COUNT MOVE 'Y' TO CHECKPOINT-REQUIRED MOVE 0 TO RECORDS-SINCE-CHECKPOINT END-IF.

3. Event-Based Checkpoints

Create checkpoints based on specific business events or conditions that require state preservation.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WORKING-STORAGE SECTION. 01 EVENT-BASED-CHECKPOINT. 05 BATCH-COMPLETE-FLAG PIC X(1). 88 BATCH-FINISHED VALUE 'Y'. 88 BATCH-IN-PROGRESS VALUE 'N'. 05 ERROR-THRESHOLD PIC 9(3) VALUE 10. 05 CRITICAL-PROCESSING PIC X(1). 88 CRITICAL-STEP VALUE 'Y'. PROCEDURE DIVISION. CHECK-EVENT-BASED-CHECKPOINT. IF BATCH-FINISHED MOVE 'Y' TO CHECKPOINT-REQUIRED ELSE IF ERROR-COUNT > ERROR-THRESHOLD MOVE 'Y' TO CHECKPOINT-REQUIRED ELSE IF CRITICAL-STEP MOVE 'Y' TO CHECKPOINT-REQUIRED END-IF END-IF END-IF.

Checkpoint Validation

1. Data Integrity Checks

Validate checkpoint data to ensure it contains consistent and recoverable state information.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PROCEDURE DIVISION. VALIDATE-CHECKPOINT-DATA. MOVE 'Y' TO VALIDATION-STATUS PERFORM VALIDATE-CHECKPOINT-HEADER PERFORM VALIDATE-FILE-POSITIONS PERFORM VALIDATE-PROCESSING-STATUS PERFORM VALIDATE-INTERMEDIATE-RESULTS IF VALIDATION-STATUS = 'N' DISPLAY 'CHECKPOINT VALIDATION FAILED' PERFORM HANDLE-INVALID-CHECKPOINT END-IF. VALIDATE-CHECKPOINT-HEADER. IF CHECKPOINT-ID NOT = 'CHKPOINT' MOVE 'N' TO VALIDATION-STATUS MOVE 'INVALID CHECKPOINT HEADER' TO ERROR-MESSAGE END-IF. VALIDATE-FILE-POSITIONS. IF INPUT-FILE-POS < 0 OR INPUT-FILE-POS > MAX-FILE-SIZE MOVE 'N' TO VALIDATION-STATUS MOVE 'INVALID INPUT FILE POSITION' TO ERROR-MESSAGE END-IF.

Best Practices for Checkpoint Processing

Common Checkpoint Patterns