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