assert(0);
}
-StoreIOState::StoreIOState(StoreIOState::STFNCB *cbFile, StoreIOState::STIOCB *cbIo, void *data) :
+StoreIOState::StoreIOState(StoreIOState::STIOCB *cbIo, void *data) :
swap_dirn(-1),
swap_filen(-1),
e(nullptr),
mode(O_BINARY),
offset_(0),
- file_callback(cbFile),
callback(cbIo),
callback_data(cbdataReference(data))
{
*/
typedef void STRCB(void *their_data, const char *buf, ssize_t len, StoreIOState::Pointer self);
- /*
- * STFNCB is the "store file number callback." It is called
- * when an underlying storage module has allocated the swap
- * file number and also indicates that the swap file has been
- * opened for reading or writing. STFNCB functions are passed
- * to storeCreate() and storeOpen(). Examples of STFNCB callbacks
- * are:
- * storeSwapInFileNotify
- * storeSwapOutFileNotify
- */
- typedef void STFNCB(void *their_data, int errflag, StoreIOState::Pointer self);
-
/*
* STIOCB is the "store close callback" for store files. It
* is called when the store file is closed. STIOCB functions
void *operator new (size_t amount);
void operator delete (void *address);
- StoreIOState(StoreIOState::STFNCB *cbFile, StoreIOState::STIOCB *cbIo, void *data);
+ StoreIOState(StoreIOState::STIOCB *, void *cbData);
~StoreIOState() override;
off_t offset() const {return offset_;}
StoreEntry *e; /* Need this so the FS layers can play god */
mode_t mode;
off_t offset_; ///< number of bytes written or read for this entry so far
- STFNCB *file_callback; // XXX: Unused. TODO: Remove.
STIOCB *callback;
void *callback_data;
} flags;
};
-StoreIOState::Pointer storeCreate(StoreEntry *, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
-StoreIOState::Pointer storeOpen(StoreEntry *, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
+StoreIOState::Pointer storeCreate(StoreEntry *, StoreIOState::STIOCB *, void *);
+StoreIOState::Pointer storeOpen(StoreEntry *, StoreIOState::STIOCB *, void *);
void storeClose(StoreIOState::Pointer, int how);
void storeRead(StoreIOState::Pointer, char *, size_t, off_t, StoreIOState::STRCB *, void *);
void storeIOWrite(StoreIOState::Pointer, char const *, size_t, off_t, FREE *);
{
reader = store->openStoreIO(
*update.entry,
- nullptr, // unused; see StoreIOState::file_callback
&NoteDoneReading,
this);
readMore("need swap entry metadata");
{
writer = store->createUpdateIO(
update,
- nullptr, // unused; see StoreIOState::file_callback
&NoteDoneWriting,
this);
Must(writer);
Rock::IoState::IoState(Rock::SwapDir::Pointer &aDir,
StoreEntry *anEntry,
- StoreIOState::STFNCB *cbFile,
StoreIOState::STIOCB *cbIo,
void *data) :
- StoreIOState(cbFile, cbIo, data),
+ StoreIOState(cbIo, data),
readableAnchor_(nullptr),
writeableAnchor_(nullptr),
splicingPoint(-1),
public:
typedef RefCount<IoState> Pointer;
- IoState(Rock::SwapDir::Pointer &aDir, StoreEntry *e, StoreIOState::STFNCB *cbFile, StoreIOState::STIOCB *cbIo, void *data);
+ IoState(Rock::SwapDir::Pointer &, StoreEntry *, StoreIOState::STIOCB *, void *cbData);
~IoState() override;
void file(const RefCount<DiskFile> &aFile);
}
StoreIOState::Pointer
-Rock::SwapDir::createStoreIO(StoreEntry &e, StoreIOState::STFNCB *cbFile, StoreIOState::STIOCB *cbIo, void *data)
+Rock::SwapDir::createStoreIO(StoreEntry &e, StoreIOState::STIOCB * const cbIo, void * const cbData)
{
if (!theFile || theFile->error()) {
debugs(47,4, theFile);
// If that does not happen, the entry will not decrement the read level!
Rock::SwapDir::Pointer self(this);
- IoState *sio = new IoState(self, &e, cbFile, cbIo, data);
+ IoState *sio = new IoState(self, &e, cbIo, cbData);
sio->swap_dirn = index;
sio->swap_filen = filen;
}
StoreIOState::Pointer
-Rock::SwapDir::createUpdateIO(const Ipc::StoreMapUpdate &update, StoreIOState::STFNCB *cbFile, StoreIOState::STIOCB *cbIo, void *data)
+Rock::SwapDir::createUpdateIO(const Ipc::StoreMapUpdate &update, StoreIOState::STIOCB *cbIo, void *data)
{
if (!theFile || theFile->error()) {
debugs(47,4, theFile);
Must(update.fresh.fileNo >= 0);
Rock::SwapDir::Pointer self(this);
- IoState *sio = new IoState(self, update.entry, cbFile, cbIo, data);
+ IoState *sio = new IoState(self, update.entry, cbIo, data);
sio->swap_dirn = index;
sio->swap_filen = update.fresh.fileNo;
// tries to open an old entry with swap_filen for reading
StoreIOState::Pointer
-Rock::SwapDir::openStoreIO(StoreEntry &e, StoreIOState::STFNCB *cbFile, StoreIOState::STIOCB *cbIo, void *data)
+Rock::SwapDir::openStoreIO(StoreEntry &e, StoreIOState::STIOCB * const cbIo, void * const cbData)
{
if (!theFile || theFile->error()) {
debugs(47,4, theFile);
return nullptr; // we were writing after all
Rock::SwapDir::Pointer self(this);
- IoState *sio = new IoState(self, &e, cbFile, cbIo, data);
+ IoState *sio = new IoState(self, &e, cbIo, cbData);
sio->swap_dirn = index;
sio->swap_filen = e.swap_filen;
ConfigOption *getOptionTree() const override;
bool allowOptionReconfigure(const char *const option) const override;
bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const override;
- StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
- StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
+ StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override;
+ StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override;
void maintain() override;
void diskFull() override;
void reference(StoreEntry &e) override;
int64_t diskOffsetLimit() const;
void updateHeadersOrThrow(Ipc::StoreMapUpdate &update);
- StoreIOState::Pointer createUpdateIO(const Ipc::StoreMapUpdate &update, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
+ StoreIOState::Pointer createUpdateIO(const Ipc::StoreMapUpdate &, StoreIOState::STIOCB *, void *);
void anchorEntry(StoreEntry &e, const sfileno filen, const Ipc::StoreMapAnchor &anchor);
/* ============= THE REAL UFS CODE ================ */
Fs::Ufs::UFSStoreState::UFSStoreState(SwapDir * SD, StoreEntry * anEntry, STIOCB * cbIo, void *data) :
- StoreIOState(nullptr, cbIo, data),
+ StoreIOState(cbIo, data),
opening(false),
creating(false),
closing(false),
}
StoreIOState::Pointer
-Fs::Ufs::UFSStrategy::open(SwapDir * SD, StoreEntry * e, StoreIOState::STFNCB *,
+Fs::Ufs::UFSStrategy::open(SwapDir * const SD, StoreEntry * const e,
StoreIOState::STIOCB * aCallback, void *callback_data)
{
assert (((UFSSwapDir *)SD)->IO == this);
}
StoreIOState::Pointer
-Fs::Ufs::UFSStrategy::create(SwapDir * SD, StoreEntry * e, StoreIOState::STFNCB *,
+Fs::Ufs::UFSStrategy::create(SwapDir * const SD, StoreEntry * const e,
StoreIOState::STIOCB * aCallback, void *callback_data)
{
assert (((UFSSwapDir *)SD)->IO == this);
StoreIOState::Pointer createState(SwapDir *SD, StoreEntry *e, StoreIOState::STIOCB * callback, void *callback_data) const;
/* UFS specific */
virtual RefCount<DiskFile> newFile (char const *path);
- StoreIOState::Pointer open(SwapDir *, StoreEntry *, StoreIOState::STFNCB *,
- StoreIOState::STIOCB *, void *);
- StoreIOState::Pointer create(SwapDir *, StoreEntry *, StoreIOState::STFNCB *,
- StoreIOState::STIOCB *, void *);
+ StoreIOState::Pointer open(SwapDir *, StoreEntry *, StoreIOState::STIOCB *, void *);
+ StoreIOState::Pointer create(SwapDir *, StoreEntry *, StoreIOState::STIOCB *, void *);
virtual void unlinkFile (char const *);
virtual void sync();
}
StoreIOState::Pointer
-Fs::Ufs::UFSSwapDir::createStoreIO(StoreEntry &e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * aCallback, void *callback_data)
+Fs::Ufs::UFSSwapDir::createStoreIO(StoreEntry &e, StoreIOState::STIOCB * const aCallback, void * const callback_data)
{
- return IO->create (this, &e, file_callback, aCallback, callback_data);
+ return IO->create(this, &e, aCallback, callback_data);
}
StoreIOState::Pointer
-Fs::Ufs::UFSSwapDir::openStoreIO(StoreEntry &e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * aCallback, void *callback_data)
+Fs::Ufs::UFSSwapDir::openStoreIO(StoreEntry &e, StoreIOState::STIOCB * const aCallback, void * const callback_data)
{
- return IO->open (this, &e, file_callback, aCallback, callback_data);
+ return IO->open(this, &e, aCallback, callback_data);
}
int
bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const override;
void reference(StoreEntry &) override;
bool dereference(StoreEntry &) override;
- StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
- StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
+ StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override;
+ StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override;
void openLog() override;
void closeLog() override;
int writeCleanStart() override;
/// check whether we can store the entry; if we can, report current load
virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const = 0;
- virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) = 0;
- virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) = 0;
+ virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) = 0;
+ virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) = 0;
bool canLog(StoreEntry const &e)const;
virtual void openLog();
* to select different polices depending on object size or type.
*/
StoreIOState::Pointer
-storeCreate(StoreEntry * e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * close_callback, void *callback_data)
+storeCreate(StoreEntry * e, StoreIOState::STIOCB * close_callback, void *callback_data)
{
assert (e);
}
/* Now that we have a fs to use, call its storeCreate function */
- StoreIOState::Pointer sio = sd->createStoreIO(*e, file_callback, close_callback, callback_data);
+ StoreIOState::Pointer sio = sd->createStoreIO(*e, close_callback, callback_data);
if (sio == nullptr)
++store_io_stats.create.create_fail;
* storeOpen() is purely for reading ..
*/
StoreIOState::Pointer
-storeOpen(StoreEntry * e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * callback,
+storeOpen(StoreEntry * e, StoreIOState::STIOCB * callback,
void *callback_data)
{
- return e->disk().openStoreIO(*e, file_callback, callback, callback_data);
+ return e->disk().openStoreIO(*e, callback, callback_data);
}
void
#include "StoreClient.h"
static StoreIOState::STIOCB storeSwapInFileClosed;
-static StoreIOState::STFNCB storeSwapInFileNotify;
void
storeSwapInStart(store_client * sc)
}
assert(e->mem_obj != nullptr);
- sc->swapin_sio = storeOpen(e, storeSwapInFileNotify, storeSwapInFileClosed, sc);
+ sc->swapin_sio = storeOpen(e, storeSwapInFileClosed, sc);
}
static void
++statCounter.swap.ins;
}
-static void
-storeSwapInFileNotify(void *data, int, StoreIOState::Pointer)
-{
- store_client *sc = (store_client *)data;
- StoreEntry *e = sc->entry;
-
- debugs(1, 3, "storeSwapInFileNotify: changing " << e->swap_filen << "/" <<
- e->swap_dirn << " to " << sc->swapin_sio->swap_filen << "/" <<
- sc->swapin_sio->swap_dirn);
-
- assert(e->swap_filen < 0); // if this fails, call SwapDir::disconnect(e)
- e->swap_filen = sc->swapin_sio->swap_filen;
- e->swap_dirn = sc->swapin_sio->swap_dirn;
-}
-
static void storeSwapOutStart(StoreEntry * e);
static StoreIOState::STIOCB storeSwapOutFileClosed;
-static StoreIOState::STFNCB storeSwapOutFileNotify;
// wrapper to cross C/C++ ABI boundary. xfree is extern "C" for libraries.
static void xfree_cppwrapper(void *x)
/* Create the swap file */
generic_cbdata *c = new generic_cbdata(e);
- sio = storeCreate(e, storeSwapOutFileNotify, storeSwapOutFileClosed, c);
+ sio = storeCreate(e, storeSwapOutFileClosed, c);
if (sio == nullptr) {
assert(!e->hasDisk());
storeIOWrite(mem->swapout.sio, buf, mem->swap_hdr_sz, 0, xfree_cppwrapper);
}
-/// XXX: unused, see a related StoreIOState::file_callback
-static void
-storeSwapOutFileNotify(void *, int, StoreIOState::Pointer)
-{
- assert(false);
-}
-
static bool
doPages(StoreEntry *anEntry)
{
}
StoreIOState::Pointer
-TestSwapDir::createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *)
+TestSwapDir::createStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *)
{
return nullptr;
}
StoreIOState::Pointer
-TestSwapDir::openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *)
+TestSwapDir::openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *)
{
return nullptr;
}
void init() override;
bool unlinkdUseful() const override;
bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const override;
- StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
- StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *) override;
+ StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override;
+ StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *) override;
void parse(int, char*) override;
void evictCached(StoreEntry &) override {}
void evictIfFound(const cache_key *) override {}