Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 22 additions & 7 deletions include/infinispan/hotrod/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,16 @@ class Configuration
HR_EXTERN static const char* PROTOCOL_VERSION_22;
HR_EXTERN static const char* PROTOCOL_VERSION_23;
HR_EXTERN static const char* PROTOCOL_VERSION_24;
HR_EXTERN static const char* DEFAULT_CLUSTER_NAME;



Configuration(const std::string &_protocolVersion,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the other constructor can be removed, since the builder will use this one now ?

const ConnectionPoolConfiguration& _connectionPoolConfiguration,
int _connectionTimeout,
bool _forceReturnValue,
int _keySizeEstimate,
std::vector<ServerConfiguration> _serversConfiguration,
std::map<std::string,std::vector<ServerConfiguration> > _serversConfiguration,
int _socketTimeout,
const SslConfiguration _sslConfiguration,
bool _tcpNoDelay,
Expand All @@ -50,9 +52,17 @@ class Configuration
protocolVersion(_protocolVersion), protocolVersionPtr(),
connectionPoolConfiguration(_connectionPoolConfiguration),
connectionTimeout(_connectionTimeout), forceReturnValue(_forceReturnValue),
keySizeEstimate(_keySizeEstimate), servers(_serversConfiguration),
keySizeEstimate(_keySizeEstimate),
socketTimeout(_socketTimeout), sslConfiguration(_sslConfiguration),tcpNoDelay(_tcpNoDelay),
valueSizeEstimate(_valueSizeEstimate), maxRetries(_maxRetries), balancingStrategyProducer(bsp) {}
valueSizeEstimate(_valueSizeEstimate), maxRetries(_maxRetries), balancingStrategyProducer(bsp)
{
std::map<portable::string, portable::vector<ServerConfiguration>> tmpMap;
for(auto pair : _serversConfiguration)
{
tmpMap.insert(std::make_pair(portable::string(pair.first), portable::vector<ServerConfiguration>(pair.second)));
}
serversMap=tmpMap;
}

/**
* DEPRECATED. Use getProtocolVersionCString().
Expand Down Expand Up @@ -106,13 +116,18 @@ class Configuration
HR_EXTERN const int& getKeySizeEstimate() const;

/**
* Returns the vector of server configurations where each server configuration instance
* Returns the vector of the failover server configurations where each server configuration instance
* describes a HotRod server address and port.
*
*\return vector of server configurations
*/
std::vector<ServerConfiguration> getServersConfiguration() const {
return servers.std_vector();
std::map<std::string, std::vector<ServerConfiguration> > getServersMapConfiguration() const {
std::map<std::string, std::vector<ServerConfiguration> > temp;
for (auto pair : serversMap.std_map())
{
temp.insert(make_pair(pair.first.std_string(), pair.second.std_vector()));
}
return temp;
}

/**
Expand Down Expand Up @@ -159,7 +174,7 @@ class Configuration
int connectionTimeout;
bool forceReturnValue;
int keySizeEstimate;
portable::vector<ServerConfiguration> servers;
portable::map<portable::string,portable::vector<ServerConfiguration> > serversMap;
int socketTimeout;
SslConfiguration sslConfiguration;
bool tcpNoDelay;
Expand Down
69 changes: 50 additions & 19 deletions include/infinispan/hotrod/ConfigurationBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,18 @@

namespace infinispan {
namespace hotrod {

class ClusterConfigurationBuilder
{
public:
ClusterConfigurationBuilder(std::vector<ServerConfigurationBuilder>& servers) : servers(servers) {}
ClusterConfigurationBuilder& addClusterNode(const std::string host, const int port)
{
servers.push_back(ServerConfigurationBuilder().host(host).port(port));
return *this;
}
private:
std::vector<ServerConfigurationBuilder>& servers;
};
/**
* ConfigurationBuilder used to generate immutable Configuration objects that are in turn
* used to configure RemoteCacheManager instances.
Expand All @@ -41,18 +52,30 @@ class ConfigurationBuilder
__pragma(warning(suppress:4355))
sslConfigurationBuilder()
{}

void validate() {}
/**
* Adds a server to this Configuration. ServerConfigurationBuilder is in turn used
* to actually configure a server.
*
*\return ServerConfigurationBuilder instance to be used for server configuration
*/
ServerConfigurationBuilder& addServer() {
m_servers.push_back(ServerConfigurationBuilder());
return m_servers[m_servers.size() - 1];

ClusterConfigurationBuilder addCluster(const std::string& clusterName) {
return ClusterConfigurationBuilder(m_serversMap[clusterName]);
}

/**
* Adds a server to this Configuration. ServerConfigurationBuilder is in turn used
* to actually configure a server.
*
*\return ServerConfigurationBuilder instance to be used for server configuration
*/
ServerConfigurationBuilder& addServer() {
if (m_serversMap.find(Configuration::DEFAULT_CLUSTER_NAME) == m_serversMap.end())
{
m_serversMap[Configuration::DEFAULT_CLUSTER_NAME];
}
auto& servers = m_serversMap[Configuration::DEFAULT_CLUSTER_NAME];
servers.push_back(ServerConfigurationBuilder());
return servers[servers.size() - 1];
}


/**
* Adds multiple servers to this Configuration. ConfigurationBuilder is in turn used
* to actually configure added servers as well as other configuration settings.
Expand Down Expand Up @@ -204,21 +227,29 @@ class ConfigurationBuilder
*\return Configuration instance to be used for RemoteCacheManager configuration
*/
Configuration create() {
std::vector<ServerConfiguration> servers;
if (m_servers.size() > 0) {
for (std::vector<ServerConfigurationBuilder>::iterator it = m_servers.begin(); it < m_servers.end(); it++) {
servers.push_back(it->create());
}
} else {
servers.push_back(ServerConfigurationBuilder().create());
std::map<std::string,std::vector<ServerConfiguration>> serversMap;
for (auto p: m_serversMap)
{
std::vector<ServerConfiguration> scVec;
for (auto e : p.second)
{
scVec.push_back(e.create());
}
serversMap.insert(std::make_pair(p.first, scVec));
}
if (serversMap.size()==0)
{
std::vector<ServerConfiguration> scVec;
scVec.push_back(ServerConfigurationBuilder().create());
serversMap.insert(std::make_pair(Configuration::DEFAULT_CLUSTER_NAME, scVec));
}

return Configuration(m_protocolVersion,
connectionPoolConfigurationBuilder.create(),
m_connectionTimeout,
m_forceReturnValue,
m_keySizeEstimate,
servers,
serversMap,
m_socketTimeout,
sslConfigurationBuilder.create(),
m_tcpNoDelay,
Expand Down Expand Up @@ -252,7 +283,7 @@ class ConfigurationBuilder
bool m_forceReturnValue;
int m_keySizeEstimate;
std::string m_protocolVersion;
std::vector<ServerConfigurationBuilder> m_servers;
std::map<std::string,std::vector<ServerConfigurationBuilder> >m_serversMap;
int m_socketTimeout;
bool m_tcpNoDelay;
int m_valueSizeEstimate;
Expand Down
2 changes: 2 additions & 0 deletions include/infinispan/hotrod/Flag.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ enum Flag
DEFAULT_MAXIDLE = 0x04
};

enum ClusterStatus { SWITCHED, NOT_SWITCHED, ALREADY_SWITCHED };

}} // namespace

#endif /* ISPN_HOTROD_FLAG_H */
15 changes: 15 additions & 0 deletions include/infinispan/hotrod/RemoteCacheManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,21 @@ class HR_EXTERN RemoteCacheManager
return *rcache;
}

/**
* Switch the client on the main cluster
*
* \return ClusterStatus::SWITCHED or ClusterStatus::NOT_SWITCHED if no fully working
* cluster is available
*/
ClusterStatus clusterSwitch();

/**
* Switch the client on the main cluster
*
* \return ClusterStatus::SWITCHED or ClusterStatus::NOT_SWITCHED if the named cluster
* doesn't exists
*/
ClusterStatus clusterSwitch(std::string clusterName);

private:
void *impl;
Expand Down
10 changes: 3 additions & 7 deletions include/infinispan/hotrod/ServerConfiguration.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,7 @@ class HR_EXTERN ServerConfiguration

const std::string &getHost() const
{
if (hostPtr.get() == NULL) {
const_cast<ServerConfiguration *>(this)->hostPtr.set(new std::string(host.c_string()), &deleteString);
}
return *hostPtr.get();
return host;
}
/**
* Returns host of this ServerConfiguration
Expand All @@ -41,7 +38,7 @@ class HR_EXTERN ServerConfiguration
*/
const char *getHostCString() const
{
return host.c_string();
return host.data();
}

/**
Expand All @@ -55,9 +52,8 @@ class HR_EXTERN ServerConfiguration
}

private:
portable::string host;
std::string host;
__pragma(warning(suppress:4251))
portable::local_ptr<std::string> hostPtr;
int port;

static void deleteString(std::string *str) { delete str; }
Expand Down
5 changes: 5 additions & 0 deletions include/infinispan/hotrod/portable.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ class HR_EXTERN string {
if (m_dynamic != 0) delete[] m_dynamic;
}

inline bool operator<(const string &str) const {
return strncmp(this->c_string(), str.c_string(),
this->m_length < str.m_length ? this->m_length : str.m_length);
}

inline string &operator=(const std::string &str)
{
if (m_dynamic != 0) delete[] m_dynamic;
Expand Down
6 changes: 4 additions & 2 deletions jni/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@
<description>Infinispan HotRod JNI Wrapper</description>

<properties>
<version.org.infinispan>9.0.0.Alpha1</version.org.infinispan>
<version.org.infinispan>9.0.0.Alpha2</version.org.infinispan>
<version.org.jboss.logging.processor>1.1.0.Final</version.org.jboss.logging.processor>
<version.org.jboss.jbossts>4.17.13.Final</version.org.jboss.jbossts>
<version.org.testng>6.8</version.org.testng>
<maven.test.skip.exec>true</maven.test.skip.exec>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<build>
Expand All @@ -38,7 +40,7 @@
</goals>
</execution>
</executions>
</plugin>
</plugin>
</plugins>
</build>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.infinispan.client.hotrod.configuration;

public class ClusterConfigurationBuilder {
private org.infinispan.client.hotrod.jni.ClusterConfigurationBuilder ccb;
private ConfigurationBuilder builder;
public ClusterConfigurationBuilder(ConfigurationBuilder builder, org.infinispan.client.hotrod.jni.ClusterConfigurationBuilder ccb) {
this.ccb=ccb;
this.builder=builder;
}
public ClusterConfigurationBuilder addClusterNode(String host, int port)
{
ccb.addClusterNode(host, port);
return this;
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.infinispan.client.hotrod.configuration;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.infinispan.client.hotrod.RemoteCacheManager;
Expand All @@ -11,10 +11,10 @@
import org.infinispan.client.hotrod.impl.consistenthash.ConsistentHash;
import org.infinispan.client.hotrod.impl.transport.TransportFactory;
import org.infinispan.client.hotrod.impl.transport.tcp.RequestBalancingStrategy;
import org.infinispan.client.hotrod.jni.ServerConfigurationBuilderVector;
import org.infinispan.commons.configuration.Builder;
import org.infinispan.commons.marshall.Marshaller;
import org.infinispan.commons.marshall.jboss.GenericJBossMarshaller;
import org.infinispan.commons.util.Util;

/**
* ConfigurationBuilder used to generate immutable {@link Configuration} objects to pass to the
Expand All @@ -37,7 +37,7 @@ public class ConfigurationBuilder implements ConfigurationChildBuilder, Builder<
private Marshaller marshaller;
private boolean pingOnStartup = true;
private String protocolVersion = ConfigurationProperties.DEFAULT_PROTOCOL_VERSION;
private List<ServerConfigurationBuilder> servers = new ArrayList<ServerConfigurationBuilder>();
private Map<String,ServerConfigurationBuilderVector> serversMap = new HashMap<String, ServerConfigurationBuilderVector>();
private int socketTimeout = ConfigurationProperties.DEFAULT_SO_TIMEOUT;
private final SslConfigurationBuilder ssl;
private boolean tcpNoDelay = true;
Expand Down Expand Up @@ -69,10 +69,13 @@ public org.infinispan.client.hotrod.jni.ConfigurationBuilder getJniConfiguration

@Override
public ServerConfigurationBuilder addServer() {
ServerConfigurationBuilder builder = new ServerConfigurationBuilder(this);
this.servers.add(builder);
return builder;
return new ServerConfigurationBuilder(this,jniConfigurationBuilder.addServer());
}

public ClusterConfigurationBuilder addCluster(String clusterName) {
return new ClusterConfigurationBuilder(this, jniConfigurationBuilder.addCluster(clusterName));
}


@Override
public ConfigurationBuilder addServers(String servers) {
Expand Down Expand Up @@ -262,7 +265,7 @@ public ConfigurationBuilder withProperties(Properties properties) {
// }
this.pingOnStartup(typed.getBooleanProperty(ConfigurationProperties.PING_ON_STARTUP, pingOnStartup));
this.protocolVersion(typed.getProperty(ConfigurationProperties.PROTOCOL_VERSION, protocolVersion));
this.servers.clear();
this.serversMap.clear();
this.addServers(typed.getProperty(ConfigurationProperties.SERVER_LIST, ""));
this.socketTimeout(typed.getIntProperty(ConfigurationProperties.SO_TIMEOUT, socketTimeout));
this.tcpNoDelay(typed.getBooleanProperty(ConfigurationProperties.TCP_NO_DELAY, tcpNoDelay));
Expand All @@ -282,14 +285,6 @@ public void validate() {

@Override
public Configuration create() {
List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>();
if (this.servers.size() > 0)
for (ServerConfigurationBuilder server : this.servers) {
servers.add(server.create());
}
else {
servers.add(new ServerConfiguration("127.0.0.1", ConfigurationProperties.DEFAULT_HOTROD_PORT));
}
return new Configuration(this.jniConfigurationBuilder.create());
}

Expand Down Expand Up @@ -320,7 +315,7 @@ public ConfigurationBuilder read(Configuration template) {
this.marshallerClass = template.marshallerClass();
this.pingOnStartup(true);
this.protocolVersion(template.protocolVersion());
this.servers.clear();
this.serversMap.clear();
for (ServerConfiguration server : template.servers()) {
this.addServer().host(server.host()).port(server.port());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.infinispan.client.hotrod.configuration;

import org.infinispan.commons.configuration.Builder;

/**
* ServerConfigurationBuilder.
*
Expand All @@ -12,9 +10,9 @@ public class ServerConfigurationBuilder extends AbstractConfigurationChildBuilde

private org.infinispan.client.hotrod.jni.ServerConfigurationBuilder jniServerConfigurationBuilder;

ServerConfigurationBuilder(ConfigurationBuilder builder) {
ServerConfigurationBuilder(ConfigurationBuilder builder, org.infinispan.client.hotrod.jni.ServerConfigurationBuilder scb) {
super(builder);
jniServerConfigurationBuilder = builder.getJniConfigurationBuilder().addServer();
jniServerConfigurationBuilder = scb;
}

public ServerConfigurationBuilder host(String host) {
Expand Down
Loading