return b ? ((int) (100.0 * a / b + 0.5)) : 0;
}
+int64_t
+Math::int64Percent(const int64_t a, const int64_t b)
+{
+ return b ? ((int64_t) (100.0 * a / b + 0.5)) : 0;
+}
+
double
Math::doublePercent(const double a, const double b)
{
#ifndef _SQUID_SRC_SQUIDMATH_H
#define _SQUID_SRC_SQUIDMATH_H
+#include "config.h"
+
/* Math functions we define locally for Squid */
namespace Math
{
extern int intPercent(const int a, const int b);
+extern int64_t int64Percent(const int64_t a, const int64_t b);
extern double doublePercent(const double, const double);
extern int intAverage(const int, const int, int, const int);
extern double doubleAverage(const double, const double, int, const int);
* The maximum size the store will support in normal use. Inaccuracy is permitted,
* but may throw estimates for memory etc out of whack.
*/
- virtual size_t maxSize() const = 0;
+ virtual uint64_t maxSize() const = 0;
/** The minimum size the store will shrink to via normal housekeeping */
- virtual size_t minSize() const = 0;
+ virtual uint64_t minSize() const = 0;
/**
* Output stats to the provided store entry.
virtual void sync();
- virtual size_t maxSize() const;
+ virtual uint64_t maxSize() const;
- virtual size_t minSize() const;
+ virtual uint64_t minSize() const;
virtual void stat(StoreEntry&) const;
void
SwapDir::maintain() {}
-size_t
+uint64_t
SwapDir::minSize() const
{
- return (size_t) (((float) maxSize() *
- (float) Config.Swap.lowWaterMark) / 100.0);
+ return ((maxSize() * Config.Swap.lowWaterMark) / 100);
}
void
virtual int callback();
virtual void create();
- virtual StoreEntry * get
- (const cache_key *);
+ virtual StoreEntry * get(const cache_key *);
- virtual void get
- (String const, STOREGETCLIENT, void * cbdata);
+ virtual void get(String const, STOREGETCLIENT, void * cbdata);
virtual void init();
virtual void maintain(); /* perform regular maintenance should be private and self registered ... */
- virtual size_t maxSize() const;
+ virtual uint64_t maxSize() const;
- virtual size_t minSize() const;
+ virtual uint64_t minSize() const;
virtual void stat(StoreEntry &) const;
{
public:
- SwapDir(char const *aType) : theType (aType), cur_size (0), max_size(0), max_objsize (-1), cleanLog(NULL) {
+ SwapDir(char const *aType) : theType (aType), cur_size(0), max_size(0), max_objsize (-1), cleanLog(NULL) {
fs.blksize = 1024;
path = NULL;
}
/* official Store interface functions */
virtual void diskFull();
- virtual StoreEntry * get
- (const cache_key *);
+ virtual StoreEntry * get(const cache_key *);
- virtual void get
- (String const, STOREGETCLIENT, void * cbdata);
+ virtual void get(String const, STOREGETCLIENT, void * cbdata);
- virtual size_t maxSize() const { return max_size;}
+ virtual uint64_t maxSize() const { return max_size;}
- virtual size_t minSize() const;
+ virtual uint64_t minSize() const;
virtual void stat (StoreEntry &anEntry) const;
virtual StoreSearch *search(String const url, HttpRequest *) = 0;
char const *theType;
public:
- int cur_size;
- int max_size;
+ uint64_t cur_size;
+ uint64_t max_size;
char *path;
int index; /* This entry's index into the swapDirs array */
int64_t max_objsize;
CossSwapDir::statfs(StoreEntry & sentry) const
{
storeAppendPrintf(&sentry, "\n");
- storeAppendPrintf(&sentry, "Maximum Size: %d KB\n", max_size);
- storeAppendPrintf(&sentry, "Current Size: %d KB\n", cur_size);
+ storeAppendPrintf(&sentry, "Maximum Size: %"PRIu64" KB\n", max_size);
+ storeAppendPrintf(&sentry, "Current Size: %"PRIu64" KB\n", cur_size);
storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n",
- 100.0 * cur_size / max_size);
+ (100.0 * (double)cur_size / (double)max_size) );
storeAppendPrintf(&sentry, "Number of object collisions: %d\n", (int) numcollisions);
#if 0
/* is this applicable? I Hope not .. */
void
CossSwapDir::dump(StoreEntry &entry)const
{
- storeAppendPrintf(&entry, " %d", max_size >> 10);
+ storeAppendPrintf(&entry, " %"PRIu64"", (max_size >> 10));
dumpOptions(&entry);
}
void
UFSSwapDir::parseSizeL1L2()
{
- int i;
- int size;
-
- i = GetInteger();
- size = i << 10; /* Mbytes to kbytes */
-
- if (size <= 0)
+ int i = GetInteger();
+ if (i <= 0)
fatal("UFSSwapDir::parseSizeL1L2: invalid size value");
+ size_t size = i << 10; /* Mbytes to kbytes */
+
/* just reconfigure it */
if (reconfiguring) {
if (size == max_size)
int x;
storeAppendPrintf(&sentry, "First level subdirectories: %d\n", l1);
storeAppendPrintf(&sentry, "Second level subdirectories: %d\n", l2);
- storeAppendPrintf(&sentry, "Maximum Size: %d KB\n", max_size);
- storeAppendPrintf(&sentry, "Current Size: %d KB\n", cur_size);
+ storeAppendPrintf(&sentry, "Maximum Size: %"PRIu64" KB\n", max_size);
+ storeAppendPrintf(&sentry, "Current Size: %"PRIu64" KB\n", cur_size);
storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n",
- 100.0 * cur_size / max_size);
+ (double)(100.0 * cur_size) / (double)max_size);
storeAppendPrintf(&sentry, "Filemap bits in use: %d of %d (%d%%)\n",
map->n_files_in_map, map->max_n_files,
Math::intPercent(map->n_files_in_map, map->max_n_files));
walker = repl->PurgeInit(repl, max_scan);
while (1) {
- if (cur_size < (int) minSize()) /* cur_size should be unsigned */
+ if (cur_size < minSize())
break;
if (removed >= max_remove)
void
UFSSwapDir::dump(StoreEntry & entry) const
{
- storeAppendPrintf(&entry, " %d %d %d",
- max_size >> 10,
+ storeAppendPrintf(&entry, " %"PRIu64" %d %d",
+ (max_size >> 10),
l1,
l2);
dumpOptions(&entry);
void
SwapDir::updateSize(int64_t size, int sign)
{
- int blks = (size + fs.blksize - 1) / fs.blksize;
- int k = (blks * fs.blksize >> 10) * sign;
+ int64_t blks = (size + fs.blksize - 1) / fs.blksize;
+ int64_t k = ((blks * fs.blksize) >> 10) * sign;
cur_size += k;
store_swap_size += k;
storeAppendPrintf(&output, "Store Directory Statistics:\n");
storeAppendPrintf(&output, "Store Entries : %lu\n",
(unsigned long int)StoreEntry::inUseCount());
- storeAppendPrintf(&output, "Maximum Swap Size : %8ld KB\n",
- (long int) maxSize());
+ storeAppendPrintf(&output, "Maximum Swap Size : %"PRIu64" KB\n",
+ maxSize());
storeAppendPrintf(&output, "Current Store Swap Size: %8lu KB\n",
store_swap_size);
- storeAppendPrintf(&output, "Current Capacity : %d%% used, %d%% free\n",
- Math::intPercent((int) store_swap_size, (int) maxSize()),
- Math::intPercent((int) (maxSize() - store_swap_size), (int) maxSize()));
+ storeAppendPrintf(&output, "Current Capacity : %"PRId64"%% used, %"PRId64"%% free\n",
+ Math::int64Percent(store_swap_size, maxSize()),
+ Math::int64Percent((maxSize() - store_swap_size), maxSize()));
/* FIXME Here we should output memory statistics */
/* now the swapDir */
}
/* if needed, this could be taught to cache the result */
-size_t
+uint64_t
StoreController::maxSize() const
{
/* TODO: include memory cache ? */
return swapDir->maxSize();
}
-size_t
+uint64_t
StoreController::minSize() const
{
/* TODO: include memory cache ? */
}
}
-size_t
+uint64_t
StoreHashIndex::maxSize() const
{
- int i;
- size_t result = 0;
+ uint64_t result = 0;
- for (i = 0; i < Config.cacheSwap.n_configured; i++)
+ for (int i = 0; i < Config.cacheSwap.n_configured; i++)
result += store(i)->maxSize();
return result;
}
-size_t
+uint64_t
StoreHashIndex::minSize() const
{
- size_t result = 0;
+ uint64_t result = 0;
for (int i = 0; i < Config.cacheSwap.n_configured; i++)
result += store(i)->minSize();
#include "squid.h"
#include "TestSwapDir.h"
-size_t
+uint64_t
TestSwapDir::maxSize() const
{
return 3;
bool statsCalled;
- virtual size_t maxSize() const;
+ virtual uint64_t maxSize() const;
virtual void stat(StoreEntry &) const; /* output stats to the provided store entry */
virtual void reconfigure(int, char*);
TestStore::init()
{}
-size_t
+uint64_t
TestStore::maxSize() const
{
return 3;
}
-size_t
+uint64_t
TestStore::minSize() const
{
return 1;
virtual void maintain() {};
- virtual size_t maxSize() const;
+ virtual uint64_t maxSize() const;
- virtual size_t minSize() const;
+ virtual uint64_t minSize() const;
virtual void stat(StoreEntry &) const; /* output stats to the provided store entry */