Search in sources :

Example 1 with Item

use of cz.o2.proxima.beam.tools.proto.service.Collect.Item in project proxima-platform by O2-Czech-Republic.

the class KafkaLogReader method listener.

// create rebalance listener from consumer
private ConsumerRebalanceListener listener(String name, AtomicReference<KafkaConsumer<Object, Object>> kafka, ElementConsumer<Object, Object> consumer, Map<TopicPartition, Integer> emptyPollCount, Map<TopicPartition, Integer> topicPartitionToId, AtomicReference<PartitionedWatermarkEstimator> watermarkEstimator) {
    return new ConsumerRebalanceListener() {

        private final Set<TopicPartition> currentlyAssigned = new HashSet<>();

        @Override
        public void onPartitionsRevoked(Collection<TopicPartition> parts) {
            currentlyAssigned.removeAll(parts);
        }

        @Override
        public void onPartitionsAssigned(Collection<TopicPartition> parts) {
            currentlyAssigned.addAll(parts);
            log.info("Consumer {} has assigned partitions {}", name, currentlyAssigned);
            emptyPollCount.clear();
            topicPartitionToId.clear();
            AtomicInteger id = new AtomicInteger();
            currentlyAssigned.forEach(p -> {
                topicPartitionToId.put(p, id.getAndIncrement());
                emptyPollCount.put(p, 0);
            });
            if (currentlyAssigned.isEmpty()) {
                watermarkEstimator.set(createWatermarkEstimatorForEmptyParts());
            } else {
                watermarkEstimator.set(new MinimalPartitionWatermarkEstimator(currentlyAssigned.stream().collect(toMap(topicPartitionToId::get, item -> createWatermarkEstimator()))));
            }
            Optional.ofNullable(kafka.get()).ifPresent(c -> consumer.onAssign(c, name != null ? getCommittedTopicOffsets(currentlyAssigned, c) : getCurrentTopicOffsets(currentlyAssigned, c)));
        }

        List<TopicOffset> getCurrentTopicOffsets(Collection<TopicPartition> parts, KafkaConsumer<Object, Object> c) {
            return parts.stream().map(tp -> new TopicOffset(new PartitionWithTopic(tp.topic(), tp.partition()), c.position(tp), watermarkEstimator.get().getWatermark())).collect(Collectors.toList());
        }

        List<TopicOffset> getCommittedTopicOffsets(Collection<TopicPartition> parts, KafkaConsumer<Object, Object> c) {
            Map<TopicPartition, OffsetAndMetadata> committed = new HashMap<>(c.committed(new HashSet<>(parts)));
            for (TopicPartition tp : parts) {
                committed.putIfAbsent(tp, null);
            }
            return committed.entrySet().stream().map(entry -> {
                final long offset = entry.getValue() == null ? 0L : entry.getValue().offset();
                return new TopicOffset(new PartitionWithTopic(entry.getKey().topic(), entry.getKey().partition()), offset, watermarkEstimator.get().getWatermark());
            }).collect(Collectors.toList());
        }

        private WatermarkEstimator createWatermarkEstimator() {
            final WatermarkIdlePolicyFactory idlePolicyFactory = accessor.getWatermarkConfiguration().getWatermarkIdlePolicyFactory();
            final WatermarkEstimatorFactory estimatorFactory = accessor.getWatermarkConfiguration().getWatermarkEstimatorFactory();
            return estimatorFactory.create(cfg, idlePolicyFactory);
        }
    };
}
Also used : Partition(cz.o2.proxima.storage.Partition) ConsumerRecords(org.apache.kafka.clients.consumer.ConsumerRecords) ExceptionUtils(cz.o2.proxima.util.ExceptionUtils) Collectors.toMap(java.util.stream.Collectors.toMap) StreamElement(cz.o2.proxima.storage.StreamElement) WatermarkEstimator(cz.o2.proxima.time.WatermarkEstimator) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) PartitionedWatermarkEstimator(cz.o2.proxima.time.PartitionedWatermarkEstimator) OnlineConsumer(cz.o2.proxima.direct.kafka.ElementConsumers.OnlineConsumer) Duration(java.time.Duration) Map(java.util.Map) WatermarkEstimatorFactory(cz.o2.proxima.time.WatermarkEstimatorFactory) WatermarkIdlePolicyFactory(cz.o2.proxima.time.WatermarkIdlePolicyFactory) TopicPartition(org.apache.kafka.common.TopicPartition) OffsetExternalizer(cz.o2.proxima.direct.commitlog.OffsetExternalizer) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) ObserveHandle(cz.o2.proxima.direct.commitlog.ObserveHandle) UUID(java.util.UUID) PartitionInfo(org.apache.kafka.common.PartitionInfo) Collectors(java.util.stream.Collectors) RebalanceInProgressException(org.apache.kafka.common.errors.RebalanceInProgressException) BiConsumer(cz.o2.proxima.functional.BiConsumer) Objects(java.util.Objects) BulkConsumer(cz.o2.proxima.direct.kafka.ElementConsumers.BulkConsumer) CountDownLatch(java.util.concurrent.CountDownLatch) ConsumerRebalanceListener(org.apache.kafka.clients.consumer.ConsumerRebalanceListener) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) ConsumerRecord(org.apache.kafka.clients.consumer.ConsumerRecord) OffsetAndMetadata(org.apache.kafka.clients.consumer.OffsetAndMetadata) Optional(java.util.Optional) MinimalPartitionWatermarkEstimator(cz.o2.proxima.direct.time.MinimalPartitionWatermarkEstimator) KafkaConsumer(org.apache.kafka.clients.consumer.KafkaConsumer) Context(cz.o2.proxima.direct.core.Context) Getter(lombok.Getter) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Watermarks(cz.o2.proxima.time.Watermarks) CommitLogReader(cz.o2.proxima.direct.commitlog.CommitLogReader) ExecutorService(java.util.concurrent.ExecutorService) Nullable(javax.annotation.Nullable) AbstractStorage(cz.o2.proxima.storage.AbstractStorage) CommitLogObserver(cz.o2.proxima.direct.commitlog.CommitLogObserver) Offset(cz.o2.proxima.direct.commitlog.Offset) Preconditions(com.google.common.base.Preconditions) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Collections(java.util.Collections) Position(cz.o2.proxima.storage.commitlog.Position) WatermarkIdlePolicyFactory(cz.o2.proxima.time.WatermarkIdlePolicyFactory) WatermarkEstimatorFactory(cz.o2.proxima.time.WatermarkEstimatorFactory) Set(java.util.Set) HashSet(java.util.HashSet) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) KafkaConsumer(org.apache.kafka.clients.consumer.KafkaConsumer) ConsumerRebalanceListener(org.apache.kafka.clients.consumer.ConsumerRebalanceListener) MinimalPartitionWatermarkEstimator(cz.o2.proxima.direct.time.MinimalPartitionWatermarkEstimator) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) TopicPartition(org.apache.kafka.common.TopicPartition) OffsetAndMetadata(org.apache.kafka.clients.consumer.OffsetAndMetadata) Collection(java.util.Collection) HashSet(java.util.HashSet)

Example 2 with Item

use of cz.o2.proxima.beam.tools.proto.service.Collect.Item in project proxima-platform by O2-Czech-Republic.

the class InMemStorage method createAccessor.

@Override
public DataAccessor createAccessor(DirectDataOperator op, AttributeFamilyDescriptor familyDescriptor) {
    final EntityDescriptor entity = familyDescriptor.getEntity();
    final URI uri = familyDescriptor.getStorageUri();
    final Map<String, Object> cfg = familyDescriptor.getCfg();
    log.info("Creating accessor {} for URI {}", getClass(), uri);
    holder().observers.computeIfAbsent(uri, k -> Collections.synchronizedNavigableMap(new TreeMap<>()));
    final int numPartitions = Optional.ofNullable(cfg.get(NUM_PARTITIONS)).map(v -> Integer.parseInt(v.toString())).orElse(1);
    final Partitioner partitioner = Optional.ofNullable(cfg.get(ConfigConstants.PARTITIONER)).map(name -> Classpath.newInstance(name.toString(), Partitioner.class)).orElseGet(KeyAttributePartitioner::new);
    final Repository opRepo = op.getRepository();
    final RepositoryFactory repositoryFactory = opRepo.asFactory();
    final OnlineAttributeWriter.Factory<?> writerFactory = new Writer(entity, uri, numPartitions, partitioner).asFactory();
    final CommitLogReader.Factory<?> commitLogReaderFactory = new InMemCommitLogReader(entity, uri, op.getContext().getExecutorFactory(), partitioner, numPartitions).asFactory();
    final RandomAccessReader.Factory<Reader> randomAccessReaderFactory;
    final BatchLogReader.Factory<Reader> batchLogReaderFactory;
    final CachedView.Factory cachedViewFactory;
    if (numPartitions > 1) {
        randomAccessReaderFactory = null;
        batchLogReaderFactory = null;
        cachedViewFactory = null;
    } else {
        final ReaderFactory readerFactory = new Reader(entity, uri, op.getContext().getExecutorFactory()).asFactory();
        randomAccessReaderFactory = readerFactory;
        batchLogReaderFactory = readerFactory;
        cachedViewFactory = new LocalCachedPartitionedView(entity, commitLogReaderFactory.apply(opRepo), writerFactory.apply(opRepo)).asFactory();
    }
    return new DataAccessor() {

        private static final long serialVersionUID = 1L;

        @Nullable
        private transient Repository repo = opRepo;

        @Override
        public URI getUri() {
            return uri;
        }

        @Override
        public Optional<AttributeWriterBase> getWriter(Context context) {
            Objects.requireNonNull(context);
            return Optional.of(writerFactory.apply(repo()));
        }

        @Override
        public Optional<CommitLogReader> getCommitLogReader(Context context) {
            Objects.requireNonNull(context);
            return Optional.of(commitLogReaderFactory.apply(repo()));
        }

        @Override
        public Optional<RandomAccessReader> getRandomAccessReader(Context context) {
            Objects.requireNonNull(context);
            return Optional.ofNullable(randomAccessReaderFactory).map(item -> item.apply(repo()));
        }

        @Override
        public Optional<CachedView> getCachedView(Context context) {
            Objects.requireNonNull(context);
            return Optional.ofNullable(cachedViewFactory).map(item -> item.apply(repo()));
        }

        @Override
        public Optional<BatchLogReader> getBatchLogReader(Context context) {
            Objects.requireNonNull(context);
            return Optional.ofNullable(batchLogReaderFactory).map(item -> item.apply(repo()));
        }

        private Repository repo() {
            if (this.repo == null) {
                this.repo = repositoryFactory.apply();
            }
            return this.repo;
        }
    };
}
Also used : Partitioners(cz.o2.proxima.storage.commitlog.Partitioners) BatchLogReader(cz.o2.proxima.direct.batch.BatchLogReader) ConfigConstants(cz.o2.proxima.repository.ConfigConstants) RepositoryFactory(cz.o2.proxima.repository.RepositoryFactory) KeyAttributePartitioner(cz.o2.proxima.storage.commitlog.KeyAttributePartitioner) Future(java.util.concurrent.Future) WatermarkEstimator(cz.o2.proxima.time.WatermarkEstimator) Pair(cz.o2.proxima.util.Pair) Map(java.util.Map) Optionals(cz.o2.proxima.util.Optionals) ReadWriteLock(java.util.concurrent.locks.ReadWriteLock) Set(java.util.Set) ObserveHandle(cz.o2.proxima.direct.commitlog.ObserveHandle) Serializable(java.io.Serializable) CountDownLatch(java.util.concurrent.CountDownLatch) Slf4j(lombok.extern.slf4j.Slf4j) KeyValue(cz.o2.proxima.direct.randomaccess.KeyValue) DirectDataOperator(cz.o2.proxima.direct.core.DirectDataOperator) AbstractOnlineAttributeWriter(cz.o2.proxima.direct.core.AbstractOnlineAttributeWriter) Consumer(cz.o2.proxima.functional.Consumer) OffsetCommitter(cz.o2.proxima.direct.commitlog.CommitLogObserver.OffsetCommitter) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) Supplier(java.util.function.Supplier) ObserverUtils(cz.o2.proxima.direct.commitlog.ObserverUtils) ArrayList(java.util.ArrayList) Lists(com.google.common.collect.Lists) DataAccessor(cz.o2.proxima.direct.core.DataAccessor) RawOffset(cz.o2.proxima.direct.randomaccess.RawOffset) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Watermarks(cz.o2.proxima.time.Watermarks) CommitLogReader(cz.o2.proxima.direct.commitlog.CommitLogReader) Nullable(javax.annotation.Nullable) WatermarkIdlePolicy(cz.o2.proxima.time.WatermarkIdlePolicy) AbstractStorage(cz.o2.proxima.storage.AbstractStorage) MoreObjects(com.google.common.base.MoreObjects) CommitLogObserver(cz.o2.proxima.direct.commitlog.CommitLogObserver) AtomicLong(java.util.concurrent.atomic.AtomicLong) Partitioner(cz.o2.proxima.storage.commitlog.Partitioner) Lock(java.util.concurrent.locks.Lock) TreeMap(java.util.TreeMap) AutoService(com.google.auto.service.AutoService) Preconditions(com.google.common.base.Preconditions) Position(cz.o2.proxima.storage.commitlog.Position) ScheduledFuture(java.util.concurrent.ScheduledFuture) AttributeWriterBase(cz.o2.proxima.direct.core.AttributeWriterBase) Partition(cz.o2.proxima.storage.Partition) EntityDescriptor(cz.o2.proxima.repository.EntityDescriptor) TerminationContext(cz.o2.proxima.direct.batch.TerminationContext) CachedView(cz.o2.proxima.direct.view.CachedView) StreamElement(cz.o2.proxima.storage.StreamElement) PartitionedWatermarkEstimator(cz.o2.proxima.time.PartitionedWatermarkEstimator) SerializationException(cz.o2.proxima.scheme.SerializationException) URI(java.net.URI) TypeReference(com.fasterxml.jackson.core.type.TypeReference) OffsetExternalizer(cz.o2.proxima.direct.commitlog.OffsetExternalizer) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) UUID(java.util.UUID) NavigableMap(java.util.NavigableMap) CommitCallback(cz.o2.proxima.direct.core.CommitCallback) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) OnNextContext(cz.o2.proxima.direct.batch.BatchLogObserver.OnNextContext) Entry(java.util.Map.Entry) Optional(java.util.Optional) MinimalPartitionWatermarkEstimator(cz.o2.proxima.direct.time.MinimalPartitionWatermarkEstimator) RandomOffset(cz.o2.proxima.direct.randomaccess.RandomOffset) SortedMap(java.util.SortedMap) ObserverUtils.asRepartitionContext(cz.o2.proxima.direct.commitlog.ObserverUtils.asRepartitionContext) Context(cz.o2.proxima.direct.core.Context) LocalCachedPartitionedView(cz.o2.proxima.direct.view.LocalCachedPartitionedView) Getter(lombok.Getter) BoundedOutOfOrdernessWatermarkEstimator(cz.o2.proxima.direct.time.BoundedOutOfOrdernessWatermarkEstimator) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) OnlineAttributeWriter(cz.o2.proxima.direct.core.OnlineAttributeWriter) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) BatchLogObservers(cz.o2.proxima.direct.batch.BatchLogObservers) HashSet(java.util.HashSet) Factory(cz.o2.proxima.functional.Factory) RandomAccessReader(cz.o2.proxima.direct.randomaccess.RandomAccessReader) ExecutorService(java.util.concurrent.ExecutorService) Classpath(cz.o2.proxima.util.Classpath) Repository(cz.o2.proxima.repository.Repository) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) AttributeDescriptor(cz.o2.proxima.repository.AttributeDescriptor) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) BatchLogObserver(cz.o2.proxima.direct.batch.BatchLogObserver) AttributeFamilyDescriptor(cz.o2.proxima.repository.AttributeFamilyDescriptor) Offset(cz.o2.proxima.direct.commitlog.Offset) TimeUnit(java.util.concurrent.TimeUnit) DataAccessorFactory(cz.o2.proxima.direct.core.DataAccessorFactory) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Collections(java.util.Collections) CachedView(cz.o2.proxima.direct.view.CachedView) DataAccessor(cz.o2.proxima.direct.core.DataAccessor) CommitLogReader(cz.o2.proxima.direct.commitlog.CommitLogReader) BatchLogReader(cz.o2.proxima.direct.batch.BatchLogReader) CommitLogReader(cz.o2.proxima.direct.commitlog.CommitLogReader) RandomAccessReader(cz.o2.proxima.direct.randomaccess.RandomAccessReader) KeyAttributePartitioner(cz.o2.proxima.storage.commitlog.KeyAttributePartitioner) URI(java.net.URI) RandomAccessReader(cz.o2.proxima.direct.randomaccess.RandomAccessReader) AbstractOnlineAttributeWriter(cz.o2.proxima.direct.core.AbstractOnlineAttributeWriter) OnlineAttributeWriter(cz.o2.proxima.direct.core.OnlineAttributeWriter) RepositoryFactory(cz.o2.proxima.repository.RepositoryFactory) KeyAttributePartitioner(cz.o2.proxima.storage.commitlog.KeyAttributePartitioner) Partitioner(cz.o2.proxima.storage.commitlog.Partitioner) TerminationContext(cz.o2.proxima.direct.batch.TerminationContext) OnNextContext(cz.o2.proxima.direct.batch.BatchLogObserver.OnNextContext) ObserverUtils.asRepartitionContext(cz.o2.proxima.direct.commitlog.ObserverUtils.asRepartitionContext) Context(cz.o2.proxima.direct.core.Context) AttributeWriterBase(cz.o2.proxima.direct.core.AttributeWriterBase) TreeMap(java.util.TreeMap) EntityDescriptor(cz.o2.proxima.repository.EntityDescriptor) Repository(cz.o2.proxima.repository.Repository) LocalCachedPartitionedView(cz.o2.proxima.direct.view.LocalCachedPartitionedView) BatchLogReader(cz.o2.proxima.direct.batch.BatchLogReader) AbstractOnlineAttributeWriter(cz.o2.proxima.direct.core.AbstractOnlineAttributeWriter) OnlineAttributeWriter(cz.o2.proxima.direct.core.OnlineAttributeWriter)

Example 3 with Item

use of cz.o2.proxima.beam.tools.proto.service.Collect.Item in project proxima-platform by O2-Czech-Republic.

the class ThreadPooledObserverTest method testParallelObserveWithRepartition.

@Test(timeout = 20_000)
public void testParallelObserveWithRepartition() throws InterruptedException {
    List<Integer> elements = Collections.synchronizedList(new ArrayList<>());
    Set<Integer> confirmed = Collections.synchronizedSet(new TreeSet<>());
    ExecutorService executor = Executors.newCachedThreadPool();
    int parallelism = 20;
    int numElements = 50_000;
    ThreadPooledObserver observer = new ThreadPooledObserver(executor, (elem, context) -> {
        elements.add(Integer.valueOf(elem.getKey().substring(3)));
        context.confirm();
        return true;
    }, parallelism);
    long now = System.currentTimeMillis();
    CountDownLatch confirmedLatch = new CountDownLatch(numElements);
    for (int i = 0; i < numElements; i++) {
        int item = i;
        observer.onNext(device.upsert("key" + i, String.valueOf(i), now + i, new byte[] {}), asOnNextContext((succ, exc) -> {
            assertTrue(succ);
            assertNull(exc);
            confirmed.add(item);
            confirmedLatch.countDown();
        }, null));
        if (item % 83 == 0) {
            observer.onRepartition(Collections::emptyList);
        }
    }
    confirmedLatch.await();
    observer.onCompleted();
    assertEquals(numElements, elements.stream().distinct().count());
    assertEquals(numElements, confirmed.size());
}
Also used : ObserverUtils.asOnNextContext(cz.o2.proxima.direct.commitlog.ObserverUtils.asOnNextContext) Repository(cz.o2.proxima.repository.Repository) Set(java.util.Set) EntityDescriptor(cz.o2.proxima.repository.EntityDescriptor) Test(org.junit.Test) TreeSet(java.util.TreeSet) Executors(java.util.concurrent.Executors) ArrayList(java.util.ArrayList) Wildcard(cz.o2.proxima.repository.EntityAwareAttributeDescriptor.Wildcard) CountDownLatch(java.util.concurrent.CountDownLatch) ExceptionUtils(cz.o2.proxima.util.ExceptionUtils) List(java.util.List) ConfigFactory(com.typesafe.config.ConfigFactory) Assert(org.junit.Assert) Collections(java.util.Collections) ExecutorService(java.util.concurrent.ExecutorService) ExecutorService(java.util.concurrent.ExecutorService) CountDownLatch(java.util.concurrent.CountDownLatch) Collections(java.util.Collections) Test(org.junit.Test)

Example 4 with Item

use of cz.o2.proxima.beam.tools.proto.service.Collect.Item in project proxima-platform by O2-Czech-Republic.

the class RemoteConsumer method observer.

StreamObserver<Item> observer() {
    if (channel == null) {
        channel = ManagedChannelBuilder.forAddress(hostname, port).usePlaintext().build();
        CountDownLatch connected = new CountDownLatch(1);
        channel.notifyWhenStateChanged(ConnectivityState.READY, connected::countDown);
        ExceptionUtils.ignoringInterrupted(() -> {
            if (!connected.await(1, TimeUnit.SECONDS)) {
                log.warn("Timeout waiting for channel to become connected. Skipping.");
            }
        });
    }
    if (stub == null) {
        stub = CollectServiceGrpc.newStub(channel);
    }
    if (observer == null) {
        terminateFuture = new CompletableFuture<>();
        CountDownLatch initLatch = new CountDownLatch(1);
        observer = stub.collect(new StreamObserver<Response>() {

            @Override
            public void onNext(Response response) {
                if (response.getStatus() == CONTINUE) {
                    initLatch.countDown();
                } else if (response.getStatus() == OK) {
                    terminateFuture.complete(null);
                }
            }

            @Override
            public void onError(Throwable throwable) {
                terminateFuture.completeExceptionally(throwable);
                observer = null;
            }

            @Override
            public void onCompleted() {
            // nop
            }
        });
        initLatch.countDown();
    }
    return observer;
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) Response(cz.o2.proxima.beam.tools.proto.service.Collect.Response) CountDownLatch(java.util.concurrent.CountDownLatch)

Example 5 with Item

use of cz.o2.proxima.beam.tools.proto.service.Collect.Item in project proxima-platform by O2-Czech-Republic.

the class RemoteConsumer method accept.

@Override
public void accept(T what) {
    try {
        Item item = Item.newBuilder().setSerialized(ByteString.readFrom(serialize(what))).build();
        observer().onNext(item);
    } catch (IOException ex) {
        throw new RuntimeException(ex);
    }
}
Also used : Item(cz.o2.proxima.beam.tools.proto.service.Collect.Item) IOException(java.io.IOException)

Aggregations

CountDownLatch (java.util.concurrent.CountDownLatch)5 ArrayList (java.util.ArrayList)4 Collections (java.util.Collections)4 List (java.util.List)4 Set (java.util.Set)4 ExecutorService (java.util.concurrent.ExecutorService)4 EntityDescriptor (cz.o2.proxima.repository.EntityDescriptor)3 Repository (cz.o2.proxima.repository.Repository)3 ExceptionUtils (cz.o2.proxima.util.ExceptionUtils)3 VisibleForTesting (com.google.common.annotations.VisibleForTesting)2 Preconditions (com.google.common.base.Preconditions)2 CommitLogObserver (cz.o2.proxima.direct.commitlog.CommitLogObserver)2 CommitLogReader (cz.o2.proxima.direct.commitlog.CommitLogReader)2 ObserveHandle (cz.o2.proxima.direct.commitlog.ObserveHandle)2 Offset (cz.o2.proxima.direct.commitlog.Offset)2 OffsetExternalizer (cz.o2.proxima.direct.commitlog.OffsetExternalizer)2 Context (cz.o2.proxima.direct.core.Context)2 MinimalPartitionWatermarkEstimator (cz.o2.proxima.direct.time.MinimalPartitionWatermarkEstimator)2 AbstractStorage (cz.o2.proxima.storage.AbstractStorage)2 Partition (cz.o2.proxima.storage.Partition)2