Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extending recording/publishing infra #2859

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/main/java/io/lettuce/core/event/DefaultEventBus.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,15 @@ public Flux<Event> get() {
@Override
public void publish(Event event) {

recorder.record(event);
final Event sourceEvent = (event instanceof EventRecorder.RecordableEvent)
? ((EventRecorder.RecordableEvent) event).getSource()
: event;

recorder.record(sourceEvent);

Sinks.EmitResult emitResult;

while ((emitResult = bus.tryEmitNext(event)) == Sinks.EmitResult.FAIL_NON_SERIALIZED) {
while ((emitResult = bus.tryEmitNext(sourceEvent)) == Sinks.EmitResult.FAIL_NON_SERIALIZED) {
// busy-loop
}

Expand Down
7 changes: 6 additions & 1 deletion src/main/java/io/lettuce/core/event/jfr/EventRecorder.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,18 @@ static EventRecorder getInstance() {
/**
* Interface defining a recordable event that is recorded on calling {@link #record()}.
*/
interface RecordableEvent {
interface RecordableEvent extends Event {

/**
* Complete the event recording.
*/
void record();

/**
* Get the source event.
*/
Event getSource();

}

}
35 changes: 26 additions & 9 deletions src/main/java/io/lettuce/core/event/jfr/JfrEventRecorder.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* <p>
* JFR event forwarding tries to detect a JFR event class that is co-located with the actual event type in the same package
* whose simple name is prefixed with {@code Jfr} (e.g. {@code ConnectedEvent} translates to {@code JfrConnectedEvent}). JFR
* event implementations are expected to accept the originak event type as constructor argument. Implementations can be
* event implementations are expected to accept the original event type as constructor argument. Implementations can be
* package-private.
*
* @author Mark Paluch
Expand All @@ -30,10 +30,14 @@ public void record(Event event) {

LettuceAssert.notNull(event, "Event must not be null");

jdk.jfr.Event jfrEvent = createEvent(event);
if (event instanceof RecordableEvent) {
((RecordableEvent) event).record();
} else {
jdk.jfr.Event jfrEvent = createEvent(event);

if (jfrEvent != null) {
jfrEvent.commit();
if (jfrEvent != null) {
jfrEvent.commit();
}
}
}

Expand All @@ -42,11 +46,12 @@ public RecordableEvent start(Event event) {

LettuceAssert.notNull(event, "Event must not be null");

jdk.jfr.Event jfrEvent = createEvent(event);
JfrRecordableEvent jfrRecordableEvent = new JfrRecordableEvent(event);
jdk.jfr.Event jfrEvent = jfrRecordableEvent.getJfrEvent();

if (jfrEvent != null) {
jfrEvent.begin();
return new JfrRecordableEvent(jfrEvent);
return jfrRecordableEvent;
}

return NoOpEventRecorder.INSTANCE;
Expand Down Expand Up @@ -97,12 +102,15 @@ private jdk.jfr.Event createEvent(Event event) {
}
}

static class JfrRecordableEvent implements RecordableEvent {
class JfrRecordableEvent implements RecordableEvent {

private final Event sourceEvent;

private final jdk.jfr.Event jfrEvent;

public JfrRecordableEvent(jdk.jfr.Event jfrEvent) {
this.jfrEvent = jfrEvent;
public JfrRecordableEvent(Event event) {
this.sourceEvent = event;
this.jfrEvent = createEvent(event);
}

@Override
Expand All @@ -111,6 +119,15 @@ public void record() {
jfrEvent.commit();
}

@Override
public Event getSource() {
return sourceEvent;
}

public jdk.jfr.Event getJfrEvent() {
return jfrEvent;
}

}

}
17 changes: 15 additions & 2 deletions src/main/java/io/lettuce/core/event/jfr/NoOpEventRecorder.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,18 @@
* @author Mark Paluch
* @since 6.1
*/
enum NoOpEventRecorder implements EventRecorder, EventRecorder.RecordableEvent {
public final class NoOpEventRecorder implements EventRecorder, EventRecorder.RecordableEvent {

INSTANCE;
public final static NoOpEventRecorder INSTANCE = new NoOpEventRecorder();

private Event originalEvent = null;

private NoOpEventRecorder() {
}

public NoOpEventRecorder(Event event) {
this.originalEvent = event;
}

@Override
public void record(Event event) {
Expand All @@ -24,7 +33,11 @@ public RecordableEvent start(Event event) {

@Override
public void record() {
}

@Override
public Event getSource() {
return originalEvent;
}

}
Loading