They would be the specific functions, but this doesn’t get us around they other problem. I think this approach is not going to work and we are about to start looking into other ways.
Thanks, Mark > On Sep 11, 2019, at 12:14 PM, Anthony Baker <aba...@pivotal.io> wrote: > > I think the Decorator approach you outlined could have other impacts as well. > Would I still be able to see specific function executions in statistics or > would they all become “TImingFunction”? > > Anthony > > >> On Sep 11, 2019, at 12:00 PM, Aaron Lindsey <alind...@pivotal.io> wrote: >> >> Thanks for your response, Dan. >> >> The second scenario you mentioned (i.e. users calling >> FunctionService.getFunction(String)) worries me because our PR changes the >> FunctionService so they would now get back an instance of the decorator >> function instead of the specific instance they registered by calling >> FunctionService.registerFunction(Function). Therefore, any explicit casts >> to a Function implementation like (MyFunction) >> FunctionService.getFunction("MyFunction") would fail. Does that mean this >> be a breaking change? The FunctionService class does not specify that >> getFunction must return the same type function as the one passed to >> registerFunction, but I could see how users might be relying on that >> behavior since there is no other way to get a specific function type out of >> the FunctionService without doing a cast. >> >> - Aaron >> >> >> On Wed, Sep 11, 2019 at 10:52 AM Dan Smith <dsm...@pivotal.io> wrote: >> >>> Functions are serialized when you call Execution.execute(Function) instead >>> of Execution.execute(String). Invoking execute on a function object >>> serializes the function and executes it on the remote side. Functions >>> executed this way don't have be registered. >>> >>> Users can also get registered function objects directly from the function >>> service using FunctionService.getFunction(String) and do whatever they want >>> with them, which I guess could include serializing them. >>> >>> Hope that helps! >>> -Dan >>> >>> On Wed, Sep 11, 2019 at 10:27 AM Aaron Lindsey <alind...@pivotal.io> >>> wrote: >>> >>>> As part of a PR to add Micrometer timers for function executions >>>> <https://github.com/apache/geode/pull/4038>, we implemented a decorator >>>> Function that wraps all registered non-internal functions and adds >>>> instrumentation. This PR is >>>> failing AnalyzeSerializablesJUnitTest.testSerializables because the >>>> decorator class is a new Serializable. >>>> >>>> I'm not sure if it would be OK to add this class to excludedClasses.txt >>>> because I don't know whether this function will ever be serialized. If it >>>> will be serialized, then I'm concerned that this might break backwards >>>> compatibility because we're changing the serialized form of registered >>>> functions. If this is the case, then we could implement custom logic for >>>> serializing the decorator class which would replace its serialized form >>>> with the serialized form of the inner class. Again, I'm not sure if that >>>> would be necessary because I don't know the conditions under which a >>>> function would be serialized. >>>> >>>> Could someone help me understand when functions would be persisted or >>> sent >>>> over the wire so I can determine if this change would break >>> compatibility? >>>> >>>> Thanks, >>>> Aaron >>>> >>> >