use of io.pravega.controller.store.kvtable.KVTableMetadataStore in project pravega by pravega.
the class ControllerEventProcessorsTest method testHandleOrphaned.
@Test(timeout = 10000)
public void testHandleOrphaned() throws CheckpointStoreException {
LocalController localController = mock(LocalController.class);
CheckpointStore checkpointStore = mock(CheckpointStore.class);
StreamMetadataStore streamStore = mock(StreamMetadataStore.class);
BucketStore bucketStore = mock(BucketStore.class);
ConnectionPool connectionPool = mock(ConnectionPool.class);
StreamMetadataTasks streamMetadataTasks = mock(StreamMetadataTasks.class);
StreamTransactionMetadataTasks streamTransactionMetadataTasks = mock(StreamTransactionMetadataTasks.class);
KVTableMetadataStore kvtStore = mock(KVTableMetadataStore.class);
TableMetadataTasks kvtTasks = mock(TableMetadataTasks.class);
ControllerEventProcessorConfig config = ControllerEventProcessorConfigImpl.withDefault();
EventProcessorSystem system = mock(EventProcessorSystem.class);
EventProcessorGroup<ControllerEvent> processor = getProcessor();
EventProcessorGroup<ControllerEvent> mockProcessor = spy(processor);
doThrow(new CheckpointStoreException("host not found")).when(mockProcessor).notifyProcessFailure("host3");
when(system.createEventProcessorGroup(any(), any(), any())).thenReturn(mockProcessor);
@Cleanup ControllerEventProcessors processors = new ControllerEventProcessors("host1", config, localController, checkpointStore, streamStore, bucketStore, connectionPool, streamMetadataTasks, streamTransactionMetadataTasks, kvtStore, kvtTasks, system, executorService());
// check for a case where init is not initialized so that kvtRequestProcessors don't get initialized and will be null
assertTrue(Futures.await(processors.sweepFailedProcesses(() -> Sets.newHashSet("host1"))));
Assert.assertFalse(processors.isReady());
Assert.assertFalse(processors.isBootstrapCompleted());
Assert.assertFalse(processors.isMetadataServiceConnected());
processors.startAsync();
processors.awaitRunning();
assertTrue(Futures.await(processors.sweepFailedProcesses(() -> Sets.newHashSet("host1"))));
assertTrue(Futures.await(processors.handleFailedProcess("host1")));
AssertExtensions.assertFutureThrows("host not found", processors.handleFailedProcess("host3"), e -> e instanceof CheckpointStoreException);
processors.shutDown();
}
use of io.pravega.controller.store.kvtable.KVTableMetadataStore in project pravega by pravega.
the class RequestHandlersTest method scopeDeleteTest.
@Test
public void scopeDeleteTest() {
final String testScope = "testScope";
final String testStream = "testStream";
final String testRG = "_RGTestRG";
final String testKVT = "testKVT";
StreamMetadataStore streamStoreSpied = spy(getStore());
KVTableMetadataStore kvtStoreSpied = spy(getKvtStore());
StreamMetadataTasks streamMetadataTasks1 = mock(StreamMetadataTasks.class);
TableMetadataTasks kvtTasksMocked = mock(TableMetadataTasks.class);
streamStoreSpied.createScope(testScope, null, executor).join();
OperationContext ctx = new OperationContext() {
@Override
public long getOperationStartTime() {
return 0;
}
@Override
public long getRequestId() {
return 0;
}
};
UUID scopeId = streamStoreSpied.getScopeId(testScope, ctx, executor).join();
doAnswer(x -> {
CompletableFuture<UUID> cf = new CompletableFuture<>();
cf.complete(scopeId);
return cf;
}).when(streamStoreSpied).getScopeId(eq(testScope), eq(ctx), eq(executor));
doAnswer(invocation -> {
CompletableFuture<Boolean> cf = new CompletableFuture<>();
cf.complete(true);
return cf;
}).when(streamStoreSpied).isScopeSealed(eq(testScope), any(), any());
createStreamInStore(testStream, testScope);
createStreamInStore(testRG, testScope);
assertTrue(streamStore.checkStreamExists(testScope, testStream, ctx, executor).join());
doAnswer(invocation -> {
CompletableFuture<Controller.UpdateStreamStatus.Status> future = new CompletableFuture<>();
future.complete(Controller.UpdateStreamStatus.Status.SUCCESS);
return future;
}).when(streamMetadataTasks1).sealStream(anyString(), anyString(), anyLong());
doAnswer(invocation -> {
CompletableFuture<Controller.DeleteStreamStatus.Status> future = new CompletableFuture<>();
future.complete(Controller.DeleteStreamStatus.Status.SUCCESS);
return future;
}).when(streamMetadataTasks1).deleteStream(anyString(), anyString(), anyLong());
// Create Reader Group
ReaderGroupConfig rgConfig = ReaderGroupConfig.builder().stream(NameUtils.getScopedStreamName(testScope, testStream)).build();
final ReaderGroupConfig config = ReaderGroupConfig.cloneConfig(rgConfig, UUID.randomUUID(), 123L);
Controller.ReaderGroupConfiguration expectedConfig = ModelHelper.decode(testScope, testRG, config);
doAnswer(invocationOnMock -> {
CompletableFuture<Controller.CreateReaderGroupResponse.Status> createRG = new CompletableFuture<>();
createRG.complete(Controller.CreateReaderGroupResponse.Status.SUCCESS);
return createRG;
}).when(streamMetadataTasks1).createReaderGroup(anyString(), any(), any(), anyLong(), anyLong());
doAnswer(invocation -> CompletableFuture.completedFuture(Controller.ReaderGroupConfigResponse.newBuilder().setStatus(Controller.ReaderGroupConfigResponse.Status.SUCCESS).setConfig(expectedConfig).build())).when(streamMetadataTasks1).getReaderGroupConfig(eq(testScope), anyString(), anyLong());
doAnswer(invocationOnMock -> {
CompletableFuture<Controller.DeleteReaderGroupStatus.Status> future = new CompletableFuture<>();
future.complete(Controller.DeleteReaderGroupStatus.Status.SUCCESS);
return future;
}).when(streamMetadataTasks1).deleteReaderGroup(anyString(), anyString(), anyString(), anyLong());
// Create KVT
KeyValueTableConfiguration kvtConfig = KeyValueTableConfiguration.builder().partitionCount(1).primaryKeyLength(1).secondaryKeyLength(1).build();
doAnswer(invocationOnMock -> {
CompletableFuture<Controller.CreateKeyValueTableStatus.Status> fut = new CompletableFuture<>();
fut.complete(Controller.CreateKeyValueTableStatus.Status.SUCCESS);
return fut;
}).when(kvtTasksMocked).createKeyValueTable(anyString(), anyString(), any(), anyLong(), anyLong());
List<String> tableList = new ArrayList<>();
tableList.add(testKVT);
Pair<List<String>, String> listOfKVTables = new ImmutablePair<>(tableList, "");
doAnswer(invocationOnMock -> CompletableFuture.completedFuture(listOfKVTables)).doAnswer(invocationOnMock -> CompletableFuture.completedFuture(new ImmutablePair<>(Collections.emptyList(), invocationOnMock.getArgument(0)))).when(kvtStoreSpied).listKeyValueTables(anyString(), any(), anyInt(), any(), any());
doAnswer(invocationOnMock -> {
CompletableFuture<Controller.DeleteKVTableStatus.Status> future = new CompletableFuture<>();
future.complete(Controller.DeleteKVTableStatus.Status.SUCCESS);
return future;
}).when(kvtTasksMocked).deleteKeyValueTable(anyString(), anyString(), anyLong());
Controller.CreateKeyValueTableStatus.Status status = kvtTasksMocked.createKeyValueTable(testScope, testKVT, kvtConfig, System.currentTimeMillis(), 123L).join();
assertEquals(status, Controller.CreateKeyValueTableStatus.Status.SUCCESS);
DeleteScopeTask requestHandler = new DeleteScopeTask(streamMetadataTasks1, streamStoreSpied, kvtStoreSpied, kvtTasksMocked, executor);
DeleteScopeEvent event = new DeleteScopeEvent(testScope, 123L, scopeId);
CompletableFuture<Void> future = requestHandler.execute(event);
future.join();
}
use of io.pravega.controller.store.kvtable.KVTableMetadataStore in project pravega by pravega.
the class EventProcessorHealthContributorTest method setup.
@SneakyThrows
@Before
public void setup() {
Host host = mock(Host.class);
LocalController localController = mock(LocalController.class);
CheckpointStore checkpointStore = mock(CheckpointStore.class);
StreamMetadataStore streamStore = mock(StreamMetadataStore.class);
BucketStore bucketStore = mock(BucketStore.class);
ConnectionPool connectionPool = mock(ConnectionPool.class);
StreamMetadataTasks streamMetadataTasks = mock(StreamMetadataTasks.class);
StreamTransactionMetadataTasks streamTransactionMetadataTasks = mock(StreamTransactionMetadataTasks.class);
ScheduledExecutorService executor = mock(ScheduledExecutorService.class);
KVTableMetadataStore kvtMetadataStore = mock(KVTableMetadataStore.class);
TableMetadataTasks kvtMetadataTasks = mock(TableMetadataTasks.class);
EventProcessorSystem system = mock(EventProcessorSystemImpl.class);
ControllerEventProcessorConfig config = ControllerEventProcessorConfigImpl.withDefault();
EventProcessorGroup<ControllerEvent> processor = getProcessor();
EventProcessorGroup<ControllerEvent> mockProcessor = spy(processor);
doThrow(new CheckpointStoreException("host not found")).when(mockProcessor).notifyProcessFailure("host3");
when(system.createEventProcessorGroup(any(), any(), any())).thenReturn(mockProcessor);
eventProcessors = spy(new ControllerEventProcessors(host.getHostId(), config, localController, checkpointStore, streamStore, bucketStore, connectionPool, streamMetadataTasks, streamTransactionMetadataTasks, kvtMetadataStore, kvtMetadataTasks, system, executorService()));
doReturn(true).when(eventProcessors).isReady();
contributor = new EventProcessorHealthContributor("eventprocessors", eventProcessors);
builder = Health.builder().name("eventprocessors");
}
Aggregations