]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Added weights to event structure. We need to run ALL
authorwessels <>
Fri, 15 May 1998 02:47:59 +0000 (02:47 +0000)
committerwessels <>
Fri, 15 May 1998 02:47:59 +0000 (02:47 +0000)
"lightweight" events like peerPingTimeout and storeClientCopyEvent
instead of just one event per call from the select loop

15 files changed:
src/event.cc
src/fqdncache.cc
src/ipcache.cc
src/main.cc
src/neighbors.cc
src/net_db.cc
src/peer_digest.cc
src/peer_select.cc
src/protos.h
src/send-announce.cc
src/stat.cc
src/store.cc
src/store_client.cc
src/store_digest.cc
src/store_rebuild.cc

index 91cc23d86f97bc3e16a1ecb991a45857066369aa..cc2ab7e63e4c15c8926ecb997bff2b893184f15d 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: event.cc,v 1.15 1998/05/13 21:20:42 wessels Exp $
+ * $Id: event.cc,v 1.16 1998/05/14 20:47:59 wessels Exp $
  *
  * DEBUG: section 41    Event Processing
  * AUTHOR: Henrik Nordstrom
@@ -38,13 +38,14 @@ struct ev_entry {
     const char *name;
     time_t when;
     struct ev_entry *next;
+    int weight;
 };
 
 static struct ev_entry *tasks = NULL;
 static OBJH eventDump;
 
 void
-eventAdd(const char *name, EVH * func, void *arg, time_t when)
+eventAdd(const char *name, EVH * func, void *arg, time_t when, int weight)
 {
     struct ev_entry *event = xcalloc(1, sizeof(struct ev_entry));
     struct ev_entry **E;
@@ -52,6 +53,7 @@ eventAdd(const char *name, EVH * func, void *arg, time_t when)
     event->arg = arg;
     event->name = name;
     event->when = squid_curtime + when;
+    event->weight = weight;
     if (NULL != arg)
         cbdataLock(arg);
     debug(41, 7) ("eventAdd: Adding '%s', in %d seconds\n", name, (int) when);
@@ -66,13 +68,13 @@ eventAdd(const char *name, EVH * func, void *arg, time_t when)
 
 /* same as eventAdd but adds a random offset within +-1/3 of delta_ish */
 void
-eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish)
+eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish, int weight)
 {
     if (delta_ish >= 3) {
        const time_t two_third = (2 * delta_ish) / 3;
        delta_ish = two_third + (squid_random() % two_third);
     }
-    eventAdd(name, func, arg, delta_ish);
+    eventAdd(name, func, arg, delta_ish, weight);
 }
 
 void
@@ -100,24 +102,28 @@ eventRun(void)
     struct ev_entry *event = NULL;
     EVH *func;
     void *arg;
-    if ((event = tasks) == NULL)
-       return;
-    if (event->when > squid_curtime)
-       return;
-    func = event->func;
-    arg = event->arg;
-    event->func = NULL;
-    event->arg = NULL;
-    tasks = event->next;
-    if (NULL != arg) {
-        int valid = cbdataValid(arg);
-        cbdataUnlock(arg);
-        if (!valid)
-           return;
+    int weight = 0;
+    while (0 == weight) {
+        if ((event = tasks) == NULL)
+           break;
+        if (event->when > squid_curtime)
+           break;
+        func = event->func;
+        arg = event->arg;
+        event->func = NULL;
+        event->arg = NULL;
+        tasks = event->next;
+        if (NULL != arg) {
+            int valid = cbdataValid(arg);
+            cbdataUnlock(arg);
+            if (!valid)
+               return;
+        }
+        weight += event->weight;
+        debug(41, 7) ("eventRun: Running '%s'\n", event->name);
+        func(arg);
+        safe_free(event);
     }
-    debug(41, 7) ("eventRun: Running '%s'\n", event->name);
-    func(arg);
-    safe_free(event);
 }
 
 time_t
index c861ba9dfde310db5b2dab76afe558de3790097d..09db48e806164092629730e825116e4fbeafc9df 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: fqdncache.cc,v 1.100 1998/05/13 21:24:46 wessels Exp $
+ * $Id: fqdncache.cc,v 1.101 1998/05/14 20:48:00 wessels Exp $
  *
  * DEBUG: section 35    FQDN Cache
  * AUTHOR: Harvest Derived
@@ -248,7 +248,7 @@ fqdncache_purgelru(void *notused)
     dlink_node *prev = NULL;
     fqdncache_entry *f;
     int removed = 0;
-    eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 10);
+    eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 10, 1);
     for (m = lru_list.tail; m; m = prev) {
        if (memInUse(MEM_FQDNCACHE_ENTRY) < fqdncache_low)
            break;
index 938887932527e82f6c5b4a0667527cd536f7d3e5..23b23521b0fba7a54c14737ea87272867fe333f3 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ipcache.cc,v 1.185 1998/05/13 21:25:54 wessels Exp $
+ * $Id: ipcache.cc,v 1.186 1998/05/14 20:48:01 wessels Exp $
  *
  * DEBUG: section 14    IP Cache
  * AUTHOR: Harvest Derived
@@ -284,7 +284,7 @@ ipcache_purgelru(void *voidnotused)
     dlink_node *prev = NULL;
     ipcache_entry *i;
     int removed = 0;
-    eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10);
+    eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10, 1);
     for (m = lru_list.tail; m; m = prev) {
        if (memInUse(MEM_IPCACHE_ENTRY) < ipcache_low)
            break;
index c813a051d4782e3fab1b8692a8021dd53bec93fd..5b7c501c9ea846ca438bdbbc7a2b3ce9b279edc4 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: main.cc,v 1.249 1998/05/11 18:44:41 rousskov Exp $
+ * $Id: main.cc,v 1.250 1998/05/14 20:48:03 wessels Exp $
  *
  * DEBUG: section 1     Startup and Main Loop
  * AUTHOR: Harvest Derived
@@ -517,12 +517,12 @@ mainInitialize(void)
     debug(1, 0) ("Ready to serve requests.\n");
 
     if (!configured_once) {
-       eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1);
-       eventAdd("storeDirClean", storeDirClean, NULL, 15);
+       eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1, 1);
+       eventAdd("storeDirClean", storeDirClean, NULL, 15, 1);
        if (Config.onoff.announce)
-           eventAdd("start_announce", start_announce, NULL, 3600);
-       eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10);
-       eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15);
+           eventAdd("start_announce", start_announce, NULL, 3600, 1);
+       eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10, 1);
+       eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15, 1);
     }
     configured_once = 1;
 }
index 523b8685b01675d1ea237115830a670f3f3bd1b3..40c717837cf8aa383d6b770a8b2d92c6e38839dd 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: neighbors.cc,v 1.208 1998/05/14 16:33:51 wessels Exp $
+ * $Id: neighbors.cc,v 1.209 1998/05/14 20:48:05 wessels Exp $
  *
  * DEBUG: section 15    Neighbor Routines
  * AUTHOR: Harvest Derived
@@ -939,7 +939,7 @@ peerDNSConfigure(const ipcache_addrs * ia, void *data)
     ap->sin_port = htons(p->icp_port);
     if (p->type == PEER_MULTICAST)
        peerCountMcastPeersSchedule(p, 10);
-    eventAddIsh("netdbExchangeStart", netdbExchangeStart, p, 30);
+    eventAddIsh("netdbExchangeStart", netdbExchangeStart, p, 30, 1);
 }
 
 static void
@@ -954,7 +954,7 @@ peerRefreshDNS(void *datanotused)
        ipcache_nbgethostbyname(p->host, peerDNSConfigure, p);
     }
     /* Reconfigure the peers every hour */
-    eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600);
+    eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600, 1);
 }
 
 /*
@@ -994,7 +994,7 @@ peerCheckConnectDone(int fd, int status, void *data)
        debug(15, 0) ("TCP connection to %s/%d succeeded\n",
            p->host, p->http_port);
     } else {
-       eventAdd("peerCheckConnect", peerCheckConnect, p, 80);
+       eventAdd("peerCheckConnect", peerCheckConnect, p, 80, 1);
     }
     comm_close(fd);
     return;
@@ -1008,7 +1008,7 @@ peerCheckConnectStart(peer * p)
     debug(15, 0) ("TCP connection to %s/%d failed\n", p->host, p->http_port);
     p->tcp_up = 0;
     p->last_fail_time = squid_curtime;
-    eventAdd("peerCheckConnect", peerCheckConnect, p, 80);
+    eventAdd("peerCheckConnect", peerCheckConnect, p, 80, 1);
 }
 
 static void
@@ -1019,7 +1019,7 @@ peerCountMcastPeersSchedule(peer * p, time_t when)
     eventAdd("peerCountMcastPeersStart",
        peerCountMcastPeersStart,
        p,
-       when);
+       when, 1);
     p->mcast.flags |= PEER_COUNT_EVENT_PENDING;
 }
 
@@ -1059,7 +1059,7 @@ peerCountMcastPeersStart(void *data)
     eventAdd("peerCountMcastPeersDone",
        peerCountMcastPeersDone,
        psstate,
-       Config.neighborTimeout);
+       Config.neighborTimeout, 1);
     p->mcast.flags |= PEER_COUNTING;
     peerCountMcastPeersSchedule(p, MCAST_COUNT_RATE);
 }
index 6b6b18dd204648b4778401258cd52df96d059682..136c6e303a1d249940ea8c544ba0596674449fa3 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: net_db.cc,v 1.100 1998/05/14 16:33:52 wessels Exp $
+ * $Id: net_db.cc,v 1.101 1998/05/14 20:48:06 wessels Exp $
  *
  * DEBUG: section 37    Network Measurement Database
  * AUTHOR: Duane Wessels
@@ -397,7 +397,7 @@ netdbSaveState(void *foo)
     getCurrentTime();
     debug(37, 0) ("NETDB state saved; %d entries, %d msec\n",
        count, tvSubMsec(start, current_time));
-    eventAdd("netdbSaveState", netdbSaveState, NULL, 3617);
+    eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600, 1);
 }
 
 static void
@@ -627,7 +627,7 @@ netdbInit(void)
     addr_table = hash_create((HASHCMP *) strcmp, n, hash_string);
     n = hashPrime(3 * Config.Netdb.high / 4);
     host_table = hash_create((HASHCMP *) strcmp, n, hash_string);
-    eventAdd("netdbSaveState", netdbSaveState, NULL, 3617);
+    eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600, 1);
     netdbReloadState();
     cachemgrRegister("netdb",
        "Network Measurement Database",
@@ -1072,8 +1072,8 @@ netdbExchangeStart(void *data)
 peer *
 netdbClosestParent(const char *host)
 {
-    peer *p = NULL;
 #if USE_ICMP
+    peer *p = NULL;
     netdbEntry *n;
     const ipcache_addrs *ia;
     net_db_peer *h;
index 41e6da83cdfd6a6219b9ad7b97b14686207c7f26..b66acfd827520f379b0a5082da2c637b876de720 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: peer_digest.cc,v 1.28 1998/05/14 16:33:52 wessels Exp $
+ * $Id: peer_digest.cc,v 1.29 1998/05/14 20:48:07 wessels Exp $
  *
  * DEBUG: section 72    Peer Digest Routines
  * AUTHOR: Alex Rousskov
@@ -142,7 +142,7 @@ peerDigestDelay(peer * p, int disable, time_t delay)
            disable ? "disabling" : "delaying",
            p->host ? p->host : "<null>",
            delay, mkrfc1123(squid_curtime + delay));
-       eventAdd("peerDigestValidate", peerDigestValidate, p, delay);
+       eventAdd("peerDigestValidate", peerDigestValidate, p, delay, 1);
     } else {
        assert(disable);
        debug(72, 2) ("peerDigestDisable: disabling peer %s for good\n",
index e105c97584ed8a6f88b84c79269a2feea437a179..4f760bdb20160a50dc44942d67451bcca5c8558f 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: peer_select.cc,v 1.56 1998/05/14 16:33:53 wessels Exp $
+ * $Id: peer_select.cc,v 1.57 1998/05/14 20:48:08 wessels Exp $
  *
  * DEBUG: section 44    Peer Selection Algorithm
  * AUTHOR: Duane Wessels
@@ -316,7 +316,7 @@ peerSelectFoo(ps_state * psstate)
            eventAdd("peerPingTimeout",
                peerPingTimeout,
                psstate,
-               Config.neighborTimeout);
+               Config.neighborTimeout, 0);
            return;
        }
     }
index b09c1a6f808d3bcb482f3d711d45bddaf4725353..2d474b47a6cb5d755e17adec20ba6a08b818b863 100644 (file)
@@ -165,8 +165,8 @@ extern dnsserver_t *dnsGetFirstAvailable(void);
 extern void dnsStats(StoreEntry *);
 extern void dnsFreeMemory(void);
 
-extern void eventAdd(const char *name, EVH * func, void *arg, time_t when);
-extern void eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish);
+extern void eventAdd(const char *name, EVH * func, void *arg, time_t when, int);
+extern void eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish, int);
 extern void eventRun(void);
 extern time_t eventNextTime(void);
 extern void eventDelete(EVH * func, void *arg);
index c3c2955d5cb612b9e6c48167b5a9270abfb443aa..19956ad7f0d52b3f5386f8f1e5f5ce8703443c87 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: send-announce.cc,v 1.49 1998/04/04 05:17:47 wessels Exp $
+ * $Id: send-announce.cc,v 1.50 1998/05/14 20:48:11 wessels Exp $
  *
  * DEBUG: section 27    Cache Announcer
  * AUTHOR: Duane Wessels
@@ -43,7 +43,7 @@ start_announce(void *datanotused)
        return;
     cbdataAdd(junk = xmalloc(1), MEM_NONE);
     ipcache_nbgethostbyname(Config.Announce.host, send_announce, junk);
-    eventAdd("send_announce", start_announce, NULL, Config.Announce.period);
+    eventAdd("send_announce", start_announce, NULL, Config.Announce.period, 1);
 }
 
 static void
index dd22c0e14f0c05ca1da3bac1e5ba9724c3c46d03..d5e2073e2f26b626f9449de03f07b8de4b1a3392 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: stat.cc,v 1.246 1998/05/14 16:33:55 wessels Exp $
+ * $Id: stat.cc,v 1.247 1998/05/14 20:48:12 wessels Exp $
  *
  * DEBUG: section 18    Cache Manager Statistics
  * AUTHOR: Harvest Derived
@@ -750,7 +750,7 @@ statInit(void)
     for (i = 0; i < N_COUNT_HOUR_HIST; i++)
        statCountersInit(&CountHourHist[i]);
     statCountersInit(&Counter);
-    eventAdd("statAvgTick", statAvgTick, NULL, COUNT_INTERVAL);
+    eventAdd("statAvgTick", statAvgTick, NULL, COUNT_INTERVAL, 1);
     cachemgrRegister("info",
        "General Runtime Information",
        info_get, 0);
@@ -798,7 +798,7 @@ statAvgTick(void *notused)
     StatCounters *p = &CountHist[1];
     StatCounters *c = &Counter;
     struct rusage rusage;
-    eventAdd("statAvgTick", statAvgTick, NULL, COUNT_INTERVAL);
+    eventAdd("statAvgTick", statAvgTick, NULL, COUNT_INTERVAL, 1);
     squid_getrusage(&rusage);
     c->page_faults = rusage_pagefaults(&rusage);
     c->cputime = rusage_cputime(&rusage);
index 9e08668d790580ec0f75b84eb38d13619ff951a7..dda67107cf39f1be7d9d06ea1943676747336a65 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store.cc,v 1.413 1998/05/10 14:35:51 wessels Exp $
+ * $Id: store.cc,v 1.414 1998/05/14 20:48:15 wessels Exp $
  *
  * DEBUG: section 20    Storage Manager
  * AUTHOR: Harvest Derived
@@ -657,7 +657,7 @@ storeMaintainSwapSpace(void *datanotused)
     int max_scan;
     int max_remove;
     static time_t last_warn_time = 0;
-    eventAdd("storeMaintainSwapSpace", storeMaintainSwapSpace, NULL, 1);
+    eventAdd("storeMaintainSwapSpace", storeMaintainSwapSpace, NULL, 1, 1);
     /* We can't delete objects while rebuilding swap */
     if (store_rebuilding)
        return;
index c89a75408533900811dbaae58d06e1021ce61c56..f02121a3bbe92a9ab59fe27ff8d8fbe63c42c1bd 100644 (file)
@@ -140,7 +140,7 @@ storeClientCopy2(StoreEntry * e, store_client * sc)
     if (sc->flags.store_copying) {
        sc->flags.copy_event_pending = 1;
        debug(20, 3) ("storeClientCopy: Queueing storeClientCopyEvent()\n");
-       eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0);
+       eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0, 0);
        return;
     }
     sc->flags.store_copying = 1;
index b3d6d1c690bfce213c864157d6e1739261b4f834..6df82f0155db691b0dccb81f3c3bfd6c1a809095 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: store_digest.cc,v 1.15 1998/05/12 20:29:26 wessels Exp $
+ * $Id: store_digest.cc,v 1.16 1998/05/14 20:48:17 wessels Exp $
  *
  * DEBUG: section 71    Store Digest Manager
  * AUTHOR: Alex Rousskov
@@ -200,7 +200,7 @@ storeDigestRebuildResume()
     if (!storeDigestResize())
        cacheDigestClear(store_digest);         /* not clean()! */
     memset(&sd_stats, 0, sizeof(sd_stats));
-    eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0);
+    eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0, 1);
 }
 
 /* finishes swap out sequence for the digest; schedules next rebuild */
