[
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]