Search in sources :

Example 1 with KeyQueryMetadata

use of org.apache.kafka.streams.KeyQueryMetadata in project kafka by apache.

the class StreamsMetadataStateTest method shouldGetInstanceWithKeyAndCustomPartitioner.

@Test
public void shouldGetInstanceWithKeyAndCustomPartitioner() {
    final TopicPartition tp4 = new TopicPartition("topic-three", 1);
    hostToActivePartitions.put(hostTwo, mkSet(topic2P0, tp4));
    metadataState.onChange(hostToActivePartitions, hostToStandbyPartitions, cluster.withPartitions(Collections.singletonMap(tp4, new PartitionInfo("topic-three", 1, null, null, null))));
    final KeyQueryMetadata expected = new KeyQueryMetadata(hostTwo, Collections.emptySet(), 1);
    final KeyQueryMetadata actual = metadataState.getKeyQueryMetadataForKey("table-three", "the-key", partitioner);
    assertEquals(expected, actual);
    assertEquals(1, actual.partition());
}
Also used : TopicPartition(org.apache.kafka.common.TopicPartition) PartitionInfo(org.apache.kafka.common.PartitionInfo) KeyQueryMetadata(org.apache.kafka.streams.KeyQueryMetadata) Test(org.junit.Test)

Example 2 with KeyQueryMetadata

use of org.apache.kafka.streams.KeyQueryMetadata in project kafka by apache.

the class StreamsMetadataStateTest method shouldReturnNotAvailableWhenClusterIsEmpty.

@Test
public void shouldReturnNotAvailableWhenClusterIsEmpty() {
    metadataState.onChange(Collections.emptyMap(), Collections.emptyMap(), Cluster.empty());
    final KeyQueryMetadata result = metadataState.getKeyQueryMetadataForKey("table-one", "a", Serdes.String().serializer());
    assertEquals(KeyQueryMetadata.NOT_AVAILABLE, result);
}
Also used : KeyQueryMetadata(org.apache.kafka.streams.KeyQueryMetadata) Test(org.junit.Test)

Example 3 with KeyQueryMetadata

use of org.apache.kafka.streams.KeyQueryMetadata in project kafka by apache.

the class StreamsMetadataStateTest method shouldGetQueryMetadataForGlobalStoreWithKeyAndPartitioner.

@Test
public void shouldGetQueryMetadataForGlobalStoreWithKeyAndPartitioner() {
    final KeyQueryMetadata metadata = metadataState.getKeyQueryMetadataForKey(globalTable, "key", partitioner);
    assertEquals(hostOne, metadata.activeHost());
    assertTrue(metadata.standbyHosts().isEmpty());
}
Also used : KeyQueryMetadata(org.apache.kafka.streams.KeyQueryMetadata) Test(org.junit.Test)

Example 4 with KeyQueryMetadata

use of org.apache.kafka.streams.KeyQueryMetadata in project kafka by apache.

the class StreamsMetadataStateTest method shouldGetQueryMetadataForGlobalStoreWithKey.

@Test
public void shouldGetQueryMetadataForGlobalStoreWithKey() {
    final KeyQueryMetadata metadata = metadataState.getKeyQueryMetadataForKey(globalTable, "key", Serdes.String().serializer());
    assertEquals(hostOne, metadata.activeHost());
    assertTrue(metadata.standbyHosts().isEmpty());
}
Also used : KeyQueryMetadata(org.apache.kafka.streams.KeyQueryMetadata) Test(org.junit.Test)

Example 5 with KeyQueryMetadata

use of org.apache.kafka.streams.KeyQueryMetadata in project kafka by apache.

the class QueryableStateIntegrationTest method verifyAllKVKeys.

