@@ -830,34 +830,15 @@ private void reattach(String errorMessage) throws OdpsException {
830830 }
831831 }
832832
833- private ExecuteMode handleSessionException (String errorMessage ) throws OdpsException {
834- if (errorMessage .indexOf (SQLExecutorConstants .sessionReattachFlag ) != -1 ) {
833+ private ExecuteMode handleSessionException (String errorCode , String errorMessage )
834+ throws OdpsException {
835+ if (errorMessage .contains (SQLExecutorConstants .sessionReattachFlag )) {
835836 reattach (errorMessage );
836837 return ExecuteMode .INTERACTIVE ;
837- } else if (errorMessage .indexOf (SQLExecutorConstants .sessionJobCancelledComplierFlag ) != - 1 ||
838- errorMessage .indexOf (SQLExecutorConstants .sessionJobCancelledFlag ) != - 1 ) {
838+ } else if (errorMessage .contains (SQLExecutorConstants .sessionJobCancelledComplierFlag ) ||
839+ errorMessage .contains (SQLExecutorConstants .sessionJobCancelledFlag )) {
839840 throw new OdpsException (errorMessage );
840- } else if (fallbackPolicy .isFallback4UnsupportedFeature ()
841- && errorMessage .indexOf (SQLExecutorConstants .sessionUnsupportedFeatureFlag ) != -1 ) {
842- return ExecuteMode .OFFLINE ;
843- } else if (fallbackPolicy .isFallback4Upgrading ()
844- && errorMessage .indexOf (SQLExecutorConstants .sessionUnavailableFlag ) != -1 ) {
845- return ExecuteMode .OFFLINE ;
846- } else if (fallbackPolicy .isFallback4Upgrading ()
847- && errorMessage .indexOf (SQLExecutorConstants .sessionAccessDenyFlag ) != -1 ) {
848- return ExecuteMode .OFFLINE ;
849- } else if (fallbackPolicy .isFallback4ResourceNotEnough ()
850- && errorMessage .indexOf (SQLExecutorConstants .sessionResourceNotEnoughFlag ) != -1 ) {
851- return ExecuteMode .OFFLINE ;
852- } else if (fallbackPolicy .isFallback4RunningTimeout ()
853- && (errorMessage .indexOf (SQLExecutorConstants .sessionQueryTimeoutFlag ) != -1 ||
854- errorMessage .indexOf (SQLExecutorConstants .sessionTunnelTimeoutMessage ) != -1 ||
855- errorMessage .indexOf (SQLExecutorConstants .sessionTunnelGetSelectDescTimeoutMessage ) != -1 )) {
856- return ExecuteMode .OFFLINE ;
857- } else if (fallbackPolicy .isFallback4UnknownError ()
858- && errorMessage .indexOf (SQLExecutorConstants .sessionExceptionFlag ) != -1 ) {
859- return ExecuteMode .OFFLINE ;
860- } else if (fallbackPolicy .isAlwaysFallBack ()) {
841+ } else if (fallbackPolicy .shouldFallback (errorCode , errorMessage )) {
861842 return ExecuteMode .OFFLINE ;
862843 } else {
863844 throw new OdpsException (errorMessage );
@@ -1063,7 +1044,7 @@ private List<Record> getSessionResult()
10631044 result = session .getRawSubQueryResult (queryInfo .getId ());
10641045 }
10651046 } catch (OdpsException e ) {
1066- ExecuteMode executeMode = handleSessionException (e .getMessage ());
1047+ ExecuteMode executeMode = handleSessionException (e .getErrorCode (), e . getMessage ());
10671048 runQueryInternal (executeMode , e .getMessage (), true );
10681049 return getResultInternal (null , null , null , true );
10691050 }
@@ -1108,7 +1089,7 @@ private List<Record> getSessionResultByInstanceTunnel(Long offset, Long countLim
11081089 runQueryInternal (ExecuteMode .OFFLINE , retryInfo .errMsg , true );
11091090 return getResultInternal (offset , countLimit , sizeLimit , limitEnabled );
11101091 } else {
1111- ExecuteMode executeMode = handleSessionException (retryInfo .errMsg );
1092+ ExecuteMode executeMode = handleSessionException (retryInfo .errCode , retryInfo . errMsg );
11121093 runQueryInternal (executeMode , retryInfo .errMsg , true );
11131094 return getResultInternal (offset , countLimit , sizeLimit , limitEnabled );
11141095 }
@@ -1176,7 +1157,7 @@ private ResultSet getSessionResultSet()
11761157 result = session .getRawSubQueryResult (queryInfo .getId ());
11771158 }
11781159 } catch (OdpsException e ) {
1179- ExecuteMode executeMode = handleSessionException (e .getMessage ());
1160+ ExecuteMode executeMode = handleSessionException (e .getErrorCode (), e . getMessage ());
11801161 runQueryInternal (executeMode , e .getMessage (), true );
11811162 return getResultSetInternal (null , null , null , true );
11821163 }
@@ -1217,7 +1198,7 @@ private ResultSet getSessionResultSetByInstanceTunnel(Long offset, Long countLim
12171198 runQueryInternal (ExecuteMode .OFFLINE , retryInfo .errMsg , true );
12181199 return getResultSetInternal (offset , countLimit , sizeLimit , limitEnabled );
12191200 } else {
1220- ExecuteMode executeMode = handleSessionException (retryInfo .errMsg );
1201+ ExecuteMode executeMode = handleSessionException (retryInfo .errCode , retryInfo . errMsg );
12211202 runQueryInternal (executeMode , retryInfo .errMsg , true );
12221203 return getResultSetInternal (offset , countLimit , sizeLimit , limitEnabled );
12231204 }
@@ -1306,7 +1287,7 @@ private void runInSessionWithRetry(String rerunMsg) throws OdpsException {
13061287 session .runSubQuery (queryInfo .getSql (), queryInfo .getHint ());
13071288 if (subQueryInfo .status .equals (Session .SubQueryInfo .kOKCode )) {
13081289 if (subQueryInfo .queryId == -1 ) {
1309- ExecuteMode executeMode = handleSessionException (subQueryInfo .result );
1290+ ExecuteMode executeMode = handleSessionException (subQueryInfo .result , subQueryInfo . result );
13101291 runQueryInternal (executeMode , subQueryInfo .result , true );
13111292 } else {
13121293 // submit success, do not generate logview now
0 commit comments