I agree with Jake that supporting values whose serialized size is larger
than 2G would be a big change.
Geode has a number of places in the implementation that use a byte array to
store the serialized object form and the maximum array length in Java is 2G.

On Mon, Jul 10, 2017 at 8:43 AM, Jacob Barrett <jbarr...@pivotal.io> wrote:

> Daniel,
>
> A change like this would be pretty deep and impact things like off heap and
> the network protocol.
>
> You really need to consider the problems with storing such large objects
> and ask yourself if you can do something different. Transferring a large
> object requires that it be serialized into memory first so a 2GB object
> requires 2GB of contiguous memory space for the byte[]. Allocating a 2GB
> array will always be done immediately in the old generation and very high
> probability result in a stop the world (STW) GC compaction event to
> defragment the memory enough to allocate it. Every JVM that touches this
> object (clients, primary, secondaries) will be STW GC'ing on nearly every
> transmission of this object. If there are many of these objects on the
> server then STW compaction events may take longer than the server timeout
> and result in servers being ejected from the cluster. If auto
> recover/rebalancing is enabled this could cause other servers to be force
> to take on these large objects are result in them also entering a STW
> compaction event and they too could be ejected.
>
> I mention this because I have seen this happen with an application where
> they were trying to store 1GB objects. It is highly recommend that you
> restructure your objects into regions of smaller objects. Since it is
> likely your 2GB object isn't a single object but a relationship of many
> much smaller objects then this should be very easy to do.
>
> -Jake
>
>
> On Sat, Jul 8, 2017 at 11:13 PM Daniel Farcovich <
> daniel.farcov...@amdocs.com> wrote:
>
> > Raising this question again.
> >
> > Daniel
> >
> > From: Daniel Farcovich
> > Sent: Wednesday, July 05, 2017 1:26 PM
> > To: 'dev@geode.apache.org' <dev@geode.apache.org>
> > Subject: getSizeInBytes() return type
> >
> >
> > Hi,
> > We implement getSizeInBytes() in from Sizeable interface.
> > We have objects with size bigger than MAXINT, bigger than 2GB.
> > What is the impact of refactoring the code to return long instead of int?
> > I mean except the technical aspect of changing the return types of the
> > calling functions etc.
> > Which mechanisms / functionalities will be affected from this change, I
> > know rebalancing will be affected for example.
> >
> > Thanks,
> > Daniel Farcovich
> >
> >
> > This message and the information contained herein is proprietary and
> > confidential and subject to the Amdocs policy statement,
> >
> > you may review at https://www.amdocs.com/about/email-disclaimer <
> > https://www.amdocs.com/about/email-disclaimer>
> >
>

Reply via email to