#include "AliMDC.h"
-
ClassImp(AliMDC)
if (fRawDB->IsZombie()) {
delete fRawDB;
fRawDB = NULL;
- return 1;
+ return -1;
}
Info("Open", "Filling raw DB %s\n", fRawDB->GetDBName());
// Clean up HLT ESD for the next event
if (fESD) fESD->Reset();
- return nBytes;
+ if(nBytes >= 0)
+ return nBytes;
+ else
+ return kErrWriting;
}
//______________________________________________________________________________
{
// close the current raw DB file
- if (!fRawDB) return 1;
+ if (!fRawDB) return -1;
fRawDB->WriteStats(fStats);
fRunDB->Update(fStats);
+ Int_t filesize = fRawDB->Close();
delete fRawDB;
fRawDB = NULL;
delete fStats;
fStats = NULL;
- return 0;
+ return filesize;
}
//______________________________________________________________________________
}
Int_t result = ProcessEvent(event, !inputFile);
+ if(result < -1)
+ Error("Run", "error writing data. Error code: %d",result);
if (result >= 0) {
numEvents++;
public:
enum EWriteMode { kLOCAL, kRFIO, kROOTD, kCASTOR, kDEVNULL };
enum EFilterMode { kFilterOff, kFilterTransparent, kFilterOn };
- enum EErrorCode { kFilterReject = 0,
- kErrStartEndRun = -1,
+ enum EErrorCode { kErrStartEndRun = -1,
kErrHeader = -2,
kErrHeaderSize = -3,
kErrSubHeader = -4,
kErrDataSize = -5,
kErrEquipmentHeader = -6,
kErrEquipment = -7,
- kErrFileSize = -8 };
+ kErrFileSize = -8,
+ kFilterReject = -9,
+ kErrWriting = -10 };
AliMDC(Int_t compress, Bool_t deleteFiles,
EFilterMode filterMode = kFilterTransparent,
}
//______________________________________________________________________________
-void AliRawCastorDB::Close()
+Int_t AliRawCastorDB::Close()
{
// Close raw CASTOR/rootd DB.
- if (!fRawDB) return;
+ if (!fRawDB) return 0;
+
+ if (!fRawDB->IsOpen()) return 0;
fRawDB->cd();
// Write the tree.
- fTree->Write();
- if (fESDTree) fESDTree->Write();
+ Bool_t error = kFALSE;
+ if (fTree->Write() == 0)
+ error = kTRUE;
+ if (fESDTree)
+ if (fESDTree->Write() == 0)
+ error = kTRUE;
// Close DB, this also deletes the fTree
fRawDB->Close();
+ Int_t filesize = fRawDB->GetEND();
+
if (fDeleteFiles) {
TUrl u(fRawDB->GetName());
gSystem->Exec(Form("rfrm %s", u.GetFile()));
delete fRawDB;
fRawDB = 0;
+
+ if(!error)
+ return filesize;
+ else
+ return -1;
}
const char *GetOpenOption() const { return "-RECREATE"; }
Int_t GetNetopt() const { return 0; }
- void Close();
+ Int_t Close();
private:
const char *GetFileName() const;
{
// Create a new raw DB.
- const Int_t kMaxRetry = 200;
+ const Int_t kMaxRetry = 1;
const Int_t kMaxSleep = 1; // seconds
const Int_t kMaxSleepLong = 10; // seconds
Int_t retry = 0;
retry++;
fRawDB = TFile::Open(fname, GetOpenOption(),
- Form("ALICE MDC%d raw DB", kMDC), fCompress,
- GetNetopt());
+ Form("ALICE MDC%d raw DB", kMDC), fCompress,
+ GetNetopt());
if (!fRawDB) {
if (retry < kMaxRetry) {
Warning("Create", "failure to open file, sleeping %d %s before retrying...",
}
//______________________________________________________________________________
-void AliRawDB::Close()
+Int_t AliRawDB::Close()
{
// Close raw DB.
+ if (!fRawDB) return 0;
- if (!fRawDB) return;
+ if (!fRawDB->IsOpen()) return 0;
fRawDB->cd();
// Write the tree.
- fTree->Write();
- if (fESDTree) fESDTree->Write();
+ Bool_t error = kFALSE;
+ if (fTree->Write() == 0)
+ error = kTRUE;
+ if (fESDTree)
+ if (fESDTree->Write() == 0)
+ error = kTRUE;
// Close DB, this also deletes the fTree
fRawDB->Close();
+ Int_t filesize = fRawDB->GetEND();
+
if (fDeleteFiles) {
gSystem->Unlink(fRawDB->GetName());
delete fRawDB;
fRawDB = 0;
- return;
+ if(!error)
+ return filesize;
+ else
+ return -1;
}
// Create semaphore to say this file is finished
delete fRawDB;
fRawDB = 0;
+ if(!error)
+ return filesize;
+ else
+ return -1;
}
//______________________________________________________________________________
// Fill the trees and return the number of written bytes
Double_t bytes = fRawDB->GetBytesWritten();
- fTree->Fill();
- if (fESDTree) fESDTree->Fill();
- return Int_t(fRawDB->GetBytesWritten() - bytes);
+ Bool_t error = kFALSE;
+ if (fTree->Fill() == -1)
+ error = kTRUE;
+ if (fESDTree)
+ if (fESDTree->Fill() == -1)
+ error = kTRUE;
+ if(!error)
+ return Int_t(fRawDB->GetBytesWritten() - bytes);
+ else
+ return -1;
}
//______________________________________________________________________________
AliESD *esd,
Int_t compress,
const char* fileName = NULL);
- virtual ~AliRawDB() { Close(); }
+ virtual ~AliRawDB() { if(Close()==-1) Error("~AliRawDB", "cannot close output file!"); }
virtual const char *GetOpenOption() const { return "RECREATE"; }
virtual Int_t GetNetopt() const { return 0; }
virtual Bool_t Create(const char* fileName = NULL);
- virtual void Close();
+ virtual Int_t Close();
Int_t Fill();
Int_t GetTotalSize();
}
//______________________________________________________________________________
-void AliRawNullDB::Close()
+Int_t AliRawNullDB::Close()
{
// Close raw RFIO DB.
- if (!fRawDB) return;
+ if (!fRawDB) return 0;
+
+ if (!fRawDB->IsOpen()) return 0;
fRawDB->cd();
// Write the tree.
- fTree->Write();
- if (fESDTree) fESDTree->Write();
+ Bool_t error = kFALSE;
+ if (fTree->Write() == 0)
+ error = kTRUE;
+ if (fESDTree)
+ if (fESDTree->Write() == 0)
+ error = kTRUE;
// Close DB, this also deletes the fTree
fRawDB->Close();
+ Int_t filesize = fRawDB->GetEND();
+
delete fRawDB;
fRawDB = 0;
+ if(!error)
+ return filesize;
+ else
+ return -1;
}
const char* fileName);
~AliRawNullDB() { Close(); }
- void Close();
+ Int_t Close();
private:
const char *GetFileName() const;
}
//______________________________________________________________________________
-void AliRawRFIODB::Close()
+Int_t AliRawRFIODB::Close()
{
// Close raw RFIO DB.
- if (!fRawDB) return;
+ if (!fRawDB) return 0;
+
+ if (!fRawDB->IsOpen()) return 0;
fRawDB->cd();
// Write the tree.
- fTree->Write();
- if (fESDTree) fESDTree->Write();
+ Bool_t error = kFALSE;
+ if (fTree->Write() == 0)
+ error = kTRUE;
+ if (fESDTree)
+ if (fESDTree->Write() == 0)
+ error = kTRUE;
// Close DB, this also deletes the fTree
fRawDB->Close();
+ Int_t filesize = fRawDB->GetEND();
+
if (fDeleteFiles) {
TUrl u(fRawDB->GetName());
gSystem->Exec(Form("rfrm %s", u.GetFile()));
delete fRawDB;
fRawDB = 0;
+
+ if(!error)
+ return filesize;
+ else
+ return -1;
}
const char* fileName = NULL);
~AliRawRFIODB() { Close(); }
- void Close();
+ Int_t Close();
private:
const char *GetFileName() const;
}
//______________________________________________________________________________
-void AliRawRootdDB::Close()
+Int_t AliRawRootdDB::Close()
{
// Close raw rootd DB.
- if (!fRawDB) return;
+ if (!fRawDB) return 0;
+
+ if (!fRawDB->IsOpen()) return 0;
fRawDB->cd();
// Write the tree.
- fTree->Write();
- if (fESDTree) fESDTree->Write();
+ Bool_t error = kFALSE;
+ if (fTree->Write() == 0)
+ error = kTRUE;
+ if (fESDTree)
+ if (fESDTree->Write() == 0)
+ error = kTRUE;
// Close DB, this also deletes the fTree
fRawDB->Close();
+ Int_t filesize = fRawDB->GetEND();
+
#if 0
// can use services of TFTP
if (fDeleteFiles)
delete fRawDB;
fRawDB = 0;
+ if(!error)
+ return filesize;
+ else
+ return -1;
}
const char* fileName = NULL);
~AliRawRootdDB() { Close(); }
- void Close();
+ Int_t Close();
private:
const char *GetFileName() const;
// check that fs exists (crude check fails if fs is a file)
gSystem->MakeDirectory(localFS);
+ // Put wide read-write permissions
+ if(gSystem->Chmod(localFS,1023)) {
+ Error("AliRunDB","can't set permissions for run DB directory");
+ return;
+ }
+
strcpy(hostname, gSystem->HostName());
char *s;
fRunDB = new TFile(filename, "UPDATE");
else
fRunDB = new TFile(filename, "CREATE", Form("ALICE MDC%d Run DB", AliRawDB::kMDC));
+
+ // Put wide read-write permissions
+ if(gSystem->Chmod(filename,438)) {
+ Error("AliRunDB","can't set permissions for run DB file");
+ return;
+ }
}
//______________________________________________________________________________
fTagDB = 0;
return kFALSE;
}
+ // Put wide read-write permissions
+ if(gSystem->Chmod(name,438)) {
+ Error("Create", "can't set permissions for tag DB file");
+ fTagDB = 0;
+ return kFALSE;
+ }
// Create ROOT Tree object container
fTree = new TTree("TAG", Form("ALICE MDC%d header data tree", AliRawDB::kMDC));
const char* castorFS = castorStr.Data();
#endif
const char* rootdFS = "root://localhost//tmp/mdc1";
- const char* alienHost = "alien://aliens7.cern.ch:15000/?direct";
+ // const char* alienHost = "alien://aliens7.cern.ch:15000/?direct";
+ const char* alienHost = NULL;
const char* alienDir = "/alice_mdc/DC";
// User defined file system locations
AliLog::SetGlobalLogLevel(AliLog::kMaxType);
AliLog::SetGlobalDebugLevel(AliLog::kMaxType);
AliLog::SetPrintRepetitions(kFALSE);
+ AliLog::SetHandleRootMessages(kTRUE);
}