A Good hack Anthony and Vito. Short and Simple.

On Fri, Aug 14, 2015 at 1:50 AM, Anthony Baker <aba...@pivotal.io> wrote:

> Thanks for the suggestions Mike.  At this point we are just exploring
> ideas and putting them out for discussion.  Regarding restricting access to
> this feature, we used the Geode Java client so standard security and
> authorizations would apply.
>
> Anthony
>
> > On Aug 13, 2015, at 12:24 PM, Michael Stolz <mst...@pivotal.io> wrote:
> >
> > If this feature makes it into an actual release please make sure this
> > option is not enabled by default and is securely turned off for
> > environments where there are strong controls around releasing software
> into
> > production.
> > Also make sure that it is secured in terms of Authentication and
> > Authorization via the Geode security framework when it is enabled, so
> that
> > not just anyone can push code.
> >
> > --
> > Mike Stolz
> > Principal Technical Account Manager
> > Mobile: 631-835-4771
> >
> > On Thu, Aug 13, 2015 at 1:57 PM, Anthony Baker <aba...@pivotal.io
> <mailto:aba...@pivotal.io>> wrote:
> >
> >> Vito and I spent some time hacking up a prototype for dynamic and
> >> distributed classloading of Geode functions.  Currently a user has to
> >> compile a function into a jar and deploy it using gfsh before it can be
> >> executed.  If we could enable automatic deployment of functions across a
> >> running cluster it would speed up the development cycle for Geode
> >> applications and pave the way for other interesting features (like Java8
> >> lambdas).
> >>
> >> Here’s how it works:
> >>
> >> A function wrapper (DynamicFunction) serializes the original function
> >> object and captures dependent classes as byte arrays.  We generate an
> MD5
> >> hash over the bytecode and use that as the key for storing the bytecode
> in
> >> a replicated region (“hackday”) within the cache.  When the function is
> >> invoked, we call putIfAbsent() to distribute the byte code prior to
> >> executing the function across the cluster.  During execution, we extend
> the
> >> TCCL with a new class loader that loads classes from our region while
> the
> >> original function is being deserialized.  The original function is then
> >> executed in parallel on the cluster members.  This allows an application
> >> developer to iteratively modify and test function code without any
> manual
> >> steps to upload class files.
> >>
> >> Obviously, there is a lot more thinking and design work to do around
> these
> >> ideas.  Here’s our super-hacky code if you’re interested:
> >> https://gist.github.com/metatype/9b1f39a24e52f5c6f3e1 <
> >> https://gist.github.com/metatype/9b1f39a24e52f5c6f3e1 <
> https://gist.github.com/metatype/9b1f39a24e52f5c6f3e1>>
> >>
> >> Caveats:
> >>
> >> 1) Currently we only capture static class dependencies.  Any class
> >> dependencies present during method invocations are ignored.  This could
> be
> >> addressed by doing byte code inspection (using ASM, javaassist, etc).
> >>
> >> 2) The region we use to cache class byte code should be automatically
> >> recreated as a metadata region, similar to how we store pdx types.  We
> also
> >> need to configure eviction and expiration attributes to control resource
> >> usage and remove garbage.
> >>
> >> 3) We only injected the byte code caching hack into the code path for
> >> FunctionService.onServers(pool).  Also, the putIfAbsent() call adds
> another
> >> network roundtrip.
> >>
> >>
> >> Anthony & Vito
>
>

Reply via email to