Error Handling
A-Stack Runtime Error Message
Below are the list of critical runtime error messages that must be looked for in a deployed A-Stack environment.Â
Error Type | Message | Grep String | Description | Resolution |
---|---|---|---|---|
ERROR | %s is used for %s more than %s msec", this, time, maxAllocTime | " is used for " | One of the TQL to SQL Mapped query is taking more than 6000 millisecond (default max time) to return. | Slow DB responses will severely degrade the performance of the runtime and may result in backed up queues, and client connection time outs.
|
ERROR | %s save error[%s]: %s.%s.%s:%s=%s cn, exc.getSQLState(), aInstance, aAttribute, strOrder(aOrder) | " save error " | Error while Saving TQL Model. |
|
ERROR | %s update error[%s]: %s.%s.%s:%s=%s cn, exc.getSQLState(), aInstance, aAttribute, strOrder(aOrder) | " update error" | Error while Updating TQL Model Attribute |
|
ERROR | %s create error[%s]: %s.%s.%s cn, exc.getSQLState(), aInstance, aAttribute, strOrder(aOrder) | " create error" | Error while Creating TQL Model Attribute |
|
ERROR | %s delete value error[%s]: %s.%s.%s Parameters are:Â cn, exc.getSQLState(), aInstance, aAttribute, strOrder(aOrder) | " delete value error" | Error while Deleting TQL Model Attribute |
|
ERROR | Network peer connect failed for:\n%s | "Network peer connect" | Peer connection has failed. |
|
ERROR | Peer message not sent:\n%s | "Peer message not sent" | Peer is not able to send message across to one of connected peer in cluster. |
|
ERRORÂ | error("Memory alarm %s: %.4f: channel(%s/%.4f) closed: %s", alarmCount, alarm, strFacetTitle(facet), importance, String.valueOf(chl)); | "Memory alarm " | Based on the Alarm value set, the Channel will reject incoming requests. |
|
ERROR | Response lost: %s\n'%s'", server, strMessage(msg, maxPrintLength) | "Response lost" | Clients may have timed out and the response was not sent to client. |
|
ERROR | HSQL DB has unique constraint violation exception as shown below Caused by: org.hsqldb.HsqlException: error in script file line: 59 org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; SYS_PK_10098 table: TR | "integrity constraint violation" | This error indicates that the HSQL Database failed to remove the record from the log file after committing to the data file. |
|
WARN | %s Forbidden: No facet ID\n'%s'\n",  String.valueOf(chl), NettyUtils.strMessage(msg, maxPrintLength) | "No facet ID" | Some external client is trying to access the EndPoint this is not available. |
|
WARN | ModifyPipeline: AutoClosed(%s): %s", timeout, pipeline | "MofiyPipeline: AutoClosed" | Some Protocol Handler has auto closed after number of attempts |
|
WARN | "%s: Maximum queue size (%d) reached: %d", getName(), defMaxQueueSize, size Example: TestFacet: Maximum queue size (1000) reached: 1000. Maximum queue size. Maximum queue size is configured via sff.max.queue.size parameter How to reproduce this sceanrio:
| " Maximum queue size " |
| |
WARN | Network peer %s at %s is not available", qname, p_key | " Network peer " | When cluster node is unable to connect to one of the peer. |
|
WARN | Connection refused:%s Example: SffTcpClient:855 IO error in SffNetworkFacet:wsNotificationCluster-3130539813663882016:ws>NioClientSocketChannel[id: 0x156d1566]; Caused by: java.net.ConnectException: Connection refused: /199.199.199.169:8082 | " IO error " | Connection exception while connecting to a peer. |
|
Error Handling in Applications
Error handling is critical aspect of developing applications in any programming language. Error handling is a mechanism where applications can notify error conditions to end users. A-Stack is a collection of number of atomic domain languages, the error handling varies based on language the application is using. Error handling in A-Stack can be classified into three broad categories -
- Error handling in NewFacetInstances
- Error handling as part of process code in non-workflow definition language.
- Error handling in Workflow Definition Language
Trapping Errors in NewFacetInstances
A-Stack provides <OnError> event as part of Facet life-cycle which can be usedÂ
Trapping Errors in Queries
All TQL exceptions are caught by the TQL facet itself and reported in query/attribute status. TQL exceptions are not passed to error handler and instead we should check the status instead. In the example below we check for Find status value and make changes to the response.Â
Step to Check for Find Status is:
# if($Response.Message.Value.Find/Status == 'Error'): #... else: #...
# Query: Find(Format: "Version"): VendorInfo1: vendorId(ne: "") if($Response.Message.Value.Find/Status == "Error"): AddResponseData: Key: Message.Value.Error.Message Value: [:$Response.Message.Value.Find.Error:] AddResponseData: Key: Message.Value.Error.Code Value: 1002 SetResponseData: Key: Message.Value.Find Value: ""
Response will be as below:
# Error Message: "TQL Find failed: java.lang.IllegalArgumentException: {[3:6,8:19]} Target data model not found: VendorInfo1" Code: 1002