@@ -832,34 +832,15 @@ private void reattach(String errorMessage) throws OdpsException {
832832 }
833833 }
834834
835- private ExecuteMode handleSessionException (String errorMessage ) throws OdpsException {
836- if (errorMessage .indexOf (SQLExecutorConstants .sessionReattachFlag ) != -1 ) {
835+ private ExecuteMode handleSessionException (String errorCode , String errorMessage )
836+ throws OdpsException {
837+ if (errorMessage .contains (SQLExecutorConstants .sessionReattachFlag )) {
837838 reattach (errorMessage );
838839 return ExecuteMode .INTERACTIVE ;
839- } else if (errorMessage .indexOf (SQLExecutorConstants .sessionJobCancelledComplierFlag ) != - 1 ||
840- errorMessage .indexOf (SQLExecutorConstants .sessionJobCancelledFlag ) != - 1 ) {
840+ } else if (errorMessage .contains (SQLExecutorConstants .sessionJobCancelledComplierFlag ) ||
841+ errorMessage .contains (SQLExecutorConstants .sessionJobCancelledFlag )) {
841842 throw new OdpsException (errorMessage );
842- } else if (fallbackPolicy .isFallback4UnsupportedFeature ()
843- && errorMessage .indexOf (SQLExecutorConstants .sessionUnsupportedFeatureFlag ) != -1 ) {
844- return ExecuteMode .OFFLINE ;
845- } else if (fallbackPolicy .isFallback4Upgrading ()
846- && errorMessage .indexOf (SQLExecutorConstants .sessionUnavailableFlag ) != -1 ) {
847- return ExecuteMode .OFFLINE ;
848- } else if (fallbackPolicy .isFallback4Upgrading ()
849- && errorMessage .indexOf (SQLExecutorConstants .sessionAccessDenyFlag ) != -1 ) {
850- return ExecuteMode .OFFLINE ;
851- } else if (fallbackPolicy .isFallback4ResourceNotEnough ()
852- && errorMessage .indexOf (SQLExecutorConstants .sessionResourceNotEnoughFlag ) != -1 ) {
853- return ExecuteMode .OFFLINE ;
854- } else if (fallbackPolicy .isFallback4RunningTimeout ()
855- && (errorMessage .indexOf (SQLExecutorConstants .sessionQueryTimeoutFlag ) != -1 ||
856- errorMessage .indexOf (SQLExecutorConstants .sessionTunnelTimeoutMessage ) != -1 ||
857- errorMessage .indexOf (SQLExecutorConstants .sessionTunnelGetSelectDescTimeoutMessage ) != -1 )) {
858- return ExecuteMode .OFFLINE ;
859- } else if (fallbackPolicy .isFallback4UnknownError ()
860- && errorMessage .indexOf (SQLExecutorConstants .sessionExceptionFlag ) != -1 ) {
861- return ExecuteMode .OFFLINE ;
862- } else if (fallbackPolicy .isAlwaysFallBack ()) {
843+ } else if (fallbackPolicy .shouldFallback (errorCode , errorMessage )) {
863844 return ExecuteMode .OFFLINE ;
864845 } else {
865846 throw new OdpsException (errorMessage );
@@ -1065,7 +1046,7 @@ private List<Record> getSessionResult()
10651046 result = session .getRawSubQueryResult (queryInfo .getId ());
10661047 }
10671048 } catch (OdpsException e ) {
1068- ExecuteMode executeMode = handleSessionException (e .getMessage ());
1049+ ExecuteMode executeMode = handleSessionException (e .getErrorCode (), e . getMessage ());
10691050 runQueryInternal (executeMode , e .getMessage (), true );
10701051 return getResultInternal (null , null , null , true );
10711052 }
@@ -1110,7 +1091,7 @@ private List<Record> getSessionResultByInstanceTunnel(Long offset, Long countLim
11101091 runQueryInternal (ExecuteMode .OFFLINE , retryInfo .errMsg , true );
11111092 return getResultInternal (offset , countLimit , sizeLimit , limitEnabled );
11121093 } else {
1113- ExecuteMode executeMode = handleSessionException (retryInfo .errMsg );
1094+ ExecuteMode executeMode = handleSessionException (retryInfo .errCode , retryInfo . errMsg );
11141095 runQueryInternal (executeMode , retryInfo .errMsg , true );
11151096 return getResultInternal (offset , countLimit , sizeLimit , limitEnabled );
11161097 }
@@ -1178,7 +1159,7 @@ private ResultSet getSessionResultSet()
11781159 result = session .getRawSubQueryResult (queryInfo .getId ());
11791160 }
11801161 } catch (OdpsException e ) {
1181- ExecuteMode executeMode = handleSessionException (e .getMessage ());
1162+ ExecuteMode executeMode = handleSessionException (e .getErrorCode (), e . getMessage ());
11821163 runQueryInternal (executeMode , e .getMessage (), true );
11831164 return getResultSetInternal (null , null , null , true );
11841165 }
@@ -1219,7 +1200,7 @@ private ResultSet getSessionResultSetByInstanceTunnel(Long offset, Long countLim
12191200 runQueryInternal (ExecuteMode .OFFLINE , retryInfo .errMsg , true );
12201201 return getResultSetInternal (offset , countLimit , sizeLimit , limitEnabled );
12211202 } else {
1222- ExecuteMode executeMode = handleSessionException (retryInfo .errMsg );
1203+ ExecuteMode executeMode = handleSessionException (retryInfo .errCode , retryInfo . errMsg );
12231204 runQueryInternal (executeMode , retryInfo .errMsg , true );
12241205 return getResultSetInternal (offset , countLimit , sizeLimit , limitEnabled );
12251206 }
@@ -1308,7 +1289,7 @@ private void runInSessionWithRetry(String rerunMsg) throws OdpsException {
13081289 session .runSubQuery (queryInfo .getSql (), queryInfo .getHint ());
13091290 if (subQueryInfo .status .equals (Session .SubQueryInfo .kOKCode )) {
13101291 if (subQueryInfo .queryId == -1 ) {
1311- ExecuteMode executeMode = handleSessionException (subQueryInfo .result );
1292+ ExecuteMode executeMode = handleSessionException (subQueryInfo .result , subQueryInfo . result );
13121293 runQueryInternal (executeMode , subQueryInfo .result , true );
13131294 } else {
13141295 // submit success, do not generate logview now
0 commit comments