Отбрасывание пространства клавиш Кассандры с помощью Java Processbuilder - PullRequest
0 голосов
/ 13 июня 2018

У меня есть сценарий оболочки очистки, который предназначен для удаления всех пространств клавиш Кассандры, кроме системных клавиш.Я могу выполнить сценарий оболочки, используя java processbuilder, но мой сценарий указывает на неправильное расположение cqlsh.py (автоматическое добавление буквы D: буква диска)

Примечание. Рабочее пространство моего проекта находится на диске D: окна.OS

файл cleanup.sh -

 #!/bin/bash
 hostname=$1

 echo "---------------------------"
 echo "   Clearing Cassandra with keyspaces"
 echo "---------------------------"

 echo -e "\nGet a list of all keyspaces that doesn't contain system prefix"
 keyspaces=$(echo desc keyspaces | cqlsh $hostname | xargs -n1 echo | grep -v ^system)

 echo -e "\nDropping all keyspaces that doesn't contain system prefix..."
 for ks in $keyspaces; do
    echo "drop keyspace $ks;" | cqlsh $hostname
    #echo Dropped "$ks"
 done
 echo -e "DONE"
 sleep 2

Это класс Java в моем проекте, который выполняет файл оболочки -

URL resource = ClassLoader.getSystemResource("cleanup.sh");
File resourceFile = Paths.get(resource.toURI()).toFile();
String resourceFilePath = resourceFile.getAbsolutePath();

String cmd[] = {"sh", resourceFilePath,"127.0.0.1"};
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);

Process proc = pb.start();

Но когда я выполняюЯва программа, я получаю следующую ошибку -

---------------------------
   Clearing Cassandra with keyspaces
---------------------------

Get a list of all keyspaces that doesn't contain system prefix
C:\Python27\python.exe: can't open file 'D:\c\Users\Dell\tools\apache-cassandra-2.2.6\bin/cqlsh.py': [Errno 2] No such file or directory

Dropping all keyspaces that doesn't contain system prefix...
DONE

Как вы можете видеть, он говорит, что не может открыть файл 'D: \ c \ Users \ Dell \ tools \ apache-cassandra-2.2.6 \ bin /cqlsh.py ': [Errno 2] Нет такого файла или каталога, если вы заметили путь к файлу, начинающийся с диска D: я думаю, это потому, что рабочее пространство моего проекта работает на диске D :.Так, как мне заставить это работать.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вместо того, чтобы полагаться на cqlsh, было бы проще и более портативно сделать это через драйвер Cassandra Java - просто получите список пространств ключей из Metadata класса и отбросьте все несистемные(если вы используете DSE, будьте осторожны, потому что есть системные пространства ключей с именем вроде dse_...).Код может выглядеть следующим образом (не проверено):

Metadata md = cluster.getMetadata();
List<KeyspaceMetadata> keyspaces = md.getKeyspaces();
for (KeyspaceMetadata ks: keyspaces) {
   if (ks.getName().startsWith("system"))
      continue;
   session.execute("drop keyspace " + ks.getName());
}
0 голосов
/ 13 июня 2018

Может быть, вы можете попробовать это: "D:\c\Users\Dell\tools\apache-cassandra-2.2.6\bin\cqlsh.py" или "D:\\c\\Users\\Dell\\tools\\apache-cassandra-2.2.6\\bin\\cqlsh.py" вместо: "D:\c\Users\Dell\tools\apache-cassandra-2.2.6\bin/cqlsh.py".В вашем выражении есть косая черта, а не обратная косая черта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...