KRÓTKI
Cloudera złamał zookeeper 3.4.5-cdh5.4.0
w kilku miejscach. Usługa działa, ale interfejs CLI nie działa. Żadnego obejścia innego niż wycofanie.
LONG
Przypisywanie bounty na to ;-). Podszedłem również do tej miny i byłem na tyle zły, aby znaleźć przyczynę:
Zookeeper sprawdza podczas ZooKeeperMain.run()
. Istnieje blok try-catch, który ładuje liczbę klas. Każdy wyjątek podczas ładowania klasy nie działa w całości, a obsługa JLine jest wyłączona.
Ale o to, dlaczego tak się dzieje z CDH 5.4.0
:
Aktualny opensource Zookeeper-3.4.6
działa przeciwko jline-0.9.94
. Nie ma takiego problemu.
W CDH 5.4
Cloudera zastosował następujące patch:
[email protected]:$ diff zookeeper-3.4.5-cdh5.3.3/src/java/main/org/apache/zookeeper/ZooKeeperMain.java zookeeper-3.4.5-cdh5.4.0/src/java/main/org/apache/zookeeper/ZooKeeperMain.java
305,306c305,306
< Class consoleC = Class.forName("jline.ConsoleReader");
< Class completorC =
---
> Class consoleC = Class.forName("jline.ConsoleReader");
> Class completorC =
316,317c316,317
< Method addCompletor = consoleC.getMethod("addCompletor",
< Class.forName("jline.Completor"));
---
> Method addCompletor = consoleC.getMethod("addCompleter",
> Class.forName("jline.console.completer.Completer"));
CDH 5,4 wykorzystuje jline-2.11.jar
do zookeeper i ma jline.ConsoleReader
klasy (od 2.11
to to jline.console.ConsoleReader
).
Jline 0.9.94
z kolei nie ma jline.console.completer.Completer
.
Występuje niezgodność z istniejącym JLine. Każdy użytkownik Cloudera CDH 5.4
może uruchomić zookeeper-client
w swoim klastrze i znaleźć go nie działa.
Open source zookeeper-3.4.6
zależy od jline-0.9.94
, która nie ma takiego patches
. Nie wiem, dlaczego inżynierowie wykonali taką kopalnię.
Nie widzę czystej metody, aby to naprawić z 3.4.5-cdh5.4.0
. Byłem z zależnością 3.4.5-cdh5.3.3
, gdzie potrzebuję CLI i mam klastry produkcyjne.
- Wydawało mi się, że zarówno
jline-0.9.94.jar
, jak i jline.2.11.jar
w ścieżce klas dla zookeepera rozwiążą problem. Ale właśnie odkryli, że Cloudera zrobił kolejną "poprawkę" w ZK dla CDH 5.4.0, zmieniono nazwę na klasa org.apache.zookeeper.JLineZNodeCompletor
na org.apache.zookeeper.JLineZNodeCompleter
.
Ale oto kod z ZooKeeperMain.java
Class<?> completorC = Class.forName("org.apache.zookeeper.JLineZNodeCompletor");
I oczywiście meaan praktycznie nie jest możliwe, aby rozpocząć ZK CLI w CDH 5.4.0 właściwą drogę. Okropna praca. :-(
Zgłosiłem ten błąd dwa miesiące temu: https://issues.cloudera.org/browse/DISTRO-758 Niestety Cloudera jeszcze nie odpowiedział – JeroenHoek