00001 #ifndef __OFSPOSCQ_H__
00002 #define __OFSPOSCQ_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "XrdSys/XrdSysPthread.hh"
00016
00017 class XrdOss;
00018 class XrdSysError;
00019
00020 class XrdOfsPoscq
00021 {
00022 public:
00023
00024 struct Request
00025 {
00026 long long addT;
00027 char LFN[1024];
00028 char User[288];
00029 char Reserved[24];
00030 };
00031
00032 static const int ReqOffs = 64;
00033 static const int ReqSize = sizeof(Request);
00034
00035 struct recEnt
00036 {
00037 recEnt *Next;
00038 int Offset;
00039 int Mode;
00040 struct Request reqData;
00041 recEnt(struct Request &reqref, int mval, recEnt *nval=0)
00042 {Next = nval; Offset = 0; Mode = mval; reqData = reqref;}
00043 };
00044
00045 int Add(const char *Tident, const char *Lfn);
00046
00047 int Commit(const char *Lfn, int Offset);
00048
00049 int Del(const char *Lfn, int Offset, int Unlink=0);
00050
00051 recEnt *Init(int &Ok);
00052
00053 static recEnt *List(XrdSysError *Say, const char *theFN);
00054
00055 inline int Num() {return pocIQ;}
00056
00057 XrdOfsPoscq(XrdSysError *erp, XrdOss *oss, const char *fn);
00058 ~XrdOfsPoscq() {}
00059
00060 private:
00061 void FailIni(const char *lfn);
00062 int reqRead(void *Buff, int Offs);
00063 int reqWrite(void *Buff, int Bsz, int Offs);
00064 int ReWrite(recEnt *rP);
00065 int VerOffset(const char *Lfn, int Offset);
00066
00067 struct FileSlot
00068 {FileSlot *Next;
00069 int Offset;
00070 };
00071
00072 XrdSysMutex myMutex;
00073 XrdSysError *eDest;
00074 XrdOss *ossFS;
00075 FileSlot *SlotList;
00076 FileSlot *SlotLust;
00077 char *pocFN;
00078 int pocSZ;
00079 int pocFD;
00080 int pocIQ;
00081 };
00082 #endif