This is an automated email from the ASF dual-hosted git repository. cschneider pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-journal.git
commit f4662464d5dc92ad8eb358600659453f2ab2af25 Author: Christian Schneider <cschn...@adobe.com> AuthorDate: Fri Apr 12 14:56:22 2024 +0200 SLING-12292 - Move metrics into publisher and bookkeeper --- .../journal/bookkeeper/BookKeeper.java | 1 - .../journal/bookkeeper/BookKeeperFactory.java | 1 - .../{shared => bookkeeper}/SubscriberMetrics.java | 34 +----------- .../impl/publisher/DistributionPublisher.java | 7 ++- .../impl/publisher/MessagingCacheCallback.java | 1 - .../impl/publisher/PubQueueProviderPublisher.java | 1 - .../{shared => impl/publisher}/PublishMetrics.java | 2 +- .../impl/subscriber/DistributionSubscriber.java | 2 +- .../sling/distribution/journal/shared/Timed.java | 60 ++++++++++++++++++++++ .../journal/bookkeeper/BookKeeperTest.java | 1 - .../impl/publisher/DistributionPublisherTest.java | 1 - .../impl/publisher/MessagingCacheCallbackTest.java | 1 - .../journal/impl/subscriber/SubscriberTest.java | 2 +- .../journal/shared/SubscriberMetricsTest.java | 1 + 14 files changed, 68 insertions(+), 47 deletions(-) diff --git a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java index 2a2b023..bc7805b 100644 --- a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java +++ b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeper.java @@ -49,7 +49,6 @@ import org.apache.sling.distribution.journal.messages.LogMessage; import org.apache.sling.distribution.journal.messages.PackageMessage; import org.apache.sling.distribution.journal.messages.PackageStatusMessage; import org.apache.sling.distribution.journal.messages.PackageStatusMessage.Status; -import org.apache.sling.distribution.journal.shared.SubscriberMetrics; import org.apache.sling.distribution.journal.shared.NoOpImportPostProcessor; import org.apache.sling.distribution.journal.shared.NoOpInvalidationProcessor; import org.osgi.service.event.Event; diff --git a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperFactory.java b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperFactory.java index 79ee33e..f650fc4 100644 --- a/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperFactory.java +++ b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperFactory.java @@ -27,7 +27,6 @@ import org.apache.sling.distribution.InvalidationProcessor; import org.apache.sling.distribution.journal.messages.LogMessage; import org.apache.sling.distribution.journal.messages.PackageStatusMessage; import org.apache.sling.distribution.journal.BinaryStore; -import org.apache.sling.distribution.journal.shared.SubscriberMetrics; import org.apache.sling.distribution.packaging.DistributionPackageBuilder; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; diff --git a/src/main/java/org/apache/sling/distribution/journal/shared/SubscriberMetrics.java b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/SubscriberMetrics.java similarity index 89% rename from src/main/java/org/apache/sling/distribution/journal/shared/SubscriberMetrics.java rename to src/main/java/org/apache/sling/distribution/journal/bookkeeper/SubscriberMetrics.java index b0d656c..c7a4c3e 100644 --- a/src/main/java/org/apache/sling/distribution/journal/shared/SubscriberMetrics.java +++ b/src/main/java/org/apache/sling/distribution/journal/bookkeeper/SubscriberMetrics.java @@ -16,11 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.sling.distribution.journal.shared; +package org.apache.sling.distribution.journal.bookkeeper; import static java.lang.String.format; -import java.util.concurrent.Callable; import java.util.function.Supplier; import org.apache.sling.commons.metrics.Counter; @@ -101,37 +100,6 @@ public class SubscriberMetrics { permanentImportErrors = getCounter(getMetricName(SUB_COMPONENT, "permanent_import_errors")); } - /** - * Runs provided code updating provided metric - * with its execution time. - * The method guarantees that the metric is updated - * even if the code throws an exception - * @param metric metric to update - * @param code code to clock - * @throws Exception actually it doesn't - */ - public static void timed(Timer metric, Runnable code) throws Exception { - try (Timer.Context ignored = metric.time()) { - code.run(); - } - } - - /** - * Runs provided code updating provided metric - * with its execution time. - * The method guarantees that the metric is updated - * even if the code throws an exception - * @param metric metric to update - * @param code code to clock - * @return a value returned but <code>code.call()</code> invocation - * @throws Exception if underlying code throws - */ - public static <T> T timed(Timer metric, Callable<T> code) throws Exception { - try (Timer.Context ignored = metric.time()) { - return code.call(); - } - } - /** * Histogram of the imported content package size in Byte. * diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java index ae1dc4a..2bf24f5 100644 --- a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java +++ b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java @@ -23,7 +23,6 @@ import static java.lang.String.format; import static java.util.Objects.requireNonNull; import static org.apache.sling.distribution.DistributionRequestState.ACCEPTED; import static org.apache.sling.distribution.DistributionRequestType.*; -import static org.apache.sling.distribution.journal.shared.SubscriberMetrics.timed; import static org.apache.sling.distribution.journal.shared.Strings.requireNotBlank; import static org.osgi.service.component.annotations.ReferenceCardinality.OPTIONAL; import static org.osgi.service.component.annotations.ReferencePolicyOption.GREEDY; @@ -44,7 +43,7 @@ import org.apache.sling.distribution.journal.messages.PackageMessage.ReqType; import org.apache.sling.distribution.journal.queue.PubQueueProvider; import org.apache.sling.distribution.journal.shared.DefaultDistributionLog; import org.apache.sling.distribution.journal.shared.DistributionLogEventListener; -import org.apache.sling.distribution.journal.shared.PublishMetrics; +import org.apache.sling.distribution.journal.shared.Timed; import org.apache.sling.distribution.journal.shared.Topics; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.distribution.DistributionRequest; @@ -246,7 +245,7 @@ public class DistributionPublisher implements DistributionAgent { if (request.getRequestType() != TEST && request.getPaths().length == 0) { throw new DistributionException("Empty paths are not allowed"); } - return timed(publishMetrics.getBuildPackageDuration(), () -> factory.create(packageBuilder, resourceResolver, pubAgentName, request)); + return Timed.timed(publishMetrics.getBuildPackageDuration(), () -> factory.create(packageBuilder, resourceResolver, pubAgentName, request)); } catch (Exception e) { publishMetrics.getDroppedRequests().mark(); String msg = format("Failed to create content package for requestType=%s, paths=%s. Error=%s", @@ -259,7 +258,7 @@ public class DistributionPublisher implements DistributionAgent { @Nonnull private DistributionResponse send(final PackageMessage pkg, int queueSize, int delayMS) throws DistributionException { try { - long offset = timed(publishMetrics.getEnqueuePackageDuration(), () -> this.sendAndWait(pkg)); + long offset = Timed.timed(publishMetrics.getEnqueuePackageDuration(), () -> this.sendAndWait(pkg)); publishMetrics.getExportedPackageSize().update(pkg.getPkgLength()); publishMetrics.getAcceptedRequests().mark(); String msg = format("Request accepted with distribution package %s at offset=%d, queueSize=%d, queueSizeDelay=%d", pkg, offset, queueSize, delayMS); diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallback.java b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallback.java index 23e8df7..341d553 100644 --- a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallback.java +++ b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallback.java @@ -39,7 +39,6 @@ import org.apache.sling.distribution.journal.queue.CacheCallback; import org.apache.sling.distribution.journal.queue.ClearCallback; import org.apache.sling.distribution.journal.queue.QueueState; import org.apache.sling.distribution.journal.shared.AgentId; -import org.apache.sling.distribution.journal.shared.PublishMetrics; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/PubQueueProviderPublisher.java b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/PubQueueProviderPublisher.java index 7f64427..16e597c 100644 --- a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/PubQueueProviderPublisher.java +++ b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/PubQueueProviderPublisher.java @@ -32,7 +32,6 @@ import org.apache.sling.distribution.journal.messages.PackageStatusMessage; import org.apache.sling.distribution.journal.queue.CacheCallback; import org.apache.sling.distribution.journal.queue.PubQueueProvider; import org.apache.sling.distribution.journal.queue.PubQueueProviderFactory; -import org.apache.sling.distribution.journal.shared.PublishMetrics; import org.apache.sling.distribution.journal.shared.Topics; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; diff --git a/src/main/java/org/apache/sling/distribution/journal/shared/PublishMetrics.java b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/PublishMetrics.java similarity index 98% rename from src/main/java/org/apache/sling/distribution/journal/shared/PublishMetrics.java rename to src/main/java/org/apache/sling/distribution/journal/impl/publisher/PublishMetrics.java index 430c8cb..29f252a 100644 --- a/src/main/java/org/apache/sling/distribution/journal/shared/PublishMetrics.java +++ b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/PublishMetrics.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.sling.distribution.journal.shared; +package org.apache.sling.distribution.journal.impl.publisher; import static java.lang.String.format; diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java index d09a8e7..170eeb0 100644 --- a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java +++ b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java @@ -64,6 +64,7 @@ import org.apache.sling.distribution.journal.Reset; import org.apache.sling.distribution.journal.bookkeeper.BookKeeper; import org.apache.sling.distribution.journal.bookkeeper.BookKeeperConfig; import org.apache.sling.distribution.journal.bookkeeper.BookKeeperFactory; +import org.apache.sling.distribution.journal.bookkeeper.SubscriberMetrics; import org.apache.sling.distribution.journal.impl.precondition.Precondition; import org.apache.sling.distribution.journal.impl.precondition.Precondition.Decision; import org.apache.sling.distribution.journal.messages.LogMessage; @@ -71,7 +72,6 @@ import org.apache.sling.distribution.journal.messages.OffsetMessage; import org.apache.sling.distribution.journal.messages.PackageMessage; import org.apache.sling.distribution.journal.messages.PackageStatusMessage; import org.apache.sling.distribution.journal.shared.Delay; -import org.apache.sling.distribution.journal.shared.SubscriberMetrics; import org.apache.sling.distribution.journal.shared.Topics; import org.apache.sling.distribution.packaging.DistributionPackageBuilder; import org.apache.sling.settings.SlingSettingsService; diff --git a/src/main/java/org/apache/sling/distribution/journal/shared/Timed.java b/src/main/java/org/apache/sling/distribution/journal/shared/Timed.java new file mode 100644 index 0000000..7a46f8b --- /dev/null +++ b/src/main/java/org/apache/sling/distribution/journal/shared/Timed.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.distribution.journal.shared; + +import java.util.concurrent.Callable; + +import org.apache.sling.commons.metrics.Timer; + +public final class Timed { + + private Timed() { + } + + /** + * Runs provided code updating provided metric + * with its execution time. + * The method guarantees that the metric is updated + * even if the code throws an exception + * @param metric metric to update + * @param code code to clock + * @throws Exception actually it doesn't + */ + public static void timed(Timer metric, Runnable code) throws Exception { + try (Timer.Context ignored = metric.time()) { + code.run(); + } + } + + /** + * Runs provided code updating provided metric + * with its execution time. + * The method guarantees that the metric is updated + * even if the code throws an exception + * @param metric metric to update + * @param code code to clock + * @return a value returned but <code>code.call()</code> invocation + * @throws Exception if underlying code throws + */ + public static <T> T timed(Timer metric, Callable<T> code) throws Exception { + try (Timer.Context ignored = metric.time()) { + return code.call(); + } + } +} diff --git a/src/test/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperTest.java b/src/test/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperTest.java index 1df8910..5c11b2d 100644 --- a/src/test/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperTest.java +++ b/src/test/java/org/apache/sling/distribution/journal/bookkeeper/BookKeeperTest.java @@ -38,7 +38,6 @@ import org.apache.sling.distribution.common.DistributionException; import org.apache.sling.distribution.journal.messages.LogMessage; import org.apache.sling.distribution.journal.messages.PackageMessage; import org.apache.sling.distribution.journal.messages.PackageStatusMessage; -import org.apache.sling.distribution.journal.shared.SubscriberMetrics; import org.apache.sling.distribution.packaging.DistributionPackageBuilder; import org.apache.sling.testing.resourceresolver.MockResourceResolverFactory; import org.junit.Before; diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java index 1182734..d7541e9 100644 --- a/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java +++ b/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java @@ -63,7 +63,6 @@ import org.apache.sling.distribution.journal.messages.PackageMessage; import org.apache.sling.distribution.journal.queue.PubQueueProvider; import org.apache.sling.distribution.journal.queue.impl.OffsetQueueImpl; import org.apache.sling.distribution.journal.queue.impl.PubQueue; -import org.apache.sling.distribution.journal.shared.PublishMetrics; import org.apache.sling.distribution.journal.shared.Topics; import org.apache.sling.distribution.packaging.DistributionPackageBuilder; import org.apache.sling.distribution.queue.spi.DistributionQueue; diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallbackTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallbackTest.java index ddeebd9..c30d56b 100644 --- a/src/test/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallbackTest.java +++ b/src/test/java/org/apache/sling/distribution/journal/impl/publisher/MessagingCacheCallbackTest.java @@ -49,7 +49,6 @@ import org.apache.sling.distribution.journal.messages.ClearCommand; import org.apache.sling.distribution.journal.messages.PackageMessage; import org.apache.sling.distribution.journal.messages.PackageMessage.ReqType; import org.apache.sling.distribution.journal.queue.QueueState; -import org.apache.sling.distribution.journal.shared.PublishMetrics; import org.apache.sling.distribution.journal.shared.TestMessageInfo; import org.apache.sling.distribution.journal.shared.Topics; import org.junit.Before; diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java index 5d13f72..f1fa3d5 100644 --- a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java +++ b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java @@ -72,6 +72,7 @@ import org.apache.sling.distribution.journal.Reset; import org.apache.sling.distribution.journal.bookkeeper.BookKeeper; import org.apache.sling.distribution.journal.bookkeeper.BookKeeperFactory; import org.apache.sling.distribution.journal.bookkeeper.LocalStore; +import org.apache.sling.distribution.journal.bookkeeper.SubscriberMetrics; import org.apache.sling.distribution.journal.shared.NoOpImportPostProcessor; import org.apache.sling.distribution.journal.impl.precondition.Precondition; import org.apache.sling.distribution.journal.impl.precondition.Precondition.Decision; @@ -82,7 +83,6 @@ import org.apache.sling.distribution.journal.messages.PackageMessage.ReqType; import org.apache.sling.distribution.journal.messages.PackageStatusMessage; import org.apache.sling.distribution.journal.messages.PackageStatusMessage.Status; import org.apache.sling.distribution.journal.messages.PingMessage; -import org.apache.sling.distribution.journal.shared.SubscriberMetrics; import org.apache.sling.distribution.journal.shared.TestMessageInfo; import org.apache.sling.distribution.journal.shared.Topics; import org.apache.sling.distribution.packaging.DistributionPackageBuilder; diff --git a/src/test/java/org/apache/sling/distribution/journal/shared/SubscriberMetricsTest.java b/src/test/java/org/apache/sling/distribution/journal/shared/SubscriberMetricsTest.java index be5e2e3..7d43820 100644 --- a/src/test/java/org/apache/sling/distribution/journal/shared/SubscriberMetricsTest.java +++ b/src/test/java/org/apache/sling/distribution/journal/shared/SubscriberMetricsTest.java @@ -27,6 +27,7 @@ import org.apache.sling.commons.metrics.Meter; import org.apache.sling.commons.metrics.MetricsService; import org.apache.sling.commons.metrics.Timer; import org.apache.sling.commons.metrics.Timer.Context; +import org.apache.sling.distribution.journal.bookkeeper.SubscriberMetrics; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith;