org.apache.flink.queryablestate.exceptions.UnknownKeyOrNamespaceException Java Examples
The following examples show how to use
org.apache.flink.queryablestate.exceptions.UnknownKeyOrNamespaceException.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: KvStateServerHandler.java From Flink-CEPplus with Apache License 2.0 | 6 votes |
@Override public CompletableFuture<KvStateResponse> handleRequest(final long requestId, final KvStateInternalRequest request) { final CompletableFuture<KvStateResponse> responseFuture = new CompletableFuture<>(); try { final KvStateEntry<?, ?, ?> kvState = registry.getKvState(request.getKvStateId()); if (kvState == null) { responseFuture.completeExceptionally(new UnknownKvStateIdException(getServerName(), request.getKvStateId())); } else { byte[] serializedKeyAndNamespace = request.getSerializedKeyAndNamespace(); byte[] serializedResult = getSerializedValue(kvState, serializedKeyAndNamespace); if (serializedResult != null) { responseFuture.complete(new KvStateResponse(serializedResult)); } else { responseFuture.completeExceptionally(new UnknownKeyOrNamespaceException(getServerName())); } } return responseFuture; } catch (Throwable t) { String errMsg = "Error while processing request with ID " + requestId + ". Caused by: " + ExceptionUtils.stringifyException(t); responseFuture.completeExceptionally(new RuntimeException(errMsg)); return responseFuture; } }
Example #2
Source File: KvStateServerHandler.java From flink with Apache License 2.0 | 6 votes |
@Override public CompletableFuture<KvStateResponse> handleRequest(final long requestId, final KvStateInternalRequest request) { final CompletableFuture<KvStateResponse> responseFuture = new CompletableFuture<>(); try { final KvStateEntry<?, ?, ?> kvState = registry.getKvState(request.getKvStateId()); if (kvState == null) { responseFuture.completeExceptionally(new UnknownKvStateIdException(getServerName(), request.getKvStateId())); } else { byte[] serializedKeyAndNamespace = request.getSerializedKeyAndNamespace(); byte[] serializedResult = getSerializedValue(kvState, serializedKeyAndNamespace); if (serializedResult != null) { responseFuture.complete(new KvStateResponse(serializedResult)); } else { responseFuture.completeExceptionally(new UnknownKeyOrNamespaceException(getServerName())); } } return responseFuture; } catch (Throwable t) { String errMsg = "Error while processing request with ID " + requestId + ". Caused by: " + ExceptionUtils.stringifyException(t); responseFuture.completeExceptionally(new RuntimeException(errMsg)); return responseFuture; } }
Example #3
Source File: KvStateServerHandler.java From flink with Apache License 2.0 | 6 votes |
@Override public CompletableFuture<KvStateResponse> handleRequest(final long requestId, final KvStateInternalRequest request) { final CompletableFuture<KvStateResponse> responseFuture = new CompletableFuture<>(); try { final KvStateEntry<?, ?, ?> kvState = registry.getKvState(request.getKvStateId()); if (kvState == null) { responseFuture.completeExceptionally(new UnknownKvStateIdException(getServerName(), request.getKvStateId())); } else { byte[] serializedKeyAndNamespace = request.getSerializedKeyAndNamespace(); byte[] serializedResult = getSerializedValue(kvState, serializedKeyAndNamespace); if (serializedResult != null) { responseFuture.complete(new KvStateResponse(serializedResult)); } else { responseFuture.completeExceptionally(new UnknownKeyOrNamespaceException(getServerName())); } } return responseFuture; } catch (Throwable t) { String errMsg = "Error while processing request with ID " + requestId + ". Caused by: " + ExceptionUtils.stringifyException(t); responseFuture.completeExceptionally(new RuntimeException(errMsg)); return responseFuture; } }
Example #4
Source File: AbstractQueryableStateTestBase.java From Flink-CEPplus with Apache License 2.0 | 5 votes |
private static <K, S extends State, V> void getKvStateIgnoringCertainExceptions( final Deadline deadline, final CompletableFuture<S> resultFuture, final QueryableStateClient client, final JobID jobId, final String queryName, final K key, final TypeInformation<K> keyTypeInfo, final StateDescriptor<S, V> stateDescriptor, final boolean failForUnknownKeyOrNamespace, final ScheduledExecutor executor) { if (!resultFuture.isDone()) { CompletableFuture<S> expected = client.getKvState(jobId, queryName, key, keyTypeInfo, stateDescriptor); expected.whenCompleteAsync((result, throwable) -> { if (throwable != null) { if ( throwable.getCause() instanceof CancellationException || throwable.getCause() instanceof AssertionError || (failForUnknownKeyOrNamespace && throwable.getCause() instanceof UnknownKeyOrNamespaceException) ) { resultFuture.completeExceptionally(throwable.getCause()); } else if (deadline.hasTimeLeft()) { getKvStateIgnoringCertainExceptions( deadline, resultFuture, client, jobId, queryName, key, keyTypeInfo, stateDescriptor, failForUnknownKeyOrNamespace, executor); } } else { resultFuture.complete(result); } }, executor); resultFuture.whenComplete((result, throwable) -> expected.cancel(false)); } }
Example #5
Source File: AbstractQueryableStateTestBase.java From flink with Apache License 2.0 | 5 votes |
private static <K, S extends State, V> void getKvStateIgnoringCertainExceptions( final Deadline deadline, final CompletableFuture<S> resultFuture, final QueryableStateClient client, final JobID jobId, final String queryName, final K key, final TypeInformation<K> keyTypeInfo, final StateDescriptor<S, V> stateDescriptor, final boolean failForUnknownKeyOrNamespace, final ScheduledExecutor executor) { if (!resultFuture.isDone()) { CompletableFuture<S> expected = client.getKvState(jobId, queryName, key, keyTypeInfo, stateDescriptor); expected.whenCompleteAsync((result, throwable) -> { if (throwable != null) { if ( throwable.getCause() instanceof CancellationException || throwable.getCause() instanceof AssertionError || (failForUnknownKeyOrNamespace && throwable.getCause() instanceof UnknownKeyOrNamespaceException) ) { resultFuture.completeExceptionally(throwable.getCause()); } else if (deadline.hasTimeLeft()) { getKvStateIgnoringCertainExceptions( deadline, resultFuture, client, jobId, queryName, key, keyTypeInfo, stateDescriptor, failForUnknownKeyOrNamespace, executor); } } else { resultFuture.complete(result); } }, executor); resultFuture.whenComplete((result, throwable) -> expected.cancel(false)); } }
Example #6
Source File: AbstractQueryableStateTestBase.java From flink with Apache License 2.0 | 5 votes |
private static <K, S extends State, V> void getKvStateIgnoringCertainExceptions( final Deadline deadline, final CompletableFuture<S> resultFuture, final QueryableStateClient client, final JobID jobId, final String queryName, final K key, final TypeInformation<K> keyTypeInfo, final StateDescriptor<S, V> stateDescriptor, final boolean failForUnknownKeyOrNamespace, final ScheduledExecutor executor) { if (!resultFuture.isDone()) { CompletableFuture<S> expected = client.getKvState(jobId, queryName, key, keyTypeInfo, stateDescriptor); expected.whenCompleteAsync((result, throwable) -> { if (throwable != null) { if ( throwable.getCause() instanceof CancellationException || throwable.getCause() instanceof AssertionError || (failForUnknownKeyOrNamespace && throwable.getCause() instanceof UnknownKeyOrNamespaceException) ) { resultFuture.completeExceptionally(throwable.getCause()); } else if (deadline.hasTimeLeft()) { getKvStateIgnoringCertainExceptions( deadline, resultFuture, client, jobId, queryName, key, keyTypeInfo, stateDescriptor, failForUnknownKeyOrNamespace, executor); } } else { resultFuture.complete(result); } }, executor); resultFuture.whenComplete((result, throwable) -> expected.cancel(false)); } }
Example #7
Source File: QsStateClient.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
public static void main(final String[] args) throws Exception { ParameterTool parameters = ParameterTool.fromArgs(args); // setup values String jobId = parameters.getRequired("job-id"); String host = parameters.get("host", "localhost"); int port = parameters.getInt("port", 9069); int numIterations = parameters.getInt("iterations", 1500); QueryableStateClient client = new QueryableStateClient(host, port); client.setExecutionConfig(new ExecutionConfig()); MapStateDescriptor<EmailId, EmailInformation> stateDescriptor = new MapStateDescriptor<>( QsConstants.STATE_NAME, TypeInformation.of(new TypeHint<EmailId>() { }), TypeInformation.of(new TypeHint<EmailInformation>() { }) ); // wait for state to exist for (int i = 0; i < BOOTSTRAP_RETRIES; i++) { // ~120s try { getMapState(jobId, client, stateDescriptor); break; } catch (ExecutionException e) { if (e.getCause() instanceof UnknownKeyOrNamespaceException) { System.err.println("State does not exist yet; sleeping 500ms"); Thread.sleep(500L); } else { throw e; } } if (i == (BOOTSTRAP_RETRIES - 1)) { throw new RuntimeException("Timeout: state doesn't exist after 120s"); } } // query state for (int iterations = 0; iterations < numIterations; iterations++) { MapState<EmailId, EmailInformation> mapState = getMapState(jobId, client, stateDescriptor); int counter = 0; for (Map.Entry<EmailId, EmailInformation> entry: mapState.entries()) { // this is to force deserialization entry.getKey(); entry.getValue(); counter++; } System.out.println("MapState has " + counter + " entries"); // we look for it in the test Thread.sleep(100L); } }
Example #8
Source File: KvStateServerHandlerTest.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
/** * Tests the failure response with {@link UnknownKeyOrNamespaceException} as cause * on queries for non-existing keys. */ @Test public void testQueryUnknownKey() throws Exception { KvStateRegistry registry = new KvStateRegistry(); AtomicKvStateRequestStats stats = new AtomicKvStateRequestStats(); MessageSerializer<KvStateInternalRequest, KvStateResponse> serializer = new MessageSerializer<>(new KvStateInternalRequest.KvStateInternalRequestDeserializer(), new KvStateResponse.KvStateResponseDeserializer()); KvStateServerHandler handler = new KvStateServerHandler(testServer, registry, serializer, stats); EmbeddedChannel channel = new EmbeddedChannel(getFrameDecoder(), handler); int numKeyGroups = 1; AbstractStateBackend abstractBackend = new MemoryStateBackend(); DummyEnvironment dummyEnv = new DummyEnvironment("test", 1, 0); dummyEnv.setKvStateRegistry(registry); KeyedStateBackend<Integer> backend = createKeyedStateBackend(registry, numKeyGroups, abstractBackend, dummyEnv); final TestRegistryListener registryListener = new TestRegistryListener(); registry.registerListener(dummyEnv.getJobID(), registryListener); // Register state ValueStateDescriptor<Integer> desc = new ValueStateDescriptor<>("any", IntSerializer.INSTANCE); desc.setQueryable("vanilla"); backend.getPartitionedState(VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, desc); byte[] serializedKeyAndNamespace = KvStateSerializer.serializeKeyAndNamespace( 1238283, IntSerializer.INSTANCE, VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE); long requestId = Integer.MAX_VALUE + 22982L; assertTrue(registryListener.registrationName.equals("vanilla")); KvStateInternalRequest request = new KvStateInternalRequest(registryListener.kvStateId, serializedKeyAndNamespace); ByteBuf serRequest = MessageSerializer.serializeRequest(channel.alloc(), requestId, request); // Write the request and wait for the response channel.writeInbound(serRequest); ByteBuf buf = (ByteBuf) readInboundBlocking(channel); buf.skipBytes(4); // skip frame length // Verify the response assertEquals(MessageType.REQUEST_FAILURE, MessageSerializer.deserializeHeader(buf)); RequestFailure response = MessageSerializer.deserializeRequestFailure(buf); assertEquals(requestId, response.getRequestId()); assertTrue("Did not respond with expected failure cause", response.getCause() instanceof UnknownKeyOrNamespaceException); assertEquals(1L, stats.getNumRequests()); assertEquals(1L, stats.getNumFailed()); }
Example #9
Source File: AbstractQueryableStateTestBase.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
/** * Tests simple value state queryable state instance with a default value * set. Each source emits (subtaskIndex, 0)..(subtaskIndex, numElements) * tuples, the key is mapped to 1 but key 0 is queried which should throw * a {@link UnknownKeyOrNamespaceException} exception. * * @throws UnknownKeyOrNamespaceException thrown due querying a non-existent key */ @Test(expected = UnknownKeyOrNamespaceException.class) public void testValueStateDefault() throws Throwable { final Deadline deadline = Deadline.now().plus(TEST_TIMEOUT); final long numElements = 1024L; StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setStateBackend(stateBackend); env.setParallelism(maxParallelism); // Very important, because cluster is shared between tests and we // don't explicitly check that all slots are available before // submitting. env.setRestartStrategy(RestartStrategies.fixedDelayRestart(Integer.MAX_VALUE, 1000L)); DataStream<Tuple2<Integer, Long>> source = env.addSource(new TestAscendingValueSource(numElements)); ValueStateDescriptor<Tuple2<Integer, Long>> valueState = new ValueStateDescriptor<>( "any", source.getType(), Tuple2.of(0, 1337L)); // only expose key "1" QueryableStateStream<Integer, Tuple2<Integer, Long>> queryableState = source.keyBy( new KeySelector<Tuple2<Integer, Long>, Integer>() { private static final long serialVersionUID = 4509274556892655887L; @Override public Integer getKey(Tuple2<Integer, Long> value) { return 1; } }).asQueryableState("hakuna", valueState); try (AutoCancellableJob autoCancellableJob = new AutoCancellableJob(deadline, clusterClient, env)) { final JobID jobId = autoCancellableJob.getJobId(); final JobGraph jobGraph = autoCancellableJob.getJobGraph(); clusterClient.setDetached(true); clusterClient.submitJob(jobGraph, AbstractQueryableStateTestBase.class.getClassLoader()); // Now query int key = 0; CompletableFuture<ValueState<Tuple2<Integer, Long>>> future = getKvState( deadline, client, jobId, queryableState.getQueryableStateName(), key, BasicTypeInfo.INT_TYPE_INFO, valueState, true, executor); try { future.get(deadline.timeLeft().toMillis(), TimeUnit.MILLISECONDS); } catch (ExecutionException | CompletionException e) { // get() on a completedExceptionally future wraps the // exception in an ExecutionException. throw e.getCause(); } } }
Example #10
Source File: QsStateClient.java From flink with Apache License 2.0 | 4 votes |
public static void main(final String[] args) throws Exception { ParameterTool parameters = ParameterTool.fromArgs(args); // setup values String jobId = parameters.getRequired("job-id"); String host = parameters.get("host", "localhost"); int port = parameters.getInt("port", 9069); int numIterations = parameters.getInt("iterations", 1500); QueryableStateClient client = new QueryableStateClient(host, port); client.setExecutionConfig(new ExecutionConfig()); MapStateDescriptor<EmailId, EmailInformation> stateDescriptor = new MapStateDescriptor<>( QsConstants.STATE_NAME, TypeInformation.of(new TypeHint<EmailId>() { }), TypeInformation.of(new TypeHint<EmailInformation>() { }) ); // wait for state to exist for (int i = 0; i < BOOTSTRAP_RETRIES; i++) { // ~120s try { getMapState(jobId, client, stateDescriptor); break; } catch (ExecutionException e) { if (e.getCause() instanceof UnknownKeyOrNamespaceException) { System.err.println("State does not exist yet; sleeping 500ms"); Thread.sleep(500L); } else { throw e; } } if (i == (BOOTSTRAP_RETRIES - 1)) { throw new RuntimeException("Timeout: state doesn't exist after 120s"); } } // query state for (int iterations = 0; iterations < numIterations; iterations++) { MapState<EmailId, EmailInformation> mapState = getMapState(jobId, client, stateDescriptor); int counter = 0; for (Map.Entry<EmailId, EmailInformation> entry: mapState.entries()) { // this is to force deserialization entry.getKey(); entry.getValue(); counter++; } System.out.println("MapState has " + counter + " entries"); // we look for it in the test Thread.sleep(100L); } }
Example #11
Source File: KvStateServerHandlerTest.java From flink with Apache License 2.0 | 4 votes |
/** * Tests the failure response with {@link UnknownKeyOrNamespaceException} as cause * on queries for non-existing keys. */ @Test public void testQueryUnknownKey() throws Exception { KvStateRegistry registry = new KvStateRegistry(); AtomicKvStateRequestStats stats = new AtomicKvStateRequestStats(); MessageSerializer<KvStateInternalRequest, KvStateResponse> serializer = new MessageSerializer<>(new KvStateInternalRequest.KvStateInternalRequestDeserializer(), new KvStateResponse.KvStateResponseDeserializer()); KvStateServerHandler handler = new KvStateServerHandler(testServer, registry, serializer, stats); EmbeddedChannel channel = new EmbeddedChannel(getFrameDecoder(), handler); int numKeyGroups = 1; AbstractStateBackend abstractBackend = new MemoryStateBackend(); DummyEnvironment dummyEnv = new DummyEnvironment("test", 1, 0); dummyEnv.setKvStateRegistry(registry); KeyedStateBackend<Integer> backend = createKeyedStateBackend(registry, numKeyGroups, abstractBackend, dummyEnv); final TestRegistryListener registryListener = new TestRegistryListener(); registry.registerListener(dummyEnv.getJobID(), registryListener); // Register state ValueStateDescriptor<Integer> desc = new ValueStateDescriptor<>("any", IntSerializer.INSTANCE); desc.setQueryable("vanilla"); backend.getPartitionedState(VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, desc); byte[] serializedKeyAndNamespace = KvStateSerializer.serializeKeyAndNamespace( 1238283, IntSerializer.INSTANCE, VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE); long requestId = Integer.MAX_VALUE + 22982L; assertTrue(registryListener.registrationName.equals("vanilla")); KvStateInternalRequest request = new KvStateInternalRequest(registryListener.kvStateId, serializedKeyAndNamespace); ByteBuf serRequest = MessageSerializer.serializeRequest(channel.alloc(), requestId, request); // Write the request and wait for the response channel.writeInbound(serRequest); ByteBuf buf = (ByteBuf) readInboundBlocking(channel); buf.skipBytes(4); // skip frame length // Verify the response assertEquals(MessageType.REQUEST_FAILURE, MessageSerializer.deserializeHeader(buf)); RequestFailure response = MessageSerializer.deserializeRequestFailure(buf); assertEquals(requestId, response.getRequestId()); assertTrue("Did not respond with expected failure cause", response.getCause() instanceof UnknownKeyOrNamespaceException); assertEquals(1L, stats.getNumRequests()); assertEquals(1L, stats.getNumFailed()); }
Example #12
Source File: AbstractQueryableStateTestBase.java From flink with Apache License 2.0 | 4 votes |
/** * Tests simple value state queryable state instance with a default value * set. Each source emits (subtaskIndex, 0)..(subtaskIndex, numElements) * tuples, the key is mapped to 1 but key 0 is queried which should throw * a {@link UnknownKeyOrNamespaceException} exception. * * @throws UnknownKeyOrNamespaceException thrown due querying a non-existent key */ @Test(expected = UnknownKeyOrNamespaceException.class) public void testValueStateDefault() throws Throwable { final Deadline deadline = Deadline.now().plus(TEST_TIMEOUT); final long numElements = 1024L; StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setStateBackend(stateBackend); env.setParallelism(maxParallelism); // Very important, because cluster is shared between tests and we // don't explicitly check that all slots are available before // submitting. env.setRestartStrategy(RestartStrategies.fixedDelayRestart(Integer.MAX_VALUE, 1000L)); DataStream<Tuple2<Integer, Long>> source = env.addSource(new TestAscendingValueSource(numElements)); ValueStateDescriptor<Tuple2<Integer, Long>> valueState = new ValueStateDescriptor<>( "any", source.getType(), Tuple2.of(0, 1337L)); // only expose key "1" QueryableStateStream<Integer, Tuple2<Integer, Long>> queryableState = source.keyBy( new KeySelector<Tuple2<Integer, Long>, Integer>() { private static final long serialVersionUID = 4509274556892655887L; @Override public Integer getKey(Tuple2<Integer, Long> value) { return 1; } }).asQueryableState("hakuna", valueState); try (AutoCancellableJob autoCancellableJob = new AutoCancellableJob(deadline, clusterClient, env)) { final JobID jobId = autoCancellableJob.getJobId(); final JobGraph jobGraph = autoCancellableJob.getJobGraph(); clusterClient.setDetached(true); clusterClient.submitJob(jobGraph, AbstractQueryableStateTestBase.class.getClassLoader()); // Now query int key = 0; CompletableFuture<ValueState<Tuple2<Integer, Long>>> future = getKvState( deadline, client, jobId, queryableState.getQueryableStateName(), key, BasicTypeInfo.INT_TYPE_INFO, valueState, true, executor); try { future.get(deadline.timeLeft().toMillis(), TimeUnit.MILLISECONDS); } catch (ExecutionException | CompletionException e) { // get() on a completedExceptionally future wraps the // exception in an ExecutionException. throw e.getCause(); } } }
Example #13
Source File: QsStateClient.java From flink with Apache License 2.0 | 4 votes |
public static void main(final String[] args) throws Exception { ParameterTool parameters = ParameterTool.fromArgs(args); // setup values String jobId = parameters.getRequired("job-id"); String host = parameters.get("host", "localhost"); int port = parameters.getInt("port", 9069); int numIterations = parameters.getInt("iterations", 1500); QueryableStateClient client = new QueryableStateClient(host, port); client.setExecutionConfig(new ExecutionConfig()); MapStateDescriptor<EmailId, EmailInformation> stateDescriptor = new MapStateDescriptor<>( QsConstants.STATE_NAME, TypeInformation.of(new TypeHint<EmailId>() { }), TypeInformation.of(new TypeHint<EmailInformation>() { }) ); // wait for state to exist for (int i = 0; i < BOOTSTRAP_RETRIES; i++) { // ~120s try { getMapState(jobId, client, stateDescriptor); break; } catch (ExecutionException e) { if (e.getCause() instanceof UnknownKeyOrNamespaceException) { System.err.println("State does not exist yet; sleeping 500ms"); Thread.sleep(500L); } else { throw e; } } if (i == (BOOTSTRAP_RETRIES - 1)) { throw new RuntimeException("Timeout: state doesn't exist after 120s"); } } // query state for (int iterations = 0; iterations < numIterations; iterations++) { MapState<EmailId, EmailInformation> mapState = getMapState(jobId, client, stateDescriptor); int counter = 0; for (Map.Entry<EmailId, EmailInformation> entry: mapState.entries()) { // this is to force deserialization entry.getKey(); entry.getValue(); counter++; } System.out.println("MapState has " + counter + " entries"); // we look for it in the test Thread.sleep(100L); } }
Example #14
Source File: KvStateServerHandlerTest.java From flink with Apache License 2.0 | 4 votes |
/** * Tests the failure response with {@link UnknownKeyOrNamespaceException} as cause * on queries for non-existing keys. */ @Test public void testQueryUnknownKey() throws Exception { KvStateRegistry registry = new KvStateRegistry(); AtomicKvStateRequestStats stats = new AtomicKvStateRequestStats(); MessageSerializer<KvStateInternalRequest, KvStateResponse> serializer = new MessageSerializer<>(new KvStateInternalRequest.KvStateInternalRequestDeserializer(), new KvStateResponse.KvStateResponseDeserializer()); KvStateServerHandler handler = new KvStateServerHandler(testServer, registry, serializer, stats); EmbeddedChannel channel = new EmbeddedChannel(getFrameDecoder(), handler); int numKeyGroups = 1; AbstractStateBackend abstractBackend = new MemoryStateBackend(); DummyEnvironment dummyEnv = new DummyEnvironment("test", 1, 0); dummyEnv.setKvStateRegistry(registry); KeyedStateBackend<Integer> backend = createKeyedStateBackend(registry, numKeyGroups, abstractBackend, dummyEnv); final TestRegistryListener registryListener = new TestRegistryListener(); registry.registerListener(dummyEnv.getJobID(), registryListener); // Register state ValueStateDescriptor<Integer> desc = new ValueStateDescriptor<>("any", IntSerializer.INSTANCE); desc.setQueryable("vanilla"); backend.getPartitionedState(VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, desc); byte[] serializedKeyAndNamespace = KvStateSerializer.serializeKeyAndNamespace( 1238283, IntSerializer.INSTANCE, VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE); long requestId = Integer.MAX_VALUE + 22982L; assertTrue(registryListener.registrationName.equals("vanilla")); KvStateInternalRequest request = new KvStateInternalRequest(registryListener.kvStateId, serializedKeyAndNamespace); ByteBuf serRequest = MessageSerializer.serializeRequest(channel.alloc(), requestId, request); // Write the request and wait for the response channel.writeInbound(serRequest); ByteBuf buf = (ByteBuf) readInboundBlocking(channel); buf.skipBytes(4); // skip frame length // Verify the response assertEquals(MessageType.REQUEST_FAILURE, MessageSerializer.deserializeHeader(buf)); RequestFailure response = MessageSerializer.deserializeRequestFailure(buf); buf.release(); assertEquals(requestId, response.getRequestId()); assertTrue("Did not respond with expected failure cause", response.getCause() instanceof UnknownKeyOrNamespaceException); assertEquals(1L, stats.getNumRequests()); assertEquals(1L, stats.getNumFailed()); }
Example #15
Source File: AbstractQueryableStateTestBase.java From flink with Apache License 2.0 | 4 votes |
/** * Tests simple value state queryable state instance with a default value * set. Each source emits (subtaskIndex, 0)..(subtaskIndex, numElements) * tuples, the key is mapped to 1 but key 0 is queried which should throw * a {@link UnknownKeyOrNamespaceException} exception. * * @throws UnknownKeyOrNamespaceException thrown due querying a non-existent key */ @Test(expected = UnknownKeyOrNamespaceException.class) public void testValueStateDefault() throws Throwable { final Deadline deadline = Deadline.now().plus(TEST_TIMEOUT); final long numElements = 1024L; StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setStateBackend(stateBackend); env.setParallelism(maxParallelism); // Very important, because cluster is shared between tests and we // don't explicitly check that all slots are available before // submitting. env.setRestartStrategy(RestartStrategies.fixedDelayRestart(Integer.MAX_VALUE, 1000L)); DataStream<Tuple2<Integer, Long>> source = env.addSource(new TestAscendingValueSource(numElements)); ValueStateDescriptor<Tuple2<Integer, Long>> valueState = new ValueStateDescriptor<>( "any", source.getType(), Tuple2.of(0, 1337L)); // only expose key "1" QueryableStateStream<Integer, Tuple2<Integer, Long>> queryableState = source.keyBy( new KeySelector<Tuple2<Integer, Long>, Integer>() { private static final long serialVersionUID = 4509274556892655887L; @Override public Integer getKey(Tuple2<Integer, Long> value) { return 1; } }).asQueryableState("hakuna", valueState); try (AutoCancellableJob autoCancellableJob = new AutoCancellableJob(deadline, clusterClient, env)) { final JobID jobId = autoCancellableJob.getJobId(); final JobGraph jobGraph = autoCancellableJob.getJobGraph(); ClientUtils.submitJob(clusterClient, jobGraph); // Now query int key = 0; CompletableFuture<ValueState<Tuple2<Integer, Long>>> future = getKvState( deadline, client, jobId, queryableState.getQueryableStateName(), key, BasicTypeInfo.INT_TYPE_INFO, valueState, true, executor); try { future.get(deadline.timeLeft().toMillis(), TimeUnit.MILLISECONDS); } catch (ExecutionException | CompletionException e) { // get() on a completedExceptionally future wraps the // exception in an ExecutionException. throw e.getCause(); } } }