@@ -211,7 +211,7 @@ storeDigestRebuildFinish()
     sd_state.rebuild_lock = 0;
     sd_state.rebuild_count++;
     debug(71, 2) ("storeDigestRebuildFinish: done.\n");
-    eventAdd("storeDigestRebuildStart", storeDigestRebuildStart, NULL, StoreDigestRebuildPeriod);
+    eventAdd("storeDigestRebuildStart", storeDigestRebuildStart, NULL, StoreDigestRebuildPeriod, 1);
     /* resume pending Rewrite if any */
     if (sd_state.rewrite_lock)
        storeDigestRewriteResume();
@@ -238,7 +238,7 @@ storeDigestRebuildStep(void *datanotused)
     if (sd_state.rebuild_offset >= store_hash_buckets)
        storeDigestRebuildFinish();
     else
-       eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0);
+       eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0, 1);
 }
 
 
@@ -295,7 +295,7 @@ storeDigestRewriteResume()
     httpReplySwapOut(e->mem_obj->reply, e);
     storeDigestCBlockSwapOut(e);
     storeBufferFlush(e);
-    eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, sd_state.rewrite_lock, 0);
+    eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, sd_state.rewrite_lock, 0, 1);
 }
 
 /* finishes swap out sequence for the digest; schedules next rewrite */
@@ -318,7 +318,7 @@ storeDigestRewriteFinish(StoreEntry * e)
     cbdataFree(sd_state.rewrite_lock);
     sd_state.rewrite_lock = e = NULL;
     sd_state.rewrite_count++;
-    eventAdd("storeDigestRewriteStart", storeDigestRewriteStart, NULL, StoreDigestRewritePeriod);
+    eventAdd("storeDigestRewriteStart", storeDigestRewriteStart, NULL, StoreDigestRewritePeriod, 1);
     /* resume pending Rebuild if any */
     if (sd_state.rebuild_lock)
        storeDigestRebuildResume();
@@ -343,7 +343,7 @@ storeDigestSwapOutStep(void * data)
     if (sd_state.rewrite_offset >= store_digest->mask_size)
        storeDigestRewriteFinish(e);
     else
-       eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0);
+       eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0, 1);
 }
 
 static void
index e5835cf12eb85b3e27301588fdb175be75072dec..355d748829305ace25f69976486eb5d0ab50d597 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: store_rebuild.cc,v 1.36 1998/05/08 23:29:30 wessels Exp $
+ * $Id: store_rebuild.cc,v 1.37 1998/05/14 20:48:18 wessels Exp $
  *
  * DEBUG: section 20    Store Rebuild Routines
  * AUTHOR: Duane Wessels
@@ -395,7 +395,7 @@ storeRebuildADirectory(void *unused)
     if (opt_foreground_rebuild)
        storeRebuildADirectory(NULL);
     else
-       eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0);
+       eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0, 1);
 }
 
 #if TEMP_UNUSED_CODE
@@ -627,7 +627,7 @@ storeCleanup(void *datanotused)
        if ((++validnum & 0xFFFF) == 0)
            debug(20, 1) ("  %7d Entries Validated so far.\n", validnum);
     }
-    eventAdd("storeCleanup", storeCleanup, NULL, 0);
+    eventAdd("storeCleanup", storeCleanup, NULL, 0, 1);
 }
 
 void
@@ -720,7 +720,7 @@ storeRebuildComplete(void)
        r > 0 ? (int) r : 0,
        (double) RebuildState.objcount / (r > 0 ? r : 1));
     debug(20, 1) ("Beginning Validation Procedure\n");
-    eventAdd("storeCleanup", storeCleanup, NULL, 0);
+    eventAdd("storeCleanup", storeCleanup, NULL, 0, 1);
 }
 
 void
@@ -760,5 +760,5 @@ storeRebuildStart(void)
        debug(20, 1) ("Rebuilding storage in Cache Dir #%d (%s)\n",
            i, clean ? "CLEAN" : "DIRTY");
     }
-    eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0);
+    eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0, 1);
 }