एक पथ "/ जड़/child1/child2/child3"ज़ूकीपर में पथ बनाने का सबसे प्रभावी तरीका जहां पथ के रूट तत्व मौजूद हो सकते हैं या नहीं हो सकते हैं?
चिड़ियाघर संचालक शायद इस का एक हिस्सा मौजूद है में कल्पना कीजिए कल्पना कीजिए, कहते हैं कि "/ जड़/child1"
"mkdir -p का कोई बराबर है "ज़ूकीपर में; इसके अलावा, यदि कोई भी ऑपरेशन विफल रहता है तो ZooKeeper.multi() विफल हो जाएगा, इसलिए "पथ बनाना" वास्तव में एक बहु कॉल में बेक नहीं किया जा सका। इसके अतिरिक्त, आप कुछ अन्य क्लाइंट को एक ही रास्ता बनाने की कोशिश कर सकते हैं ...
यही वह तरीका है जो मैंने पथ बनाने के लिए किया है। मुझे आश्चर्य है कि क्या यह देखने के लायक है कि कोई हिस्सा मौजूद है या नहीं, मौजूदा() कॉल की राउंड ट्रिप को सहेजने के लिए।
//String[] pathParts new String[] { "root", "child1", "child2", "child3" };
public void savePath(String[] pathParts) {
if (zooKeeper.exists(pathString, false) != null) return;
StringBuilder path = new StringBuilder();
for (String pathElement : pathParts) {
path.append(UNIX_FILE_SEPARATOR).append(pathElement);
String pathString = path.toString();
try {
//bother with the exists call or not?
if (zooKeeper.exists(pathString, false) == null) {
zooKeeper.create(pathString, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
} catch (KeeperException e) {
if (e.code() != KeeperException.Code.NODEEXISTS)
throw e;
}
}
}
क्या यह करने के लिए सबसे कारगर तरीका हो सकता है? मान लीजिए कि ए) आप समय से पहले नहीं जानते कि कितना पथ पहले से मौजूद है और बी) कुछ अन्य ग्राहक एक ही पथ लिखने की कोशिश कर रहे हैं (और हम लॉकिंग से बचना चाहते हैं)।
अनुरोध 1 पर प्रतिक्रिया के लिए सर्वर का इंतजार किए बिना अपने पथ के सभी घटकों को बना सकते हैं कर सकते हैं का उपयोग कर सकते हैं इंस्टेंस वेरिएबल पथ में क्या शामिल है और पथपार्ट पैरामीटर को क्या पास किया जा रहा है इसका एक उदाहरण दें? कोड के बारे में कुछ उलझन में अपने संलग्न पथ के रूप में खुद को उलझन में डाल दिया। –
क्षमा करें - इसमें कुछ गलतियां थीं। अब तय किया गया है, कम या ज्यादा। – marathon