Wednesday, October 25, 2017

Zookeeper Misc



https://www.linkedin.com/pulse/zookeeper-ephemeral-znode-gotcha-narendra-kumar
if (client.checkExists().forPath(path) == null)
{
client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path);
}
The above code was creating a major problem in my code. When i used to restart my application, the ephemeral node will be deleted after some time as if my session had expired.
The reason for this behaviour was simple. Consider the following sequence of event :-
1. You start the application first time, new session session-A is established with zookeeper server. The above given if-condition evaluates to true which will result in session session-A creating the ephemeral znode for path path . session-A now owns the znode for path path .
2. you stop the service ungracefully. Session session-A is still active because you didnot get a chance to close() the zookeeper explicitly. zookeeper server will now expire this dangling session session-A after session timeout reaches( usually 40 seconds).
3. You started the service again quickly( less than 40 seconds after first start). New session session-B is established with zookeeper server. The above given if condition becomes false because the session session-A is still active. Your service started successfully but the session session-B does not own the znode for path path .
4. Zookeeper server expires the session-A after timeout and deletes all the ephemeral znodes owned by this session.
5. Now if your application tries to access znode for path path it will fail with the NoNodeException.
To avoid this error you can do two things:
1.Make sure your application first delete the znode and then create it .
Here is how it will look like:-

if(client.checkExists().forPath(path) != null)
{
try
{
client.delete().forPath(path);

}catch(NoNodeException e)
{
//swallow
}
}
client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path);

This way you will alway own the znode.

2. Add jvm shutdown hook to ensure closing the zookeeper as shown below

Runtime.getRuntime().addShutdownHook(
new Thread()
{
@Override
public void run()
{
client.close();

}

}
);

https://zookeeper.apache.org/doc/r3.1.2/zookeeperStarted.html
clientPort
the port to listen for client connections
https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.2/bk_reference/content/zookeeper-ports.html


https://stackoverflow.com/questions/3340756/can-i-recursively-create-a-path-in-zookeeper
Kazoo has an ensure_path(path) operation, although it isn't considered atomic. Using this would at least save you the need to write your own code for a recursive create.

https://www.tutorialspoint.com/zookeeper/zookeeper_cli.htm
https://community.hortonworks.com/articles/7081/best-practice-chroot-your-solr-cloud-in-zookeeper.html


Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts