store_io.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3  *
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.
7  */
8 
9 #include "squid.h"
10 #include "MemObject.h"
11 #include "SquidConfig.h"
12 #include "Store.h"
13 #include "store/Disk.h"
14 #include "store/Disks.h"
15 
17 
18 /*
19  * submit a request to create a cache object for writing.
20  * The StoreEntry structure is sent as a hint to the filesystem
21  * to what will be stored in this object, to allow the filesystem
22  * to select different polices depending on object size or type.
23  */
25 storeCreate(StoreEntry * e, StoreIOState::STIOCB * close_callback, void *callback_data)
26 {
27  assert (e);
28 
30 
31  /*
32  * Pick the swapdir
33  * We assume that the header has been packed by now ..
34  */
35  const auto sd = Store::Disks::SelectSwapDir(e);
36 
37  if (!sd) {
38  debugs(20, 2, "storeCreate: no swapdirs for " << *e);
40  return nullptr;
41  }
42 
43  /* Now that we have a fs to use, call its storeCreate function */
44  StoreIOState::Pointer sio = sd->createStoreIO(*e, close_callback, callback_data);
45 
46  if (sio == nullptr)
48  else
50 
51  return sio;
52 }
53 
54 /*
55  * storeOpen() is purely for reading ..
56  */
59  void *callback_data)
60 {
61  return e->disk().openStoreIO(*e, callback, callback_data);
62 }
63 
64 void
66 {
67  if (sio->flags.closing) {
68  debugs(20,3, "storeClose: flags.closing already set, bailing");
69  return;
70  }
71 
72  sio->flags.closing = true;
73 
74  debugs(20,3, "storeClose: calling sio->close(" << how << ")");
75  sio->close(how);
76 }
77 
78 void
79 storeRead(StoreIOState::Pointer sio, char *buf, size_t size, off_t offset, StoreIOState::STRCB * callback, void *callback_data)
80 {
81  sio->read_(buf, size, offset, callback, callback_data);
82 }
83 
84 void
85 storeIOWrite(StoreIOState::Pointer sio, char const *buf, size_t size, off_t offset, FREE * free_func)
86 {
87  sio->write(buf,size,offset,free_func);
88 }
89 
void STRCB(void *their_data, const char *buf, ssize_t len, StoreIOState::Pointer self)
Definition: StoreIOState.h:29
void FREE(void *)
Definition: forward.h:37
void storeIOWrite(StoreIOState::Pointer sio, char const *buf, size_t size, off_t offset, FREE *free_func)
Definition: store_io.cc:85
struct StoreIoStats::@133 create
cache_dir selection and disk entry creation stats
static SwapDir * SelectSwapDir(const StoreEntry *)
Definition: Disks.cc:662
StoreIoStats store_io_stats
Definition: store_io.cc:16
void storeRead(StoreIOState::Pointer sio, char *buf, size_t size, off_t offset, StoreIOState::STRCB *callback, void *callback_data)
Definition: store_io.cc:79
virtual void close(int how)=0
finish or abort swapping per CloseHow
int size
Definition: ModDevPoll.cc:69
int select_fail
Definition: StoreStats.h:64
virtual void read_(char *buf, size_t size, off_t offset, STRCB *callback, void *callback_data)=0
#define assert(EX)
Definition: assert.h:17
Store statistics related to low-level I/O.
Definition: StoreStats.h:57
StoreIOState::Pointer storeCreate(StoreEntry *e, StoreIOState::STIOCB *close_callback, void *callback_data)
Definition: store_io.cc:25
StoreIOState::Pointer storeOpen(StoreEntry *e, StoreIOState::STIOCB *callback, void *callback_data)
Definition: store_io.cc:58
int create_fail
Definition: StoreStats.h:65
void STIOCB(void *their_data, int errflag, StoreIOState::Pointer self)
Definition: StoreIOState.h:39
void storeClose(StoreIOState::Pointer sio, int how)
Definition: store_io.cc:65
virtual bool write(char const *buf, size_t size, off_t offset, FREE *free_func)=0
Store::Disk & disk() const
the disk this entry is [being] cached on; asserts for entries w/o a disk
Definition: store.cc:1920
virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STIOCB *, void *)=0
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192
struct StoreIOState::@132 flags

 

Introduction

Documentation

Support

Miscellaneous