Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package org.apache.iotdb.jdbc;

import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.SessionTimeoutException;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.iotdb.service.rpc.thrift.TSStatus;

Expand Down Expand Up @@ -118,6 +119,16 @@ public void testVerifySuccess() {
fail();
}

try {
TSStatus errorStatus = new TSStatus(TSStatusCode.SESSION_TIMEOUT.getStatusCode());
RpcUtils.verifySuccess(errorStatus);
fail();
} catch (SessionTimeoutException e) {
assertTrue(true);
} catch (Exception e) {
fail();
}

try {
TSStatus errorStatus = new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
RpcUtils.verifySuccess(errorStatus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ public static SessionTimeoutManager getInstance() {
return SessionTimeoutManagerHelper.INSTANCE;
}

public boolean isSessionAlive(long sessionId) {
if (SESSION_TIMEOUT == 0) {
return true;
}
return sessionIdToLastActiveTime.containsKey(sessionId);
}

private static class SessionTimeoutManagerHelper {

private static final SessionTimeoutManager INSTANCE = new SessionTimeoutManager();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,26 @@ public boolean checkLogin(long sessionId) {
boolean isLoggedIn = currSessionId != null && currSessionId == sessionId;
if (!isLoggedIn) {
LOGGER.info("{}: Not login. ", IoTDBConstant.GLOBAL_DB_NAME);
return false;
} else {
SessionTimeoutManager.getInstance().refresh(sessionId);
}
return isLoggedIn;
}

/**
* Check whether current session is timeout.
*
* @param sessionId Session id.
* @return true: If session timeout; false: If not session timeout.
*/
public boolean checkSessionTimeout(long sessionId) {
if (!SessionTimeoutManager.getInstance().isSessionAlive(sessionId)) {
return true;
}
return false;
}

public boolean checkAuthorization(PhysicalPlan plan, String username) throws AuthException {
if (!plan.isAuthenticationRequired()) {
return true;
Expand Down Expand Up @@ -230,7 +244,9 @@ public TSStatus closeOperation(
TSStatusCode.NOT_LOGIN_ERROR,
"Log in failed. Either you are not authorized or the session has timed out.");
}

if (checkSessionTimeout(sessionId)) {
return RpcUtils.getStatus(TSStatusCode.SESSION_TIMEOUT, "Session timeout");
}
if (AUDIT_LOGGER.isDebugEnabled()) {
AUDIT_LOGGER.debug(
"{}: receive close operation from Session {}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ public TSStatus closeSession(TSCloseSessionReq req) {

@Override
public TSStatus writePoints(TSWritePointsReq req) {
if (!serviceProvider.checkLogin(req.sessionId)) {
return getNotLoggedInStatus();
TSStatus loginStatus = checkLoginStatus(req.sessionId);
if (isStatusNotSuccess(loginStatus)) {
return loginStatus;
}

List<TSStatus> tsStatusList = new ArrayList<>();
int executeCode = TSStatusCode.SUCCESS_STATUS.getStatusCode();
for (Point point :
Expand All @@ -114,10 +114,26 @@ public TSStatus writePoints(TSWritePointsReq req) {
return new TSStatus().setCode(executeCode).setSubStatus(tsStatusList);
}

private boolean isStatusNotSuccess(TSStatus tsStatus) {
return tsStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode();
}

private TSStatus checkLoginStatus(long sessionId) {
if (!serviceProvider.checkLogin(sessionId)) {
return getNotLoggedInStatus();
}
if (serviceProvider.checkSessionTimeout(sessionId)) {
return RpcUtils.getInfluxDBStatus(
TSStatusCode.SESSION_TIMEOUT.getStatusCode(), "Session timeout");
}
return RpcUtils.getInfluxDBStatus(TSStatusCode.SUCCESS_STATUS);
}

@Override
public TSStatus createDatabase(TSCreateDatabaseReq req) throws TException {
if (!serviceProvider.checkLogin(req.sessionId)) {
return getNotLoggedInStatus();
TSStatus loginStatus = checkLoginStatus(req.sessionId);
if (isStatusNotSuccess(loginStatus)) {
return loginStatus;
}
try {
SetStorageGroupPlan setStorageGroupPlan =
Expand Down
Loading