private boolean shouldPrune(final ServerSessionImpl serverSession) { Integer logicalSessionTimeoutMinutes = cluster.getCurrentDescription().getLogicalSessionTimeoutMinutes(); // if the server no longer supports sessions, prune the session if (logicalSessionTimeoutMinutes == null) { return false; } long currentTimeMillis = clock.millis(); final long timeSinceLastUse = currentTimeMillis - serverSession.getLastUsedAtMillis(); final long oneMinuteFromTimeout = MINUTES.toMillis(logicalSessionTimeoutMinutes - 1); return timeSinceLastUse > oneMinuteFromTimeout; }
@Nullable public ClientSession createClientSession(final ClientSessionOptions options, final ReadConcern readConcern, final WriteConcern writeConcern, final ReadPreference readPreference) { notNull("readConcern", readConcern); notNull("writeConcern", writeConcern); notNull("readPreference", readPreference); if (credentialList.size() > 1) { return null; } ClusterDescription connectedClusterDescription = getConnectedClusterDescription(); if (connectedClusterDescription.getType() == ClusterType.STANDALONE || connectedClusterDescription.getLogicalSessionTimeoutMinutes() == null) { return null; } else { ClientSessionOptions mergedOptions = ClientSessionOptions.builder(options) .defaultTransactionOptions( TransactionOptions.merge( options.getDefaultTransactionOptions(), TransactionOptions.builder() .readConcern(readConcern) .writeConcern(writeConcern) .readPreference(readPreference) .build())) .build(); return new ClientSessionImpl(serverSessionPool, originator, mergedOptions, this); } }
private boolean shouldPrune(final ServerSessionImpl serverSession) { Integer logicalSessionTimeoutMinutes = cluster.getCurrentDescription().getLogicalSessionTimeoutMinutes(); // if the server no longer supports sessions, prune the session if (logicalSessionTimeoutMinutes == null) { return false; } long currentTimeMillis = clock.millis(); final long timeSinceLastUse = currentTimeMillis - serverSession.getLastUsedAtMillis(); final long oneMinuteFromTimeout = MINUTES.toMillis(logicalSessionTimeoutMinutes - 1); return timeSinceLastUse > oneMinuteFromTimeout; }
@Nullable public ClientSession createClientSession(final ClientSessionOptions options, final ReadConcern readConcern, final WriteConcern writeConcern, final ReadPreference readPreference) { notNull("readConcern", readConcern); notNull("writeConcern", writeConcern); notNull("readPreference", readPreference); if (credentialList.size() > 1) { return null; } ClusterDescription connectedClusterDescription = getConnectedClusterDescription(); if (connectedClusterDescription.getType() == ClusterType.STANDALONE || connectedClusterDescription.getLogicalSessionTimeoutMinutes() == null) { return null; } else { ClientSessionOptions mergedOptions = ClientSessionOptions.builder(options) .defaultTransactionOptions( TransactionOptions.merge( options.getDefaultTransactionOptions(), TransactionOptions.builder() .readConcern(readConcern) .writeConcern(writeConcern) .readPreference(readPreference) .build())) .build(); return new ClientSessionImpl(serverSessionPool, originator, mergedOptions, this); } }
@Nullable public ClientSession createClientSession(final ClientSessionOptions options, final ReadConcern readConcern, final WriteConcern writeConcern, final ReadPreference readPreference) { notNull("readConcern", readConcern); notNull("writeConcern", writeConcern); notNull("readPreference", readPreference); if (credentialList.size() > 1) { return null; } ClusterDescription connectedClusterDescription = getConnectedClusterDescription(); if (connectedClusterDescription.getType() == ClusterType.STANDALONE || connectedClusterDescription.getLogicalSessionTimeoutMinutes() == null) { return null; } else { ClientSessionOptions mergedOptions = ClientSessionOptions.builder(options) .defaultTransactionOptions( TransactionOptions.merge( options.getDefaultTransactionOptions(), TransactionOptions.builder() .readConcern(readConcern) .writeConcern(writeConcern) .readPreference(readPreference) .build())) .build(); return new ClientSessionImpl(serverSessionPool, originator, mergedOptions, this); } }