Ya, just bringing that up again that. Doubt it will be a blocker.

Tim


On Fri, Apr 26, 2013 at 10:12 AM, David Alves <[email protected]> wrote:

> good point, i'll try and ask the author.
> it's a pretty recent lib so that might be an oversight…
>
> -david
>
> On Apr 26, 2013, at 12:04 PM, Timothy Chen <[email protected]> wrote:
>
> > Jacques I think this is the one I emailed you before that has no
> licensing info.
> >
> > Tim
> >
> > Sent from my iPhone
> >
> > On Apr 26, 2013, at 9:30 AM, David Alves <[email protected]> wrote:
> >
> >> i've looked through it and looks like it can leverage shared memory,
> which I was looking for anyway.
> >> I also like the way garbage collection works (gc in java also clears
> off-heap).
> >> I'll take a deeper look during the weekend.
> >>
> >> -david
> >>
> >> On Apr 26, 2013, at 11:25 AM, Jacques Nadeau <[email protected]>
> wrote:
> >>
> >>> I've looked at that in the past and think the idea of using here is
> very
> >>> good.  It seems like ByteBuf is nice as it has things like endianess
> >>> capabilities, reference counting and management and Netty direct
> support.
> >>> On the flipside, larray is nice for its large array capabilities and
> >>> better input/output interfaces.  The best approach might be to define
> a new
> >>> ByteBuf implementation that leverages LArray.  I'll take a look at
> this in
> >>> a few days if someone else doesn't want to.
> >>>
> >>> j
> >>>
> >>> On Fri, Apr 26, 2013 at 8:39 AM, kishore g <[email protected]>
> wrote:
> >>>
> >>>> Fort *ByteBuf Improvements*, Have you looked at LArrayJ
> >>>> https://github.com/xerial/larray. It has those wrappers and I found
> it
> >>>> quite useful. The same person has also written java version for snappy
> >>>> compression. Not sure if you guys have plan to add compression, but
> one of
> >>>> the nice things I could do was use the memory offsets for
> source(compressed
> >>>> data) and dest(uncompressed array) and do the decompression off-heap.
> It
> >>>> supports the need for looking up by index and has wrappers for most
> of the
> >>>> primitive data types.
> >>>>
> >>>> Are you looking at something like this?
> >>>>
> >>>> thanks,
> >>>> Kishore G
> >>>>
> >>>>
> >>>>
> >>>> On Fri, Apr 26, 2013 at 7:53 AM, Jacques Nadeau <[email protected]>
> >>>> wrote:
> >>>>
> >>>>> They are on the list but the list is long :)
> >>>>>
> >>>>> Have a good weekend.
> >>>>>
> >>>>> On Thu, Apr 25, 2013 at 9:51 PM, Timothy Chen <[email protected]>
> wrote:
> >>>>>
> >>>>>> So if no one picks anything up you will be done with all the work in
> >>>> the
> >>>>>> next couple of days? :)
> >>>>>>
> >>>>>> Would like to help out but I'm traveling to la over the weekend.
> >>>>>>
> >>>>>> I'll sync with you Monday to see how I can help then.
> >>>>>>
> >>>>>> Tim
> >>>>>>
> >>>>>> Sent from my iPhone
> >>>>>>
> >>>>>> On Apr 25, 2013, at 9:06 PM, Jacques Nadeau <[email protected]>
> >>>> wrote:
> >>>>>>
> >>>>>>> I'm working on the execwork stuff and if someone would like to help
> >>>>> out,
> >>>>>>> here are a couple of things that need doing.  I figured I'd drop
> them
> >>>>>> here
> >>>>>>> and see if anyone wants to work on them in the next couple of days.
> >>>> If
> >>>>>> so,
> >>>>>>> let me know otherwise I'll be picking them up soon.
> >>>>>>>
> >>>>>>> *RPC*
> >>>>>>> - RPC Layer Handshakes: Currently, I haven't implemented the
> >>>> handshake
> >>>>>> that
> >>>>>>> should happen in either the User <> Bit or the Bit <> Bit layer.
>  The
> >>>>>> plan
> >>>>>>> was to use an additional inserted event handler that removed itself
> >>>>> from
> >>>>>>> the event pipeline after a successful handshake or disconnected the
> >>>>>> channel
> >>>>>>> on a failed handshake (with appropriate logging).  The main
> >>>> validation
> >>>>> at
> >>>>>>> this point will be simply confirming that both endpoints are
> running
> >>>> on
> >>>>>> the
> >>>>>>> same protocol version.   The only other information that is
> currently
> >>>>>>> needed is that that in the Bit <> Bit communication, the client
> >>>> should
> >>>>>>> inform the server of its DrillEndpoint so that the server can then
> >>>> map
> >>>>>> that
> >>>>>>> for future communication in the other direction.
> >>>>>>>
> >>>>>>> *DataTypes*
> >>>>>>> - General Expansion: Currently, we have a hodgepodge of datatypes
> >>>>> within
> >>>>>>> the org.apache.drill.common.expression.types.DataType.  We need to
> >>>>> clean
> >>>>>>> this up.  There should be types that map to standard sql types.  My
> >>>>>>> thinking is that we should actually have separate types for each
> for
> >>>>>>> nullable, non-nullable and repeated (required, optional and
> repeated
> >>>> in
> >>>>>>> protobuf vernaciular) since we'll generally operate with those
> values
> >>>>>>> completely differently (and that each type should reveal which it
> >>>> is).
> >>>>>> We
> >>>>>>> should also have a relationship mapping from each to the other
> (e.g.
> >>>>> how
> >>>>>> to
> >>>>>>> convert a signed 32 bit int into a nullable signed 32 bit int.
> >>>>>>>
> >>>>>>> - Map Types: We don't need nullable but we will need different map
> >>>>> types:
> >>>>>>> inline and fieldwise.  I think these will useful for the execution
> >>>>> engine
> >>>>>>> and will be leverage depending on the particular needs-- for
> example
> >>>>>>> fieldwise will be a natural fit where we're operating on columnar
> >>>> data
> >>>>>> and
> >>>>>>> doing an explode or other fieldwise nested operation and inline
> will
> >>>> be
> >>>>>>> useful when we're doing things like sorting a complex field.
>  Inline
> >>>>> will
> >>>>>>> also be appropriate where we have extremely sparse record sets.
> >>>> We'll
> >>>>>> just
> >>>>>>> need transformation methods between the two variations.  In the
> case
> >>>>> of a
> >>>>>>> fieldwise map type field, the field is virtual and only exists to
> >>>>> contain
> >>>>>>> its child fields.
> >>>>>>>
> >>>>>>> - Non-static DataTypes: We have a need types that don't fit the
> >>>> static
> >>>>>> data
> >>>>>>> type model above.  Examples include fixed width types (e.g. 10 byte
> >>>>>>> string), polymorphic (inline encoded) types (number or string
> >>>> depending
> >>>>>> on
> >>>>>>> record) and repeated nested versions of our other types.  These
> are a
> >>>>>>> little more gnarly as we need to support canonicalization of these.
> >>>>>> Optiq
> >>>>>>> has some methods for how to handle this kind of type system so it
> >>>>>> probably
> >>>>>>> makes sense to leverage that system.
> >>>>>>>
> >>>>>>> *Expression Type Materialization*
> >>>>>>> - LogicalExpression type materialization: Right now,
> >>>> LogicalExpressions
> >>>>>>> include support for late type binding.  As part of the record batch
> >>>>>>> execution path, these need to get materialized with correct
> casting,
> >>>>> etc
> >>>>>>> based on the actual found schema.  As such, we need to have a
> >>>> function
> >>>>>>> which takes a LogicalExpression tree, applies a materialized
> >>>>> BatchSchema
> >>>>>>> and returns a new LogicalExpression tree with full type settings.
>  As
> >>>>>> part
> >>>>>>> of this process, all types need to be cast as necessary and full
> >>>>>> validation
> >>>>>>> of the tree should be done.  Timothy has a pending work for
> >>>> validation
> >>>>>>> specifically on a pull request that would be a good piece of code
> to
> >>>>>>> leverage that need.  We also have a visitor model for the
> expression
> >>>>> tree
> >>>>>>> that should be able to aid in the updated LogicalExpression
> >>>>> construction.
> >>>>>>> -LogicalExpression to Java expression conversion: We need to be
> able
> >>>> to
> >>>>>>> convert our logical expressions into Java code expressions.
> >>>> Initially,
> >>>>>>> this should be done in a simplistic way, using something like
> >>>> implicit
> >>>>>>> boxing and the like just to get something working.  This will
> likely
> >>>> be
> >>>>>>> specialized per major type (nullable, non-nullable and repeated)
> and
> >>>> a
> >>>>>>> framework might the most sense actually just distinguishing the
> >>>>>>> LogicalExpression by these types.
> >>>>>>>
> >>>>>>> *JDBC*
> >>>>>>> - The Drill JDBC driver layer needs to be updated to leverage our
> >>>>>> zookeeper
> >>>>>>> coordination locations so that it can correctly find the cluster
> >>>>>> location.
> >>>>>>> - The Drill JDBC driver should also manage reconnects so that if it
> >>>>> loses
> >>>>>>> connection with a particular Drillbit partner, that it will
> reconnect
> >>>>> to
> >>>>>>> another available node in the cluster.
> >>>>>>> - Someone should point SQuirreL at Julian's latest work and see how
> >>>>>> things
> >>>>>>> go...
> >>>>>>>
> >>>>>>> *ByteCode Engineering*
> >>>>>>> - We need to put together a concrete class materialization
> strategy.
> >>>>> My
> >>>>>>> thinking for relational operators and code generation is that in
> most
> >>>>>>> cases, we'll have an interface and a template class for a
> particular
> >>>>>>> relational operator.  We will build a template class that has all
> the
> >>>>>>> generic stuff implemented but will make calls to empty methods
> where
> >>>> it
> >>>>>>> expects lower level operations to occur.  This allows things like
> the
> >>>>>>> looping and certain types of null management to be fully
> materialized
> >>>>> in
> >>>>>>> source code without having to deal with the complexities of
> ByteCode
> >>>>>>> generation.  It also eases testing complexity.  When a particular
> >>>>>>> implementation is required, the Drillbit will be responsible for
> >>>>>> generating
> >>>>>>> updated method bodies as required for the record-level expressions,
> >>>>>> marking
> >>>>>>> all the methods and class as final, then loading the implementation
> >>>>> into
> >>>>>>> the query-level classloader.  Note that the production Drillbit
> will
> >>>>>> never
> >>>>>>> load the template class into the JVM and will simply utilize it in
> >>>>>> ByteCode
> >>>>>>> form.  I was hoping someone can take a look at trying to pull
> >>>> together
> >>>>> a
> >>>>>>> cohesive approach to doing this using ASM and Janino (likely
> >>>> utilizing
> >>>>>> the
> >>>>>>> JDK commons-compiler mode).  The interface should be pretty simple:
> >>>>> input
> >>>>>>> is an interface, a template class name, a set of (method_signature,
> >>>>>>> method_body_text) objects and a varargs of objects that are
> required
> >>>>> for
> >>>>>>> object instantiation.  The return should be an instance of the
> >>>>> interface.
> >>>>>>> The interface should check things like method_signature provided to
> >>>>>>> available method blocks, the method blocks being replaced are
> empty,
> >>>>> the
> >>>>>>> object constructor matches the set of object argument provided by
> the
> >>>>>>> object instantiation request, etc.
> >>>>>>>
> >>>>>>> *ByteBuf Improvements*
> >>>>>>> - Our BufferAllocator should support child allocators (getChild())
> >>>> with
> >>>>>>> their own memory maximums and accounting (so we can determine the
> >>>>> memory
> >>>>>>> overhead to particular queries).  We also need to be able to
> release
> >>>>>> entire
> >>>>>>> child allocations at once.
> >>>>>>> - We need to create a number of primitive type specific wrapping
> >>>>> classes
> >>>>>>> for ByteBuf.  These additions include fixed offset indexing for
> >>>>>> operations
> >>>>>>> (e.g. index 1 of an int buffer should be at 4 bytes), adding
> support
> >>>>> for
> >>>>>>> unsigned values (my preference would be to leverage the work in
> Guava
> >>>>> if
> >>>>>>> that makes sense) and modifying the hard bounds checks to softer
> >>>> assert
> >>>>>>> checks to increase production performance.  While we could do this
> >>>>>>> utilizing the ByteBuf interface, from everything I've experienced
> and
> >>>>>> read,
> >>>>>>> we need to minimize issues with inlining and performance so we
> really
> >>>>>> need
> >>>>>>> to be able to modify/refer to PooledUnsafeDirectByteBuf directly
> for
> >>>>> the
> >>>>>>> wrapping classes.  Of course, it is a final package private class.
> >>>>> Short
> >>>>>>> term that means we really need to create a number of specific
> buffer
> >>>>>> types
> >>>>>>> that wrap it and just put them in the io.netty.buffer package (or
> >>>>>>> alternatively create a Drill version or wrapper).
> >>
>
>

Reply via email to