@Nonnull private SessionIdFormat getSessionIdFormat() { return _memcachedNodesManager.getSessionIdFormat(); }
protected LockingStrategy( @Nonnull final MemcachedSessionService manager, @Nonnull final MemcachedNodesManager memcachedNodesManager, @Nonnull final StorageClient storage, @Nonnull final LRUCache<String, Boolean> missingSessionsCache, final boolean storeSecondaryBackup, @Nonnull final Statistics stats, @Nonnull final CurrentRequest currentRequest ) { _manager = manager; _storage = storage; _missingSessionsCache = missingSessionsCache; _sessionIdFormat = memcachedNodesManager.getSessionIdFormat(); _storeSecondaryBackup = storeSecondaryBackup; _stats = stats; _currentRequest = currentRequest; _storageKeyFormat = memcachedNodesManager.getStorageKeyFormat(); _executor = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors(), new NamedThreadFactory("msm-2ndary-backup") ); }
@Test public void testGetSessionIdFormat() { final SessionIdFormat sessionIdFormat = createFor( "n1:localhost:11211", null, null, _mcc ).getSessionIdFormat(); assertNotNull(sessionIdFormat); }
@Test public void testSessionIdFormatForSingleNodeSetupShouldSupportLocking() { final SessionIdFormat sessionIdFormat = createFor( "localhost:11211", null, StorageKeyFormat.EMPTY, _mcc ).getSessionIdFormat(); assertNotNull(sessionIdFormat); final String sessionId = "12345678"; assertEquals(sessionIdFormat.createLockName(sessionId), "lock:" + sessionId); }
private void releaseLock( @Nonnull final MemcachedBackupSession session ) { if ( session.isLocked() ) { try { if ( _log.isDebugEnabled() ) { _log.debug( "Releasing lock for session " + session.getIdInternal() ); } final long start = System.currentTimeMillis(); _storage.delete( _memcachedNodesManager.getSessionIdFormat().createLockName( session.getIdInternal() ) ).get(); _statistics.registerSince( RELEASE_LOCK, start ); session.releaseLock(); } catch( final Exception e ) { _log.warn( "Caught exception when trying to release lock for session " + session.getIdInternal(), e ); } } }
private void releaseLock() { if ( _session.isLocked() ) { try { if ( _log.isDebugEnabled() ) { _log.debug( "Releasing lock for session " + _session.getIdInternal() ); } final long start = System.currentTimeMillis(); _storage.delete( _memcachedNodesManager.getSessionIdFormat().createLockName( _session.getIdInternal() ) ).get(); _statistics.registerSince( RELEASE_LOCK, start ); _session.releaseLock(); } catch( final Exception e ) { _log.warn( "Caught exception when trying to release lock for session " + _session.getIdInternal(), e ); } } }
private MemcachedClient createMemcachedClient( final String memcachedNodes, final InetSocketAddress address ) throws IOException, InterruptedException { final MemcachedNodesManager nodesManager = MemcachedNodesManager.createFor(memcachedNodes, null, null, _storageClientCallback); final ConnectionFactory cf = nodesManager.isEncodeNodeIdInSessionId() ? new SuffixLocatorConnectionFactory( nodesManager, nodesManager.getSessionIdFormat(), Statistics.create(), 1000, 1000 ) : new DefaultConnectionFactory(); final MemcachedClient result = new MemcachedClient( cf, Arrays.asList( address ) ); // Wait a little bit, so that the memcached client can connect and is ready when test starts Thread.sleep( 100 ); return result; }
return memcachedNodesManager.isEncodeNodeIdInSessionId() ? new SuffixLocatorBinaryConnectionFactory( memcachedNodesManager, memcachedNodesManager.getSessionIdFormat(), statistics, operationTimeout, maxReconnectDelay, authDescriptor) : new ConnectionFactoryBuilder().setProtocol(ConnectionFactoryBuilder.Protocol.BINARY) memcachedNodesManager.getSessionIdFormat(), statistics, operationTimeout, maxReconnectDelay ) : new BinaryConnectionFactory() { @Override ? new SuffixLocatorConnectionFactory( memcachedNodesManager, memcachedNodesManager.getSessionIdFormat(), statistics, operationTimeout, maxReconnectDelay ) : new DefaultConnectionFactory() { @Override
@BeforeMethod public void setUp(final Method testMethod) throws Throwable { final InetSocketAddress address = new InetSocketAddress( "localhost", MEMCACHED_PORT ); _daemon = createDaemon( address ); _daemon.start(); final String[] testGroups = testMethod.getAnnotation(Test.class).groups(); final String nodePrefix = testGroups.length == 0 || !GROUP_WITHOUT_NODE_ID.equals(testGroups[0]) ? NODE_ID + ":" : ""; _memcachedNodes = nodePrefix + "localhost:" + MEMCACHED_PORT; try { _tomcat1 = startTomcat( TC_PORT_1, JVM_ROUTE_1 ); _tomcat2 = startTomcat( TC_PORT_2, JVM_ROUTE_2 ); } catch ( final Throwable e ) { LOG.error( "could not start tomcat.", e ); throw e; } final MemcachedNodesManager nodesManager = MemcachedNodesManager.createFor(_memcachedNodes, null, null, _storageClientCallback); final ConnectionFactory cf = nodesManager.isEncodeNodeIdInSessionId() ? new SuffixLocatorConnectionFactory( nodesManager, nodesManager.getSessionIdFormat(), Statistics.create(), 1000, 1000 ) : new DefaultConnectionFactory(); _client = new MemcachedClient( cf, Arrays.asList( address ) ); _httpClient = new DefaultHttpClient(); }
@BeforeMethod public void setUp() throws Throwable { final InetSocketAddress address1 = new InetSocketAddress( "localhost", MEMCACHED_PORT_1 ); _daemon1 = createDaemon( address1 ); _daemon1.start(); final InetSocketAddress address2 = new InetSocketAddress( "localhost", MEMCACHED_PORT_2 ); _daemon2 = createDaemon( address2 ); _daemon2.start(); try { _tomcat1 = startTomcat( TC_PORT_1 ); _tomcat2 = startTomcat( TC_PORT_2 ); } catch ( final Throwable e ) { LOG.error( "could not start tomcat.", e ); throw e; } final MemcachedNodesManager nodesManager = MemcachedNodesManager.createFor(MEMCACHED_NODES, null, null, _storageClientCallback); _client = new MemcachedClient( new SuffixLocatorConnectionFactory( nodesManager, nodesManager.getSessionIdFormat(), Statistics.create(), 1000, 1000 ), Arrays.asList( address1, address2 ) ); final SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register( new Scheme("http", 80, PlainSocketFactory.getSocketFactory())); _httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(schemeRegistry)); _executor = Executors.newCachedThreadPool(); }
@Nonnull private SessionIdFormat getSessionIdFormat() { return _memcachedNodesManager.getSessionIdFormat(); }
if ( !_memcachedNodesManager.getSessionIdFormat().isValid( session.getId() ) ) { return;
try { if ( !_memcachedNodesManager.getSessionIdFormat().isValid( session.getId() ) ) { if ( _log.isDebugEnabled() ) { _log.debug( "Skipping backup for session id " + session.getId() + " as the session id is not usable for memcached." );
protected LockingStrategy( @Nonnull final MemcachedSessionService manager, @Nonnull final MemcachedNodesManager memcachedNodesManager, @Nonnull final StorageClient storage, @Nonnull final LRUCache<String, Boolean> missingSessionsCache, final boolean storeSecondaryBackup, @Nonnull final Statistics stats, @Nonnull final CurrentRequest currentRequest ) { _manager = manager; _storage = storage; _missingSessionsCache = missingSessionsCache; _sessionIdFormat = memcachedNodesManager.getSessionIdFormat(); _storeSecondaryBackup = storeSecondaryBackup; _stats = stats; _currentRequest = currentRequest; _storageKeyFormat = memcachedNodesManager.getStorageKeyFormat(); _executor = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors(), new NamedThreadFactory("msm-2ndary-backup") ); }
private void releaseLock( @Nonnull final MemcachedBackupSession session ) { if ( session.isLocked() ) { try { if ( _log.isDebugEnabled() ) { _log.debug( "Releasing lock for session " + session.getIdInternal() ); } final long start = System.currentTimeMillis(); _storage.delete( _memcachedNodesManager.getSessionIdFormat().createLockName( session.getIdInternal() ) ).get(); _statistics.registerSince( RELEASE_LOCK, start ); session.releaseLock(); } catch( final Exception e ) { _log.warn( "Caught exception when trying to release lock for session " + session.getIdInternal(), e ); } } }
private void releaseLock() { if ( _session.isLocked() ) { try { if ( _log.isDebugEnabled() ) { _log.debug( "Releasing lock for session " + _session.getIdInternal() ); } final long start = System.currentTimeMillis(); _storage.delete( _memcachedNodesManager.getSessionIdFormat().createLockName( _session.getIdInternal() ) ).get(); _statistics.registerSince( RELEASE_LOCK, start ); _session.releaseLock(); } catch( final Exception e ) { _log.warn( "Caught exception when trying to release lock for session " + _session.getIdInternal(), e ); } } }
return memcachedNodesManager.isEncodeNodeIdInSessionId() ? new SuffixLocatorBinaryConnectionFactory( memcachedNodesManager, memcachedNodesManager.getSessionIdFormat(), statistics, operationTimeout, maxReconnectDelay, authDescriptor) : new ConnectionFactoryBuilder().setProtocol(ConnectionFactoryBuilder.Protocol.BINARY) memcachedNodesManager.getSessionIdFormat(), statistics, operationTimeout, maxReconnectDelay ) : new BinaryConnectionFactory() { @Override ? new SuffixLocatorConnectionFactory( memcachedNodesManager, memcachedNodesManager.getSessionIdFormat(), statistics, operationTimeout, maxReconnectDelay ) : new DefaultConnectionFactory() { @Override
if ( !_memcachedNodesManager.getSessionIdFormat().isValid( session.getId() ) ) { return;
try { if ( !_memcachedNodesManager.getSessionIdFormat().isValid( session.getId() ) ) { if ( _log.isDebugEnabled() ) { _log.debug( "Skipping backup for session id " + session.getId() + " as the session id is not usable for memcached." );