From: wessels <> Date: Fri, 15 May 1998 02:47:59 +0000 (+0000) Subject: Added weights to event structure. We need to run ALL X-Git-Tag: SQUID_3_0_PRE1~3320 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f720985e22391df936a5e5fb27fe5803051571e4;p=thirdparty%2Fsquid.git Added weights to event structure. We need to run ALL "lightweight" events like peerPingTimeout and storeClientCopyEvent instead of just one event per call from the select loop --- diff --git a/src/event.cc b/src/event.cc index 91cc23d86f..cc2ab7e63e 100644 --- a/src/event.cc +++ b/src/event.cc @@ -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 diff --git a/src/fqdncache.cc b/src/fqdncache.cc index c861ba9dfd..09db48e806 100644 --- a/src/fqdncache.cc +++ b/src/fqdncache.cc @@ -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; diff --git a/src/ipcache.cc b/src/ipcache.cc index 9388879325..23b23521b0 100644 --- a/src/ipcache.cc +++ b/src/ipcache.cc @@ -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; diff --git a/src/main.cc b/src/main.cc index c813a051d4..5b7c501c9e 100644 --- a/src/main.cc +++ b/src/main.cc @@ -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; } diff --git a/src/neighbors.cc b/src/neighbors.cc index 523b8685b0..40c717837c 100644 --- a/src/neighbors.cc +++ b/src/neighbors.cc @@ -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); } diff --git a/src/net_db.cc b/src/net_db.cc index 6b6b18dd20..136c6e303a 100644 --- a/src/net_db.cc +++ b/src/net_db.cc @@ -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; diff --git a/src/peer_digest.cc b/src/peer_digest.cc index 41e6da83cd..b66acfd827 100644 --- a/src/peer_digest.cc +++ b/src/peer_digest.cc @@ -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 : "", 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", diff --git a/src/peer_select.cc b/src/peer_select.cc index e105c97584..4f760bdb20 100644 --- a/src/peer_select.cc +++ b/src/peer_select.cc @@ -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; } } diff --git a/src/protos.h b/src/protos.h index b09c1a6f80..2d474b47a6 100644 --- a/src/protos.h +++ b/src/protos.h @@ -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); diff --git a/src/send-announce.cc b/src/send-announce.cc index c3c2955d5c..19956ad7f0 100644 --- a/src/send-announce.cc +++ b/src/send-announce.cc @@ -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 diff --git a/src/stat.cc b/src/stat.cc index dd22c0e14f..d5e2073e2f 100644 --- a/src/stat.cc +++ b/src/stat.cc @@ -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); diff --git a/src/store.cc b/src/store.cc index 9e08668d79..dda67107cf 100644 --- a/src/store.cc +++ b/src/store.cc @@ -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; diff --git a/src/store_client.cc b/src/store_client.cc index c89a754085..f02121a3bb 100644 --- a/src/store_client.cc +++ b/src/store_client.cc @@ -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; diff --git a/src/store_digest.cc b/src/store_digest.cc index b3d6d1c690..6df82f0155 100644 --- a/src/store_digest.cc +++ b/src/store_digest.cc @@ -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 diff --git a/src/store_rebuild.cc b/src/store_rebuild.cc index e5835cf12e..355d748829 100644 --- a/src/store_rebuild.cc +++ b/src/store_rebuild.cc @@ -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); }