Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

IOBuffer* Impala::Util::Database::GetIOBuffer ( CString  fileName,
bool  readMode,
bool  useMemoryIfLocal,
String  useLocalFileIfRemote,
Int64  useLocalSizeIfRemote = 0,
bool  useIOBufferChannel = false 
) [inline]

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:


Generated on Thu Jan 13 09:24:12 2011 for ImpalaSrc by  doxygen 1.5.1