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

Maxwell Guo commented on CASSANDRA-19779:
-----------------------------------------


{code:java}
          String commitLogLocation = getCommitLogLocation();

            if (commitLogLocation == null)
                throw new ConfigurationException("commitlog_directory must be 
specified", false);

            File commitLogLocationDir = new File(commitLogLocation);
            
PathUtils.createDirectoriesIfNotExists(commitLogLocationDir.toPath()); 
            directIOSupported = FileUtils.getBlockSize(commitLogLocationDir) > 
0;
        }
        catch (IOError | ConfigurationException ex)
        {
{code}

I see 
https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1930
 just create commitlog and use the method is 
"PathUtils.createDirectoriesIfNotExists". 
1、That is to say you got create twice if file not exists. So I want to say we 
should logging the operation for create the dir .
2、I seem that I  have missed something in my last review, 
In my mind, We should throw an exception if the user set the 
commitlog_disk_access_mode config to direct and directIOSupported set to false 
after the judgment below 

{code:java}
"FileUtils.getBlockSize(new File(getCommitLogLocation())) > 0" 
{code}

We should throw this error just before the system starts, instead of waiting 
for the system to officially accept reading and writing. 


> 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.0-rc
>
>          Time Spent: 40m
>  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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to