diff --git a/.gitignore b/.gitignore index f6989ae..a3de142 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,9 @@ hs_err_pid* *.ipr *.iml venv +.project +.factorypath +.classpath ## Plugin-specific files: @@ -90,3 +93,9 @@ out.* */creds.sh .run build* + +# Agents +.pi/ +.planning/ +.settings/ +config.json diff --git a/memq-actor/pom.xml b/memq-actor/pom.xml index 392ea0b..7f3e8ea 100644 --- a/memq-actor/pom.xml +++ b/memq-actor/pom.xml @@ -5,17 +5,13 @@ io.appform.memq memq - 0.1.8 + 5.0.2-0-1 4.0.0 memq-actor MemQ Core Actors Library - - 17 - 17 - @@ -26,12 +22,15 @@ org.slf4j slf4j-api - ${slf4j-api.version} com.google.guava guava - ${guava.version} + test + + + jakarta.validation + jakarta.validation-api org.apache.commons @@ -41,23 +40,18 @@ com.fasterxml.jackson.core jackson-annotations - 2.16.1 com.fasterxml.jackson.core jackson-databind - 2.16.1 io.dropwizard.metrics metrics-core - ${metrics-core.version} - ch.qos.logback logback-classic - 1.2.13 test diff --git a/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java b/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java index 496f227..406cbd9 100644 --- a/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java @@ -4,13 +4,13 @@ import io.appform.memq.exceptionhandler.config.ExceptionHandlerConfig; import io.appform.memq.retry.config.NoRetryConfig; import io.appform.memq.retry.config.RetryConfig; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.Valid; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; @Value @Builder diff --git a/memq-actor/src/main/java/io/appform/memq/actor/Actor.java b/memq-actor/src/main/java/io/appform/memq/actor/Actor.java index 5cb27e0..c257df8 100644 --- a/memq-actor/src/main/java/io/appform/memq/actor/Actor.java +++ b/memq-actor/src/main/java/io/appform/memq/actor/Actor.java @@ -1,6 +1,5 @@ package io.appform.memq.actor; -import com.google.common.base.Preconditions; import io.appform.memq.observer.ActorObserver; import io.appform.memq.observer.ActorObserverContext; import io.appform.memq.observer.ObserverMessageMeta; @@ -64,9 +63,12 @@ public Actor( // Switch ensures validation is performed for all dispatcher types. // Adding a new DispatcherType will cause a compile error here if not handled. switch (dispatcherType){ - case SYNC -> - Preconditions.checkArgument( maxConcurrencyPerPartition == maxSizePerPartition, - "Max Queue size and max concurrency has to be same for sync dispatcher"); + case SYNC -> { + if (maxConcurrencyPerPartition != maxSizePerPartition) { + throw new IllegalArgumentException( + "Max Queue size and max concurrency has to be same for sync dispatcher"); + } + } case ASYNC_ISOLATED -> { // No-op: ASYNC_ISOLATED dispatcher has no specific validation requirements } @@ -136,11 +138,11 @@ public final void close() { } void processWithObserver(final InternalMessage internalMessage) { - val observerMessageMeta = new ObserverMessageMeta(internalMessage.getId(), internalMessage.getPublishedAt(), - internalMessage.getValidTill()); + val observerMessageMeta = new ObserverMessageMeta(internalMessage.id(), internalMessage.publishedAt(), + internalMessage.validTill()); this.rootObserver.execute(ActorObserverContext.builder() .messageMeta(observerMessageMeta) - .message(internalMessage.getMessage()) + .message(internalMessage.message()) .operation(ActorOperation.CONSUME) .actorName(this.name) .build(), @@ -160,12 +162,12 @@ Dispatcher getMessageDispatcher() { } private boolean process(final InternalMessage internalMessage) { - val id = internalMessage.getId(); - val message = internalMessage.getMessage(); + val id = internalMessage.id(); + val message = internalMessage.message(); var status = false; - var messageMeta = new MessageMeta(internalMessage.getPublishedAt(), - internalMessage.getValidTill(), - internalMessage.getHeaders()); + var messageMeta = new MessageMeta(internalMessage.publishedAt(), + internalMessage.validTill(), + internalMessage.headers()); try { val valid = this.rootObserver.execute(ActorObserverContext.builder() .message(message) @@ -177,23 +179,21 @@ private boolean process(final InternalMessage internalMessage) { log.debug("Message validation failed for message: {}", message); return false; } - else { - status = this.retryer.execute(() -> { - messageMeta.incrementAttempt(); - return this.consumerHandler.test(message, messageMeta); - }); - if (!status) { - log.debug("Consumer failed for message: {}", message); - this.rootObserver.execute(ActorObserverContext.builder() - .message(message) - .operation(ActorOperation.SIDELINE) - .actorName(this.name) - .build(), - () -> { - this.sidelineHandler.accept(message, messageMeta); - return true; - }); - } + status = this.retryer.execute(() -> { + messageMeta.incrementAttempt(); + return this.consumerHandler.test(message, messageMeta); + }); + if (!status) { + log.debug("Consumer failed for message: {}", message); + this.rootObserver.execute(ActorObserverContext.builder() + .message(message) + .operation(ActorOperation.SIDELINE) + .actorName(this.name) + .build(), + () -> { + this.sidelineHandler.accept(message, messageMeta); + return true; + }); } } catch (Exception e) { log.error("Error processing message : " + id, e); diff --git a/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java b/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java index 8bee64c..c1195c0 100644 --- a/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java +++ b/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java @@ -27,9 +27,9 @@ public final void register(final Mailbox inMailbox) { //Always executed inside mailbox lock @Override public final void deRegister(final Mailbox inMailbox) { - if(registeredMailboxWorker.containsKey(inMailbox.getPartition())) { - registeredMailboxWorker.get(inMailbox.getPartition()).close(); - registeredMailboxWorker.remove(inMailbox.getPartition()); + val worker = registeredMailboxWorker.remove(inMailbox.getPartition()); + if (worker != null) { + worker.close(); } } diff --git a/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java b/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java index ba45b42..5158f66 100644 --- a/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java +++ b/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java @@ -1,12 +1,11 @@ package io.appform.memq.actor; -import com.google.common.collect.Sets; import lombok.val; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Set; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; interface Dispatcher extends AutoCloseable { @@ -20,14 +19,23 @@ interface Dispatcher extends AutoCloseable { //Always executed inside mailbox lock default void dispatch(final Mailbox mailbox) { - //Find new messages - val newInOrderedMessages = mailbox.getMessages().keySet() - .stream() - .limit(mailbox.getMaxConcurrency()) - .collect(Collectors.toSet()); - val newMessageIds = Set.copyOf(Sets.difference(newInOrderedMessages, mailbox.getInFlight())); - if (newMessageIds.isEmpty()) { - if(mailbox.getInFlight().size() == mailbox.getMaxConcurrency()) { + val inFlight = mailbox.getInFlight(); + //Find new messages, respecting insertion order and max concurrency + int considered = 0; + List> newMessages = new ArrayList<>(mailbox.getMaxConcurrency()); + for (val entry : mailbox.getMessages().entrySet()) { + if (considered >= mailbox.getMaxConcurrency()) { + break; + } + considered++; + val id = entry.getKey(); + if (!inFlight.contains(id)) { + inFlight.add(id); + newMessages.add(entry.getValue()); + } + } + if (newMessages.isEmpty()) { + if (inFlight.size() == mailbox.getMaxConcurrency()) { log.warn("Reached max concurrency:{}. Ignoring consumption till inflight messages are consumed", mailbox.getMaxConcurrency()); } @@ -36,12 +44,12 @@ default void dispatch(final Mailbox mailbox) { } return; } - mailbox.getInFlight().addAll(newMessageIds); - val messagesToBeDelivered = newMessageIds.stream() - .map(mailbox.getMessages()::get) - .toList(); - messagesToBeDelivered.forEach(internalMessage -> mailbox.getActor().getExecutorService().submit(() -> { - val id = internalMessage.getId(); + dispatchNew(mailbox, newMessages); + } + + default void dispatchNew(final Mailbox mailbox, List> newMessages) { + List.copyOf(newMessages).forEach(internalMessage -> mailbox.getActor().getExecutorService().submit(() -> { + val id = internalMessage.id(); try { mailbox.getActor().processWithObserver(internalMessage); } diff --git a/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java b/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java index 19a506e..9132097 100644 --- a/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java +++ b/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java @@ -1,15 +1,11 @@ package io.appform.memq.actor; -import lombok.Value; - import java.util.Map; - -@Value -class InternalMessage { - String id; - long validTill; - long publishedAt; - Map headers; - M message; +record InternalMessage( + String id, + long validTill, + long publishedAt, + Map headers, + M message) { } diff --git a/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java b/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java index 4a5b1b5..fb86421 100644 --- a/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java +++ b/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java @@ -88,7 +88,7 @@ public final boolean publish(final M message) { } val internalMessage = new InternalMessage<>(message.id(), message.validTill(), System.currentTimeMillis(), message.headers(), message); - messages.putIfAbsent(internalMessage.getId(), internalMessage); + messages.putIfAbsent(internalMessage.id(), internalMessage); actor.getMessageDispatcher().triggerDispatch(this); return true; } finally { diff --git a/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java b/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java index 4fd6095..b54db65 100644 --- a/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java +++ b/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java @@ -9,7 +9,7 @@ @Getter public class MessageMeta { - private AtomicInteger deliveryAttempt; + private final AtomicInteger deliveryAttempt; private final long publishedAt; private final long validTill; private final Map headers; diff --git a/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java b/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java index f0785ea..bd1f117 100644 --- a/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java +++ b/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java @@ -1,10 +1,4 @@ package io.appform.memq.observer; -import lombok.Value; - -@Value -public class ObserverMessageMeta { - String id; - long validTill; - long publishedAt; +public record ObserverMessageMeta(String id, long validTill, long publishedAt) { } diff --git a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java index 639478f..1b47442 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java @@ -8,7 +8,7 @@ public abstract class RetryStrategy { - private RetryPolicy policy; + private final RetryPolicy policy; protected RetryStrategy(RetryPolicy policy) { this.policy = policy; diff --git a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java index f4b22fb..8645f29 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java @@ -8,20 +8,14 @@ */ public class RetryStrategyFactory { public RetryStrategy create(RetryConfig config) { - return switch (config.getType()) { - case NO_RETRY -> new NoRetryStrategy((NoRetryConfig) config); - case TIME_LIMITED_EXPONENTIAL_BACKOFF -> new TimeLimitedExponentialWaitRetryStrategy( - (TimeLimitedExponentialWaitRetryConfig) config); - case TIME_LIMITED_RANDOM_WAIT -> - new TimeLimitedRandomWaitRetryStrategy((TimeLimitedRandomWaitRetryConfig) config); - case TIME_LIMITED_FIXED_WAIT -> - new TimeLimitedFixedWaitRetryStrategy((TimeLimitedFixedWaitRetryConfig) config); - case COUNT_LIMITED_EXPONENTIAL_BACKOFF -> new CountLimitedExponentialWaitRetryStrategy( - (CountLimitedExponentialWaitRetryConfig) config); - case COUNT_LIMITED_RANDOM_WAIT -> - new CountLimitedRandomWaitRetryStrategy((CountLimitedRandomWaitRetryConfig) config); - case COUNT_LIMITED_FIXED_WAIT -> - new CountLimitedFixedWaitRetryStrategy((CountLimitedFixedWaitRetryConfig) config); + return switch (config) { + case NoRetryConfig c -> new NoRetryStrategy(c); + case TimeLimitedExponentialWaitRetryConfig c -> new TimeLimitedExponentialWaitRetryStrategy(c); + case TimeLimitedRandomWaitRetryConfig c -> new TimeLimitedRandomWaitRetryStrategy(c); + case TimeLimitedFixedWaitRetryConfig c -> new TimeLimitedFixedWaitRetryStrategy(c); + case CountLimitedExponentialWaitRetryConfig c -> new CountLimitedExponentialWaitRetryStrategy(c); + case CountLimitedRandomWaitRetryConfig c -> new CountLimitedRandomWaitRetryStrategy(c); + case CountLimitedFixedWaitRetryConfig c -> new CountLimitedFixedWaitRetryStrategy(c); }; } } diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java index 0d76f47..89e91a7 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java @@ -1,11 +1,11 @@ package io.appform.memq.retry.config; import io.appform.memq.retry.RetryType; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Min; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.Min; import java.util.Set; @Value diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java index b57ae48..7071c2e 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java @@ -1,10 +1,10 @@ package io.appform.memq.retry.config; import io.appform.memq.retry.RetryType; +import jakarta.validation.constraints.Min; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.Min; import java.util.Set; @Value diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java index 2870626..66c2b88 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java @@ -1,10 +1,11 @@ package io.appform.memq.retry.config; import io.appform.memq.retry.RetryType; +import jakarta.validation.constraints.Min; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.Min; + import java.util.Set; @Value diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java index ef028ab..a982fa6 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java @@ -9,7 +9,7 @@ */ @Builder @Jacksonized -public class NoRetryConfig extends RetryConfig { +public final class NoRetryConfig extends RetryConfig { public NoRetryConfig() { super(RetryType.NO_RETRY); } diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java index 9969e0f..87c9e33 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java @@ -23,7 +23,11 @@ @JsonSubTypes.Type(name = "TIME_LIMITED_FIXED_WAIT", value = TimeLimitedFixedWaitRetryConfig.class), @JsonSubTypes.Type(name = "TIME_LIMITED_INCREMENTAL_WAIT", value = TimeLimitedRandomWaitRetryConfig.class) }) -public abstract class RetryConfig { +public sealed abstract class RetryConfig + permits CountLimitedExponentialWaitRetryConfig, CountLimitedFixedWaitRetryConfig, + CountLimitedRandomWaitRetryConfig, NoRetryConfig, + TimeLimitedExponentialWaitRetryConfig, TimeLimitedFixedWaitRetryConfig, + TimeLimitedRandomWaitRetryConfig { private final RetryType type; private Set retriableExceptions; diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java index 5f31346..779cafd 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java @@ -1,11 +1,11 @@ package io.appform.memq.retry.config; import io.appform.memq.retry.RetryType; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Min; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.Min; import java.util.Set; @Value diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java index 4fa2112..6408af1 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java @@ -1,10 +1,11 @@ package io.appform.memq.retry.config; import io.appform.memq.retry.RetryType; +import jakarta.validation.constraints.Min; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.Min; + import java.util.Set; @Value diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java index b1dd67d..523d878 100644 --- a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java +++ b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java @@ -1,10 +1,10 @@ package io.appform.memq.retry.config; import io.appform.memq.retry.RetryType; +import jakarta.validation.constraints.Min; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.Min; import java.util.Set; @Value diff --git a/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java b/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java index 21ad7fd..a155b92 100644 --- a/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java +++ b/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java @@ -66,20 +66,20 @@ public boolean execute(final ActorObserverContext context, fi private boolean metered(ActorObserverContext context, BooleanSupplier supplier) { val metricData = getMetricData(context); - metricData.getTotal().mark(); - val timer = metricData.getTimer().time(); + metricData.total().mark(); + val timer = metricData.timer().time(); try { val ret = proceed(context, supplier); if(ret) { - metricData.getSuccess().mark(); + metricData.success().mark(); } else { - metricData.getFailed().mark(); + metricData.failed().mark(); } return ret; } catch (Throwable t) { - metricData.getFailed().mark(); + metricData.failed().mark(); throw t; } finally { @@ -88,26 +88,22 @@ private boolean metered(ActorObserverContext context, Boolean } private MetricData getMetricData(final ActorObserverContext context) { - val metricKeyData = MetricKeyData.builder() - .actorName(actorName) - .operation(context.getOperation().name()) - .build(); + val metricKeyData = new MetricKeyData(actorName, context.getOperation().name()); return metricCache.computeIfAbsent(metricKeyData, key -> getMetricData(getMetricPrefix(metricKeyData))); } private MetricData getMetricData(final String metricPrefix) { - return MetricData.builder() - .timer(metricRegistry.timer(MetricRegistry.name(metricPrefix, "latency"), - () -> new Timer(new SlidingTimeWindowArrayReservoir(60, TimeUnit.SECONDS)))) - .success(metricRegistry.meter(MetricRegistry.name(metricPrefix, "success"))) - .failed(metricRegistry.meter(MetricRegistry.name(metricPrefix, "failed"))) - .total(metricRegistry.meter(MetricRegistry.name(metricPrefix, "total"))) - .build(); + return new MetricData( + metricRegistry.meter(MetricRegistry.name(metricPrefix, "total")), + metricRegistry.meter(MetricRegistry.name(metricPrefix, "success")), + metricRegistry.meter(MetricRegistry.name(metricPrefix, "failed")), + metricRegistry.timer(MetricRegistry.name(metricPrefix, "latency"), + () -> new Timer(new SlidingTimeWindowArrayReservoir(60, TimeUnit.SECONDS)))); } private String getMetricPrefix(final MetricKeyData metricKeyData) { - return getMetricPrefix(actorName, metricKeyData.getOperation()); + return getMetricPrefix(actorName, metricKeyData.operation()); } private String getMetricPrefix(String... metricNames) { @@ -117,4 +113,4 @@ private String getMetricPrefix(String... metricNames) { } return metricPrefix.toString(); } -} \ No newline at end of file +} diff --git a/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java b/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java index 22a9256..79efda3 100644 --- a/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java +++ b/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java @@ -2,14 +2,6 @@ import com.codahale.metrics.Meter; import com.codahale.metrics.Timer; -import lombok.Builder; -import lombok.Value; -@Value -@Builder -public class MetricData { - Meter total; - Meter success; - Meter failed; - Timer timer; +public record MetricData(Meter total, Meter success, Meter failed, Timer timer) { } diff --git a/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java b/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java index 8bd3560..5d35020 100644 --- a/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java +++ b/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java @@ -1,11 +1,4 @@ package io.appform.memq.stats; -import lombok.Builder; -import lombok.Value; - -@Value -@Builder -public class MetricKeyData { - String actorName; - String operation; +public record MetricKeyData(String actorName, String operation) { } diff --git a/memq-dw-bundle/pom.xml b/memq-dw-bundle/pom.xml index cf66a82..4162b28 100644 --- a/memq-dw-bundle/pom.xml +++ b/memq-dw-bundle/pom.xml @@ -5,24 +5,32 @@ io.appform.memq memq - 0.1.8 + 5.0.2-0-1 4.0.0 memq-dw-bundle MemQ Actors Bundle for Dropwizard 2x - 2.1.10-0-8 + 5.0.2-0-1 - 2.1.10 + 5.0.2 io.dropwizard - dropwizard-dependencies + dropwizard-bom + pom + import ${dropwizard.version} + + + + io.dropwizard + dropwizard-dependencies pom import + ${dropwizard.version} diff --git a/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java b/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java index d660ef4..52fe869 100644 --- a/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java +++ b/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java @@ -2,10 +2,10 @@ import io.appform.config.MemqConfig; import io.appform.memq.observer.ActorObserver; -import io.dropwizard.Configuration; -import io.dropwizard.ConfiguredBundle; -import io.dropwizard.setup.Bootstrap; -import io.dropwizard.setup.Environment; +import io.dropwizard.core.Configuration; +import io.dropwizard.core.ConfiguredBundle; +import io.dropwizard.core.setup.Bootstrap; +import io.dropwizard.core.setup.Environment; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java b/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java index 295584a..85a3b12 100644 --- a/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java +++ b/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java @@ -1,12 +1,13 @@ package io.appform.config; -import lombok.*; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Value; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; @Value @Builder @@ -14,7 +15,7 @@ public class ExecutorConfig { @NotNull - @NotEmpty + @NotBlank String name; @Min(1) diff --git a/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java b/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java index db995c1..229919b 100644 --- a/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java +++ b/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java @@ -1,10 +1,9 @@ package io.appform.config; +import jakarta.validation.Valid; import lombok.Builder; import lombok.Value; import lombok.extern.jackson.Jacksonized; - -import javax.validation.Valid; import java.util.List; @Value diff --git a/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java b/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java index 91d4902..6874f84 100644 --- a/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java +++ b/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java @@ -3,16 +3,15 @@ import com.codahale.metrics.health.HealthCheckRegistry; import io.appform.config.ExecutorConfig; import io.appform.config.MemqConfig; -import io.dropwizard.Configuration; +import io.dropwizard.core.Configuration; +import io.dropwizard.core.setup.AdminEnvironment; +import io.dropwizard.core.setup.Bootstrap; +import io.dropwizard.core.setup.Environment; import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.setup.JerseyEnvironment; import io.dropwizard.lifecycle.setup.LifecycleEnvironment; -import io.dropwizard.setup.AdminEnvironment; -import io.dropwizard.setup.Bootstrap; -import io.dropwizard.setup.Environment; import lombok.Getter; import org.junit.jupiter.api.Test; -import org.mockito.Mock; import java.util.List; import java.util.concurrent.Executors; diff --git a/pom.xml b/pom.xml index 0f3e487..1c3e1a6 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ io.appform.memq memq pom - 0.1.8 + 5.0.2-0-1 MemQ Actors https://github.com/appform-io/memq In memory partitioned actor system @@ -67,23 +67,14 @@ UTF-8 UTF-8 - 3.8.0 - 17 - 1.18.24 - 1.7.36 - 5.8.2 - 2.0.2 - 4.2.0 - 5.1.0 - 5.5.0 - 5.2.1 - 4.2.9 - 1.2.11 + 3.16.0 + 21 + 5.0.2 + 1.18.48 + 5.13.4 + 4.3.0 + 5.23.0 2.4.4 - 1.9.9.1 - 5.8.2 - 4.4.0 - 2.33.2 false appform-io https://sonarcloud.io @@ -94,16 +85,33 @@ ${maven.multiModuleProjectDirectory}/report-aggregate/target/site/jacoco-aggregate/jacoco.xml - 33.0.0-jre - 3.12.0 + 33.7.1-jre + 3.20.0 + 3.2.8 + 3.6.0 + 1.5.1 + 0.8.15 + 3.3.1 + 3.12.0 + 1.7.0 - com.google.guava - guava - ${guava.version} + io.dropwizard + dropwizard-bom + pom + import + ${dropwizard.version} + + + + io.dropwizard + dropwizard-dependencies + pom + import + ${dropwizard.version} org.junit @@ -112,20 +120,10 @@ pom import - - org.hibernate.validator - hibernate-validator - 6.0.17.Final - - - jakarta.validation - jakarta.validation-api - ${jakarta.validation.version} - org.projectlombok lombok @@ -163,24 +161,19 @@ maven-compiler-plugin ${maven.compiler.version} - ${java.version} - ${java.version} + ${java.version} + full org.apache.maven.plugins maven-surefire-plugin - 3.2.5 - - - org.apache.maven.plugins - maven-surefire-plugin - 3.3.1 + ${maven-surefire-plugin.version} me.fabriciorby maven-surefire-junit5-tree-reporter - 1.3.0 + ${maven-surefire-junit5-tree-reporter.version} @@ -204,7 +197,7 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + ${jacoco-maven-plugin.version} @@ -228,7 +221,7 @@ org.apache.maven.plugins maven-source-plugin - 3.2.0 + ${maven-source-plugin.version} attach-sources @@ -241,7 +234,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.3 + ${maven-javadoc-plugin.version} all,-missing @@ -257,7 +250,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.13 + ${nexus-staging-maven-plugin.version} true ossrh @@ -282,7 +275,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.6 + ${maven-gpg-plugin.version} sign-artifacts diff --git a/report-aggregate-module/pom.xml b/report-aggregate-module/pom.xml index 4b2176f..07f43b0 100644 --- a/report-aggregate-module/pom.xml +++ b/report-aggregate-module/pom.xml @@ -6,7 +6,7 @@ io.appform.memq memq - 0.1.8 + 5.0.2-0-1 report-aggregate-module @@ -29,7 +29,7 @@ ${project.groupId} memq-dw-bundle - 2.1.10-0-8 + 5.0.2-0-1