The Gaudi Framework  v29r0 (ff2e7097)
XMLCatalogTest.cpp
Go to the documentation of this file.
1 #include "XMLFileCatalog.h"
2 #include <cstdio>
3 #include <ctime>
4 #include <iostream>
5 #include <sstream>
6 
7 using namespace Gaudi;
8 
9 extern "C" int testXMLFileCatalogWrite( int argc, char** argv )
10 {
11  int nwrite = 10;
12  std::string fname = "file:test.xml";
13  if ( argc > 1 ) fname = argv[1];
14  if ( argc > 2 ) nwrite = ::atol( argv[2] );
15  XMLFileCatalog c( fname, nullptr );
16  c.init();
18  c.getFID( fids );
19  time_t start = time( nullptr );
20  for ( size_t n = fids.size(), i = n; i < n + nwrite; ++i ) {
22  if ( 0 == ( ( i - n ) % 10000 ) ) std::cout << i - n << std::endl;
23  std::string fid = c.createFID();
24  c.registerFID( fid );
25  txt << "PFN1_Test_" << i << ".dat";
26  c.registerPFN( fid, txt.str(), "ROOT" );
27  c.registerPFN( fid, txt.str(), "ROOT" );
28  txt.str( "" );
29  txt << "PFN2_Test_" << i << ".dat";
30  c.registerPFN( fid, txt.str(), "ROOT" );
31  txt.str( "" );
32  txt << "PFN3_Test_" << i << ".dat";
33  c.registerPFN( fid, txt.str(), "ROOT" );
34  txt.str( "" );
35  txt << "lfn1_Test_" << i << ".dat";
36  c.registerLFN( fid, txt.str() );
37  txt.str( "" );
38  txt << "lfn2_Test_" << i << ".dat";
39  c.registerLFN( fid, txt.str() );
40  txt.str( "" );
41  txt << "lfn3_Test_" << i << ".dat";
42  c.registerLFN( fid, txt.str() );
43  c.setMetaData( fid, "Name1", "Value1" );
44  c.setMetaData( fid, "Name1", "Value111" );
45  c.setMetaData( fid, "Name2", "Value2" );
46  c.setMetaData( fid, "Name3", "Value3" );
47  }
48  time_t end = time( nullptr ) - start;
49  std::cout << "Used " << end << " seconds."
50  << " corresponding to " << float( end ) / float( nwrite ) << " entries/second." << std::endl;
51  if ( c.dirty() ) {
52  c.commit();
53  time_t saved = time( nullptr ) - ( start + end );
54  std::cout << "Used " << saved << " seconds."
55  << " corresponding to " << float( saved ) / float( nwrite ) << " entries/second." << std::endl;
56  } else {
57  std::cout << "Error: Catalog is not dirty after inserting records." << std::endl;
58  return 1;
59  }
60  return 0;
61 }
62 
63 extern "C" int testXMLFileCatalogRead( int argc, char** argv )
64 {
66  std::string fname = "file:test.xml";
67  if ( argc > 1 ) fname = argv[1];
68  bool prt = argc < 2;
69  time_t start = time( nullptr );
70  XMLFileCatalog c( fname, nullptr );
71  c.init();
72  std::cout << "File loaded in " << time( nullptr ) - start << " seconds. " << std::endl;
73  start = time( nullptr );
74  c.getFID( fids );
75  std::cout << "FIDs scanned in " << time( nullptr ) - start << " seconds. " << std::endl;
76  start = time( nullptr );
77  size_t mult = prt ? 1 : 10;
78  std::cout << mult * fids.size() << std::endl;
79  for ( size_t i = 0, tot = ( mult * fids.size() ); i < tot; ++i ) {
80  size_t ent = i % fids.size();
81  if ( ent == 0 ) std::cout << i << std::endl;
82  std::string fid = fids[ent];
83  XMLFileCatalog::Files pfn, lfn;
84  XMLFileCatalog::Attributes attrs;
85  c.getLFN( fid, lfn );
86  for ( auto& elem : lfn ) {
87  if ( !c.existsLFN( elem.first ) ) {
88  std::cout << "Error LFN existence of :" << elem.second << std::endl;
89  return 1;
90  }
91  std::string f = c.lookupLFN( elem.first );
92  if ( f != fid ) {
93  std::cout << "Error LFN lookup of :" << elem.second << std::endl;
94  return 1;
95  }
96  }
97  c.getPFN( fid, pfn );
98  for ( auto& elem : pfn ) {
99  if ( !c.existsPFN( elem.first ) ) {
100  std::cout << "Error PFN existence of :" << elem.second << std::endl;
101  return 1;
102  }
103  std::string f = c.lookupPFN( elem.first );
104  if ( f != fid ) {
105  std::cout << "Error PFN lookup of :" << elem.second << std::endl;
106  return 1;
107  }
108  }
109  c.getMetaData( fid, attrs );
110  size_t n = lfn.size() > pfn.size() ? lfn.size() : pfn.size();
111  n = n > attrs.size() ? n : attrs.size();
112  if ( prt ) {
113  std::cout << "FID:" << fid << std::endl;
114  for ( size_t j = 0; j < n; ++j ) {
115  if ( j < lfn.size() )
116  std::cout << lfn[j].first << " ";
117  else
118  std::cout << " ";
119  if ( j < pfn.size() )
120  std::cout << pfn[j].first << " ";
121  else
122  std::cout << " ";
123  if ( j < attrs.size() )
124  std::cout << attrs[j].first << " " << attrs[j].second << " ";
125  else
126  std::cout << " ";
127  std::cout << std::endl;
128  }
129  }
130  }
131  time_t end = time( nullptr ) - start;
132  std::cout << "Used " << end << " seconds (" << (long)fids.size() * mult << " entries)."
133  << " Corresponding to " << float( end ) / float( fids.size() * mult ) << " entries/second." << std::endl;
134  return 0;
135 }
void registerPFN(CSTR fid, CSTR pfn, CSTR ftype) const override
Create a FileID and Node of the physical file name with all the attributes.
std::string lookupPFN(CSTR fid) const override
Lookup file identifier by physical file name.
list argv
Definition: gaudirun.py:235
T endl(T...args)
constexpr double second
STL class.
std::string lookupLFN(CSTR lfn) const override
Lookup file identifier by logical file name.
bool existsPFN(CSTR pfn) const override
Return the status of a physical file name.
void getMetaData(CSTR fid, Attributes &attr) const override
Dump all MetaData of the catalog for a given file ID.
start
Definition: IOTest.py:99
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:64
bool existsLFN(CSTR lfn) const override
Return the status of a logical file name.
void getLFN(CSTR fid, Files &files) const override
Dump all logical file names of the catalog associate to the FileID.
T size(T...args)
void setMetaData(CSTR fid, CSTR name, CSTR value) const override
Insert/update metadata item.
void registerLFN(CSTR fid, CSTR lfn) const override
Create a FileID and Node of the logical file name with all the attributes.
void commit() override
Save DOM catalog to file.
int testXMLFileCatalogWrite(int argc, char **argv)
void init() override
Parse the DOM tree of the XML catalog.
void registerFID(CSTR fid) const override
Create a FileID and Node.
void getPFN(CSTR fid, Files &files) const override
Dump all physical file names of the catalog and their attributes associate to the FileID...
This class constitutes the core of the XML based FileCatalog API for POOL.
bool dirty() const override
Check if the catalog should be updated.
std::string createFID() const override
Catalog interface.
int testXMLFileCatalogRead(int argc, char **argv)
Helper functions to set/get the application return code.
Definition: __init__.py:1
void getFID(Strings &fids) const override
Dump all file Identifiers.