2016-03-08 59 views
0

在創建路徑時,我在下面的代碼中收到了NodeExists錯誤。Netflix策展人交易錯誤

CuratorTransaction transaction = curatorFramework.inTransaction(); 
transaction.create().forPath("/foo") 
     .and().create().forPath("/foo/123") 
     .and().create().forPath("/foo") 
     .and().commit(); 

因此,它試圖在第一次創建foo後再次創建foo。 有沒有什麼辦法可以在創建路徑時檢查事務的狀態,以便在事務/富創建存在時,它不會再創建。

回答

0

簡短的答案是否定的,不可能檢查您是否嘗試創建兩次路徑。原因是你將整個「blob」作爲一個事務處理給zookeeper,這在廣義上意味着每個操作都將同時完成。

有解決這個至少兩種不同的方式,無論您發送的每個操作作爲單獨的操作,並且在這種情況下,你可以這樣做:

if(curatorFramework.checkExists().forPath("/foo") == null){ 
    curatorFramework.create().forPath("/foo"); 
} 

或者,如果它是,它使用的交易你的應用程序非常重要您的應用程序必須控制它不會在一個事務中放置兩個衝突的操作。通過例如使用在路徑上索引的HashMap。

而在附註中,CuratorTransaction已棄用,因此您應該使用CuratorFramework.transaction()來代替。