use of org.zalando.nakadi.domain.Storage in project nakadi by zalando.
the class TimelineService method createTimeline.
public void createTimeline(final String eventTypeName, final String storageId) throws AccessDeniedException, TimelineException, TopicRepositoryException, InconsistentStateException, RepositoryProblemException, DbWriteOperationsBlockedException {
if (featureToggleService.isFeatureEnabled(FeatureToggleService.Feature.DISABLE_DB_WRITE_OPERATIONS)) {
throw new DbWriteOperationsBlockedException("Cannot create timeline: write operations on DB " + "are blocked by feature flag.");
}
try {
final EventType eventType = eventTypeCache.getEventType(eventTypeName);
if (!adminService.isAdmin(AuthorizationService.Operation.WRITE)) {
final Resource resource = new EventTypeResource(eventTypeName, eventType.getAuthorization());
throw new AccessDeniedException(AuthorizationService.Operation.ADMIN, resource);
}
final Storage storage = storageDbRepository.getStorage(storageId).orElseThrow(() -> new UnableProcessException("No storage with id: " + storageId));
final Timeline activeTimeline = getActiveTimeline(eventType);
final TopicRepository currentTopicRepo = topicRepositoryHolder.getTopicRepository(activeTimeline.getStorage());
final TopicRepository nextTopicRepo = topicRepositoryHolder.getTopicRepository(storage);
final List<PartitionStatistics> partitionStatistics = currentTopicRepo.loadTopicStatistics(Collections.singleton(activeTimeline));
final String newTopic = nextTopicRepo.createTopic(partitionStatistics.size(), eventType.getOptions().getRetentionTime());
final Timeline nextTimeline = Timeline.createTimeline(activeTimeline.getEventType(), activeTimeline.getOrder() + 1, storage, newTopic, new Date());
switchTimelines(activeTimeline, nextTimeline);
} catch (final TopicCreationException | ServiceUnavailableException | InternalNakadiException e) {
throw new TimelineException("Internal service error", e);
} catch (final NoSuchEventTypeException e) {
throw new NotFoundException("EventType \"" + eventTypeName + "\" does not exist", e);
}
}
use of org.zalando.nakadi.domain.Storage in project nakadi by zalando.
the class StoragesControllerTest method createKafkaStorage.
public static Storage createKafkaStorage(final String id) {
final Storage storage = new Storage();
storage.setId(id);
storage.setType(Storage.Type.KAFKA);
final Storage.KafkaConfiguration config = new Storage.KafkaConfiguration("https://localhost", 8181, "https://localhost", "/path/to/kafka");
storage.setConfiguration(config);
return storage;
}
use of org.zalando.nakadi.domain.Storage in project nakadi by zalando.
the class TopicRepositoryHolderTest method testGetTopicRepository.
@Test
public void testGetTopicRepository() {
final TopicRepositoryHolder topicRepositoryHolder = new TopicRepositoryHolder(new TestTopicRepository());
final Storage storage = new Storage();
storage.setType(Storage.Type.KAFKA);
Assert.assertNotNull(topicRepositoryHolder.getTopicRepository(storage));
}
use of org.zalando.nakadi.domain.Storage in project nakadi by zalando.
the class StorageServiceTest method createTestStorage.
private Storage createTestStorage() {
final Storage storage = new Storage();
storage.setType(Storage.Type.KAFKA);
storage.setId("123-abc");
final Storage.KafkaConfiguration configuration = new Storage.KafkaConfiguration("https://localhost", 8181, "https://localhost", "/path/to/kafka");
storage.setConfiguration(configuration);
return storage;
}
use of org.zalando.nakadi.domain.Storage in project nakadi by zalando.
the class StorageServiceTest method testCreateStorage.
@Test
public void testCreateStorage() throws Exception {
final Storage dbReply = createTestStorage();
when(storageDbRepository.createStorage(any())).thenReturn(dbReply);
final JSONObject storage = createTestStorageJson("s1");
final Result<Void> result = storageService.createStorage(storage);
assertTrue(result.isSuccessful());
}
Aggregations