/*
- * $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
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;
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);
/* 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
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
/*
- * $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
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;
/*
- * $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
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;
/*
- * $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
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;
}
/*
- * $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
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
ipcache_nbgethostbyname(p->host, peerDNSConfigure, p);
}
/* Reconfigure the peers every hour */
- eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600);
+ eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600, 1);
}
/*
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;
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
eventAdd("peerCountMcastPeersStart",
peerCountMcastPeersStart,
p,
- when);
+ when, 1);
p->mcast.flags |= PEER_COUNT_EVENT_PENDING;
}
eventAdd("peerCountMcastPeersDone",
peerCountMcastPeersDone,
psstate,
- Config.neighborTimeout);
+ Config.neighborTimeout, 1);
p->mcast.flags |= PEER_COUNTING;
peerCountMcastPeersSchedule(p, MCAST_COUNT_RATE);
}
/*
- * $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
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
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",
peer *
netdbClosestParent(const char *host)
{
- peer *p = NULL;
#if USE_ICMP
+ peer *p = NULL;
netdbEntry *n;
const ipcache_addrs *ia;
net_db_peer *h;
/*
- * $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
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",
/*
- * $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
eventAdd("peerPingTimeout",
peerPingTimeout,
psstate,
- Config.neighborTimeout);
+ Config.neighborTimeout, 0);
return;
}
}
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);
/*
- * $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
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
/*
- * $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
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);
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);
/*
- * $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
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;
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;
/*
- * $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
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 */
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();
if (sd_state.rebuild_offset >= store_hash_buckets)
storeDigestRebuildFinish();
else
- eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0);
+ eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0, 1);
}
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 */
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();
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
/*
- * $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
if (opt_foreground_rebuild)
storeRebuildADirectory(NULL);
else
- eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0);
+ eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0, 1);
}
#if TEMP_UNUSED_CODE
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
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
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);
}