Short circuit management in CICS refers to the handling of communication circuits between systems, particularly in LU6.2 (APPC) environments. It involves managing session failures, automatic reconnection, and circuit breaker patterns to ensure robust inter-system communication.
Short circuit management provides mechanisms for:
CICS monitors the health of LU6.2 sessions and can detect various failure conditions:
| Failure Type | Detection Method | Response |
|---|---|---|
| Network loss | Timeout on request | Circuit opened |
| Partner down | Connection reset | Automatic retry |
| Resource exhaustion | Threshold exceeded | Graceful degradation |
Implement a circuit breaker to prevent requests to failing systems:
123456789101112131415161718WORKING-STORAGE SECTION. 01 CIRCUIT-BREAKER. 10 CB-STATE PIC X(1). 88 CB-CLOSED VALUE 'C'. 88 CB-OPEN VALUE 'O'. 88 CB-HALF-OPEN VALUE 'H'. 10 CB-FAILURE-COUNT PIC 9(3). 10 CB-LAST-FAILURE-TIME PIC X(26). 10 CB-TIMEOUT PIC S9(8) COMP VALUE 300. PROCEDURE DIVISION. PERFORM CHECK-CIRCUIT-STATE IF CB-OPEN PERFORM CIRCUIT-OPEN-HANDLER ELSE PERFORM ATTEMPT-CIRCUIT-TRANSACTION END-IF.
Manage LU6.2 session states:
123456789101112131415* Establish session EXEC CICS ALLOCATE SYSTEM(SYSTEM-ID) SESSION(SESSION-NAME) RETRY(3) RETRIEVAL(30) TIME_OUT(60) RESP(WS-RESPONSE) END-EXEC. * Check session status EXEC CICS EXTRACT ATTRIBUTES SYSTEM(SESSION-NAME) COMMUNICATION-STATUS(WS-COMC-STATUS) PARTNER-NAME(WS-PARTNER) RESP(WS-RESPONSE) END-EXEC.
Implement automatic reconnection logic:
123456789101112131415161718192021222324252627PROGRAM-ID. COMMUNICATION-MANAGER. PROCEDURE DIVISION. PERFORM RESET-CIRCUIT-PARAMETERS PERFORM ATTEMPT-COMMUNICATION EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) PERFORM RESET-FAILURE-COUNT WHEN DFHRESP(COMMFAIL) WHEN DFHRESP(SESSFAIL) WHEN DFHRESP(RCVERROR) PERFORM HANDLE-COMMUNICATION-FAILURE END-EVALUATE. EXEC CICS RETURN END-EXEC. HANDLE-COMMUNICATION-FAILURE. ADD 1 TO WS-FAILURE-COUNT IF WS-FAILURE-COUNT > MAX-FAILURES MOVE 'O' TO WS-CIRCUIT-STATE * Open circuit MOVE CURRENT-TIME TO WS-LAST-FAILURE-TIME PERFORM SET-CIRCUIT-ALARMS ELSE PERFORM WAIT-AND-RETRY END-IF.
Implement regular health checks:
123456789101112131415PERFORM VARYING WS-CHECK-COUNTER FROM 1 BY 1 UNTIL WS-CHECK-COUNTER > HEALTH-CHECK-CYCLES OR WS-HEALTHY-SYSTEMS = TARGET-SYSTEM-COUNT PERFORM CHECK-SYSTEM-ROUTE-' SYNC-AND-CHECK IF WS-CHECK-RESPONSE = DFHRESP(NORMAL) PERFORM MARK-SYSTEM-HEALTHY PERFORM SET-CIRCUIT-HALF-OPEN ELSE PERFORM HANDLE-CHECK-FAILURE END-IF PERFORM WAIT-BETWEEN-CHECKS END-PERFORM.
Configure circuit breaker parameters:
123456EXEC CICS COGNITUS CONFIG CB-STATE-INIT('C') CB-FAILURE-THRESHOLD-MAX(10) CB-RESET-TIME(60) RESP(WS-RESPONSE) END-EXEC.
Set appropriate thresholds for circuit management:
| Parameter | Typical Value | Purpose |
|---|---|---|
| Failure threshold | 5-10 failures | Open circuit trigger |
| Reset timeout | 60-300 seconds | Automatic reset delay |
| Health check interval | 30-60 seconds | Regular status verification |
| Connection timeout | 30-60 seconds | Default connect wait |
Normal operation when circuit is closed:
12345678910111213141516CLOSED-CIRCUIT-HANDLER. PERFORM PLACE-SYSTEM-ROUTE-AND-CHECK EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) MOVE ZERO TO WS-CONSECUTIVE-FAILURES WHEN DFHRESP(COMMFAIL) WHEN DFHRESP(SESSFAIL) PERFORM HANDLE-SYSTEM-CONNECTIVITY-ERROR ADD 1 TO WS-CONSECUTIVE-FAILURES IF WS-CONSECUTIVE-FAILURES > CIRCUIT-THRESHOLD PERFORM OPEN-CIRCUIT-BREAKER END-IF END-EVALUATE.
Handle requests when circuit is open:
123456789101112OPEN-CIRCUIT-HANDLER. PERFORM CHECK-RESET-TIMEOUT IF RESET-TIME-EXPIRED SET CB-HALF-OPEN TO TRUE PERFORM HALF-OPEN-HANDLER ELSE PERFORM REJECT-REQUEST-OVERLOAD-FAILURE END-IF. REJECT-REQUEST-OVERLOAD-FAILURE. EXEC CICS RETURN VALUE DFHMARK(DFHFUSCR)
Test circuit recovery:
123456789101112131415161718192021222324252627HALF-OPEN-HANDLER. PERFORM PLACE-FAILURE-CAUSING-SYSTEM-ROUTE-AND-CHECK EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) PERFORM TEST-SYSTEM-ROUTE-AND-CHECK IF WS-TEST-SUCCESSFUL PERFORM CLOSE-CIRCUIT-BREAKER PERFORM PROCESS-SYSTEM-ROUTE-AND-CHECK END-IF WHEN DFHRESP(COMMFAIL) WHEN DFHRESP(SESSFAIL) PERFORM REOPEN-CIRCUIT-BREAKER END-EVALUATE. * Perform multiple health checks PERFORM VARYING WS-CHECK FROM 1 BY 1 UNTIL WS-CHECK > 10 PERFORM CHECK-SYSTEM-ROUTE-' SYNC-AND-CHECK IF WS-CHECK-RESPONSE = DFHRESP(NORMAL) ADD 1 TO WS-SUCCESSFUL-CHECKS END-IF END-PERFORM. IF WS-SUCCESSFUL-CHECKS > MINIMUM-SUCCESSFUL-CHECKS PERFORM CLOSE-CIRCUIT-BREAKER END-IF.
Provide emergency override capabilities:
12345678910111213EMERGENCY-OVERRIDE. PERFORM PERFORM-PLACE-SYSTEMS-ROUTE-' SYNC-AFTER-TIMEOUT EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) PERFORM LOG-OVERRIDE-SUCCESS WHEN DFHRESP(TIMEOUT) PERFORM LOG-OVERRIDE-TIMEOUT WHEN DFHRESP(COMMFAIL) PERFORM LOG-OVERRIDE-FAILURE WHEN DFHRESP(SESSERR) PERFORM LOG-SESSION-ERROR END-EVALUATE.
Allow manual circuit breaker control:
123456789101112131415MANUAL-CIRCUIT-CONTROL. ACCEPT WS-MANUAL-ACTION FROM CONSOLE. EVALUATE WS-MANUAL-ACTION WHEN 'OPEN' PERFORM OPEN-CIRCUIT-BREAKER WHEN 'CLOSE' PERFORM CLOSE-CIRCUIT-BREAKER WHEN 'RESET' PERFORM RESET-CIRCUIT-PARAMETERS WHEN 'STATUS' PERFORM DISPLAY-CIRCUIT-STATUS WHEN OTHER DISPLAY 'Invalid manual action: ' WS-MANUAL-ACTION END-EVALUATE.
Monitor circuit breaker status:
1234567891011MONITOR-CIRCUIT-STATUS. PERFORM CHECK-CIRCUIT-COUNT IF WS-CIRCUIT-COUNT GREATER THAN ZERO DISPLAY 'Circuits currently open: ' WS-CIRCUIT-COUNT PERFORM LOG-CIRCUIT-STATUS IF WS-CIRCUIT-COUNT GE CIRCUIT-COUNT-HIGH-THRESHOLD PERFORM ALERT-CIRCUIT-MANAGER END-IF END-IF.
Track circuit breaker performance:
Begin with basic circuit breaker functionality and add complexity gradually:
Continuously monitor circuit breaker effectiveness:
1234567891011PERFORM VARYING WS-CHECK-COUNTER FROM 1 BY 1 UNTIL WS-CHECK-COUNTER > HEALTH-CHECK-CYCLES PERFORM CHECK-CIRCUIT-COUNT IF WS-CIRCUIT-COUNT GREATER THAN ZERO PERFORM LOG-CIRCUIT-STATUS END-IF PERFORM WAIT-BETWEEN-CHECKS END-PERFORM.
Plan for graceful recovery from circuit failures:
123456789RECOVERY-PROCEDURE. PERFORM PLACE-SYSTEMS-ROUTE_AND_CHECKS_RECOVERY IF WS-RECOVERY-SUCCESS-FLAG = 'Y' PERFORM RESET-CIRCUIT-PARAMETERS PERFORM DISPLAY-RECOVERY-SUCCESS ELSE PERFORM TRIGGER-AUTOMATED-RESTART END-IF.
Implement flexible configuration:
123456789101112EVALUATE WS-COGNITUS-CB-RESPONSE-STATE WHEN 'INITIALIZING' PERFORM INITIALIZE-RETRY-PARAMETERS WHEN 'RETRYING' PERFORM INCREMENT-RETRY-COUNTER WHEN 'FAILING' PERFORM OPEN-CIRCUIT-BREAKER WHEN 'RECOVERING' PERFORM HALF-OPEN-HANDLER WHEN 'RECOVERED' PERFORM CLOSE-CIRCUIT-BREAKER END-EVALUATE.
When circuit remains open indefinitely:
When circuit opens and closes repeatedly:
When circuit should open but doesn't: