Skip to content

Commit

Permalink
Merge branch 'develop' into roomba/latest-baseline-oss
Browse files Browse the repository at this point in the history
  • Loading branch information
Rui Alves committed Mar 3, 2022
2 parents ea5a304 + 4d00b1a commit 2182333
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 27 deletions.
5 changes: 5 additions & 0 deletions changelog/3.54.0/pr-1619.v2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type: improvement
improvement:
description: Sticky sessions reuse metric references for better performance
links:
- https://github.com/palantir/dialogue/pull/1619
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,12 @@ final class QueuedChannel implements Channel {
}

// Metrics are global, even if max size is per queue.
static QueuedChannel createForSticky(Config cf, LimitedChannel delegate) {
return new QueuedChannel(
delegate,
cf.channelName(),
stickyInstrumentation(
DialogueClientMetrics.of(cf.clientConf().taggedMetricRegistry()), cf.channelName()),
cf.maxQueueSize());
static QueuedChannel createForSticky(
String channelName,
int maxQueueSize,
QueuedChannelInstrumentation queuedChannelInstrumentation,
LimitedChannel delegate) {
return new QueuedChannel(delegate, channelName, queuedChannelInstrumentation, maxQueueSize);
}

static QueuedChannel create(Config cf, LimitedChannel delegate) {
Expand Down Expand Up @@ -380,7 +379,9 @@ public Timer requestQueuedTime() {
}

static QueuedChannelInstrumentation stickyInstrumentation(DialogueClientMetrics metrics, String channelName) {
return new QueuedChannelInstrumentation() {
// Sticky-session queue instrumentation is reused between sticky sessions, metric references are
// memoized in order to avoid unnecessary churn.
return new MemoizedQueuedChannelInstrumentation(new QueuedChannelInstrumentation() {
@Override
public Counter requestsQueued() {
return metrics.requestsStickyQueued(channelName);
Expand All @@ -390,7 +391,7 @@ public Counter requestsQueued() {
public Timer requestQueuedTime() {
return metrics.requestStickyQueuedTime(channelName);
}
};
});
}

static QueuedChannelInstrumentation endpointInstrumentation(
Expand All @@ -415,4 +416,25 @@ public Timer requestQueuedTime() {
}
};
}

private static final class MemoizedQueuedChannelInstrumentation implements QueuedChannelInstrumentation {

private final Supplier<Counter> requestsQueuedSupplier;
private final Supplier<Timer> requestQueuedTimeSupplier;

MemoizedQueuedChannelInstrumentation(QueuedChannelInstrumentation delegate) {
this.requestsQueuedSupplier = Suppliers.memoize(delegate::requestsQueued);
this.requestQueuedTimeSupplier = Suppliers.memoize(delegate::requestQueuedTime);
}

@Override
public Counter requestsQueued() {
return requestsQueuedSupplier.get();
}

@Override
public Timer requestQueuedTime() {
return requestQueuedTimeSupplier.get();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.palantir.dialogue.EndpointChannelFactory;
import com.palantir.dialogue.Request;
import com.palantir.dialogue.Response;
import com.palantir.dialogue.core.QueuedChannel.QueuedChannelInstrumentation;
import com.palantir.dialogue.futures.DialogueFutures;
import java.util.function.Consumer;
import java.util.function.Supplier;
Expand Down Expand Up @@ -60,19 +61,25 @@ static Supplier<Channel> create(Config cf, LimitedChannel nodeSelectionChannel,

private static final class QueueOverrideSupplier implements Supplier<Channel> {

private final Config cf;
private final String channelName;
private final int maxQueueSize;
private final QueuedChannelInstrumentation queuedChannelInstrumentation;
private final LimitedChannel nodeSelectionChannel;

private QueueOverrideSupplier(Config cf, LimitedChannel nodeSelectionChannel) {
this.cf = cf;
this.channelName = cf.channelName();
this.maxQueueSize = cf.maxQueueSize();
this.queuedChannelInstrumentation = QueuedChannel.stickyInstrumentation(
DialogueClientMetrics.of(cf.clientConf().taggedMetricRegistry()), channelName);
this.nodeSelectionChannel = nodeSelectionChannel;
}

@Override
public Channel get() {
LimitedChannel stickyLimitedChannel =
StickyConcurrencyLimitedChannel.create(nodeSelectionChannel, cf.channelName());
return QueuedChannel.createForSticky(cf, stickyLimitedChannel);
StickyConcurrencyLimitedChannel.create(nodeSelectionChannel, channelName);
return QueuedChannel.createForSticky(
channelName, maxQueueSize, queuedChannelInstrumentation, stickyLimitedChannel);
}
}

Expand Down
22 changes: 11 additions & 11 deletions versions.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
com.fasterxml.jackson:jackson-bom:2.13.1 (9 constraints: 43c2e357)
com.fasterxml.jackson.core:jackson-annotations:2.13.1 (8 constraints: 977c4127)
com.fasterxml.jackson.core:jackson-core:2.13.1 (12 constraints: d6ead5a1)
com.fasterxml.jackson.core:jackson-databind:2.13.1 (18 constraints: 6463255d)
com.fasterxml.jackson.core:jackson-databind:2.13.1 (18 constraints: 6163aa58)
com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.13.1 (2 constraints: 332bfd86)
com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.13.1 (2 constraints: 332bfd86)
com.fasterxml.jackson.datatype:jackson-datatype-guava:2.13.1 (3 constraints: 2737d491)
Expand All @@ -15,11 +15,11 @@ com.google.auto:auto-common:0.11 (1 constraints: e711f5e8)
com.google.code.findbugs:jsr305:3.0.2 (12 constraints: 30ab4ac2)
com.google.errorprone:error_prone_annotations:2.7.1 (14 constraints: 8dcfccf7)
com.google.guava:failureaccess:1.0.1 (2 constraints: d5150d01)
com.google.guava:guava:31.1-jre (15 constraints: dcf3bdfd)
com.google.guava:guava:31.1-jre (15 constraints: 7ef3b056)
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava (2 constraints: 27311c3a)
com.google.j2objc:j2objc-annotations:1.3 (2 constraints: 1d15b8b5)
com.palantir.common:streams:1.9.1 (1 constraints: 0d050c36)
com.palantir.conjure.java:conjure-lib:6.31.0 (1 constraints: 3c05523b)
com.palantir.conjure.java:conjure-lib:6.32.0 (1 constraints: 3d05553b)
com.palantir.conjure.java.api:errors:2.24.0 (2 constraints: 59155fda)
com.palantir.conjure.java.api:service-config:2.24.0 (2 constraints: 5319d6db)
com.palantir.conjure.java.api:ssl-config:2.24.0 (2 constraints: a2257a38)
Expand All @@ -28,21 +28,21 @@ com.palantir.conjure.java.runtime:conjure-java-jackson-optimizations:7.29.0 (1 c
com.palantir.conjure.java.runtime:conjure-java-jackson-serialization:7.29.0 (2 constraints: 6516fe0f)
com.palantir.conjure.java.runtime:keystores:7.29.0 (2 constraints: 67196ade)
com.palantir.goethe:goethe:0.6.0 (1 constraints: 0805fd35)
com.palantir.refreshable:refreshable:2.1.0 (2 constraints: e91897b1)
com.palantir.refreshable:refreshable:2.2.0 (2 constraints: ea18d2b1)
com.palantir.ri:resource-identifier:2.3.0 (2 constraints: f31494b6)
com.palantir.safe-logging:logger:1.22.0 (9 constraints: e68875cd)
com.palantir.safe-logging:logger:1.22.0 (9 constraints: e1881fca)
com.palantir.safe-logging:logger-slf4j:1.22.0 (1 constraints: 300e8550)
com.palantir.safe-logging:logger-spi:1.22.0 (2 constraints: 6f1e00b0)
com.palantir.safe-logging:preconditions:1.22.0 (14 constraints: 61e7789b)
com.palantir.safe-logging:preconditions:1.22.0 (14 constraints: 5ce71a96)
com.palantir.safe-logging:safe-logging:1.22.0 (12 constraints: e3bb4c75)
com.palantir.safethreadlocalrandom:safe-thread-local-random:0.1.0 (1 constraints: 0305ee35)
com.palantir.tokens:auth-tokens:3.12.0 (3 constraints: 1228728a)
com.palantir.tokens:auth-tokens:3.12.0 (3 constraints: 1328ab8a)
com.palantir.tracing:tracing:6.9.0 (2 constraints: 0216b4ea)
com.palantir.tracing:tracing-api:6.9.0 (2 constraints: b711d2fa)
com.palantir.tritium:tritium-api:0.41.0 (2 constraints: 2b1f36bc)
com.palantir.tritium:tritium-core:0.41.0 (1 constraints: 3d103ba2)
com.palantir.tritium:tritium-metrics:0.41.0 (1 constraints: 3705323b)
com.palantir.tritium:tritium-registry:0.41.0 (3 constraints: 9029a40a)
com.palantir.tritium:tritium-api:0.42.0 (2 constraints: 2d1f6abc)
com.palantir.tritium:tritium-core:0.42.0 (1 constraints: 3e103ea2)
com.palantir.tritium:tritium-metrics:0.42.0 (1 constraints: 3805353b)
com.palantir.tritium:tritium-registry:0.42.0 (3 constraints: 9229110b)
com.squareup:javapoet:1.13.0 (2 constraints: 2b113eee)
commons-codec:commons-codec:1.15 (1 constraints: 0d13c328)
io.dropwizard.metrics:metrics-core:4.1.1 (3 constraints: a925881b)
Expand Down
6 changes: 3 additions & 3 deletions versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ com.google.guava:guava = 31.1-jre
com.google.testing.compile:compile-testing = 0.19
com.palantir.common:streams = 1.9.1
com.palantir.conjure:conjure = 4.24.0
com.palantir.conjure.java:* = 6.31.0
com.palantir.conjure.java:* = 6.32.0
com.palantir.conjure.java.api:* = 2.24.0
com.palantir.conjure.java.runtime:* = 7.29.0
com.palantir.refreshable:* = 2.1.0
com.palantir.refreshable:* = 2.2.0
com.palantir.ri:resource-identifier = 2.3.0
com.palantir.safe-logging:* = 1.22.0
com.palantir.safethreadlocalrandom:safe-thread-local-random = 0.1.0
com.palantir.tokens:auth-tokens = 3.12.0
com.palantir.tracing:* = 6.9.0
com.palantir.tritium:* = 0.41.0
com.palantir.tritium:* = 0.42.0
com.squareup:javapoet = 1.13.0
com.uber.nullaway:nullaway = 0.9.5
io.dropwizard.metrics:metrics-core = 3.2.6
Expand Down

0 comments on commit 2182333

Please sign in to comment.