private void verifyAllKVKeys(final List<KafkaStreams> streamsList, final KafkaStreams streams, final KafkaStreamsTest.StateListenerStub stateListener, final Set<String> keys, final String storeName, final long timeout, final boolean pickInstanceByPort) throws Exception {
    retryOnExceptionWithTimeout(timeout, () -> {
        final List<String> noMetadataKeys = new ArrayList<>();
        final List<String> nullStoreKeys = new ArrayList<>();
        final List<String> nullValueKeys = new ArrayList<>();
        final Map<String, Exception> exceptionalKeys = new TreeMap<>();
        final StringSerializer serializer = new StringSerializer();
        for (final String key : keys) {
            try {
                final KeyQueryMetadata queryMetadata = streams.queryMetadataForKey(storeName, key, serializer);
                if (queryMetadata == null || queryMetadata.equals(KeyQueryMetadata.NOT_AVAILABLE)) {
                    noMetadataKeys.add(key);
                    continue;
                }
                if (!pickInstanceByPort) {
                    assertThat("Should have standbys to query from", !queryMetadata.standbyHosts().isEmpty());
                }
                final int index = queryMetadata.activeHost().port();
                final KafkaStreams streamsWithKey = pickInstanceByPort ? streamsList.get(index) : streams;
                final ReadOnlyKeyValueStore<String, Long> store = IntegrationTestUtils.getStore(storeName, streamsWithKey, true, keyValueStore());
                if (store == null) {
                    nullStoreKeys.add(key);
                    continue;
                }
                if (store.get(key) == null) {
                    nullValueKeys.add(key);
                }
            } catch (final InvalidStateStoreException e) {
                if (stateListener.mapStates.get(KafkaStreams.State.REBALANCING) < 1) {
                    throw new NoRetryException(new AssertionError(String.format("Received %s for key %s and expected at least one rebalancing state, but had none", e.getClass().getName(), key)));
                }
            } catch (final Exception e) {
                exceptionalKeys.put(key, e);
            }
        }
        assertNoKVKeyFailures(storeName, timeout, noMetadataKeys, nullStoreKeys, nullValueKeys, exceptionalKeys);
    });
}
Also used : KafkaStreams(org.apache.kafka.streams.KafkaStreams) ArrayList(java.util.ArrayList) TreeMap(java.util.TreeMap) UnknownStateStoreException(org.apache.kafka.streams.errors.UnknownStateStoreException) IOException(java.io.IOException) InvalidStateStoreException(org.apache.kafka.streams.errors.InvalidStateStoreException) NoRetryException(org.apache.kafka.test.NoRetryException) KeyQueryMetadata(org.apache.kafka.streams.KeyQueryMetadata) InvalidStateStoreException(org.apache.kafka.streams.errors.InvalidStateStoreException) NoRetryException(org.apache.kafka.test.NoRetryException) StringSerializer(org.apache.kafka.common.serialization.StringSerializer)

Aggregations

KeyQueryMetadata (org.apache.kafka.streams.KeyQueryMetadata)17 Test (org.junit.Test)14 KafkaStreams (org.apache.kafka.streams.KafkaStreams)8 ReadOnlyKeyValueStore (org.apache.kafka.streams.state.ReadOnlyKeyValueStore)7 Semaphore (java.util.concurrent.Semaphore)6 IntegrationTest (org.apache.kafka.test.IntegrationTest)6 TopicPartition (org.apache.kafka.common.TopicPartition)5 StreamsBuilder (org.apache.kafka.streams.StreamsBuilder)5 InvalidStateStoreException (org.apache.kafka.streams.errors.InvalidStateStoreException)4 Properties (java.util.Properties)3 PartitionInfo (org.apache.kafka.common.PartitionInfo)3 StringSerializer (org.apache.kafka.common.serialization.StringSerializer)3 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 TreeMap (java.util.TreeMap)2 IntegerSerializer (org.apache.kafka.common.serialization.IntegerSerializer)2 StreamsMetadata (org.apache.kafka.streams.StreamsMetadata)2 KafkaStreamsNamedTopologyWrapper (org.apache.kafka.streams.processor.internals.namedtopology.KafkaStreamsNamedTopologyWrapper)2 NamedTopologyBuilder (org.apache.kafka.streams.processor.internals.namedtopology.NamedTopologyBuilder)2 KeyValueStore (org.apache.kafka.streams.state.KeyValueStore)2