cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "graham sanderson (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-8325) Cassandra 2.1.x fails to start on FreeBSD (JVM crash)
Date Tue, 25 Nov 2014 16:02:13 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-8325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14224734#comment-14224734
] 

graham sanderson commented on CASSANDRA-8325:
---------------------------------------------

Well that was a good guess ;-)

So {{unsafe.getByte(null, address)}} and {{unsafe.getByte(address)}} are not documented to
be the same, but do seem to be on most platforms

However from getInt() docs:

{code}
     * This method refers to a variable by means of two parameters, and so
     * it provides (in effect) a <em>double-register</em> addressing mode
     * for Java variables.  When the object reference is null, this method
     * uses its offset as an absolute address.  This is similar in operation
     * to methods such as {@link #getInt(long)}, which provide (in effect) a
     * <em>single-register</em> addressing mode for non-Java variables.
     * However, because Java variables may have a different layout in memory
     * from non-Java variables, programmers should not assume that these
     * two addressing modes are ever equivalent.  Also, programmers should
     * remember that offsets from the double-register addressing mode cannot
     * be portably confused with longs used in the single-register addressing
     * mode.
{code}

The why? Well you could look on FreeBSD OpenJDK mailing lists, or dig up the source - changes
to  {{hotspot/src/share/vm/opto/library_call.cpp}} may help. However this may not be a JVM
bug, it might just be a consequence of address space layout on FreeBSD. Things like -XX:+UseCompressedOps
and heap size <= or >= 32gig may have an effect.

Anyway, you might consider this a C* bug... sort of fuzzy there. If you're building C* yourself,
I'd start by changing (though it isn't necessarily the only effected method)

In FastByteOperations.UnsafeOperations, I'd change

{code}
        public static void copy(Object src, long srcOffset, byte[] trg, int trgPosition, int
length)
        {
            if (length <= MIN_COPY_THRESHOLD)
            {
                for (int i = 0 ; i < length ; i++)
                    trg[trgPosition + i] = theUnsafe.getByte(src, srcOffset + i);
            }
            else
            {
                copy(src, srcOffset, trg, BYTE_ARRAY_BASE_OFFSET + trgPosition, length);
            }
        }
{code}

to

{code}
        public static void copy(Object src, long srcOffset, byte[] trg, int trgPosition, int
length)
        {
            if (length <= MIN_COPY_THRESHOLD)
            {
                if (src == null)
                {
                    for (int i = 0 ; i < length ; i++)
                        trg[trgPosition + i] = theUnsafe.getByte(srcOffset + i);
                }
                else
                {
                    for (int i = 0 ; i < length ; i++)
                        trg[trgPosition + i] = theUnsafe.getByte(src, srcOffset + i);
                }
            }
            else
            {
                copy(src, srcOffset, trg, BYTE_ARRAY_BASE_OFFSET + trgPosition, length);
            }
        }
{code}




> Cassandra 2.1.x fails to start on FreeBSD (JVM crash)
> -----------------------------------------------------
>
>                 Key: CASSANDRA-8325
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8325
>             Project: Cassandra
>          Issue Type: Bug
>         Environment: FreeBSD 10.0 with openjdk version "1.7.0_71", 64-Bit Server VM
>            Reporter: Leonid Shalupov
>         Attachments: hs_err_pid1856.log, system.log
>
>
> See attached error file after JVM crash
> {quote}
> FreeBSD xxx.intellij.net 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59
UTC 2014     root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
> {quote}
> {quote}
>  % java -version
> openjdk version "1.7.0_71"
> OpenJDK Runtime Environment (build 1.7.0_71-b14)
> OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode)
> {quote}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message