Store.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2018 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 #ifndef SQUID_STORE_H
10 #define SQUID_STORE_H
11 
12 #include "base/Packable.h"
13 #include "base/Range.h"
14 #include "base/RefCount.h"
15 #include "comm/forward.h"
16 #include "CommRead.h"
17 #include "hash.h"
18 #include "http/forward.h"
19 #include "http/RequestMethod.h"
20 #include "HttpReply.h"
21 #include "MemObject.h"
22 #include "RemovalPolicy.h"
23 #include "store/Controller.h"
24 #include "store/forward.h"
25 #include "store_key_md5.h"
26 #include "StoreIOBuffer.h"
27 #include "StoreStats.h"
28 
29 #if USE_SQUID_ESI
30 #include "esi/Element.h"
31 #endif
32 
33 #include <ostream>
34 
35 class AsyncCall;
36 class HttpRequest;
37 class RequestFlags;
38 
40 
41 class StoreEntry : public hash_link, public Packable
42 {
43 
44 public:
46  bool checkDeferRead(int fd) const;
47 
48  virtual const char *getMD5Text() const;
49  StoreEntry();
50  virtual ~StoreEntry();
51 
52  virtual HttpReply const *getReply() const;
53  virtual void write (StoreIOBuffer);
54 
60  virtual bool isEmpty() const {
61  assert (mem_obj);
62  return mem_obj->endOffset() == 0;
63  }
64  virtual bool isAccepting() const;
65  virtual size_t bytesWanted(Range<size_t> const aRange, bool ignoreDelayPool = false) const;
67  void lengthWentBad(const char *reason);
68  virtual void complete();
69  virtual store_client_t storeClientType() const;
70  virtual char const *getSerialisedMetaData();
72  void storeErrorResponse(HttpReply *reply);
73  void replaceHttpReply(HttpReply *, bool andStartWriting = true);
74  void startWriting();
75  virtual bool mayStartSwapOut();
77  virtual void trimMemory(const bool preserveSwappable);
78 
79  // called when a decision to cache in memory has been made
80  void memOutDecision(const bool willCacheInRam);
81  // called when a decision to cache on disk has been made
82  void swapOutDecision(const MemObject::SwapOut::Decision &decision);
83 
84  void abort();
85  bool makePublic(const KeyScope keyScope = ksDefault);
86  void makePrivate(const bool shareable);
90  void clearPrivate();
91  bool setPublicKey(const KeyScope keyScope = ksDefault);
95  void clearPublicKeyScope();
96 
98  const cache_key *publicKey() const {
99  return (!EBIT_TEST(flags, KEY_PRIVATE)) ?
100  reinterpret_cast<const cache_key*>(key): // may be nil
101  nullptr;
102  }
103 
107  void setPrivateKey(const bool shareable, const bool permanent);
108 
109  void expireNow();
112  void releaseRequest(const bool shareable = false);
113  void negativeCache();
114  bool cacheNegatively();
115  void invokeHandlers();
116  void cacheInMemory();
117  void swapOut();
119  bool swappingOut() const { return swap_status == SWAPOUT_WRITING; }
121  bool swappedOut() const { return swap_status == SWAPOUT_DONE; }
122  void swapOutFileClose(int how);
123  const char *url() const;
127  bool checkCachable();
128  int checkNegativeHit() const;
129  int locked() const;
130  int validToSend() const;
131  bool memoryCachable();
132 
135  void createMemObject();
136 
138  void createMemObject(const char *storeId, const char *logUri, const HttpRequestMethod &aMethod);
139 
141  void ensureMemObject(const char *storeId, const char *logUri, const HttpRequestMethod &aMethod);
142 
143  void dump(int debug_lvl) const;
144  void hashDelete();
145  void hashInsert(const cache_key *);
146  void registerAbort(STABH * cb, void *);
147  void reset();
149  bool timestampsSet();
150  void unregisterAbort();
151  void destroyMemObject();
152  int checkTooSmall();
153 
155 
156  void setNoDelay (bool const);
157  void lastModified(const time_t when) { lastModified_ = when; }
159  time_t lastModified() const {
160  // may still return -1 if timestamp is not set
161  return lastModified_ < 0 ? timestamp : lastModified_;
162  }
164  const char *describeTimestamps() const;
165  // TODO: consider removing currently unsupported imslen parameter
166  bool modifiedSince(const time_t ims, const int imslen = -1) const;
168  bool hasIfMatchEtag(const HttpRequest &request) const;
170  bool hasIfNoneMatchEtag(const HttpRequest &request) const;
172  bool hasEtag(ETag &etag) const;
173 
175  Store::Disk &disk() const;
178  bool hasDisk(const sdirno dirn = -1, const sfileno filen = -1) const;
181  void attachToDisk(const sdirno, const sfileno, const swap_status_t);
184  void detachFromDisk();
185 
187  bool hasTransients() const { return mem_obj && mem_obj->xitTable.index >= 0; }
189  bool hasMemStore() const { return mem_obj && mem_obj->memCache.index >= 0; }
190 
193  /* START OF ON-DISK STORE_META_STD TLV field */
194  time_t timestamp;
195  time_t lastref;
196  time_t expires;
197 private:
198  time_t lastModified_;
199 public:
200  uint64_t swap_file_sz;
201  uint16_t refcount;
202  uint16_t flags;
203  /* END OF ON-DISK STORE_META_STD */
204 
206  sfileno swap_filen:25; // keep in sync with SwapFilenMax
207 
209 
211 
213 
215 
217 
218 public:
219  static size_t inUseCount();
220  static void getPublicByRequestMethod(StoreClient * aClient, HttpRequest * request, const HttpRequestMethod& method);
221  static void getPublicByRequest(StoreClient * aClient, HttpRequest * request);
222  static void getPublic(StoreClient * aClient, const char *uri, const HttpRequestMethod& method);
223 
224  virtual bool isNull() {
225  return false;
226  };
227 
228  void *operator new(size_t byteCount);
229  void operator delete(void *address);
230 #if USE_SQUID_ESI
231 
233 #endif
234  virtual int64_t objectLen() const;
235  virtual int64_t contentLen() const;
236 
239  void lock(const char *context);
240 
243  int unlock(const char *context);
244 
246  int locks() const { return static_cast<int>(lock_count); }
247 
249  void touch();
250 
256  virtual void release(const bool shareable = false);
257 
262  void abandon(const char *context) { if (!locked()) doAbandon(context); }
263 
266  bool mayStartHitting() const {
268  }
269 
270 #if USE_ADAPTATION
271  void deferProducer(const AsyncCall::Pointer &producer);
274  void kickProducer();
275 #endif
276 
277  /* Packable API */
278  virtual void append(char const *, int);
279  virtual void vappendf(const char *, va_list);
280  virtual void buffer();
281  virtual void flush();
282 
283 protected:
285 
288  void checkDisk() const;
289 
290 private:
291  void doAbandon(const char *context);
292  bool checkTooBig() const;
293  void forcePublicKey(const cache_key *newkey);
294  StoreEntry *adjustVary();
295  const cache_key *calcPublicKey(const KeyScope keyScope);
296 
298 
299  unsigned short lock_count; /* Assume < 65536! */
300 
307 
308 #if USE_ADAPTATION
311 #endif
312 
313  bool validLength() const;
314  bool hasOneOfEtags(const String &reqETags, const bool allowWeakMatch) const;
315 
316  friend std::ostream &operator <<(std::ostream &os, const StoreEntry &e);
317 };
318 
319 std::ostream &operator <<(std::ostream &os, const StoreEntry &e);
320 
322 class NullStoreEntry:public StoreEntry
323 {
324 
325 public:
326  static NullStoreEntry *getInstance();
327  bool isNull() {
328  return true;
329  }
330 
331  const char *getMD5Text() const;
332  HttpReply const *getReply() const { return NULL; }
334 
335  bool isEmpty () const {return true;}
336 
337  virtual size_t bytesWanted(Range<size_t> const aRange, bool) const { return aRange.end; }
338 
339  void operator delete(void *address);
340  void complete() {}
341 
342 private:
344 
345  char const *getSerialisedMetaData();
346  virtual bool mayStartSwapOut() { return false; }
347 
348  void trimMemory(const bool) {}
349 
351 };
352 
354 typedef void (*STOREGETCLIENT) (StoreEntry *, void *cbdata);
355 
356 namespace Store {
357 
360 class EntryGuard {
361 public:
364  EntryGuard(Entry *entry, const char *context):
365  entry_(entry), context_(context) {
366  assert(!entry_ || entry_->locked());
367  }
368 
370  if (entry_) {
371  // something went wrong -- the caller did not unlockAndReset() us
372  onException();
373  }
374  }
375 
376  EntryGuard(EntryGuard &&) = delete; // no copying or moving (for now)
377 
380  Entry *get() {
381  return entry_;
382  }
383 
387  void unlockAndReset(const char *resetContext = nullptr) {
388  if (entry_) {
389  entry_->unlock(resetContext ? resetContext : context_);
390  entry_ = nullptr;
391  }
392  }
393 
394 private:
395  void onException() noexcept;
396 
397  Entry *entry_;
398  const char *context_;
399 };
400 
401 void Stats(StoreEntry *output);
402 void Maintain(void *unused);
403 }; // namespace Store
404 
406 size_t storeEntryInUse();
407 
409 const char *storeEntryFlags(const StoreEntry *);
410 
412 void storeEntryReplaceObject(StoreEntry *, HttpReply *);
413 
415 StoreEntry *storeGetPublic(const char *uri, const HttpRequestMethod& method);
416 
418 StoreEntry *storeGetPublicByRequest(HttpRequest * request, const KeyScope keyScope = ksDefault);
419 
421 StoreEntry *storeGetPublicByRequestMethod(HttpRequest * request, const HttpRequestMethod& method, const KeyScope keyScope = ksDefault);
422 
425 StoreEntry *storeCreateEntry(const char *, const char *, const RequestFlags &, const HttpRequestMethod&);
426 
429 StoreEntry *storeCreatePureEntry(const char *storeId, const char *logUrl, const HttpRequestMethod&);
430 
432 void storeInit(void);
433 
435 void storeConfigure(void);
436 
438 void storeFreeMemory(void);
439 
441 int expiresMoreThan(time_t, time_t);
442 
444 void storeAppendPrintf(StoreEntry *, const char *,...) PRINTF_FORMAT_ARG2;
445 
447 void storeAppendVPrintf(StoreEntry *, const char *, va_list ap);
448 
450 int storeTooManyDiskFilesOpen(void);
451 
453 void storeHeapPositionUpdate(StoreEntry *, SwapDir *);
454 
456 void storeSwapFileNumberSet(StoreEntry * e, sfileno filn);
457 
459 void storeFsInit(void);
460 
462 void storeFsDone(void);
463 
465 void storeReplAdd(const char *, REMOVALPOLICYCREATE *);
466 
471 extern FREE destroyStoreEntry;
472 
474 void storeGetMemSpace(int size);
475 
476 #endif /* SQUID_STORE_H */
477 
bool isNull()
Definition: Store.h:327
sdirno swap_dirn
Definition: Store.h:208
bool shareableWhenPrivate
Definition: Store.h:306
static MemAllocator * pool
Definition: Store.h:297
void detachFromDisk()
Definition: store.cc:2033
void storeAppendPrintf(StoreEntry *, const char *,...) PRINTF_FORMAT_ARG2
Definition: store.cc:898
virtual bool isAccepting() const
Definition: store.cc:2058
void makePrivate(const bool shareable)
Definition: store.cc:150
#define assert(EX)
Definition: assert.h:17
store_client_t storeClientType() const
Definition: Store.h:343
StoreEntry * storeGetPublic(const char *uri, const HttpRequestMethod &method)
Definition: store.cc:535
void const char HLPCB * callback
Definition: stub_helper.cc:16
void touch()
update last reference timestamp and related Store metadata
Definition: store.cc:443
static void getPublicByRequestMethod(StoreClient *aClient, HttpRequest *request, const HttpRequestMethod &method)
Definition: store.cc:499
store_status_t
Definition: enums.h:45
int validToSend() const
Definition: store.cc:1430
StoreEntry * storeCreatePureEntry(const char *storeId, const char *logUrl, const HttpRequestMethod &)
Definition: store.cc:777
virtual void release(const bool shareable=false)
Definition: store.cc:1206
int unlock(const char *context)
Definition: store.cc:461
Definition: ETag.h:17
Definition: cbdata.cc:60
void(* STOREGETCLIENT)(StoreEntry *, void *cbdata)
Definition: Store.h:354
int locks() const
returns a local concurrent use counter, for debugging
Definition: Store.h:246
virtual int64_t contentLen() const
Definition: store.cc:1678
EntryGuard(Entry *entry, const char *context)
Definition: Store.h:364
void storeEntryReplaceObject(StoreEntry *, HttpReply *)
bool timestampsSet()
Definition: store.cc:1470
virtual void append(char const *, int)
Appends a c-string to existing packed data.
Definition: store.cc:838
unsigned char cache_key
Store key.
Definition: forward.h:29
char const * getSerialisedMetaData()
Definition: store.cc:2178
int64_t endOffset() const
Definition: MemObject.cc:229
static DeferredRead::DeferrableRead DeferReader
Definition: Store.h:45
bool hasTransients() const
whether there is a corresponding locked transients table entry
Definition: Store.h:187
void attachToDisk(const sdirno, const sfileno, const swap_status_t)
Definition: store.cc:2019
virtual ~StoreEntry()
Definition: store.cc:345
virtual void buffer()
Definition: store.cc:1651
void lastModified(const time_t when)
Definition: Store.h:157
void expireNow()
Definition: store.cc:809
void Stats(StoreEntry *output)
Definition: store.cc:116
static size_t inUseCount()
Definition: store.cc:175
StoreEntry * storeGetPublicByRequestMethod(HttpRequest *request, const HttpRequestMethod &method, const KeyScope keyScope=ksDefault)
Definition: store.cc:541
void ensureMemObject(const char *storeId, const char *logUri, const HttpRequestMethod &aMethod)
initialize mem_obj (if needed) and set URIs/method (if missing)
Definition: store.cc:1639
Definition: Range.h:18
bool hasDisk(const sdirno dirn=-1, const sfileno filen=-1) const
Definition: store.cc:2008
virtual void flush()
Definition: store.cc:1662
bool swappingOut() const
whether we are in the process of writing this entry to disk
Definition: Store.h:119
std::ostream & operator<<(std::ostream &os, const StoreEntry &e)
Definition: store.cc:2101
sfileno swap_filen
unique ID inside a cache_dir for swapped out entries; -1 for others
Definition: Store.h:206
void delayAwareRead(const Comm::ConnectionPointer &conn, char *buf, int len, AsyncCall::Pointer callback)
Definition: store.cc:201
void storeFsDone(void)
void FREE(void *)
Definition: forward.h:36
int conn
the current server connection FD
Definition: Transport.cc:26
time_t expires
Definition: Store.h:196
void forcePublicKey(const cache_key *newkey)
Definition: store.cc:663
void write(StoreIOBuffer)
Definition: Store.h:333
void memOutDecision(const bool willCacheInRam)
Definition: store.cc:1867
void destroyMemObject()
Definition: store.cc:372
MemCache memCache
current [shared] memory caching state for the entry
Definition: MemObject.h:156
XitTable xitTable
current [shared] memory caching state for the entry
Definition: MemObject.h:143
void doAbandon(const char *context)
Definition: store.cc:478
int32_t index
entry position inside the memory cache
Definition: MemObject.h:151
time_t timestamp
Definition: Store.h:194
void replaceHttpReply(HttpReply *, bool andStartWriting=true)
Definition: store.cc:1798
void storeInit(void)
Definition: store.cc:1335
ping_status_t
Definition: enums.h:39
static void getPublicByRequest(StoreClient *aClient, HttpRequest *request)
Definition: store.cc:511
void storeReplAdd(const char *, REMOVALPOLICYCREATE *)
Definition: store.cc:1717
int32_t index
entry position inside the in-transit table
Definition: MemObject.h:140
bool hasIfMatchEtag(const HttpRequest &request) const
has ETag matching at least one of the If-Match etags
Definition: store.cc:1952
virtual void complete()
Definition: store.cc:1081
void onException() noexcept
Definition: store.cc:2184
bool validLength() const
Definition: store.cc:1282
static void getPublic(StoreClient *aClient, const char *uri, const HttpRequestMethod &method)
Definition: store.cc:523
void invokeHandlers()
virtual char const * getSerialisedMetaData()
Definition: store.cc:1836
StoreEntry * storeGetPublicByRequest(HttpRequest *request, const KeyScope keyScope=ksDefault)
Definition: store.cc:547
void hashDelete()
Definition: store.cc:424
int locked() const
Definition: store.cc:1265
void storeSwapFileNumberSet(StoreEntry *e, sfileno filn)
uint64_t swap_file_sz
Definition: Store.h:200
ESIElement::Pointer cachedESITree
Definition: Store.h:232
HttpReply const * getReply() const
Definition: Store.h:332
ping_status_t ping_status
Definition: Store.h:212
void hashInsert(const cache_key *)
Definition: store.cc:415
bool checkDeferRead(int fd) const
Definition: store.cc:246
store_client_t
Definition: enums.h:63
StoreEntry()
Definition: store.cc:324
const char * describeTimestamps() const
Definition: store.cc:2070
void storeFsInit(void)
Definition: store.cc:1708
void storeConfigure(void)
Definition: store.cc:1349
virtual size_t bytesWanted(Range< size_t > const aRange, bool) const
Definition: Store.h:337
virtual int64_t objectLen() const
Definition: store.cc:1671
void abort()
Definition: store.cc:1127
time_t lastModified() const
Definition: Store.h:159
bool checkCachable()
Definition: store.cc:975
void unlockAndReset(const char *resetContext=nullptr)
Definition: Store.h:387
virtual HttpReply const * getReply() const
Definition: store.cc:1686
mem_status_t mem_status
Definition: Store.h:210
static NullStoreEntry * getInstance()
Definition: store.cc:2160
StoreEntry * storeCreateEntry(const char *, const char *, const RequestFlags &, const HttpRequestMethod &)
Definition: store.cc:795
bool isEmpty() const
Definition: Store.h:335
bool hasMemStore() const
whether there is a corresponding locked shared memory table entry
Definition: Store.h:189
bool modifiedSince(const time_t ims, const int imslen=-1) const
Definition: store.cc:1904
int storeTooManyDiskFilesOpen(void)
Definition: store.cc:934
void storeGetMemSpace(int size)
Definition: store.cc:1178
bool setPublicKey(const KeyScope keyScope=ksDefault)
Definition: store.cc:606
void abandon(const char *context)
Definition: Store.h:262
void dump(int debug_lvl) const
Definition: store.cc:1549
int checkNegativeHit() const
Definition: store.cc:1376
bool hasOneOfEtags(const String &reqETags, const bool allowWeakMatch) const
whether at least one of the request ETags matches entity ETag
Definition: store.cc:1970
Store statistics related to low-level I/O.
Definition: StoreStats.h:58
static NullStoreEntry _instance
Definition: Store.h:350
void releaseRequest(const bool shareable=false)
Definition: store.cc:449
uint16_t flags
Definition: Store.h:202
virtual void vappendf(const char *, va_list)
Definition: store.cc:856
void setNoDelay(bool const)
Definition: store.cc:252
RemovalPolicyNode repl
Definition: Store.h:192
void cacheInMemory()
start or continue storing in memory cache
void trimMemory(const bool)
Definition: Store.h:348
void complete()
Definition: Store.h:340
signed_int32_t sfileno
Definition: forward.h:22
MemObject * mem_obj
Definition: Store.h:191
friend std::ostream & operator<<(std::ostream &os, const StoreEntry &e)
Definition: store.cc:2101
int checkTooSmall()
Definition: store.cc:946
C end
Definition: Range.h:25
int unsigned int const char *desc STUB void int len
Definition: stub_fd.cc:20
const char * url() const
Definition: store.cc:1616
bool mayStartHitting() const
Definition: Store.h:266
uint16_t refcount
Definition: Store.h:201
void STABH(void *)
Definition: MemObject.h:28
void const char * buf
Definition: stub_helper.cc:16
void DeferrableRead(void *context, CommRead const &)
Definition: CommRead.h:35
void lengthWentBad(const char *reason)
flags [truncated or too big] entry with ENTRY_BAD_LENGTH and releases it
Definition: store.cc:1073
void Maintain(void *unused)
Definition: store.cc:1192
const char * getMD5Text() const
Definition: store.cc:2166
void storeFreeMemory(void)
Definition: store.cc:1411
AsyncCall::Pointer deferredProducer
producer callback registered with deferProducer
Definition: Store.h:310
signed int sdirno
Definition: forward.h:23
unsigned short lock_count
Definition: Store.h:299
const cache_key * calcPublicKey(const KeyScope keyScope)
Definition: store.cc:689
bool makePublic(const KeyScope keyScope=ksDefault)
Definition: store.cc:143
virtual const char * getMD5Text() const
Definition: store.cc:183
store_status_t store_status
Definition: Store.h:214
void checkDisk() const
does nothing except throwing if disk-associated data members are inconsistent
Definition: store.cc:2041
void swapOutDecision(const MemObject::SwapOut::Decision &decision)
Definition: store.cc:1873
void swapOutFileClose(int how)
Store::EntryGuard EntryGuard
Definition: Store.h:284
bool cacheNegatively()
Definition: store.cc:164
virtual void write(StoreIOBuffer)
Definition: store.cc:816
Store::Disk & disk() const
the disk this entry is [being] cached on; asserts for entries w/o a disk
Definition: store.cc:1999
bool memoryCachable()
checkCachable() and can be cached in memory
Definition: store.cc:1355
virtual bool mayStartSwapOut()
whether we may start writing to disk (now or in the future)
virtual bool mayStartSwapOut()
whether we may start writing to disk (now or in the future)
Definition: Store.h:346
KeyScope
Definition: store_key_md5.h:18
swap_status_t
StoreEntry relationship with a disk cache.
Definition: enums.h:51
StoreIoStats store_io_stats
Definition: store_io.cc:16
virtual bool isNull()
Definition: Store.h:224
const cache_key * publicKey() const
Definition: Store.h:98
const char * storeEntryFlags(const StoreEntry *)
Definition: stat.cc:280
StoreEntry * adjustVary()
Definition: store.cc:702
Entry * entry_
the guarded Entry or nil
Definition: Store.h:397
swap_status_t swap_status
Definition: Store.h:216
void storeAppendVPrintf(StoreEntry *, const char *, va_list ap)
Definition: store.cc:908
Decision
Decision states for StoreEntry::swapoutPossible() and related code.
Definition: MemObject.h:121
void registerAbort(STABH *cb, void *)
Definition: store.cc:1530
int expiresMoreThan(time_t, time_t)
Definition: store.cc:1421
virtual size_t bytesWanted(Range< size_t > const aRange, bool ignoreDelayPool=false) const
Definition: store.cc:228
void clearPublicKeyScope()
Definition: store.cc:646
void storeErrorResponse(HttpReply *reply)
Store a prepared error response. MemObject locks the reply object.
Definition: store.cc:1781
bool checkTooBig() const
Definition: store.cc:962
void deferProducer(const AsyncCall::Pointer &producer)
call back producer when more buffer space is available
Definition: store.cc:352
void clearPrivate()
Definition: store.cc:156
time_t lastModified_
received Last-Modified value or -1; use lastModified()
Definition: Store.h:198
bool hasEtag(ETag &etag) const
whether this entry has an ETag; if yes, puts ETag value into parameter
Definition: store.cc:1941
bool hasIfNoneMatchEtag(const HttpRequest &request) const
has ETag matching at least one of the If-None-Match etags
Definition: store.cc:1959
void startWriting()
Definition: store.cc:1814
void unregisterAbort()
Definition: store.cc:1539
time_t lastref
Definition: Store.h:195
enum _mem_status_t mem_status_t
virtual store_client_t storeClientType() const
Definition: store.cc:264
virtual bool isEmpty() const
Definition: Store.h:60
void storeHeapPositionUpdate(StoreEntry *, SwapDir *)
void swapOut()
void reset()
Definition: store.cc:1692
void setPrivateKey(const bool shareable, const bool permanent)
Definition: store.cc:579
void transientsAbandonmentCheck()
Definition: store.cc:1854
bool swappedOut() const
whether the entire entry is now on disk (possibly marked for deletion)
Definition: Store.h:121
void negativeCache()
Definition: store.cc:1397
#define EBIT_TEST(flag, bit)
Definition: defines.h:107
#define NULL
Definition: types.h:166
virtual void trimMemory(const bool preserveSwappable)
Definition: store.cc:1882
void kickProducer()
calls back producer registered with deferProducer
Definition: store.cc:362
manages a single cache_dir
Definition: Disk.h:21
void setMemStatus(mem_status_t)
Definition: store.cc:1574
void lock(const char *context)
Definition: store.cc:436
void createMemObject()
Definition: store.cc:1625

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors