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

Stefan Miklosovic commented on CASSANDRA-19779:
-----------------------------------------------

I renamed this ticket because it is actually more serious than I was thinking. 

The problem is that when a node starts on the very first time, there are no 
directories yet in data/ dir (where commitlog, hints ... are). These 
directories are created AFTER the logic in 
DatabaseDescriptor.resolveCommitLogWriteDiskAccessMode(mode) is called. One can 
see this in the log when a node is started for the first time:

{code}
WARN  [main] 2024-07-26 15:09:55,473 DatabaseDescriptor.java:1461 - Unable to 
determine block size for commit log directory: null
{code}

That means "directIOSupported" will stay to be "false" because that commit log 
dir does not exist hence it means that this (2) will evaluate to "legacy" on 
the first boot.

So when "commitlog_disk_access_mode" is set to "auto" on the first boot, then 
it will change it to "legacy" just because there is no commit log dir present. 
On the next boot, it will switch that to "direct".

(1) 
https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1463-L1470
(2) 
https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1478


> direct IO support is always evaluated to false upon the very first start of a 
> node
> ----------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-19779
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-19779
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Legacy/Tools
>            Reporter: Stefan Miklosovic
>            Assignee: Stefan Miklosovic
>            Priority: Normal
>             Fix For: 5.x
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When I extract the distribution tarball and I want to use tools in tools/bin, 
> there is this warn log visible every time for tools when they are started 
> (does not happen on "help" command, obviously)
> {code:java}
> WARN  14:25:11,835 Unable to determine block size for commit log directory: 
> null {code}
> This is because we introduced this (1) in CASSANDRA-18464
> What that does is that it will go and try to create a temporary file in 
> commit log directory to get "block size" for a "file store" that file is in.
> The problem with that is that when we just extract a tarball and run the 
> tools - Cassandra was never started - then such commit log directory does not 
> exist yet, so it tries to create a temporary file in a non-existing 
> directory, which fails, hence the log message.
> The fix is to check if commitlog dir exists and return / skip the resolution 
> of block size if it does not.
> Another approach might be to check if this is executed in the context of a 
> tool and skip it from resolution altogether. The problem with this is that 
> not all tools we have in bin/log call DatabaseDescriptor.
> toolInitialization() so we might combine these two.
> (1) 
> [https://github.com/apache/cassandra/blob/cassandra-5.0/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1455-L1462]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to