Refactored block loading order in StorageManager::loadBlockOrBlob.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/c5aa0412 Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/c5aa0412 Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/c5aa0412 Branch: refs/heads/dist-patch Commit: c5aa041270cd4db8ae9b71af70f325ebda855598 Parents: 09d6f73 Author: Zuyu Zhang <zu...@apache.org> Authored: Sat Feb 11 11:24:54 2017 -0800 Committer: Zuyu Zhang <zu...@apache.org> Committed: Fri Mar 3 04:14:37 2017 -0800 ---------------------------------------------------------------------- storage/StorageManager.cpp | 60 ++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/c5aa0412/storage/StorageManager.cpp ---------------------------------------------------------------------- diff --git a/storage/StorageManager.cpp b/storage/StorageManager.cpp index 94e1b67..b920c17 100644 --- a/storage/StorageManager.cpp +++ b/storage/StorageManager.cpp @@ -666,45 +666,43 @@ StorageManager::BlockHandle StorageManager::loadBlockOrBlob( // already loaded before this function gets called. BlockHandle loaded_handle; -#ifdef QUICKSTEP_DISTRIBUTED - // TODO(quickstep-team): Use a cost model to determine whether to load from - // a remote peer or the disk. - if (BlockIdUtil::Domain(block) != block_domain_) { - DLOG(INFO) << "Pulling Block " << BlockIdUtil::ToString(block) << " from a remote peer"; - const vector<string> peer_domain_network_addresses = getPeerDomainNetworkAddresses(block); - for (const string &peer_domain_network_address : peer_domain_network_addresses) { - DataExchangerClientAsync client( - grpc::CreateChannel(peer_domain_network_address, grpc::InsecureChannelCredentials()), - this); - - if (client.Pull(block, numa_node, &loaded_handle)) { - sendBlockLocationMessage(block, kAddBlockLocationMessage); - return loaded_handle; - } - } + const size_t num_slots = file_manager_->numSlots(block); + if (num_slots != 0) { + void *block_buffer = allocateSlots(num_slots, numa_node); - DLOG(INFO) << "Failed to pull Block " << BlockIdUtil::ToString(block) - << " from remote peers, so try to load from disk."; - } -#endif + const bool status = file_manager_->readBlockOrBlob(block, block_buffer, kSlotSizeBytes * num_slots); + CHECK(status) << "Failed to read block from persistent storage: " << block; - const size_t num_slots = file_manager_->numSlots(block); - DEBUG_ASSERT(num_slots != 0); - void *block_buffer = allocateSlots(num_slots, numa_node); + loaded_handle.block_memory = block_buffer; + loaded_handle.block_memory_size = num_slots; - const bool status = file_manager_->readBlockOrBlob(block, block_buffer, kSlotSizeBytes * num_slots); - CHECK(status) << "Failed to read block from persistent storage: " << block; +#ifdef QUICKSTEP_DISTRIBUTED + if (bus_) { + sendBlockLocationMessage(block, kAddBlockLocationMessage); + } +#endif - loaded_handle.block_memory = block_buffer; - loaded_handle.block_memory_size = num_slots; + return loaded_handle; + } #ifdef QUICKSTEP_DISTRIBUTED - if (bus_) { - sendBlockLocationMessage(block, kAddBlockLocationMessage); + // TODO(quickstep-team): Use a cost model to determine whether to load from + // a remote peer or the disk. + DLOG(INFO) << "Pulling Block " << BlockIdUtil::ToString(block) << " from a remote peer"; + const vector<string> peer_domain_network_addresses = getPeerDomainNetworkAddresses(block); + for (const string &peer_domain_network_address : peer_domain_network_addresses) { + DataExchangerClientAsync client( + grpc::CreateChannel(peer_domain_network_address, grpc::InsecureChannelCredentials()), + this); + + if (client.Pull(block, numa_node, &loaded_handle)) { + sendBlockLocationMessage(block, kAddBlockLocationMessage); + return loaded_handle; + } } + LOG(FATAL) << "Failed to pull Block " << BlockIdUtil::ToString(block) + << " from remote peers."; #endif - - return loaded_handle; } void StorageManager::insertBlockHandleAfterLoad(const block_id block,