2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 /* DEBUG: section 20 Storage Manager Swapin Functions */
13 #include "StatCounters.h"
15 #include "store_swapin.h"
16 #include "StoreClient.h"
18 static StoreIOState::STIOCB storeSwapInFileClosed
;
19 static StoreIOState::STFNCB storeSwapInFileNotify
;
22 storeSwapInStart(store_client
* sc
)
24 StoreEntry
*e
= sc
->entry
;
26 if (!EBIT_TEST(e
->flags
, ENTRY_VALIDATED
)) {
27 /* We're still reloading and haven't validated this entry yet */
31 if (e
->mem_status
!= NOT_IN_MEMORY
)
32 debugs(20, 3, HERE
<< "already IN_MEMORY");
34 debugs(20, 3, *e
<< " " << e
->getMD5Text());
37 debugs(20, DBG_IMPORTANT
, "BUG: Attempt to swap in a not-stored entry " << *e
<< ". Salvaged.");
41 if (e
->swapoutFailed()) {
42 debugs(20, DBG_IMPORTANT
, "BUG: Attempt to swap in a failed-to-store entry " << *e
<< ". Salvaged.");
46 assert(e
->mem_obj
!= NULL
);
47 sc
->swapin_sio
= storeOpen(e
, storeSwapInFileNotify
, storeSwapInFileClosed
, sc
);
51 storeSwapInFileClosed(void *data
, int errflag
, StoreIOState::Pointer
)
53 store_client
*sc
= (store_client
*)data
;
54 debugs(20, 3, "storeSwapInFileClosed: sio=" << sc
->swapin_sio
.getRaw() << ", errflag=" << errflag
);
55 sc
->swapin_sio
= NULL
;
57 if (sc
->_callback
.pending()) {
58 assert (errflag
<= 0);
59 sc
->callback(0, errflag
? true : false);
62 ++statCounter
.swap
.ins
;
66 storeSwapInFileNotify(void *data
, int, StoreIOState::Pointer
)
68 store_client
*sc
= (store_client
*)data
;
69 StoreEntry
*e
= sc
->entry
;
71 debugs(1, 3, "storeSwapInFileNotify: changing " << e
->swap_filen
<< "/" <<
72 e
->swap_dirn
<< " to " << sc
->swapin_sio
->swap_filen
<< "/" <<
73 sc
->swapin_sio
->swap_dirn
);
75 assert(e
->swap_filen
< 0); // if this fails, call SwapDir::disconnect(e)
76 e
->swap_filen
= sc
->swapin_sio
->swap_filen
;
77 e
->swap_dirn
= sc
->swapin_sio
->swap_dirn
;