Skip to content

Commit

Permalink
improv perf of apache ignite tests
Browse files Browse the repository at this point in the history
  • Loading branch information
SavvasMisaghMoayyed committed Apr 23, 2018
1 parent 102e79c commit 8ea293a
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 72 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -33,7 +33,7 @@ matrix:
fast_finish: true
env:
global:
- JAVA_OPTS="-Xms512M -Xmx2048M -Xss2M -XX:ReservedCodeCacheSize=512m"
- JAVA_OPTS="-Xms512m -Xmx2048m -Xss2m -XX:ReservedCodeCacheSize=512m -XX:+UseG1GC -XX:MaxDirectMemorySize=1024m"
- SPRING_MAIN_BANNER-MODE="off"
- secure: "ScUSTo0if5m7ddnwUA7EaYucc6yzEUrKLk0DzCvkMfjn2h5taUFSKHx+S0hd2EzJofv+Em4eI5qncSK5LTxgD7HhHR1e3iZp+SqJenhhOnbuciZfg4QA+tUGw3XUdmREac5cz2l0qhi1q4vsnnZARj2d4vvf2HWuNtEOBu/ZAKI="
- secure: "iWPPLKSS3zBs2adqLPkMiHfCj2hSLyD5BoV3oodhR7Ne83Kpn1khRcEWFoHF3Ed11eSU+glNdPSzUpc8TzwTZGx5B3RU2Qp36hZFyjuzNWJARmoVPYMiEg3FFBQrUR75w+Tbtn6zPkiAk6nl0K5ewmY0/xixVdnTLXL5HjpE2rc="
Expand Down
Expand Up @@ -8,6 +8,7 @@
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
import org.apache.ignite.ssl.SslContextFactory;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.configuration.model.support.ignite.IgniteProperties;
import org.apereo.cas.configuration.support.Beans;
Expand All @@ -24,11 +25,11 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration;

/**
* This is {@link IgniteTicketRegistryConfiguration}.
Expand All @@ -50,6 +51,7 @@ public class IgniteTicketRegistryConfiguration {
* @param ticketCatalog the ticket catalog
* @return the ignite configuration
*/
@Autowired
@RefreshScope
@Bean
public IgniteConfiguration igniteConfiguration(@Qualifier("ticketCatalog") final TicketCatalog ticketCatalog) {
Expand Down Expand Up @@ -79,35 +81,81 @@ public IgniteConfiguration igniteConfiguration(@Qualifier("ticketCatalog") final
config.setCacheConfiguration(cacheConfigurations.toArray(new CacheConfiguration[]{}));
config.setClientMode(ignite.isClientMode());

final SslContextFactory factory = buildSecureTransportForIgniteConfiguration();
if (factory != null) {
config.setSslContextFactory(factory);
}

if (LOGGER.isDebugEnabled()) {
LOGGER.debug("igniteConfiguration.cacheConfiguration=[{}]", (Object[]) config.getCacheConfiguration());
LOGGER.debug("igniteConfiguration.getDiscoverySpi=[{}]", config.getDiscoverySpi());
LOGGER.debug("igniteConfiguration.getSslContextFactory=[{}]", config.getSslContextFactory());
}

return config;
}

@Autowired
@Bean
@RefreshScope
public TicketRegistry ticketRegistry(@Qualifier("ticketCatalog") final TicketCatalog ticketCatalog) {
final IgniteProperties igniteProperties = casProperties.getTicket().getRegistry().getIgnite();
final IgniteConfiguration igniteConfiguration = igniteConfiguration(ticketCatalog);
final IgniteTicketRegistry r = new IgniteTicketRegistry(ticketCatalog, igniteConfiguration, igniteProperties);
r.setCipherExecutor(CoreTicketUtils.newTicketRegistryCipherExecutor(igniteProperties.getCrypto(), "ignite"));
r.initialize();
return r;
}

private static Collection<CacheConfiguration> buildIgniteTicketCaches(final IgniteProperties ignite,
final TicketCatalog ticketCatalog) {
final Collection<TicketDefinition> definitions = ticketCatalog.findAll();
return definitions
.stream()
.map(t -> {
final CacheConfiguration ticketsCache = new CacheConfiguration();
ticketsCache.setName(t.getProperties().getStorageName());
ticketsCache.setCacheMode(CacheMode.valueOf(ignite.getTicketsCache().getCacheMode()));
ticketsCache.setAtomicityMode(CacheAtomicityMode.valueOf(ignite.getTicketsCache().getAtomicityMode()));
final CacheWriteSynchronizationMode writeSync =
CacheWriteSynchronizationMode.valueOf(ignite.getTicketsCache().getWriteSynchronizationMode());
ticketsCache.setWriteSynchronizationMode(writeSync);
final Duration duration = new Duration(TimeUnit.SECONDS, t.getProperties().getStorageTimeout());
ticketsCache.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(duration));
return ticketsCache;
})
.collect(Collectors.toSet());
.stream()
.map(t -> {
final CacheConfiguration ticketsCache = new CacheConfiguration();
ticketsCache.setName(t.getProperties().getStorageName());
ticketsCache.setCacheMode(CacheMode.valueOf(ignite.getTicketsCache().getCacheMode()));
ticketsCache.setAtomicityMode(CacheAtomicityMode.valueOf(ignite.getTicketsCache().getAtomicityMode()));
final CacheWriteSynchronizationMode writeSync =
CacheWriteSynchronizationMode.valueOf(ignite.getTicketsCache().getWriteSynchronizationMode());
ticketsCache.setWriteSynchronizationMode(writeSync);
final Duration duration = new Duration(TimeUnit.SECONDS, t.getProperties().getStorageTimeout());
ticketsCache.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(duration));
return ticketsCache;
})
.collect(Collectors.toSet());
}

