Obtain an IOBuffer to read/write the given fileName. The function checks whether the data server should be used. The user has some control over the type of buffer returned via the other parameters: useMemoryIfLocal determines whether the buffer should be memory or file based in case there is no data server. In case there is a data server, useLocalFileIfRemote determines whether the buffer should be file based or memory based. In the latter case, useLocalSizeIfRemote determines the (fixed) size of the buffer. The SAFE way to use this function is. For a read mode buffer: GetIOBuffer(fileName, true, false, ""); For a write mode buffer: GetIOBuffer(fileName, false, false, "tmp"); The BEST way to use this function is. Read mode buffer: GetIOBuffer(fileName, true, false, "", 0, true); Write mode buffer: GetIOBuffer(fileName, false, false, "tmp", 0, true); Definition at line 201 of file Database.h. References Impala::FileNameTmp(), ILOG_DEBUG, mDataChannel, mDataServer, Impala::Util::ReadIOBufferFromChannel(), Impala::Util::IOBuffer::SetUseChannel(), and Impala::Util::IOBuffer::Valid(). Referenced by Impala::Util::DatabaseReadString(), Impala::Util::DatabaseWriteNative(), Impala::Util::DatabaseWriteString(), Impala::Core::Stream::RgbDataSrcInfo::GetInfoIOBuffer(), Impala::Core::VideoSet::ExportFrameHashes::HandleDoneFile(), Impala::Core::Database::RawDataSet::Init(), Impala::Core::Array::ImageArchiveFile::Init(), Impala::Core::Feature::LabelSet::Load(), main(), Impala::Core::VideoJob::Manager::Prepare(), Impala::Core::Table::Read(), Impala::Core::Column::Read(), Impala::Core::Array::ReadJpg(), Impala::Core::Array::ReadPgm(), Impala::Core::Feature::FeatureTable::ReadPlainAsciiFile(), Impala::Core::Array::ReadPng(), Impala::Core::Array::ReadRaw(), Impala::Core::Array::ReadRawArrayType(), Impala::Core::Array::ReadRawList(), Impala::Core::Array::ReadRawListVar(), Impala::Core::Array::ReadRawListVarIndex(), Impala::Core::Trec::TrecTopic::ReadTopics(), Impala::Core::Feature::LabelSet::Save(), Impala::Core::Database::RawDataSet::Save(), Impala::Application::ActiveLearnEngineQuids::SubmitRequest(), Impala::Application::ActiveLearnEngine::SubmitRequest(), Impala::Application::DataTransfer::TransferServerToLocal(), Impala::Core::VideoJob::Manager::UpdateMaskFile(), Impala::Core::VideoJob::Manager::UpdateVideoSet(), Impala::Core::Table::Write(), Impala::Core::Column::Write(), Impala::Core::Array::WriteJpg(), Impala::Core::Feature::FeatureTable::WritePlainAsciiFile(), Impala::Core::Array::WritePng(), Impala::Core::Array::WriteRaw(), Impala::Core::Array::WriteRawList(), Impala::Core::Array::WriteRawListVar(), Impala::Core::Feature::FeatureTable::WriteSvmFile(), and Impala::Core::VideoJob::Manager::WriteVideoSet(). 00204 { 00205 IOBuffer* res = 0; 00206 ILOG_DEBUG("GetIOBuffer [" << fileName << "]"); 00207 if (mDataChannel) 00208 { 00209 if (readMode) 00210 { 00211 if (useIOBufferChannel) 00212 { 00213 ILOG_DEBUG("GetIOBuffer: Read using Channel to " << 00214 mDataServer << ": " << fileName); 00215 res = new IOBufferChannel(fileName, true, mDataChannel); 00216 } 00217 else 00218 { 00219 ILOG_DEBUG("GetIOBuffer: Read using File: " << fileName); 00220 /* the race condition that occurs when someone passes in 00221 "tmp" while reading a file is very difficult to track 00222 down (only happens with MPI-jobs). Therefore, generate 00223 a temporary filename even in read mode */ 00224 if (useLocalFileIfRemote == "tmp") 00225 useLocalFileIfRemote = FileNameTmp(); 00226 res = ReadIOBufferFromChannel(mDataChannel, fileName, 00227 useLocalFileIfRemote); 00228 } 00229 } 00230 else 00231 { 00232 if (useIOBufferChannel) 00233 { 00234 ILOG_DEBUG("GetIOBuffer: Write using Channel " << fileName); 00235 res = new IOBufferChannel(fileName, false, mDataChannel); 00236 } 00237 else if (useLocalFileIfRemote.empty()) 00238 { 00239 ILOG_DEBUG("GetIOBuffer: Write using mem " << fileName); 00240 res = new IOBuffer(useLocalSizeIfRemote); 00241 } 00242 else 00243 { 00244 ILOG_DEBUG("GetIOBuffer: Write using File " << fileName); 00245 if (useLocalFileIfRemote == "tmp") 00246 useLocalFileIfRemote = FileNameTmp(); 00247 res = new IOBufferFile(useLocalFileIfRemote, false, false); 00248 } 00249 if (!useIOBufferChannel) 00250 res->SetUseChannel(mDataChannel, fileName, 00251 useLocalFileIfRemote); 00252 } 00253 } 00254 else 00255 { 00256 res = new IOBufferFile(fileName, readMode, useMemoryIfLocal); 00257 } 00258 00259 if (res) 00260 { 00261 if (!res->Valid()) 00262 { 00263 delete res; 00264 res = 0; 00265 } 00266 } 00267 return res; 00268 }
Here is the call graph for this function: ![]()
|