Belle II Software  release-08-01-10
FileCatalog Class Reference

This class provides an interface to the file (metadata) catalog. More...

#include <FileCatalog.h>

Collaboration diagram for FileCatalog:

Public Member Functions

virtual bool registerFile (const std::string &fileName, FileMetaData &metaData, const std::string &oldLFN="")
 Register a file in the (local) file catalog. More...
 
virtual bool getMetaData (std::string &fileName, FileMetaData &metaData)
 Get the metadata of a file with given (logical) file name. More...
 
virtual std::string getPhysicalFileName (const std::string &lfn)
 Get the physical file name for the LFN. More...
 

Static Public Member Functions

static FileCatalogInstance ()
 Static method to get a reference to the FileCatalog instance. More...
 

Private Types

typedef std::map< std::string, std::pair< std::string, FileMetaData > > FileMap
 Map with file catalog content.
 

Private Member Functions

 FileCatalog ()
 Constructor: locate local database file.
 
bool readCatalog (FileMap &fileMap)
 Read the file catalog from the local file. More...
 
bool writeCatalog (const FileMap &fileMap)
 Write the file catalog to the local file. More...
 

Private Attributes

std::string m_fileName
 Name of the file catalog file.
 

Detailed Description

This class provides an interface to the file (metadata) catalog.

Definition at line 24 of file FileCatalog.h.

Member Function Documentation

◆ getMetaData()

bool getMetaData ( std::string &  fileName,
FileMetaData metaData 
)
virtual

Get the metadata of a file with given (logical) file name.

Parameters
fileNameThe (logical) name of the file. Will be set to the physical file name.
metaDataThe meta data information of the file.
Returns
True if the file was found in the catalog.

Definition at line 142 of file FileCatalog.cc.

143 {
144  metaData = FileMetaData();
145  if (m_fileName.empty()) return false;
146  if (!fs::exists(m_fileName)) return false;
147 
148  // get lock for read access to file catalog
149  FileSystem::Lock lock(m_fileName, true);
150  if (!lock.lock()) {
151  B2ERROR("Locking of file catalog " << m_fileName << " failed.");
152  return false;
153  }
154 
155  // read the file catalog
156  FileMap fileMap;
157  if (!readCatalog(fileMap)) {
158  B2ERROR("Failed to read file catalog " << m_fileName);
159  return false;
160  }
161 
162  // find the entry with given LFN
163  auto iEntry = fileMap.find(fileName);
164  if (iEntry != fileMap.end()) {
165  metaData = iEntry->second.second;
166  if (!iEntry->second.first.empty()) fileName = iEntry->second.first;
167  return true;
168  }
169  for (const auto& entry : fileMap) {
170  if (fileName.compare(entry.second.first) == 0) {
171  metaData = entry.second.second;
172  return true;
173  }
174  }
175 
176  return false;
177 }
std::map< std::string, std::pair< std::string, FileMetaData > > FileMap
Map with file catalog content.
Definition: FileCatalog.h:71
std::string m_fileName
Name of the file catalog file.
Definition: FileCatalog.h:89
bool readCatalog(FileMap &fileMap)
Read the file catalog from the local file.
Definition: FileCatalog.cc:54
Metadata information about a file.
Definition: FileMetaData.h:29
Helper class for locking a file.
Definition: FileSystem.h:97

◆ getPhysicalFileName()

std::string getPhysicalFileName ( const std::string &  lfn)
virtual

Get the physical file name for the LFN.

Parameters
lfnThe logical file name.
Returns
the physical file name or an empty string if the lfn is not in the catalog.

Definition at line 180 of file FileCatalog.cc.

◆ Instance()

FileCatalog & Instance ( )
static

Static method to get a reference to the FileCatalog instance.

Returns
A reference to an instance of this class.

Definition at line 23 of file FileCatalog.cc.

◆ readCatalog()

bool readCatalog ( FileCatalog::FileMap fileMap)
private

Read the file catalog from the local file.

Parameters
fileMapThe map of file catalog entries.
Returns
True if the catalog was read successfully.

Definition at line 54 of file FileCatalog.cc.

◆ registerFile()

bool registerFile ( const std::string &  fileName,
FileMetaData metaData,
const std::string &  oldLFN = "" 
)
virtual

Register a file in the (local) file catalog.

Parameters
fileNameThe name of the file to be registered.
metaDataThe meta data information of the file to be registered. Will be updated.
oldLFNIf not empty, update the file catalog: only register the file if the oldLFN is found in the catalog and if so, also remove any file with the old LFN from the catalog.
Returns
True if the registration succeeded.

Definition at line 90 of file FileCatalog.cc.

◆ writeCatalog()

bool writeCatalog ( const FileMap fileMap)
private

Write the file catalog to the local file.

Parameters
fileMapThe map of file catalog entries.
Returns
True if the catalog was written successfully.

Definition at line 77 of file FileCatalog.cc.


The documentation for this class was generated from the following files: