Search in sources :

Example 1 with TokenFactory

use of com.datastax.oss.driver.internal.core.metadata.token.TokenFactory in project java-driver by datastax.

the class PreparedStatementIT method should_infer_routing_information_when_partition_key_is_bound.

private void should_infer_routing_information_when_partition_key_is_bound(String queryString) {
    CqlSession session = sessionRule.session();
    TokenFactory tokenFactory = ((DefaultTokenMap) session.getMetadata().getTokenMap().orElseThrow(AssertionError::new)).getTokenFactory();
    // We'll bind a=1 in the query, check what token this is supposed to produce
    Token expectedToken = session.execute("SELECT token(a) FROM prepared_statement_test WHERE a = 1").one().getToken(0);
    BoundStatement boundStatement = session.prepare(queryString).bind().setInt("a", 1);
    assertThat(boundStatement.getRoutingKeyspace()).isEqualTo(sessionRule.keyspace());
    assertThat(tokenFactory.hash(boundStatement.getRoutingKey())).isEqualTo(expectedToken);
}
Also used : DefaultTokenMap(com.datastax.oss.driver.internal.core.metadata.token.DefaultTokenMap) Token(com.datastax.oss.driver.api.core.metadata.token.Token) TokenFactory(com.datastax.oss.driver.internal.core.metadata.token.TokenFactory) CqlSession(com.datastax.oss.driver.api.core.CqlSession) BoundStatement(com.datastax.oss.driver.api.core.cql.BoundStatement)

Example 2 with TokenFactory

use of com.datastax.oss.driver.internal.core.metadata.token.TokenFactory in project java-driver by datastax.

the class FullNodeListRefresh method compute.

@Override
public Result compute(DefaultMetadata oldMetadata, boolean tokenMapEnabled, InternalDriverContext context) {
    String logPrefix = context.getSessionName();
    TokenFactoryRegistry tokenFactoryRegistry = context.getTokenFactoryRegistry();
    Map<UUID, Node> oldNodes = oldMetadata.getNodes();
    Map<UUID, Node> added = new HashMap<>();
    Set<UUID> seen = new HashSet<>();
    TokenFactory tokenFactory = oldMetadata.getTokenMap().map(m -> ((DefaultTokenMap) m).getTokenFactory()).orElse(null);
    boolean tokensChanged = false;
    for (NodeInfo nodeInfo : nodeInfos) {
        UUID id = nodeInfo.getHostId();
        if (seen.contains(id)) {
            LOG.warn("[{}] Found duplicate entries with host_id {} in system.peers, " + "keeping only the first one", logPrefix, id);
        } else {
            seen.add(id);
            DefaultNode node = (DefaultNode) oldNodes.get(id);
            if (node == null) {
                node = new DefaultNode(nodeInfo.getEndPoint(), context);
                LOG.debug("[{}] Adding new node {}", logPrefix, node);
                added.put(id, node);
            }
            if (tokenFactory == null && nodeInfo.getPartitioner() != null) {
                tokenFactory = tokenFactoryRegistry.tokenFactoryFor(nodeInfo.getPartitioner());
            }
            tokensChanged |= copyInfos(nodeInfo, node, context);
        }
    }
    Set<UUID> removed = Sets.difference(oldNodes.keySet(), seen);
    if (added.isEmpty() && removed.isEmpty()) {
        // The list didn't change
        if (!oldMetadata.getTokenMap().isPresent() && tokenFactory != null) {
            // token map rebuild:
            return new Result(oldMetadata.withNodes(oldMetadata.getNodes(), tokenMapEnabled, true, tokenFactory, context));
        } else {
            // No need to create a new metadata instance
            return new Result(oldMetadata);
        }
    } else {
        ImmutableMap.Builder<UUID, Node> newNodesBuilder = ImmutableMap.builder();
        ImmutableList.Builder<Object> eventsBuilder = ImmutableList.builder();
        newNodesBuilder.putAll(added);
        for (Map.Entry<UUID, Node> entry : oldNodes.entrySet()) {
            if (!removed.contains(entry.getKey())) {
                newNodesBuilder.put(entry.getKey(), entry.getValue());
            }
        }
        for (Node node : added.values()) {
            eventsBuilder.add(NodeStateEvent.added((DefaultNode) node));
        }
        for (UUID id : removed) {
            Node node = oldNodes.get(id);
            eventsBuilder.add(NodeStateEvent.removed((DefaultNode) node));
        }
        return new Result(oldMetadata.withNodes(newNodesBuilder.build(), tokenMapEnabled, tokensChanged, tokenFactory, context), eventsBuilder.build());
    }
}
Also used : Node(com.datastax.oss.driver.api.core.metadata.Node) Sets(com.datastax.oss.driver.shaded.guava.common.collect.Sets) Logger(org.slf4j.Logger) LoggerFactory(org.slf4j.LoggerFactory) TokenFactory(com.datastax.oss.driver.internal.core.metadata.token.TokenFactory) Set(java.util.Set) ThreadSafe(net.jcip.annotations.ThreadSafe) InternalDriverContext(com.datastax.oss.driver.internal.core.context.InternalDriverContext) HashMap(java.util.HashMap) UUID(java.util.UUID) ImmutableList(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList) ImmutableMap(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap) HashSet(java.util.HashSet) TokenFactoryRegistry(com.datastax.oss.driver.internal.core.metadata.token.TokenFactoryRegistry) Map(java.util.Map) VisibleForTesting(com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting) DefaultTokenMap(com.datastax.oss.driver.internal.core.metadata.token.DefaultTokenMap) DefaultTokenMap(com.datastax.oss.driver.internal.core.metadata.token.DefaultTokenMap) HashMap(java.util.HashMap) ImmutableList(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList) Node(com.datastax.oss.driver.api.core.metadata.Node) TokenFactoryRegistry(com.datastax.oss.driver.internal.core.metadata.token.TokenFactoryRegistry) ImmutableMap(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap) TokenFactory(com.datastax.oss.driver.internal.core.metadata.token.TokenFactory) UUID(java.util.UUID) HashMap(java.util.HashMap) ImmutableMap(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap) Map(java.util.Map) DefaultTokenMap(com.datastax.oss.driver.internal.core.metadata.token.DefaultTokenMap) HashSet(java.util.HashSet)

Example 3 with TokenFactory

use of com.datastax.oss.driver.internal.core.metadata.token.TokenFactory in project java-driver by datastax.

the class InitialNodeListRefresh method compute.

@Override
public Result compute(DefaultMetadata oldMetadata, boolean tokenMapEnabled, InternalDriverContext context) {
    String logPrefix = context.getSessionName();
    TokenFactoryRegistry tokenFactoryRegistry = context.getTokenFactoryRegistry();
    // metadata is empty.
    assert oldMetadata == DefaultMetadata.EMPTY;
    TokenFactory tokenFactory = null;
    Map<UUID, DefaultNode> newNodes = new HashMap<>();
    for (NodeInfo nodeInfo : nodeInfos) {
        UUID hostId = nodeInfo.getHostId();
        if (newNodes.containsKey(hostId)) {
            LOG.warn("[{}] Found duplicate entries with host_id {} in system.peers, " + "keeping only the first one", logPrefix, hostId);
        } else {
            EndPoint endPoint = nodeInfo.getEndPoint();
            DefaultNode node = findIn(contactPoints, endPoint);
            if (node == null) {
                node = new DefaultNode(endPoint, context);
                LOG.debug("[{}] Adding new node {}", logPrefix, node);
            } else {
                LOG.debug("[{}] Copying contact point {}", logPrefix, node);
            }
            if (tokenMapEnabled && tokenFactory == null && nodeInfo.getPartitioner() != null) {
                tokenFactory = tokenFactoryRegistry.tokenFactoryFor(nodeInfo.getPartitioner());
            }
            copyInfos(nodeInfo, node, context);
            newNodes.put(hostId, node);
        }
    }
    ImmutableList.Builder<Object> eventsBuilder = ImmutableList.builder();
    for (DefaultNode newNode : newNodes.values()) {
        if (findIn(contactPoints, newNode.getEndPoint()) == null) {
            eventsBuilder.add(NodeStateEvent.added(newNode));
        }
    }
    for (DefaultNode contactPoint : contactPoints) {
        if (findIn(newNodes.values(), contactPoint.getEndPoint()) == null) {
            eventsBuilder.add(NodeStateEvent.removed(contactPoint));
        }
    }
    return new Result(oldMetadata.withNodes(ImmutableMap.copyOf(newNodes), tokenMapEnabled, true, tokenFactory, context), eventsBuilder.build());
}
Also used : HashMap(java.util.HashMap) ImmutableList(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList) TokenFactoryRegistry(com.datastax.oss.driver.internal.core.metadata.token.TokenFactoryRegistry) EndPoint(com.datastax.oss.driver.api.core.metadata.EndPoint) TokenFactory(com.datastax.oss.driver.internal.core.metadata.token.TokenFactory) UUID(java.util.UUID)

Aggregations

TokenFactory (com.datastax.oss.driver.internal.core.metadata.token.TokenFactory)3 DefaultTokenMap (com.datastax.oss.driver.internal.core.metadata.token.DefaultTokenMap)2 TokenFactoryRegistry (com.datastax.oss.driver.internal.core.metadata.token.TokenFactoryRegistry)2 ImmutableList (com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList)2 HashMap (java.util.HashMap)2 UUID (java.util.UUID)2 CqlSession (com.datastax.oss.driver.api.core.CqlSession)1 BoundStatement (com.datastax.oss.driver.api.core.cql.BoundStatement)1 EndPoint (com.datastax.oss.driver.api.core.metadata.EndPoint)1 Node (com.datastax.oss.driver.api.core.metadata.Node)1 Token (com.datastax.oss.driver.api.core.metadata.token.Token)1 InternalDriverContext (com.datastax.oss.driver.internal.core.context.InternalDriverContext)1 VisibleForTesting (com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting)1 ImmutableMap (com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap)1 Sets (com.datastax.oss.driver.shaded.guava.common.collect.Sets)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 Set (java.util.Set)1 ThreadSafe (net.jcip.annotations.ThreadSafe)1 Logger (org.slf4j.Logger)1