in java/core/src/main/java/com/aliyun/openservices/tablestore/agent/memory/MemoryStoreImpl.java [306:366]
public Response<Session> listRecentSessionsPaginated(
String userId,
int pageSize,
Filter metadataFilter,
Long inclusiveStartUpdateTime,
Long inclusiveEndUpdateTime,
String nextToken,
Integer batchSize
) {
log.info(
"list recent sessions paginated, userId:{}, pageSize:{}, metadataFilter:{}, inclusiveStartUpdateTime:{}, inclusiveEndUpdateTime:{}, nextToken:{}, batchSize:{}",
userId,
pageSize,
metadataFilter,
inclusiveStartUpdateTime,
inclusiveEndUpdateTime,
nextToken,
batchSize
);
ValidationUtils.ensureNotNull(userId, "userId");
if (inclusiveStartUpdateTime != null && inclusiveEndUpdateTime != null && inclusiveStartUpdateTime < inclusiveEndUpdateTime) {
throw Exceptions.illegalArgument(
"inclusiveStartUpdateTime must be greater than inclusiveEndUpdateTime, because the results are returned in reverse order of update time"
);
}
PrimaryKey start = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn(Session.SESSION_USER_ID, PrimaryKeyValue.fromString(userId))
.addPrimaryKeyColumn(
Session.SESSION_UPDATE_TIME,
inclusiveStartUpdateTime == null ? PrimaryKeyValue.INF_MAX : PrimaryKeyValue.fromLong(inclusiveStartUpdateTime)
)
.addPrimaryKeyColumn(Session.SESSION_SESSION_ID, PrimaryKeyValue.INF_MAX)
.build();
if (nextToken != null) {
start = TablestoreHelper.decodeNextPrimaryKeyToken(nextToken);
}
PrimaryKey end = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn(Session.SESSION_USER_ID, PrimaryKeyValue.fromString(userId))
.addPrimaryKeyColumn(
Session.SESSION_UPDATE_TIME,
inclusiveEndUpdateTime == null ? PrimaryKeyValue.INF_MIN : PrimaryKeyValue.fromLong(inclusiveEndUpdateTime)
)
.addPrimaryKeyColumn(Session.SESSION_SESSION_ID, PrimaryKeyValue.INF_MIN)
.build();
TablestoreHelper.GetRangeIterator<Session> rangeIterator = new TablestoreHelper.GetRangeIterator<>(
client,
sessionSecondaryIndexName,
TablestoreHelper::rowToSession,
start,
end,
metadataFilter,
Order.DESC,
(long) pageSize,
batchSize,
null
);
List<Session> sessions = CollectionUtil.toList(rangeIterator);
PrimaryKey nextStartPrimaryKey = rangeIterator.nextStartPrimaryKey();
String token = nextStartPrimaryKey == null ? null : TablestoreHelper.encodeNextPrimaryKeyToken(nextStartPrimaryKey);
return new Response<>(sessions, token);
}