/** * @return Test client configuration. */ private GridClientConfiguration configuration() { GridClientConfiguration cfg = new GridClientConfiguration(); cfg.setServers(Collections.singleton("localhost:11211")); GridClientDataConfiguration cacheCfg = new GridClientDataConfiguration(); cacheCfg.setName("partitioned"); cacheCfg.setAffinity(new GridClientPartitionAffinity()); cfg.setDataConfigurations(Collections.singletonList(cacheCfg)); return cfg; }
/** * Copy constructor. * * @param cfg Configuration to copy. */ public GridClientDataConfiguration(GridClientDataConfiguration cfg) { // Preserve alphabetic order for maintenance. affinity = cfg.getAffinity(); balancer = cfg.getPinnedBalancer(); name = cfg.getName(); }
/** * Sets data configurations. * * @param dataCfgs Data configurations. * @return {@code this} for chaining. */ public GridClientConfiguration setDataConfigurations(Collection<? extends GridClientDataConfiguration> dataCfgs) { this.dataCfgs = U.newHashMap(dataCfgs.size()); for (GridClientDataConfiguration dataCfg : dataCfgs) this.dataCfgs.put(dataCfg.getName(), new GridClientDataConfiguration(dataCfg)); return this; }
String aff = in.getProperty(prefix + "data." + cfgName + ".affinity"); GridClientDataConfiguration dataCfg = new GridClientDataConfiguration(); dataCfg.setName(F.isEmpty(name) ? null : name); dataCfg.setBalancer(resolveBalancer(bal)); dataCfg.setAffinity(resolveAffinity(aff));
/** * @return Client configuration. */ private GridClientConfiguration clientConfiguration() { GridClientConfiguration cfg = new GridClientConfiguration(); GridClientDataConfiguration nullCache = new GridClientDataConfiguration(); GridClientDataConfiguration cache = new GridClientDataConfiguration(); cache.setName(CACHE_NAME); cfg.setDataConfigurations(Arrays.asList(nullCache, cache)); cfg.setProtocol(TCP); cfg.setServers(Arrays.asList("localhost:" + BINARY_PORT)); return cfg; }
/** * Gets data affinity for a given cache name. * * @param cacheName Name of cache for which affinity is obtained. Data configuration with this name * must be configured at client startup. * @return Data affinity object. * @throws IllegalArgumentException If client data with given name was not configured. */ GridClientDataAffinity affinity(String cacheName) { GridClientDataConfiguration dataCfg = cfg.getDataConfiguration(cacheName); return dataCfg == null ? null : dataCfg.getAffinity(); }
/** {@inheritDoc} */ @Override public GridClientData data(@Nullable final String cacheName) throws GridClientException { checkClosed(); Object key = maskNull(cacheName); GridClientDataImpl data = dataMap.get(key); if (data == null) { GridClientDataConfiguration dataCfg = cfg.getDataConfiguration(cacheName); if (dataCfg == null && cacheName != null) throw new GridClientException("Data configuration for given cache name was not provided: " + cacheName); GridClientLoadBalancer balancer = dataCfg != null ? dataCfg.getPinnedBalancer() : new GridClientRandomBalancer(); GridClientPredicate<GridClientNode> cacheNodes = new GridClientPredicate<GridClientNode>() { @Override public boolean apply(GridClientNode e) { return e.caches().containsKey(cacheName); } @Override public String toString() { return "GridClientHasCacheFilter [cacheName=" + cacheName + "]"; } }; data = new GridClientDataImpl( cacheName, this, null, cacheNodes, balancer, null, cfg.isEnableMetricsCache()); GridClientDataImpl old = dataMap.putIfAbsent(key, data); if (old != null) data = old; } return data; }
String aff = in.getProperty(prefix + "data." + cfgName + ".affinity"); GridClientDataConfiguration dataCfg = new GridClientDataConfiguration(); dataCfg.setName(F.isEmpty(name) ? null : name); dataCfg.setBalancer(resolveBalancer(bal)); dataCfg.setAffinity(resolveAffinity(aff));
/** * Sets data configurations. * * @param dataCfgs Data configurations. * @return {@code this} for chaining. */ public GridClientConfiguration setDataConfigurations(Collection<? extends GridClientDataConfiguration> dataCfgs) { this.dataCfgs = U.newHashMap(dataCfgs.size()); for (GridClientDataConfiguration dataCfg : dataCfgs) this.dataCfgs.put(dataCfg.getName(), new GridClientDataConfiguration(dataCfg)); return this; }
/** * @return Test client configuration. */ protected GridClientConfiguration clientConfiguration() throws GridClientException { GridClientConfiguration cfg = new GridClientConfiguration(); GridClientDataConfiguration nullCache = new GridClientDataConfiguration(); GridClientDataConfiguration cache = new GridClientDataConfiguration(); cache.setName(CACHE_NAME); cfg.setDataConfigurations(Arrays.asList(nullCache, cache)); cfg.setProtocol(protocol()); cfg.setServers(Collections.singleton(serverAddress())); // Setting custom executor, to avoid failures on client shutdown. // And applying custom naming scheme to ease debugging. cfg.setExecutorService(Executors.newCachedThreadPool(new ThreadFactory() { private AtomicInteger cntr = new AtomicInteger(); @SuppressWarnings("NullableProblems") @Override public Thread newThread(Runnable r) { return new Thread(r, "client-worker-thread-" + cntr.getAndIncrement()); } })); if (useSsl()) cfg.setSslContextFactory(sslContextFactory()); return cfg; }
/** * Closes client. * @param waitCompletion If {@code true} will wait for all pending requests to be proceeded. */ public void stop(boolean waitCompletion) { if (closed.compareAndSet(false, true)) { // Shutdown the topology refresh thread. if (topUpdateThread != null) topUpdateThread.interrupt(); // Shutdown listener notification. if (top != null) top.shutdown(); if (connMgr != null) connMgr.stop(waitCompletion); for (GridClientDataConfiguration dataCfg : cfg.getDataConfigurations()) { GridClientDataAffinity aff = dataCfg.getAffinity(); if (aff instanceof GridClientTopologyListener) removeTopologyListener((GridClientTopologyListener)aff); } if (log.isLoggable(Level.INFO)) log.info("Client stopped [id=" + id + ", waitCompletion=" + waitCompletion + ']'); } }
/** {@inheritDoc} */ @Override public GridClientData data(@Nullable final String cacheName) throws GridClientException { checkClosed(); Object key = maskNull(cacheName); GridClientDataImpl data = dataMap.get(key); if (data == null) { GridClientDataConfiguration dataCfg = cfg.getDataConfiguration(cacheName); if (dataCfg == null && cacheName != null) throw new GridClientException("Data configuration for given cache name was not provided: " + cacheName); GridClientLoadBalancer balancer = dataCfg != null ? dataCfg.getPinnedBalancer() : new GridClientRandomBalancer(); GridClientPredicate<GridClientNode> cacheNodes = new GridClientPredicate<GridClientNode>() { @Override public boolean apply(GridClientNode e) { return e.caches().containsKey(cacheName); } @Override public String toString() { return "GridClientHasCacheFilter [cacheName=" + cacheName + "]"; } }; data = new GridClientDataImpl( cacheName, this, null, cacheNodes, balancer, null, cfg.isEnableMetricsCache()); GridClientDataImpl old = dataMap.putIfAbsent(key, data); if (old != null) data = old; } return data; }
/** * Validate spring client configuration. * * @throws Exception In case of any exception. */ @Test public void testSpringConfig() throws Exception { GridClientConfiguration cfg = new FileSystemXmlApplicationContext( GRID_CLIENT_SPRING_CONFIG.toString()).getBean(GridClientConfiguration.class); assertEquals(Arrays.asList("127.0.0.1:11211"), new ArrayList<>(cfg.getServers())); assertNull(cfg.getSecurityCredentialsProvider()); Collection<GridClientDataConfiguration> dataCfgs = cfg.getDataConfigurations(); assertEquals(1, dataCfgs.size()); GridClientDataConfiguration dataCfg = dataCfgs.iterator().next(); assertEquals("partitioned", dataCfg.getName()); assertNotNull(dataCfg.getPinnedBalancer()); assertEquals(GridClientRandomBalancer.class, dataCfg.getPinnedBalancer().getClass()); assertNotNull(dataCfg.getAffinity()); assertEquals(GridClientPartitionAffinity.class, dataCfg.getAffinity().getClass()); }
/** * @return Client configuration for the test. */ protected GridClientConfiguration clientConfiguration() throws GridClientException { GridClientConfiguration cfg = new GridClientConfiguration(); cfg.setBalancer(getBalancer()); cfg.setTopologyRefreshFrequency(TOP_REFRESH_FREQ); cfg.setProtocol(protocol()); cfg.setServers(Arrays.asList(serverAddress())); cfg.setSslContextFactory(sslContextFactory()); GridClientDataConfiguration loc = new GridClientDataConfiguration(); GridClientDataConfiguration partitioned = new GridClientDataConfiguration(); partitioned.setName(PARTITIONED_CACHE_NAME); partitioned.setAffinity(new GridClientPartitionAffinity()); GridClientDataConfiguration replicated = new GridClientDataConfiguration(); replicated.setName(REPLICATED_CACHE_NAME); GridClientDataConfiguration replicatedAsync = new GridClientDataConfiguration(); replicatedAsync.setName(REPLICATED_ASYNC_CACHE_NAME); cfg.setDataConfigurations(Arrays.asList(loc, partitioned, replicated, replicatedAsync)); return cfg; }
GridClientDataAffinity aff = dataCfg.getAffinity();
GridClientDataConfiguration nullCfg = cfg.getDataConfiguration(null); assertEquals(null, nullCfg.getName()); assertEquals(null, nullCfg.getAffinity()); assertEquals(GridClientRandomBalancer.class, nullCfg.getPinnedBalancer().getClass()); assertEquals("partitioned", partCfg.getName()); assertEquals(GridClientPartitionAffinity.class, partCfg.getAffinity().getClass()); assertEquals(GridClientRoundRobinBalancer.class, partCfg.getPinnedBalancer().getClass());
/** * Creates client that will try to connect to only first node in grid. * * @return Client. */ private GridClientConfiguration clientConfiguration() { GridClientConfiguration cfg = new GridClientConfiguration(); cfg.setTopologyRefreshFrequency(topologyRefreshFrequency()); cfg.setMaxConnectionIdleTime(maxConnectionIdleTime()); cfg.setProtocol(protocol()); cfg.setServers(Arrays.asList(serverAddress())); cfg.setBalancer(new GridClientRoundRobinBalancer()); if (useSsl()) cfg.setSslContextFactory(sslContextFactory()); GridClientDataConfiguration loc = new GridClientDataConfiguration(); GridClientDataConfiguration partitioned = new GridClientDataConfiguration(); partitioned.setName(PARTITIONED_CACHE_NAME); partitioned.setAffinity(new GridClientPartitionAffinity()); GridClientDataConfiguration partitionedAsyncBackup = new GridClientDataConfiguration(); partitionedAsyncBackup.setName(PARTITIONED_ASYNC_BACKUP_CACHE_NAME); partitionedAsyncBackup.setAffinity(new GridClientPartitionAffinity()); GridClientDataConfiguration replicated = new GridClientDataConfiguration(); replicated.setName(REPLICATED_CACHE_NAME); GridClientDataConfiguration replicatedAsync = new GridClientDataConfiguration(); replicatedAsync.setName(REPLICATED_ASYNC_CACHE_NAME); cfg.setDataConfigurations(Arrays.asList(loc, partitioned, replicated, replicatedAsync, partitionedAsyncBackup)); return cfg; }
/** * Gets data affinity for a given cache name. * * @param cacheName Name of cache for which affinity is obtained. Data configuration with this name * must be configured at client startup. * @return Data affinity object. * @throws IllegalArgumentException If client data with given name was not configured. */ GridClientDataAffinity affinity(String cacheName) { GridClientDataConfiguration dataCfg = cfg.getDataConfiguration(cacheName); return dataCfg == null ? null : dataCfg.getAffinity(); }
/** * Copy constructor. * * @param cfg Configuration to copy. */ public GridClientDataConfiguration(GridClientDataConfiguration cfg) { // Preserve alphabetic order for maintenance. affinity = cfg.getAffinity(); balancer = cfg.getPinnedBalancer(); name = cfg.getName(); }
/** * Closes client. * @param waitCompletion If {@code true} will wait for all pending requests to be proceeded. */ public void stop(boolean waitCompletion) { if (closed.compareAndSet(false, true)) { // Shutdown the topology refresh thread. if (topUpdateThread != null) topUpdateThread.interrupt(); // Shutdown listener notification. if (top != null) top.shutdown(); if (connMgr != null) connMgr.stop(waitCompletion); for (GridClientDataConfiguration dataCfg : cfg.getDataConfigurations()) { GridClientDataAffinity aff = dataCfg.getAffinity(); if (aff instanceof GridClientTopologyListener) removeTopologyListener((GridClientTopologyListener)aff); } if (log.isLoggable(Level.INFO)) log.info("Client stopped [id=" + id + ", waitCompletion=" + waitCompletion + ']'); } }