@Bean
@RefreshScope
public TicketRegistry ticketRegistry(@Qualifier("ticketCatalog") final TicketCatalog ticketCatalog) {
final IgniteProperties igniteProperties = casProperties.getTicket().getRegistry().getIgnite();
final IgniteTicketRegistry r = new IgniteTicketRegistry(ticketCatalog, igniteConfiguration(ticketCatalog), igniteProperties);
r.setCipherExecutor(CoreTicketUtils.newTicketRegistryCipherExecutor(igniteProperties.getCrypto(), "ignite"));
return r;
private SslContextFactory buildSecureTransportForIgniteConfiguration() {
final IgniteProperties properties = casProperties.getTicket().getRegistry().getIgnite();
final String nullKey = "NULL";
if (StringUtils.hasText(properties.getKeyStoreFilePath()) && StringUtils.hasText(properties.getKeyStorePassword())
&& StringUtils.hasText(properties.getTrustStoreFilePath()) && StringUtils.hasText(properties.getTrustStorePassword())) {
final SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStoreFilePath(properties.getKeyStoreFilePath());
sslContextFactory.setKeyStorePassword(properties.getKeyStorePassword().toCharArray());
if (nullKey.equals(properties.getTrustStoreFilePath()) && nullKey.equals(properties.getTrustStorePassword())) {
sslContextFactory.setTrustManagers(SslContextFactory.getDisabledTrustManager());
} else {
sslContextFactory.setTrustStoreFilePath(properties.getTrustStoreFilePath());
sslContextFactory.setTrustStorePassword(properties.getKeyStorePassword().toCharArray());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(properties.getKeyAlgorithm())) {
sslContextFactory.setKeyAlgorithm(properties.getKeyAlgorithm());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(properties.getProtocol())) {
sslContextFactory.setProtocol(properties.getProtocol());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(properties.getTrustStoreType())) {
sslContextFactory.setTrustStoreType(properties.getTrustStoreType());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(properties.getKeyStoreType())) {
sslContextFactory.setKeyStoreType(properties.getKeyStoreType());
}
return sslContextFactory;
}
return null;
}

}
Expand Up @@ -9,11 +9,11 @@
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.ssl.SslContextFactory;
import org.apereo.cas.configuration.model.support.ignite.IgniteProperties;
import org.apereo.cas.ticket.Ticket;
import org.apereo.cas.ticket.TicketCatalog;
import org.apereo.cas.ticket.TicketDefinition;

import javax.annotation.PreDestroy;
import javax.cache.Cache;
import javax.cache.expiry.Duration;
Expand Down Expand Up @@ -62,7 +62,6 @@ public IgniteTicketRegistry(final TicketCatalog ticketCatalog, final IgniteConfi
this.igniteConfiguration = igniteConfiguration;
this.properties = properties;
this.ticketCatalog = ticketCatalog;
initializeIgnite();
}

@Override
Expand Down Expand Up @@ -131,60 +130,28 @@ public Ticket updateTicket(final Ticket ticket) {
return ticket;
}

private void configureSecureTransport() {
final String nullKey = "NULL";
if (StringUtils.isNotBlank(properties.getKeyStoreFilePath()) && StringUtils.isNotBlank(properties.getKeyStorePassword())
&& StringUtils.isNotBlank(properties.getTrustStoreFilePath()) && StringUtils.isNotBlank(properties.getTrustStorePassword())) {
final SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStoreFilePath(properties.getKeyStoreFilePath());
sslContextFactory.setKeyStorePassword(properties.getKeyStorePassword().toCharArray());
if (nullKey.equals(properties.getTrustStoreFilePath()) && nullKey.equals(properties.getTrustStorePassword())) {
sslContextFactory.setTrustManagers(SslContextFactory.getDisabledTrustManager());
} else {
sslContextFactory.setTrustStoreFilePath(properties.getTrustStoreFilePath());
sslContextFactory.setTrustStorePassword(properties.getKeyStorePassword().toCharArray());
}
if (StringUtils.isNotBlank(properties.getKeyAlgorithm())) {
sslContextFactory.setKeyAlgorithm(properties.getKeyAlgorithm());
}
if (StringUtils.isNotBlank(properties.getProtocol())) {
sslContextFactory.setProtocol(properties.getProtocol());
}
if (StringUtils.isNotBlank(properties.getTrustStoreType())) {
sslContextFactory.setTrustStoreType(properties.getTrustStoreType());
}
if (StringUtils.isNotBlank(properties.getKeyStoreType())) {
sslContextFactory.setKeyStoreType(properties.getKeyStoreType());
}
this.igniteConfiguration.setSslContextFactory(sslContextFactory);
}
/**
* Make sure we shutdown Ignite when the context is destroyed.
*/
@PreDestroy
public void shutdown() {
this.ignite.close();
Ignition.stopAll(true);
}

private void initializeIgnite() {
LOGGER.info("Setting up Ignite Ticket Registry...");
configureSecureTransport();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("igniteConfiguration.cacheConfiguration=[{}]", (Object[]) this.igniteConfiguration.getCacheConfiguration());
LOGGER.debug("igniteConfiguration.getDiscoverySpi=[{}]", this.igniteConfiguration.getDiscoverySpi());
LOGGER.debug("igniteConfiguration.getSslContextFactory=[{}]", this.igniteConfiguration.getSslContextFactory());
}
/**
* Initialize.
*/
public void initialize() {
if (Ignition.state() == IgniteState.STOPPED) {
this.ignite = Ignition.start(this.igniteConfiguration);
this.ignite = Ignition.start(igniteConfiguration);
LOGGER.debug("Starting ignite cache engine");
} else if (Ignition.state() == IgniteState.STARTED) {
this.ignite = Ignition.ignite();
LOGGER.debug("Ignite cache engine has started");
}
}

/**
* Make sure we shutdown Ignite when the context is destroyed.
*/
@PreDestroy
public void shutdown() {
Ignition.stopAll(true);
}

private IgniteCache<String, Ticket> getIgniteCacheFromMetadata(final TicketDefinition metadata) {
final String mapName = metadata.getProperties().getStorageName();
LOGGER.debug("Locating cache name [{}] for ticket definition [{}]", mapName, metadata);
Expand Down
@@ -1,5 +1,5 @@
cas.ticket.registry.ignite.ticketsCache.writeSynchronizationMode=FULL_SYNC
cas.ticket.registry.ignite.ticketsCache.atomicityMode=TRANSACTIONAL
cas.ticket.registry.ignite.ticketsCache.writeSynchronizationMode=FULL_ASYNC
cas.ticket.registry.ignite.ticketsCache.atomicityMode=ATOMIC
cas.ticket.registry.ignite.ticketsCache.cacheMode=REPLICATED
cas.ticket.registry.ignite.igniteAddress[0]=localhost:47500

Expand Down
Expand Up @@ -94,6 +94,7 @@ public DataSource dataSourceTicket() {
return JpaBeans.newDataSource(casProperties.getTicket().getRegistry().getJpa());
}

@Autowired
@Bean
@RefreshScope
public TicketRegistry ticketRegistry(@Qualifier("ticketCatalog") final TicketCatalog ticketCatalog) {
Expand Down

0 comments on commit 8ea293a

Please sign in to comment.