#ifndef __COSSSWAPDIR_H__
#define __COSSSWAPDIR_H__
+class StoreEntry;
+class CossSwapDir;
+class CossMemBuf;
+class DiskIOStrategy;
+class DiskIOModule;
+class ConfigOptionVector;
+class DiskFile;
+
#include "SwapDir.h"
-#include "StoreSearch.h"
+#include "DiskIO/IORequestor.h"
#ifndef COSS_MEMBUF_SZ
#define COSS_MEMBUF_SZ 1048576
#define COSS_ALLOC_ALLOCATE 1
#define COSS_ALLOC_REALLOC 2
-class CossSwapDir;
-
-
-class CossMemBuf;
-
-class DiskIOStrategy;
-
-class DiskIOModule;
-
-class ConfigOptionVector;
-#include "DiskIO/DiskFile.h"
-#include "DiskIO/IORequestor.h"
-
+/// \ingroup COSS
class CossSwapDir : public SwapDir, public IORequestor
{
virtual void dump(StoreEntry &)const;
~CossSwapDir();
virtual StoreSearch *search(String const url, HttpRequest *);
+ virtual bool unlinkdUseful() const;
virtual void unlink (StoreEntry &);
virtual void statfs (StoreEntry &)const;
- virtual int canStore(StoreEntry const &)const;
+ virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const;
virtual int callback();
virtual void sync();
virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
virtual void writeCleanDone();
virtual void logEntry(const StoreEntry & e, int op) const;
virtual void parse (int index, char *path);
- virtual void reconfigure (int, char *);
+ virtual void reconfigure();
+ virtual void swappedOut(const StoreEntry &e);
+ virtual uint64_t currentSize() const { return cur_size; }
+ virtual uint64_t currentCount() const { return n_disk_objects; }
/* internals */
virtual off_t storeCossFilenoToDiskOffset(sfileno);
virtual sfileno storeCossDiskOffsetToFileno(off_t);
dlink_list membufs;
CossMemBuf *current_membuf;
- size_t current_offset; /* in Blocks */
+ off_t current_offset; /* in Blocks */
int numcollisions;
dlink_list cossindex;
unsigned int blksz_bits;
unsigned int blksz_mask; /* just 1<<blksz_bits - 1*/
DiskIOStrategy *io;
RefCount<DiskFile> theFile;
- char *storeCossMemPointerFromDiskOffset(size_t offset, CossMemBuf ** mb);
+ char *storeCossMemPointerFromDiskOffset(off_t offset, CossMemBuf ** mb);
void storeCossMemBufUnlock(StoreIOState::Pointer);
- CossMemBuf *createMemBuf(size_t start, sfileno curfn, int *collision);
+ CossMemBuf *createMemBuf(off_t start, sfileno curfn, int *collision);
sfileno allocate(const StoreEntry * e, int which);
void startMembuf();
+ StoreEntry *addDiskRestore(const cache_key *const key,
+ int file_number,
+ uint64_t swap_file_sz,
+ time_t expires,
+ time_t timestamp,
+ time_t lastref,
+ time_t lastmod,
+ uint32_t refcount,
+ uint16_t flags,
+ int clean);
private:
void changeIO(DiskIOModule *module);
const char *ioModule;
mutable ConfigOptionVector *currentIOOptions;
const char *stripe_path;
+ uint64_t cur_size; ///< currently used space in the storage area
+ uint64_t n_disk_objects; ///< total number of objects stored
};
+/// \ingroup COSS
extern void storeCossAdd(CossSwapDir *, StoreEntry *);
+/// \ingroup COSS
extern void storeCossRemove(CossSwapDir *, StoreEntry *);
+/// \ingroup COSS
extern void storeCossStartMembuf(CossSwapDir * SD);
+#include "StoreSearch.h"
+
+/// \ingroup COSS
class StoreSearchCoss : public StoreSearch
{
~StoreSearchCoss();
/* Iterator API - garh, wrong place */
/* callback the client when a new StoreEntry is available
- * or an error occurs
+ * or an error occurs
*/
virtual void next(void (callback)(void *cbdata), void *cbdata);
/* return true if a new StoreEntry is immediately available */
virtual StoreEntry *currentItem();
private:
- CBDATA_CLASS2(StoreSearchCoss);
RefCount<CossSwapDir> sd;
void (*callback)(void *cbdata);
void *cbdata;
bool _done;
dlink_node * current;
dlink_node * next_;
+
+ CBDATA_CLASS2(StoreSearchCoss);
};
#endif