+1 to either forbid them entirely or not at all.
pt., 31 maj 2024, 16:05 użytkownik Benjamin Lerer <b.le...@gmail.com> napisał: > For me the definition of hot path is too vague. We had arguments with > Berenger multiple times and it is more a waste of time than anything else > at the end. If we are truly concerned about stream efficiency then we > should simply forbid them. That will avoid lengthy discussions about what > constitute the hot path and what does not. > > Le ven. 31 mai 2024 à 11:08, Berenguer Blasi <berenguerbl...@gmail.com> a > écrit : > >> +1 on avoiding streams in hot paths >> On 31/5/24 9:48, Benedict wrote: >> >> My concept of hot path is simply anything we can expect to be called >> frequently enough in normal operation that it might show up in a profiler. >> If it’s a library method then it’s reasonable to assume it should be able >> to be used in a hot path unless clearly labelled otherwise. >> >> In my view this includes things that might normally be masked by caching >> but under supported workloads may not be - such as query preparation. >> >> In fact, I’d say the default assumption should probably be that a method >> is “in a hot path” unless there’s good argument they aren’t - such as that >> the operation is likely to be run at some low frequency and the slow part >> is not part of any loop. Repair setup messages perhaps aren’t a hot path >> for instance (unless many of them are sent per repair), but validation >> compaction or merkle tree construction definitely is. >> >> I think it’s fine to not have perfect agreement about edge cases, but if >> anyone in a discussion thinks something is a hot path then it should be >> treated as one IMO. >> >> On 30 May 2024, at 18:39, David Capwell <dcapw...@apple.com> >> <dcapw...@apple.com> wrote: >> >> As a general statement I agree with you (same for String.format as >> well), but one thing to call out is that it can be hard to tell what is the >> hot path and what isn’t. When you are doing background work (like repair) >> its clear, but when touching something internal it can be hard to tell; >> this can also be hard with shared code as it gets authored outside the hot >> path then later used in the hot path… >> >> Also, what defines hot path? Is this user facing only? What about >> Validation/Streaming (stuff processing a large dataset)? >> >> On May 30, 2024, at 9:29 AM, Benedict <bened...@apache.org> >> <bened...@apache.org> wrote: >> >> Since it’s related to the logging discussion we’re already having, I have >> seen stream pipelines showing up in a lot of traces recently. I am >> surprised; I thought it was understood that they shouldn’t be used on hot >> paths as they are not typically as efficient as old skool for-each >> constructions done sensibly, especially for small collections that may >> normally take zero or one items. >> >> I would like to propose forbidding the use of streams on hot paths >> without good justification that the cost:benefit is justified. >> >> It looks like it was nominally agreed two years ago that we would include >> words to this effect in the code style guide, but I forgot to include them >> when I transferred the new contents from the Google Doc proposal. So we >> could just include the “Performance” section that was meant to be included >> at the time. >> >> lists.apache.org >> <https://lists.apache.org/thread/1mt8rsg36p1mq8s8578l6js075lrmvlt> >> <favicon.ico> >> <https://lists.apache.org/thread/1mt8rsg36p1mq8s8578l6js075lrmvlt> >> <https://lists.apache.org/thread/1mt8rsg36p1mq8s8578l6js075lrmvlt> >> >> >> On 30 May 2024, at 13:33, Štefan Miklošovič <stefan.mikloso...@gmail.com> >> <stefan.mikloso...@gmail.com> wrote: >> >> >> I see the feedback is overall positive. I will merge that and I will >> improve the documentation on the website along with what Benedict suggested. >> >> On Thu, May 30, 2024 at 10:32 AM Mick Semb Wever <m...@apache.org> wrote: >> >>> >>> >>> >>>> Based on these findings, I went through the code and I have >>>> incorporated these rules and I rewrote it like this: >>>> >>>> 1) no wrapping in "if" if we are not logging more than 2 parameters. >>>> 2) rewritten log messages to not contain any string concatenation but >>>> moving it all to placeholders ({}). >>>> 3) wrap it in "if" if we need to execute a method(s) on parameter(s) >>>> which is resource-consuming. >>>> >>> >>> >>> +1 >>> >>> >>> It's a shame slf4j botched it with lambdas, their 2.0 fluent api doesn't >>> impress me. >>> >> >>