func formatError(err error) error { if err == nil { return nil } s := fmt.Sprintf(", vtgate: %v", servenv.ListeningURL.String()) return vterrors.WithSuffix(err, s) }
func handleExecuteError(err error, statsKey []string, query map[string]interface{}, logger *logutil.ThrottledLogger) { s := fmt.Sprintf(", vtgate: %v", servenv.ListeningURL.String()) newErr := vterrors.WithSuffix(err, s) errStr := newErr.Error() if strings.Contains(errStr, errDupKey) { infoErrors.Add("DupKey", 1) } else if strings.Contains(errStr, errOutOfRange) { infoErrors.Add("OutOfRange", 1) } else if strings.Contains(errStr, errTxPoolFull) { normalErrors.Add(statsKey, 1) } else { normalErrors.Add(statsKey, 1) logError(err, query, logger) } }
func handleExecuteError(err error, statsKey []string, query map[string]interface{}, logger *logutil.ThrottledLogger) error { // First we log in the right category. ec := vterrors.RecoverVtErrorCode(err) switch ec { case vtrpcpb.ErrorCode_INTEGRITY_ERROR: // Duplicate key error, no need to log. infoErrors.Add("DupKey", 1) case vtrpcpb.ErrorCode_RESOURCE_EXHAUSTED, vtrpcpb.ErrorCode_BAD_INPUT: // Tx pool full error, or bad input, no need to log. normalErrors.Add(statsKey, 1) default: // Regular error, we will log if caused by vtgate. normalErrors.Add(statsKey, 1) logError(err, query, logger) } // Then we suffix the error with our address. s := fmt.Sprintf(", vtgate: %v", servenv.ListeningURL.String()) return vterrors.WithSuffix(err, s) }