2016-03-01 12 views
11

Ich versuche, Apache Kurator mit einer dockerized zookeeper Instanz zu verwenden, und egal wie ich versuche, zu verbinden ich am Ende immer mit einemApache Fehler Curator Unimplemented beim Versuch zNodes erstellen

org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for...

Fehlern. Ich habe versucht, die Dokumentation zu verstehen, aber ich komme nicht weiter. Ich habe in den zookeeper CLI angemeldet und dafür gesorgt, die Portnummer ist richtig so:

[email protected]:~$ docker ps CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS NAMES 31f1093495ba  compose_zookeeper "/opt/zookeeper/bin/ 3 weeks ago   Up About a minute 0.0.0.0:32770->2181/tcp, 
0.0.0.0:32769->2888/tcp, 0.0.0.0:32768->3888/tcp zookeeper 

hier ist der Code Ich versuche zu verwenden:

public class App { 
    public static void main(String[] args) { 
     CuratorFramework client = CuratorFrameworkFactory.newClient("0.0.0.0:32770", new RetryUntilElapsed(3000, 1000)); 
     client.start(); 

      try { 
       client.create().forPath("/larry-smells/foop", "tuna?".getBytes()); 
      } catch (Exception e) { 
       System.out.println(e.toString()); 
      } 

    } 
} 

Soweit ich aus der sagen kann, Curator getting started page, sollte dies funktionieren. Was vermisse ich?

edit1 gerade herausgefunden, dass ich in der Lage Daten aus dem zookeeper Ensemble thusly ziehen:

System.out.println(new String(curatorFramework.getData().forPath("/larry-smells"))); 

aber der Befehl create noch Sprengung.

edit2

Stacktrace des Fehlers:

org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /larry-smells/foop at org.apache.zookeeper.KeeperException.create(KeeperException.java:103) at org.apache.zookeeper.KeeperException.create(KeeperException.java:51) at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:1297) at org.apache.curator.framework.imps.CreateBuilderImpl$17.call(CreateBuilderImpl.java:1040) at org.apache.curator.framework.imps.CreateBuilderImpl$17.call(CreateBuilderImpl.java:1023) at org.apache.curator.connection.StandardConnectionHandlingPolicy.callWithRetry(StandardConnectionHandlingPolicy.java:67) at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:99) at org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:1020) at org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:501) at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:491) at org.apache.curator.framework.imps.CreateBuilderImpl$4.forPath(CreateBuilderImpl.java:367) at org.apache.curator.framework.imps.CreateBuilderImpl$4.forPath(CreateBuilderImpl.java:309) at com.mycompany.app.App.main(App.java:35)

Antwort

27

Edit: Anscheinend dieser Fehler kann auftreten, wenn Sie die falsche Kombination von Kurator verwenden mit Zookeeper in Kombination. Von curator.apache.org:

Curator 2.x.x - compatible with both ZooKeeper 3.4.x and ZooKeeper 3.5.x

Curator 3.x.x - compatible only with ZooKeeper 3.5.x and includes support for new features such as dynamic reconfiguration, etc.


ist es schwer, Ihr Problem mit nur diesen Fehler-Code zu lokalisieren und nicht einen Stack-Trace, aber einige improvments würde ich vorschlagen, Ihre aplication stabiler zu machen:

public class App { 
    public static void main(String[] args) { 
     CuratorFramework client = CuratorFrameworkFactory.newClient("0.0.0.0:32770", new RetryUntilElapsed(3000, 1000)); 
     client.start(); 

     try { 
      //make sure you're connected to zookeeper. 
      client.blockUntilConnected(); 

      //Make sure the parants are created. 
      client.create().creatingParentsIfNeeded().forPath("/larry-smells/foop", "tuna?".getBytes()); 
     } catch (Exception e) { 
      System.out.println(e.toString()); 
      } 

    } 
} 
+0

gemacht Ihrer vorgeschlagenen Änderung und bekam gleiche Ergebnis. Ich habe auch den Stack-Trace zum Text der Frage hinzugefügt. –

+0

Doots - stellt sich heraus, ich bin ein Dink. Das Problem wurde in einer Warnung unten auf der Startseite der Kuratorin klargestellt, dass nur v2 mit Tierpflegerversionen <3.5.x verwendet werden sollte. Grundsätzlich habe ich bei RTFM versagt. Wenn du das in Form einer Antwort aufnimmst, akzeptiere ich es, damit du wenigstens ein paar Worte für deine Probleme bekommst :-) –

0

Das Problem wird aufgrund von Inkompatibilität verursacht.

Um dies zu beheben, müssen Sie die Version ändern, wie es hier erklärt ist:
https://curator.apache.org/zk-compatibility.html

Wenn dies nicht funktioniert, schauen Sie für die neueste Version Kuratorin, die auf einer 3.4.x zookeeper Version abhängt (derzeit '2.12.0').

0

@Massimo Da Ros Lösung funktioniert, aber in der neuen Version 4.0.0 Curator inTransaction ist veraltet, es recommented Verwendung transaction Verfahren wie unten:

CuratorOp op = client.transactionOp().create() 
      .withMode(CreateMode.PERSISTENT) 
      .withACL(Ids.OPEN_ACL_UNSAFE) 
      .forPath("/test", "Data".getBytes()); 
result = client.transaction().forOperations(op).get(0).toString();