LocalSearch.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 /* DEBUG: section 47 Store Search */
10 
11 #include "squid.h"
12 #include "debug/Stream.h"
13 #include "globals.h"
14 #include "store/LocalSearch.h"
15 #include "StoreSearch.h"
16 
17 namespace Store {
18 
20 class LocalSearch : public StoreSearch
21 {
23 
24 public:
25  /* StoreSearch API */
26  void next(void (callback)(void *cbdata), void *cbdata) override;
27  bool next() override;
28  bool error() const override;
29  bool isDone() const override;
30  StoreEntry *currentItem() override;
31 
32 private:
33  void copyBucket();
34  bool _done = false;
35  int bucket = 0;
36  std::vector<StoreEntry *> entries;
37 };
38 
39 } // namespace Store
40 
42 
45 {
46  return new LocalSearch;
47 }
48 
49 void
50 Store::LocalSearch::next(void (aCallback)(void *), void *aCallbackData)
51 {
52  next();
53  aCallback (aCallbackData);
54 }
55 
56 bool
58 {
59  if (!entries.empty())
60  entries.pop_back();
61 
62  while (!isDone() && !entries.size())
63  copyBucket();
64 
65  return currentItem() != nullptr;
66 }
67 
68 bool
70 {
71  return false;
72 }
73 
74 bool
76 {
77  return bucket >= store_hash_buckets || _done;
78 }
79 
80 StoreEntry *
82 {
83  if (!entries.size())
84  return nullptr;
85 
86  return entries.back();
87 }
88 
89 void
91 {
92  /* probably need to lock the store entries...
93  * we copy them all to prevent races on the links. */
94  assert (!entries.size());
95  hash_link *link_ptr = nullptr;
96  hash_link *link_next = nullptr;
97  link_next = hash_get_bucket(store_table, bucket);
98 
99  while (nullptr != (link_ptr = link_next)) {
100  link_next = link_ptr->next;
101  StoreEntry *e = (StoreEntry *) link_ptr;
102 
103  entries.push_back(e);
104  }
105 
106  // minimize debugging: we may be called more than a million times on startup
107  if (const auto count = entries.size())
108  debugs(47, 8, "bucket #" << bucket << " entries: " << count);
109 
110  ++bucket;
111 }
112 
Definition: cbdata.cc:37
CBDATA_NAMESPACED_CLASS_INIT(Store, LocalSearch)
CBDATA_CLASS(LocalSearch)
StoreEntry * currentItem() override
Definition: LocalSearch.cc:81
bool isDone() const override
Definition: LocalSearch.cc:75
#define assert(EX)
Definition: assert.h:17
bool error() const override
Definition: LocalSearch.cc:69
StoreSearch * NewLocalSearch()
Definition: LocalSearch.cc:44
hash_table * store_table
bool next() override
Definition: LocalSearch.cc:57
iterates local store_table
Definition: LocalSearch.cc:20
int store_hash_buckets
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192
std::vector< StoreEntry * > entries
Definition: LocalSearch.cc:36
hash_link * hash_get_bucket(hash_table *, unsigned int)
Definition: hash.cc:244

 

Introduction

Documentation

Support

Miscellaneous