Andrey Mashenkov created IGNITE-24165:
-----------------------------------------
Summary: EventLog interface refactoring.
Key: IGNITE-24165
URL: https://issues.apache.org/jira/browse/IGNITE-24165
Project: Ignite
Issue Type: Bug
Components: general
Reporter: Andrey Mashenkov
As for now, `EventLog.log(Supplier<Event>)` method javadoc doesn't describe the
method purposes, contract and Supplier parameter limitations.
AFAIK, the lamda is passed for performance reasons, avoiding Event object
instantiation when not needed. As a fact, the implementation creates an Event
in-place unconditionally.
So, the optimization just doesn't work.
On the other hand, the interface claims nothing if implementation can be sync
or async.
So, should the user bother with lamda thread-safety.
Let's fix javadoc and method signature. I'd expect one of these:
1. The event is constructed outside the method and the method signature is
straightforward.
{code:java}
void log(Event event);
{code}
2. The factory and EventType is passed to the method. Javadoc declares the
factory may be called synchronously in the same thread, or not called at all
(if no listeners for the EventType was registered).
{code:java}
void log(EventType type, Supplier<Event> factory);
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)