[
https://issues.apache.org/jira/browse/CASSANDRA-12478?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15440972#comment-15440972
]
Robert Stupp commented on CASSANDRA-12478:
------------------------------------------
Hint: before you rebase, check CASSANDRA-12550 - the new methods in {{Config}}
are moved to {{DatabaseDescriptor}} and the existing {{set/isClientMode()}} are
deprecated. The cleanest way would be to use client mode - i.e. call
{{DatabaseDescriptor.clientInitialization()}} (Config.setClientMode(true) is
not sufficient).
Want to note, that using {{QueryProcessor}} class is not the right way IMO
since QP itself has some implicit dependencies (in the static initializer and
via class dependencies). However, if the reason is just to get the keyspace and
table name, you can directly use
{{CQLFragmentParser.parseAnyUnhandled(CqlParser::query, queryStr);}} as in
{{QueryProcessor.parseStatement}} - that's much cleaner and should have no
"evil" dependencies (i.e. threads, file system, etc).
To clarify the different init modes in DD: client just gets an empty {{Config}}
object, tools gets most of the stuff and is intended for stuff like sstable
tools, daemon is, well, for the daemon.
If you want to ensure, that stress does not start threads or initializes stuff
like commit-log-handling, you could add a new utest for stress using the
{{ToolsTester}} class and do something like in the following code snippet (not
tested). This helps to ensure that no unwanted stuff ist initialized/started.
{code}
@RunWith(OrderedJUnit4ClassRunner.class)
public class StressToolTest extends ToolsTester
{
@Test
public void testSSTableExpiredBlockers_NoArgs()
{
runTool(1, "org.apache.cassandra.stress.Stress", <add command line
parameters here>);
assertNoUnexpectedThreadsStarted(null, null); // may need to add some
thread name regex, if stress starts threads depending on cl args
assertSchemaNotLoaded();
assertCLSMNotLoaded();
assertSystemKSNotLoaded();
assertKeyspaceNotLoaded();
assertServerNotLoaded();
}
{code}
> cassandra stress still uses CFMetaData.compile()
> ------------------------------------------------
>
> Key: CASSANDRA-12478
> URL: https://issues.apache.org/jira/browse/CASSANDRA-12478
> Project: Cassandra
> Issue Type: Bug
> Components: Tools
> Reporter: Denis Ranger
> Labels: stress
> Fix For: 3.0.x
>
> Attachments:
> 0001-Replaced-using-CFMetaData.compile-in-cassandra-stres.patch
>
>
> Using CFMetaData.compile() on a client tool causes permission problems. To
> reproduce:
> * Start cassandra under user _cassandra_
> * Run {{chmod -R go-rwx /var/lib/cassandra}} to deny access to other users.
> * Use a non-root user to run {{cassandra-stress}}
> This produces an access denied message on {{/var/lib/cassandra/commitlog}}.
> The attached fix uses client-mode functionality.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)