]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 3068: Actually make SwapDir capacity fields 64-bit.
authorAmos Jeffries <squid3@treenet.co.nz>
Sat, 4 Dec 2010 01:41:43 +0000 (18:41 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Sat, 4 Dec 2010 01:41:43 +0000 (18:41 -0700)
This one uses uint64_t instead of size_t. It's a bit wider reaching than
the earlier commit since much of the existing code used size_t.

13 files changed:
src/SquidMath.cc
src/SquidMath.h
src/Store.h
src/StoreHashIndex.h
src/SwapDir.cc
src/SwapDir.h
src/fs/coss/store_dir_coss.cc
src/fs/ufs/store_dir_ufs.cc
src/store_dir.cc
src/tests/TestSwapDir.cc
src/tests/TestSwapDir.h
src/tests/testStore.cc
src/tests/testStore.h

index 946d3f15c51ff9c8607a0912098d1436254249f1..b4160ba6d1f452d369d7c4488300bbcc2fef27d3 100644 (file)
@@ -7,6 +7,12 @@ Math::intPercent(const int a, const int b)
     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)
 {
index a6061a62b2db24499cd9f8504e6e96d42f1dafe8..c31a13a08bbc0d49b096b40d70f00efb87f84732 100644 (file)
@@ -6,6 +6,7 @@ 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);
index af0f6b3e7713bb78161a85ca85167c7a31a595f4..d643a76ae1ded9c6d85f13e88773cbf157670f5a 100644 (file)
@@ -290,10 +290,10 @@ public:
      * 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.
index bc602a9f142532db859267fe36291381f2e90117..1b76377eb789cc481cf9a94247b16e27c57da806 100644 (file)
@@ -63,9 +63,9 @@ public:
 
     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;
 
index 40c04099b816f27fdd239a7a5d11efd72536d536..246a05ed4027b0af2296133b3e61c2071f27d71f 100644 (file)
@@ -81,11 +81,10 @@ SwapDir::statfs(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
index a3930158b10148bff0b41023399178986f2869ca..408bd5c142c5e5d72debf9c867e326075c0e0d35 100644 (file)
@@ -62,9 +62,9 @@ public:
 
     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;
 
@@ -129,9 +129,9 @@ public:
 
     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;
 
@@ -153,8 +153,8 @@ private:
     char const *theType;
 
 public:
-    size_t cur_size;
-    size_t max_size;
+    uint64_t cur_size;        ///< currently used space in the storage area
+    uint64_t max_size;        ///< maximum allocatable size of the storage area
     char *path;
     int index;                 /* This entry's index into the swapDirs array */
     int64_t max_objsize;
index e3e2fe443c241cae56233cf8d9cb3112ff6c932b..3f900c7a21c5524579cc82b93012b5eff877aa4c 100644 (file)
@@ -997,8 +997,8 @@ void
 CossSwapDir::statfs(StoreEntry & sentry) const
 {
     storeAppendPrintf(&sentry, "\n");
-    storeAppendPrintf(&sentry, "Maximum Size: %Zu KB\n", max_size);
-    storeAppendPrintf(&sentry, "Current Size: %Zu KB\n", cur_size);
+    storeAppendPrintf(&sentry, "Maximum Size: %lu KB\n", max_size);
+    storeAppendPrintf(&sentry, "Current Size: %lu KB\n", cur_size);
     storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n",
                       (100.0 * (double)cur_size / (double)max_size) );
     storeAppendPrintf(&sentry, "Number of object collisions: %d\n", (int) numcollisions);
@@ -1096,7 +1096,7 @@ CossSwapDir::reconfigure(int index, char *path)
 void
 CossSwapDir::dump(StoreEntry &entry)const
 {
-    storeAppendPrintf(&entry, " %Zu", (max_size >> 10));
+    storeAppendPrintf(&entry, " %lu", (max_size >> 10));
     dumpOptions(&entry);
 }
 
index cdd0259f561677ebeefb4658889d3dd0662b1f5f..d364a87b129bf81c85ec79aac0dbb8878ab7b1f1 100644 (file)
@@ -312,8 +312,8 @@ UFSSwapDir::statfs(StoreEntry & sentry) const
     int x;
     storeAppendPrintf(&sentry, "First level subdirectories: %d\n", l1);
     storeAppendPrintf(&sentry, "Second level subdirectories: %d\n", l2);
-    storeAppendPrintf(&sentry, "Maximum Size: %Zu KB\n", max_size);
-    storeAppendPrintf(&sentry, "Current Size: %Zu 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",
                       (double)(100.0 * cur_size) / (double)max_size);
     storeAppendPrintf(&sentry, "Filemap bits in use: %d of %d (%d%%)\n",
@@ -1323,7 +1323,7 @@ UFSSwapDir::replacementRemove(StoreEntry * e)
 void
 UFSSwapDir::dump(StoreEntry & entry) const
 {
-    storeAppendPrintf(&entry, " %Zu %d %d", (max_size >> 10), l1, l2);
+    storeAppendPrintf(&entry, " %"PRIu64" %d %d", (max_size >> 10), l1, l2);
     dumpOptions(&entry);
 }
 
index a6d220dbd42fe06ecf2c9bbdafc9271d3f3989ed..4c5120847bb1eb54129d0e50b74faeedcafeaf82 100644 (file)
@@ -361,14 +361,13 @@ StoreController::stat(StoreEntry &output) const
     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);
-    // XXX : below capacity display calculation breaks with int overflow on 64-bit systems
-    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 */
@@ -376,14 +375,14 @@ StoreController::stat(StoreEntry &output) const
 }
 
 /* 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 ? */
@@ -829,22 +828,21 @@ StoreHashIndex::init()
     }
 }
 
-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();
index c24fb83ad418f72c6c03b24da64f15f8fb44845d..0ca06d32e22c2a5086b051b40df3ff2def668d4b 100644 (file)
@@ -3,7 +3,7 @@
 #include "squid.h"
 #include "TestSwapDir.h"
 
-size_t
+uint64_t
 TestSwapDir::maxSize() const
 {
     return 3;
index d93fcd6dbcaf529eb138bebdef4b5780ad2bb374..d58c4ace643e9fb1d643586ea43d2fff3b57767c 100644 (file)
@@ -12,7 +12,7 @@ public:
 
     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*);
index 6be5f03067704c5401e52f0f95f1fcbe7a1d0bb7..b80dc7e33ff09d0aabf387c94eb8dc8789b1f861 100644 (file)
@@ -31,13 +31,13 @@ void
 TestStore::init()
 {}
 
-size_t
+uint64_t
 TestStore::maxSize() const
 {
     return 3;
 }
 
-size_t
+uint64_t
 TestStore::minSize() const
 {
     return 1;
index 804a92f44dc82c30f2e926a4e7ae2deee6797721..fbdf7e0b4106b0e7742c2c61776b55c91ea7f4db 100644 (file)
@@ -55,9 +55,9 @@ public:
 
     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 */