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

Stefania commented on CASSANDRA-9635:
-------------------------------------

On 2.1 the {{die}} commit policy works as expected and the process terminates 
immediately. The {{stop}} policy leaves the main thread blocked but there is an 
error printed out:

{code}
ERROR 06:06:59 Failed managing commit log segments. Commit disk failure policy 
is stop; terminating thread
java.lang.IndexOutOfBoundsException: null
        at java.nio.Buffer.checkIndex(Buffer.java:546) ~[na:1.8.0_45]
        at java.nio.DirectByteBuffer.putInt(DirectByteBuffer.java:711) 
~[na:1.8.0_45]
        at 
org.apache.cassandra.db.commitlog.CommitLogDescriptor.writeHeader(CommitLogDescriptor.java:72)
 ~[main/:na]
        at 
org.apache.cassandra.db.commitlog.CommitLogSegment.<init>(CommitLogSegment.java:168)
 ~[main/:na]
        at 
org.apache.cassandra.db.commitlog.CommitLogSegment.freshSegment(CommitLogSegment.java:119)
 ~[main/:na]
        at 
org.apache.cassandra.db.commitlog.CommitLogSegmentManager$1.runMayThrow(CommitLogSegmentManager.java:119)
 ~[main/:na]
        at 
org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
[main/:na]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
{code}

The stack trace of the main thread is:

{code}
"main" #1 prio=5 os_prio=0 tid=0x00007efcf800c800 nid=0x4e93 waiting on 
condition [0x00007efcfe35e000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:304)
        at 
org.apache.cassandra.utils.concurrent.WaitQueue$AbstractSignal.awaitUninterruptibly(WaitQueue.java:283)
        at 
org.apache.cassandra.db.commitlog.CommitLogSegmentManager.advanceAllocatingFrom(CommitLogSegmentManager.java:271)
        at 
org.apache.cassandra.db.commitlog.CommitLogSegmentManager.allocatingFrom(CommitLogSegmentManager.java:203)
        at 
org.apache.cassandra.db.commitlog.CommitLog.getContext(CommitLog.java:166)
        at org.apache.cassandra.db.Memtable.<init>(Memtable.java:66)
        at org.apache.cassandra.db.DataTracker.init(DataTracker.java:372)
        at org.apache.cassandra.db.DataTracker.<init>(DataTracker.java:56)
        at 
org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:341)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:503)
        - locked <0x000000009f1b96c0> (a java.lang.Class for 
org.apache.cassandra.db.ColumnFamilyStore)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:474)
        at org.apache.cassandra.db.Keyspace.initCf(Keyspace.java:328)
        at org.apache.cassandra.db.Keyspace.<init>(Keyspace.java:279)
        at org.apache.cassandra.db.Keyspace.open(Keyspace.java:121)
        - locked <0x000000009f1f6080> (a java.lang.Class for 
org.apache.cassandra.db.Keyspace)
        at org.apache.cassandra.db.Keyspace.open(Keyspace.java:98)
        at 
org.apache.cassandra.db.SystemKeyspace.checkHealth(SystemKeyspace.java:599)
        at 
org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:284)
        at 
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:524)
        at 
org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:613)

   Locked ownable synchronizers:
        - None
{code}

I was incorrect to say that there is a static deadlock, it's just the main 
thread is blocked during initialization, nothing else.

Given that there is an error printed out, I think we should leave it as is. cc 
[~jbellis] and [~blambov]

Should we ever need to support 2.0, there is an incomplete patch 
[here|https://github.com/stef1927/cassandra/commits/9635-2.0]. In addition to 
backporting the die policy, there is indeed a static deadlock when initializing 
{{CommitLog}}, the solution is to move {{handleCommitFailure}} to a different 
class, e.g. a standalone class.

> Silent startup failure with filesystem that does not support mmap
> -----------------------------------------------------------------
>
>                 Key: CASSANDRA-9635
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9635
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>            Reporter: Kevin McLaughlin
>            Assignee: Stefania
>             Fix For: 2.1.x
>
>         Attachments: c_tdump.txt
>
>
> C* version 2.0.9.
> When running C* in virtualbox on OS X via boot2docker with the data directory 
> on a shared volume from the host system (vboxfs), C* fails to start without 
> printing any errors.
> I do not know if C* is supposed to support filesystems that do not support 
> mmap (does not appear so), however, I think the failure exposes a static 
> initialization deadlock 
> (http://ternarysearch.blogspot.ru/2013/07/static-initialization-deadlock.html).
> I believe the virtualbox "bug" is https://www.virtualbox.org/ticket/819.
> Stacktrace of the deadlock is attached.  When placing a t.printStackTrace() 
> between lines 115 and 116 in 
> https://github.com/apache/cassandra/blob/cassandra-2.0.9/src/java/org/apache/cassandra/db/commitlog/CommitLogAllocator.java,
>  the stack trace at startup is:
> {quote}
> DEBUG 21:16:54,716 Creating new commit log segment 
> /var/lib/cassandra/commitlog/CommitLog-3-1435007814714.log
> FSWriteError in /var/lib/cassandra/commitlog/CommitLog-3-1435007814714.log
>     at 
> org.apache.cassandra.db.commitlog.CommitLogSegment.<init>(CommitLogSegment.java:143)
>     at 
> org.apache.cassandra.db.commitlog.CommitLogSegment.freshSegment(CommitLogSegment.java:90)
>     at 
> org.apache.cassandra.db.commitlog.CommitLogAllocator.createFreshSegment(CommitLogAllocator.java:263)
>     at 
> org.apache.cassandra.db.commitlog.CommitLogAllocator.access$500(CommitLogAllocator.java:50)
>     at 
> org.apache.cassandra.db.commitlog.CommitLogAllocator$1.runMayThrow(CommitLogAllocator.java:109)
>     at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
>     at java.lang.Thread.run(Thread.java:745)
> Caused by: java.io.IOException: Invalid argument
>     at sun.nio.ch.FileChannelImpl.map0(Native Method)
>     at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:893)
>     at 
> org.apache.cassandra.db.commitlog.CommitLogSegment.<init>(CommitLogSegment.java:133)
>     ... 6 more
> {quote}



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

Reply via email to