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



No comments:

Post a Comment

Labels

Review (561) System Design (304) System Design - Review (196) Java (179) Coding (75) Interview-System Design (65) Interview (60) Book Notes (59) Coding - Review (59) to-do (45) Linux (40) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (29) Product Architecture (28) Big Data (27) Soft Skills (27) Concurrency (26) MultiThread (26) Miscs (25) Cracking Code Interview (24) Distributed (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) OOD Design (20) System Design - Practice (19) How to Ace Interview (16) Security (16) Algorithm (15) Brain Teaser (14) Google (14) Redis (14) Linux - Shell (13) Spark (13) Spring (13) Code Quality (12) How to (12) Interview-Database (12) Interview-Operating System (12) Tools (12) Architecture Principles (11) Company - LinkedIn (11) Solr (11) Testing (11) Resource (10) Search (10) Amazon (9) Cache (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Company - Uber (8) Interview - MultiThread (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Scalability (8) Cassandra (7) Company - Facebook (7) Design (7) Git (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Machine Learning (7) NoSQL (7) Trouble Shooting (7) C++ (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) API Design (4) Be Architect (4) Big Fata (4) C (4) Company Product Architecture (4) Data structures (4) Design Principles (4) Facebook (4) GeeksforGeeks (4) Generics (4) Google Interview (4) Hardware (4) JDK8 (4) Optimization (4) Product + Framework (4) Puzzles (4) Python (4) Shopping System (4) Source Code (4) Web Service (4) node.js (4) Back-of-Envelope (3) Company - Pinterest (3) Company - Twiiter (3) Company - Twitter (3) Consistent Hash (3) Elasticsearch (3) GOF (3) Game Design (3) GeoHash (3) Growth (3) Guava (3) Html (3) Interview-Big Data (3) Interview-Linux (3) Interview-Network (3) Java EE Patterns (3) Javarevisited (3) Map Reduce (3) Math - Probabilities (3) Performance (3) RateLimiter (3) Resource-System Desgin (3) Scala (3) UML (3) ZooKeeper (3) geeksquiz (3) AI (2) Advanced data structures (2) AngularJS (2) Behavior Question (2) Bugs (2) Chrome (2) Coding Interview (2) Company - Netflix (2) Crawler (2) Cross Data Center (2) Data Structure Design (2) Database-Shard (2) Debugging (2) Docker (2) Garbage Collection (2) Go (2) Hadoop (2) Interview - Soft Skills (2) Interview-Miscs (2) Interview-Web (2) JDK (2) Logging (2) POI (2) Papers (2) Programming (2) Project Practice (2) Random (2) Software Desgin (2) System Design - Feed (2) Thread Synchronization (2) Video (2) reddit (2) Ads (1) Algorithm - Review (1) Android (1) Approximate Algorithms (1) Base X (1) Bash (1) Books (1) C# (1) CSS (1) Client-Side (1) Cloud (1) CodingHorror (1) Company - Yelp (1) Counter (1) DSL (1) Dead Lock (1) Difficult Puzzles (1) Distributed ALgorithm (1) Eclipse (1) Facebook Interview (1) Function Design (1) Functional (1) GoLang (1) How to Solve Problems (1) ID Generation (1) IO (1) Important (1) Internals (1) Interview - Dropbox (1) Interview - Project Experience (1) Interview Stories (1) Interview Tips (1) Interview-Brain Teaser (1) Interview-How (1) Interview-Mics (1) Interview-Process (1) Java Review (1) Jeff Dean (1) Joda (1) LeetCode - Review (1) Library (1) LinkedIn (1) LintCode (1) Mac (1) Micro-Services (1) Mini System (1) MySQL (1) Nigix (1) NonBlock (1) Process (1) Productivity (1) Program Output (1) Programcreek (1) Quora (1) RPC (1) Raft (1) Reactive (1) Reading (1) Reading Code (1) Refactoring (1) Resource-Java (1) Resource-System Design (1) Resume (1) SQL (1) Sampling (1) Shuffle (1) Slide Window (1) Spotify (1) Stability (1) Storm (1) Summary (1) System Design - TODO (1) Tic Tac Toe (1) Time Management (1) Web Tools (1) algolist (1) corejavainterviewquestions (1) martin fowler (1) mitbbs (1)

Popular Posts