Fixes for EDQS
This commit is contained in:
parent
965210f17b
commit
278ec36f37
@ -76,6 +76,8 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.thingsboard.server.common.msg.queue.TopicPartitionInfo.withTopic;
|
||||
|
||||
@EdqsComponent
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@ -280,12 +282,6 @@ public class EdqsProcessor implements TbQueueHandler<TbProtoQueueMsg<ToEdqsMsg>,
|
||||
}
|
||||
}
|
||||
|
||||
private Set<TopicPartitionInfo> withTopic(Set<TopicPartitionInfo> partitions, String topic) {
|
||||
return partitions.stream()
|
||||
.map(tpi -> tpi.withTopic(topic))
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@PreDestroy
|
||||
public void destroy() throws InterruptedException {
|
||||
eventConsumer.stop();
|
||||
|
||||
@ -17,6 +17,8 @@ package org.thingsboard.server.edqs.state;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.server.common.data.ObjectType;
|
||||
import org.thingsboard.server.common.data.edqs.EdqsEventType;
|
||||
@ -32,14 +34,17 @@ import org.thingsboard.server.queue.edqs.InMemoryEdqsComponent;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import static org.thingsboard.server.common.msg.queue.TopicPartitionInfo.withTopic;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@InMemoryEdqsComponent
|
||||
@Slf4j
|
||||
public class LocalEdqsStateService implements EdqsStateService {
|
||||
|
||||
private final EdqsProcessor processor;
|
||||
private final EdqsRocksDb db;
|
||||
@Autowired @Lazy
|
||||
private EdqsProcessor processor;
|
||||
|
||||
private PartitionedQueueConsumerManager<TbProtoQueueMsg<ToEdqsMsg>> eventConsumer;
|
||||
private Set<TopicPartitionInfo> partitions;
|
||||
@ -61,8 +66,9 @@ public class LocalEdqsStateService implements EdqsStateService {
|
||||
log.error("[{}] Failed to restore value", key, e);
|
||||
}
|
||||
});
|
||||
log.info("Restore completed");
|
||||
}
|
||||
eventConsumer.update(partitions);
|
||||
eventConsumer.update(withTopic(partitions, EdqsQueue.EVENTS.getTopic()));
|
||||
this.partitions = partitions;
|
||||
}
|
||||
|
||||
|
||||
@ -21,6 +21,8 @@ import org.thingsboard.server.common.data.id.TenantId;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class TopicPartitionInfo {
|
||||
|
||||
@ -75,6 +77,10 @@ public class TopicPartitionInfo {
|
||||
return new TopicPartitionInfo(topic, this.tenantId, this.partition, this.useInternalPartition, this.myPartition);
|
||||
}
|
||||
|
||||
public static Set<TopicPartitionInfo> withTopic(Set<TopicPartitionInfo> partitions, String topic) {
|
||||
return partitions.stream().map(tpi -> tpi.withTopic(topic)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public TopicPartitionInfo withUseInternalPartition(boolean useInternalPartition) {
|
||||
return new TopicPartitionInfo(this.topic, this.tenantId, this.partition, useInternalPartition, this.myPartition);
|
||||
}
|
||||
|
||||
@ -31,7 +31,6 @@ import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
|
||||
@ -95,7 +94,7 @@ public abstract class AbstractTbQueueConsumerTemplate<R, T extends TbQueueMsg> i
|
||||
partitions = subscribeQueue.poll();
|
||||
}
|
||||
if (!subscribed) {
|
||||
log.info("Subscribing to topics {}", getFullTopicNames());
|
||||
log.info("Subscribing to {}", partitions);
|
||||
doSubscribe(partitions);
|
||||
subscribed = true;
|
||||
}
|
||||
@ -168,7 +167,7 @@ public abstract class AbstractTbQueueConsumerTemplate<R, T extends TbQueueMsg> i
|
||||
|
||||
@Override
|
||||
public void unsubscribe() {
|
||||
log.info("Unsubscribing and stopping consumer for topics {}", getFullTopicNames());
|
||||
log.info("Unsubscribing and stopping consumer for {}", partitions);
|
||||
stopped = true;
|
||||
consumerLock.lock();
|
||||
try {
|
||||
@ -201,9 +200,8 @@ public abstract class AbstractTbQueueConsumerTemplate<R, T extends TbQueueMsg> i
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return partitions.stream()
|
||||
.map(tpi -> tpi.getFullTopicName() + (tpi.isUseInternalPartition() ?
|
||||
"[" + tpi.getPartition().orElse(-1) + "]" : ""))
|
||||
.collect(Collectors.toList());
|
||||
.map(TopicPartitionInfo::getFullTopicName)
|
||||
.toList();
|
||||
}
|
||||
|
||||
protected boolean isLongPollingSupported() {
|
||||
|
||||
@ -26,7 +26,8 @@ import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.thingsboard.server.common.msg.queue.TopicPartitionInfo.withTopic;
|
||||
|
||||
@Slf4j
|
||||
public class QueueStateService<E extends TbQueueMsg, S extends TbQueueMsg> {
|
||||
@ -88,10 +89,6 @@ public class QueueStateService<E extends TbQueueMsg, S extends TbQueueMsg> {
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
private Set<TopicPartitionInfo> withTopic(Set<TopicPartitionInfo> partitions, String topic) {
|
||||
return partitions.stream().map(tpi -> tpi.withTopic(topic)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public Set<TopicPartitionInfo> getPartitionsInProgress() {
|
||||
return initialized ? partitionsInProgress : null;
|
||||
}
|
||||
|
||||
@ -18,7 +18,8 @@ package org.thingsboard.server.queue.edqs;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.common.util.ThingsBoardExecutors;
|
||||
import org.thingsboard.server.common.stats.DummyMessagesStats;
|
||||
import org.thingsboard.server.common.stats.StatsFactory;
|
||||
import org.thingsboard.server.common.stats.StatsType;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.FromEdqsMsg;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.ToEdqsMsg;
|
||||
import org.thingsboard.server.queue.TbQueueConsumer;
|
||||
@ -37,6 +38,7 @@ public class InMemoryEdqsQueueFactory implements EdqsQueueFactory {
|
||||
|
||||
private final InMemoryStorage storage;
|
||||
private final EdqsConfig edqsConfig;
|
||||
private final StatsFactory statsFactory;
|
||||
|
||||
@Override
|
||||
public TbQueueConsumer<TbProtoQueueMsg<ToEdqsMsg>> createEdqsMsgConsumer(EdqsQueue queue) {
|
||||
@ -69,7 +71,7 @@ public class InMemoryEdqsQueueFactory implements EdqsQueueFactory {
|
||||
.maxPendingRequests(edqsConfig.getMaxPendingRequests())
|
||||
.requestTimeout(edqsConfig.getMaxRequestTimeout())
|
||||
.pollInterval(edqsConfig.getPollInterval())
|
||||
.stats(new DummyMessagesStats()) // FIXME
|
||||
.stats(statsFactory.createMessagesStats(StatsType.EDQS.getName()))
|
||||
.executor(ThingsBoardExecutors.newWorkStealingPool(5, "edqs"))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -17,7 +17,8 @@ package org.thingsboard.server.queue.edqs;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.common.util.ThingsBoardExecutors;
|
||||
import org.thingsboard.server.common.stats.DummyMessagesStats;
|
||||
import org.thingsboard.server.common.stats.StatsFactory;
|
||||
import org.thingsboard.server.common.stats.StatsType;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.FromEdqsMsg;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.ToEdqsMsg;
|
||||
@ -49,12 +50,14 @@ public class KafkaEdqsQueueFactory implements EdqsQueueFactory {
|
||||
private final TbServiceInfoProvider serviceInfoProvider;
|
||||
private final TbKafkaConsumerStatsService consumerStatsService;
|
||||
private final TopicService topicService;
|
||||
private final StatsFactory statsFactory;
|
||||
|
||||
private final AtomicInteger consumerCounter = new AtomicInteger();
|
||||
|
||||
public KafkaEdqsQueueFactory(TbKafkaSettings kafkaSettings, TbKafkaTopicConfigs topicConfigs,
|
||||
EdqsConfig edqsConfig, TbServiceInfoProvider serviceInfoProvider,
|
||||
TbKafkaConsumerStatsService consumerStatsService, TopicService topicService) {
|
||||
TbKafkaConsumerStatsService consumerStatsService, TopicService topicService,
|
||||
StatsFactory statsFactory) {
|
||||
this.edqsEventsAdmin = new TbKafkaAdmin(kafkaSettings, topicConfigs.getEdqsEventsConfigs());
|
||||
this.edqsRequestsAdmin = new TbKafkaAdmin(kafkaSettings, topicConfigs.getEdqsRequestsConfigs());
|
||||
this.edqsStateAdmin = new TbKafkaAdmin(kafkaSettings, topicConfigs.getEdqsStateConfigs());
|
||||
@ -63,6 +66,7 @@ public class KafkaEdqsQueueFactory implements EdqsQueueFactory {
|
||||
this.serviceInfoProvider = serviceInfoProvider;
|
||||
this.consumerStatsService = consumerStatsService;
|
||||
this.topicService = topicService;
|
||||
this.statsFactory = statsFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,7 +121,7 @@ public class KafkaEdqsQueueFactory implements EdqsQueueFactory {
|
||||
.maxPendingRequests(edqsConfig.getMaxPendingRequests())
|
||||
.requestTimeout(edqsConfig.getMaxRequestTimeout())
|
||||
.pollInterval(edqsConfig.getPollInterval())
|
||||
.stats(new DummyMessagesStats()) // FIXME
|
||||
.stats(statsFactory.createMessagesStats(StatsType.EDQS.getName()))
|
||||
.executor(ThingsBoardExecutors.newWorkStealingPool(5, "edqs"))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ public class DefaultStatsFactory implements StatsFactory {
|
||||
|
||||
private static final Counter STUB_COUNTER = new StubCounter();
|
||||
|
||||
@Autowired // FIXME Slavik !!!
|
||||
@Autowired
|
||||
private MeterRegistry meterRegistry;
|
||||
|
||||
@Value("${metrics.enabled:false}")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user