#ifndef __CMS_CACHE__H
#define __CMS_CACHE__H
/******************************************************************************/
/* */
/* X r d C m s C a c h e . h h */
/* */
/* (c) 2007 by the Board of Trustees of the Leland Stanford, Jr., University */
/* All Rights Reserved */
/* Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Department of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include
#include "Xrd/XrdJob.hh"
#include "Xrd/XrdScheduler.hh"
#include "XrdCms/XrdCmsKey.hh"
#include "XrdCms/XrdCmsNash.hh"
#include "XrdCms/XrdCmsPList.hh"
#include "XrdSys/XrdSysPthread.hh"
#include "XrdCms/XrdCmsSelect.hh"
#include "XrdCms/XrdCmsTypes.hh"
class XrdCmsCache
{
public:
friend class XrdCmsCacheJob;
XrdCmsPList_Anchor Paths;
// AddFile() returns true if this is the first addition, false otherwise. See
// method for detailed information on processing.
//
int AddFile(XrdCmsSelect &Sel, SMask_t mask);
// DelFile() returns true if this is the last deletion, false otherwise
//
int DelFile(XrdCmsSelect &Sel, SMask_t mask);
// GetFile() returns true if we actually found the file
//
int GetFile(XrdCmsSelect &Sel, SMask_t mask);
// UnkFile() updates the unqueried vector and returns 1 upon success, 0 o/w.
//
int UnkFile(XrdCmsSelect &Sel, SMask_t mask);
// WT4File() adds a request to the callback queue and returns a 0 if added
// of a wait time to be returned to the client.
//
int WT4File(XrdCmsSelect &Sel, SMask_t mask);
void Bounce(SMask_t smask, int SNum);
void Drop(SMask_t mask, int SNum, int xHi);
int Init(int fxHold, int fxDelay, int fxQuery, int seFS, int nxHold);
void *TickTock();
static const int min_nxTime = 60;
XrdCmsCache() : okVec(0), Tick(8*60*60), Tock(0), BClock(0),
nilTMO(0),
DLTime(5), QDelay(5), Bhits(0), Bmiss(0), vecHi(-1),
isDFS(0)
{memset(Bounced, 0, sizeof(Bounced));
memset(Bhistory, 0, sizeof(Bhistory));
}
~XrdCmsCache() {} // Never gets deleted
private:
void Add2Q(XrdCmsRRQInfo *Info, XrdCmsKeyItem *cp, int selOpts);
void Dispatch(XrdCmsSelect &Sel, XrdCmsKeyItem *cinfo,
short roQ, short rwQ);
SMask_t getBVec(unsigned int todA, unsigned int &todB);
void Recycle(XrdCmsKeyItem *theList);
struct {SMask_t Vec;
unsigned int Start;
unsigned int End;
} Bhistory[XrdCmsKeyItem::TickRate];
XrdSysMutex myMutex;
XrdCmsNash CTable;
unsigned int Bounced[STMax];
SMask_t okVec;
unsigned int Tick;
unsigned int Tock;
unsigned int BClock;
int nilTMO;
int DLTime;
int QDelay;
int Bhits;
int Bmiss;
int vecHi;
int isDFS;
};
namespace XrdCms
{
extern XrdCmsCache Cache;
}
#endif