| 447 | |
| 448 | |
| 449 | Result<Option<Entry>> ZooKeeperStorageProcess::doGet(const string& name) |
| 450 | { |
| 451 | CHECK_NONE(error) << ": " << error.get(); |
| 452 | CHECK(state == CONNECTED); |
| 453 | |
| 454 | string result; |
| 455 | Stat stat; |
| 456 | |
| 457 | int code = zk->get(znode + "/" + name, false, &result, &stat); |
| 458 | |
| 459 | if (code == ZNONODE) { |
| 460 | return Option<Entry>::none(); |
| 461 | } else if (code == ZINVALIDSTATE || (code != ZOK && zk->retryable(code))) { |
| 462 | CHECK(zk->getState() != ZOO_AUTH_FAILED_STATE); |
| 463 | return None(); // Try again later. |
| 464 | } else if (code != ZOK) { |
| 465 | return Error( |
| 466 | "Failed to get '" + znode + "/" + name + |
| 467 | "' in ZooKeeper: " + zk->message(code)); |
| 468 | } |
| 469 | |
| 470 | google::protobuf::io::ArrayInputStream stream(result.data(), result.size()); |
| 471 | |
| 472 | Entry entry; |
| 473 | |
| 474 | if (!entry.ParseFromZeroCopyStream(&stream)) { |
| 475 | return Error("Failed to deserialize Entry"); |
| 476 | } |
| 477 | |
| 478 | return Some(entry); |
| 479 | } |
| 480 | |
| 481 | |
| 482 | Result<bool> ZooKeeperStorageProcess::doSet(const Entry& entry, |