[ https://issues.apache.org/jira/browse/HADOOP-10641?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14108989#comment-14108989 ]
Steve Loughran commented on HADOOP-10641: ----------------------------------------- Thank your for the really good TLA document —I do think it makes what's going on a lot clearer as now others can see strictly what implementations do. (It now places a requirement to me to do the same for my proposals, but I'm happy with that). It also places a requirement for me to look at the code alongside the spec, so here goes: h3. Algorithm # presumably usedIds aren't collected forever in common implementations, instead they use enough of a time marker in their IDs to be self-windowing. h3. core code # {{CoordinationEngine}} should extend Hadoop common's {{AbstractService}}; this makes it trivial to integrate with the lifecycle of YARN apps and when someone migrates the NN/DN to the lifecycle will hook to HDFS the same way. The init/start/stop operations all match. # {{ZKConfigKeys}} needs a name more tied to the coordination engine. # {{ZKCoordinationEngine}} could use guava {{Precondition}} as a check on {{localNodeId}} and move it up to the init method. # I don't like downgrading all ZK exceptions to "IOE", as it hides things like security exceptions, missing parents &c. Again this is something we could do that is more generic than just for the co-ord engine, as I've ended up doing some of this in my code. # {{ZKCoordinationEngine.loopLearningUntilCaughtUp()}} # {{createOrGetGlobalSequenceNumber}}'s {{while(true)}} loop appears to spin forever if the exception raised in its ZK actions is {{KeeperException.NoAuthException}}... that is, if starting on a secure cluster where it can't access the path. More filtering of exception types is needed with the unrecoverables thrown up ({{SessionExpiredException}} +maybe some others). # {{ZKCoordinationEngine.submitProposal()}}: needs better exception text, ideally including path and text of nested exception. # I'm not sure I like the way {{ZKCoordinationEngine.processImpl()}} shuts itself down. I'd prefer some exception for the caller to process, so that owner of the engine is in sync. # if an {{AgreementsThread}} fails its exception doesn't get picked up ... these need to be propagated back to the junit thread. Ideall also logged in that {{AgreementsThread}} after {{Thread.currentThread().setName()}} has given it a name for the log statements. h3. tests # MiniZKCluster ... I have the one from Twill converted to a YARN svc; this is is one i'd like to see this switch to *once the code is checked in*. It's lighter weight than the HBase one. # there's always a delay for ZK startup. Could you make the test cases start one as a @BeforeClass and all share the same one? # needs tests for failure conditions: no ZK cluster # if there's a way to do this, tests for against a secure cluster, both succeeding and failing. # add a test timeout via {{@Rule public final Timeout testTimeout = new Timeout(30000);}} h3. minor # minor: needs formatting to style, use of {} in all conditional clauses. # Can you use SLF4K everywhere -it's more efficient as can do string expansion only when needed & will stop people complaining that every log action needs to be wrapped by log-level checks. Then switch calls like {{LOG.info("Got watched event: " + watchedEvent)}} to {{LOG.info("Got watched event: {}", watchedEvent)}} h2. What now? I'm pretty happy with it —though more reviewers are needed. What now? # We commit {{hadoop-coordination}} with the implementation into Hadoop common, and work towards getting it into a version of the NN which can use it for committing operations; maybe later in YARN and downstream. # We work with the curator team to get it into curator and pull that into server-side Hadoop. YARN-913 is going to need that in the RM anyway, though so far HDFS hasn't. Strengths: lives with the rest of their ZK work. Weaknesses: looser coupling to Hadoop & a different release cycle. # it goes into a hadoop-zookeeper module that depends on ZK & Curator, and on which things which need these can depend on, including client-side code that wants it (ZK trickles out somehow already, pulling it apart would be cleaner). For example, my mini-ZK cluster as YARN service could be anothe service to add. Strategy 3 appeals to me : it's not that different from what is there today (indeed, we just fix the module name for now & add more features as/when needed) > Introduce Coordination Engine interface > --------------------------------------- > > Key: HADOOP-10641 > URL: https://issues.apache.org/jira/browse/HADOOP-10641 > Project: Hadoop Common > Issue Type: New Feature > Affects Versions: 3.0.0 > Reporter: Konstantin Shvachko > Assignee: Plamen Jeliazkov > Attachments: HADOOP-10641.patch, HADOOP-10641.patch, > HADOOP-10641.patch, HADOOP-10641.patch, HADOOP-10641.patch, > NNThroughputBenchmark Results.pdf, ce-tla.zip, hadoop-coordination.patch, > zkCEBenchmark.pdf, zkbench.pdf > > > Coordination Engine (CE) is a system, which allows to agree on a sequence of > events in a distributed system. In order to be reliable CE should be > distributed by itself. > Coordination Engine can be based on different algorithms (paxos, raft, 2PC, > zab) and have different implementations, depending on use cases, reliability, > availability, and performance requirements. > CE should have a common API, so that it could serve as a pluggable component > in different projects. The immediate beneficiaries are HDFS (HDFS-6469) and > HBase (HBASE-10909). > First implementation is proposed to be based on ZooKeeper. -- This message was sent by Atlassian JIRA (v6.2#6252)