From: wessels <> Date: Fri, 15 May 1998 21:16:19 +0000 (+0000) Subject: Millisecond timing patch for events, comm_select/comm_poll, etc. X-Git-Tag: SQUID_3_0_PRE1~3318 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5204019364eaf09076222308250406698cc5cc08;p=thirdparty%2Fsquid.git Millisecond timing patch for events, comm_select/comm_poll, etc. peerPingTimeout() now uses double the average peer RTT --- diff --git a/src/comm.cc b/src/comm.cc index 47d2a89d12..9336442657 100644 --- a/src/comm.cc +++ b/src/comm.cc @@ -1,7 +1,7 @@ /* - * $Id: comm.cc,v 1.254 1998/05/11 21:34:10 wessels Exp $ + * $Id: comm.cc,v 1.255 1998/05/15 15:16:19 wessels Exp $ * * DEBUG: section 5 Socket Functions * AUTHOR: Harvest Derived @@ -112,6 +112,12 @@ #include #endif +#if USE_ASYNC_IO +#define MAX_POLL_TIME 50 +#else +#define MAX_POLL_TIME 1000 +#endif + typedef struct { char *host; u_short port; @@ -893,7 +899,7 @@ fdIsHttpOrIcp(int fd) #if HAVE_POLL /* poll all sockets; call handlers for those that are ready. */ int -comm_poll(time_t sec) +comm_poll(int msec) { struct pollfd pfds[SQUID_MAXFD]; PF *hdl = NULL; @@ -904,10 +910,8 @@ comm_poll(time_t sec) int num; static time_t last_timeout = 0; static int lastinc = 0; - int poll_time; static int incoming_counter = 0; - time_t timeout; - timeout = squid_curtime + sec; + double timeout = current_dtime + (msec / 1000.0); do { #if !ALARM_UPDATES_TIME getCurrentTime(); @@ -949,13 +953,10 @@ comm_poll(time_t sec) debug(5, 2) ("comm_poll: Still waiting on %d FDs\n", nfds); if (nfds == 0) return COMM_SHUTDOWN; -#if USE_ASYNC_IO - poll_time = sec > 0 ? 50 : 0; -#else - poll_time = sec > 0 ? 1000 : 0; -#endif + if (msec > MAX_POLL_TIME) + msec = MAX_POLL_TIME; for (;;) { - num = poll(pfds, nfds, poll_time); + num = poll(pfds, nfds, msec); Counter.select_loops++; if (num >= 0) break; @@ -1029,7 +1030,7 @@ comm_poll(time_t sec) lastinc = polledinc; } return COMM_OK; - } while (timeout > squid_curtime); + } while (timeout > current_dtime); debug(5, 8) ("comm_poll: time out: %d.\n", squid_curtime); return COMM_TIMEOUT; } @@ -1038,7 +1039,7 @@ comm_poll(time_t sec) /* Select on all sockets; call handlers for those that are ready. */ int -comm_select(time_t sec) +comm_select(int msec) { fd_set readfds; fd_set writefds; @@ -1052,12 +1053,7 @@ comm_select(time_t sec) static time_t last_timeout = 0; struct timeval poll_time; static int lastinc; - time_t timeout; - - /* assume all process are very fast (less than 1 second). Call - * time() only once */ - /* use only 1 second granularity */ - timeout = squid_curtime + sec; + double timeout = current_dtime + (msec / 1000.0); do { #if !ALARM_UPDATES_TIME @@ -1100,14 +1096,11 @@ comm_select(time_t sec) debug(5, 2) ("comm_select: Still waiting on %d FDs\n", nfds); if (nfds == 0) return COMM_SHUTDOWN; + if (msec > MAX_POLL_TIME) + msec = MAX_POLL_TIME; for (;;) { -#if USE_ASYNC_IO - poll_time.tv_sec = 0; - poll_time.tv_usec = sec > 0 ? 50000 : 0; /* 50 ms */ -#else - poll_time.tv_sec = sec > 0 ? 1 : 0; /* 1 sec */ - poll_time.tv_usec = 0; -#endif + poll_time.tv_sec = msec / 1000; + poll_time.tv_usec = (msec % 1000) * 1000; num = select(maxfd, &readfds, &writefds, NULL, &poll_time); Counter.select_loops++; if (num >= 0) @@ -1166,7 +1159,7 @@ comm_select(time_t sec) lastinc = polledinc; } return COMM_OK; - } while (timeout > squid_curtime); + } while (timeout > current_dtime); debug(5, 8) ("comm_select: time out: %d\n", (int) squid_curtime); return COMM_TIMEOUT; } diff --git a/src/event.cc b/src/event.cc index cc2ab7e63e..1a9a34fd22 100644 --- a/src/event.cc +++ b/src/event.cc @@ -1,6 +1,6 @@ /* - * $Id: event.cc,v 1.16 1998/05/14 20:47:59 wessels Exp $ + * $Id: event.cc,v 1.17 1998/05/15 15:16:20 wessels Exp $ * * DEBUG: section 41 Event Processing * AUTHOR: Henrik Nordstrom @@ -36,7 +36,7 @@ struct ev_entry { EVH *func; void *arg; const char *name; - time_t when; + double when; struct ev_entry *next; int weight; }; @@ -45,18 +45,18 @@ static struct ev_entry *tasks = NULL; static OBJH eventDump; void -eventAdd(const char *name, EVH * func, void *arg, time_t when, int weight) +eventAdd(const char *name, EVH * func, void *arg, double when, int weight) { struct ev_entry *event = xcalloc(1, sizeof(struct ev_entry)); struct ev_entry **E; event->func = func; event->arg = arg; event->name = name; - event->when = squid_curtime + when; + event->when = current_dtime + when; event->weight = weight; if (NULL != arg) - cbdataLock(arg); - debug(41, 7) ("eventAdd: Adding '%s', in %d seconds\n", name, (int) when); + cbdataLock(arg); + debug(41, 7) ("eventAdd: Adding '%s', in %f seconds\n", name, when); /* Insert after the last event with the same or earlier time */ for (E = &tasks; *E; E = &(*E)->next) { if ((*E)->when > event->when) @@ -68,11 +68,15 @@ eventAdd(const char *name, EVH * func, void *arg, time_t when, int weight) /* 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, int weight) +eventAddIsh(const char *name, EVH * func, void *arg, double 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); + if (delta_ish >= 3.0) { + const double two_third = (2.0 * delta_ish) / 3.0; + delta_ish = two_third + (drand48() * two_third); + /* + * I'm sure drand48() isn't portable. Tell me what function + * you have that returns a random double value in the range 0,1. + */ } eventAdd(name, func, arg, delta_ish, weight); } @@ -104,25 +108,25 @@ eventRun(void) void *arg; int weight = 0; while (0 == weight) { - if ((event = tasks) == NULL) + if ((event = tasks) == NULL) break; - if (event->when > squid_curtime) + if (event->when > current_dtime) 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); + 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); } } @@ -131,7 +135,7 @@ eventNextTime(void) { if (!tasks) return (time_t) 10; - return tasks->when - squid_curtime; + return (time_t) ((tasks->when - current_dtime) * 1000); } void @@ -150,8 +154,8 @@ eventDump(StoreEntry * sentry) "Operation", "Next Execution"); while (e != NULL) { - storeAppendPrintf(sentry, "%s\t%d seconds\n", - e->name, (int) (e->when - squid_curtime)); + storeAppendPrintf(sentry, "%s\t%f seconds\n", + e->name, e->when - current_dtime); e = e->next; } } diff --git a/src/fqdncache.cc b/src/fqdncache.cc index 09db48e806..8b362cab0e 100644 --- a/src/fqdncache.cc +++ b/src/fqdncache.cc @@ -1,6 +1,6 @@ /* - * $Id: fqdncache.cc,v 1.101 1998/05/14 20:48:00 wessels Exp $ + * $Id: fqdncache.cc,v 1.102 1998/05/15 15:16:21 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, 1); + eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 10.0, 1); for (m = lru_list.tail; m; m = prev) { if (memInUse(MEM_FQDNCACHE_ENTRY) < fqdncache_low) break; diff --git a/src/globals.h b/src/globals.h index 5ef074be4a..676f57c4b1 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1,6 +1,6 @@ /* - * $Id: globals.h,v 1.54 1998/04/24 07:09:33 wessels Exp $ + * $Id: globals.h,v 1.55 1998/05/15 15:16:22 wessels Exp $ */ extern FILE *debug_log; /* NULL */ @@ -92,6 +92,7 @@ extern char *icp_opcode_str[]; extern char *swap_log_op_str[]; extern char *lookup_t_str[]; extern double request_failure_ratio; /* 0.0 */ +extern double current_dtime; extern int store_hash_buckets; /* 0 */ extern hash_table *store_table; /* NULL */ extern dlink_list store_list; diff --git a/src/ipcache.cc b/src/ipcache.cc index 23b23521b0..d29816dd88 100644 --- a/src/ipcache.cc +++ b/src/ipcache.cc @@ -1,6 +1,6 @@ /* - * $Id: ipcache.cc,v 1.186 1998/05/14 20:48:01 wessels Exp $ + * $Id: ipcache.cc,v 1.187 1998/05/15 15:16:23 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, 1); + eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 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 5b7c501c9e..541ecc813e 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,6 +1,6 @@ /* - * $Id: main.cc,v 1.250 1998/05/14 20:48:03 wessels Exp $ + * $Id: main.cc,v 1.251 1998/05/15 15:16:25 wessels Exp $ * * DEBUG: section 1 Startup and Main Loop * AUTHOR: Harvest Derived @@ -465,7 +465,7 @@ mainInitialize(void) redirectOpenServers(); useragentOpenLog(); httpHeaderInitModule(); /* must go before any header processing (e.g. the one in errorInitialize) */ - httpAnonInitModule(); /* must go before accepting requests */ + httpAnonInitModule(); /* must go before accepting requests */ errorInitialize(); accessLogInit(); #ifdef SQUID_SNMP @@ -517,12 +517,12 @@ mainInitialize(void) debug(1, 0) ("Ready to serve requests.\n"); if (!configured_once) { - eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1, 1); - eventAdd("storeDirClean", storeDirClean, NULL, 15, 1); + eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1.0, 1); + eventAdd("storeDirClean", storeDirClean, NULL, 15.0, 1); if (Config.onoff.announce) - eventAdd("start_announce", start_announce, NULL, 3600, 1); - eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10, 1); - eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15, 1); + eventAdd("start_announce", start_announce, NULL, 3600.0, 1); + eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 1); + eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15.0, 1); } configured_once = 1; } diff --git a/src/neighbors.cc b/src/neighbors.cc index 40c717837c..3a1b7af186 100644 --- a/src/neighbors.cc +++ b/src/neighbors.cc @@ -1,6 +1,6 @@ /* - * $Id: neighbors.cc,v 1.209 1998/05/14 20:48:05 wessels Exp $ + * $Id: neighbors.cc,v 1.210 1998/05/15 15:16:27 wessels Exp $ * * DEBUG: section 15 Neighbor Routines * AUTHOR: Harvest Derived @@ -413,7 +413,8 @@ neighborsUdpPing(request_t * request, StoreEntry * entry, IRCB * callback, void *callback_data, - int *exprep) + int *exprep, + double *exprtt) { const char *url = storeUrl(entry); MemObject *mem = entry->mem_obj; @@ -433,6 +434,7 @@ neighborsUdpPing(request_t * request, mem->start_ping = current_time; mem->icp_reply_callback = callback; mem->ircb_data = callback_data; + *exprtt = 0.0; for (i = 0, p = first_ping; i++ < Config.npeers; p = p->next) { if (p == NULL) p = Config.peers; @@ -494,6 +496,7 @@ neighborsUdpPing(request_t * request, } else if (neighborUp(p)) { /* its alive, expect a reply from it */ (*exprep)++; + (*exprtt) += (double) p->stats.rtt; } else { /* Neighbor is dead; ping it anyway, but don't expect a reply */ /* log it once at the threshold */ @@ -544,6 +547,13 @@ neighborsUdpPing(request_t * request, request->hierarchy.n_sent = peers_pinged; request->hierarchy.n_expect = *exprep; #endif + /* + * Average out the expected RTT and then double it + */ + if (*exprep > 0) + (*exprtt) = 2.0 * (*exprtt) / (double) (*exprep); + else + *exprtt = Config.neighborTimeout; return peers_pinged; } @@ -570,7 +580,7 @@ peerDigestLookup(peer * p, request_t * request, StoreEntry * entry) debug(15, 5) ("peerDigestLookup: !initialized\n"); if (!EBIT_TEST(p->digest.flags, PD_INIT_PENDING)) { EBIT_SET(p->digest.flags, PD_INIT_PENDING); - eventAdd("peerDigestInit", peerDigestInit, p, 0); + eventAdd("peerDigestInit", peerDigestInit, p, 0.0, 1); } return LOOKUP_NONE; } else { @@ -939,7 +949,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, 1); + eventAddIsh("netdbExchangeStart", netdbExchangeStart, p, 30.0, 1); } static void @@ -954,7 +964,7 @@ peerRefreshDNS(void *datanotused) ipcache_nbgethostbyname(p->host, peerDNSConfigure, p); } /* Reconfigure the peers every hour */ - eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600, 1); + eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600.0, 1); } /* @@ -994,7 +1004,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, 1); + eventAdd("peerCheckConnect", peerCheckConnect, p, 80.0, 1); } comm_close(fd); return; @@ -1008,7 +1018,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, 1); + eventAdd("peerCheckConnect", peerCheckConnect, p, 80.0, 1); } static void @@ -1019,7 +1029,7 @@ peerCountMcastPeersSchedule(peer * p, time_t when) eventAdd("peerCountMcastPeersStart", peerCountMcastPeersStart, p, - when, 1); + (double) when, 1); p->mcast.flags |= PEER_COUNT_EVENT_PENDING; } @@ -1059,7 +1069,7 @@ peerCountMcastPeersStart(void *data) eventAdd("peerCountMcastPeersDone", peerCountMcastPeersDone, psstate, - Config.neighborTimeout, 1); + (double) 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 136c6e303a..9c1d44f0aa 100644 --- a/src/net_db.cc +++ b/src/net_db.cc @@ -1,6 +1,6 @@ /* - * $Id: net_db.cc,v 1.101 1998/05/14 20:48:06 wessels Exp $ + * $Id: net_db.cc,v 1.102 1998/05/15 15:16:28 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)); - eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600, 1); + eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600.0, 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); - eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600, 1); + eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600.0, 1); netdbReloadState(); cachemgrRegister("netdb", "Network Measurement Database", diff --git a/src/peer_digest.cc b/src/peer_digest.cc index b66acfd827..a06403e2b9 100644 --- a/src/peer_digest.cc +++ b/src/peer_digest.cc @@ -1,6 +1,6 @@ /* - * $Id: peer_digest.cc,v 1.29 1998/05/14 20:48:07 wessels Exp $ + * $Id: peer_digest.cc,v 1.30 1998/05/15 15:16:29 wessels Exp $ * * DEBUG: section 72 Peer Digest Routines * AUTHOR: Alex Rousskov @@ -71,10 +71,10 @@ peerDigestInit(void *data) { peer *p = data; assert(p); - assert(p->digest.flags == (1<digest.flags == (1 << PD_INIT_PENDING)); assert(!p->digest.cd); assert(SM_PAGE_SIZE == 4096); /* we use MEM_4K_BUF */ -debug(0,0)("peerDigestInit: called for %s\n", p->host); + debug(0, 0) ("peerDigestInit: called for %s\n", p->host); if (EBIT_TEST(p->options, NEIGHBOR_NO_DIGEST)) { peerDigestDisable(p); } else { @@ -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, 1); + eventAdd("peerDigestValidate", peerDigestValidate, p, (double) delay, 1); } else { assert(disable); debug(72, 2) ("peerDigestDisable: disabling peer %s for good\n", @@ -154,7 +154,7 @@ peerDigestDelay(peer * p, int disable, time_t delay) /* request new digest if our copy is too old; schedule next validation */ static void -peerDigestValidate(void * data) +peerDigestValidate(void *data) { peer *p = data; StoreEntry *e = NULL; @@ -244,8 +244,8 @@ peerDigestRequest(peer * p) debug(72, 2) ("peerDigestRequest: %s key: %s\n", url, storeKeyText(key)); req = urlParse(METHOD_GET, url); if (NULL == req) { - debug(72,1)("peerDigestRequest: Bad URI: %s\n", url); - return; /* @?@ */ + debug(72, 1) ("peerDigestRequest: Bad URI: %s\n", url); + return; /* @?@ */ } requestLink(req); assert(req); diff --git a/src/peer_select.cc b/src/peer_select.cc index 4f760bdb20..b5e06a1ff2 100644 --- a/src/peer_select.cc +++ b/src/peer_select.cc @@ -1,6 +1,6 @@ /* - * $Id: peer_select.cc,v 1.57 1998/05/14 20:48:08 wessels Exp $ + * $Id: peer_select.cc,v 1.58 1998/05/15 15:16:30 wessels Exp $ * * DEBUG: section 44 Peer Selection Algorithm * AUTHOR: Duane Wessels @@ -238,6 +238,7 @@ peerSelectFoo(ps_state * psstate) StoreEntry *entry = psstate->entry; request_t *request = psstate->request; int direct; + double expected_rtt; debug(44, 3) ("peerSelectFoo: '%s %s'\n", RequestMethodStr[request->method], request->host); @@ -294,9 +295,9 @@ peerSelectFoo(ps_state * psstate) request->hier.alg = PEER_SA_NETDB; code = CLOSEST_PARENT; debug(44, 2) ("peerSelect: %s/%s\n", hier_strings[code], p->host); - hierarchyNote(&request->hier, code, &psstate->icp, p->host); - peerSelectCallback(psstate, p); - return; + hierarchyNote(&request->hier, code, &psstate->icp, p->host); + peerSelectCallback(psstate, p); + return; } else if (peerSelectIcpPing(request, direct, entry)) { assert(entry->ping_status == PING_NONE); request->hier.alg = PEER_SA_ICP; @@ -306,17 +307,19 @@ peerSelectFoo(ps_state * psstate) entry, peerHandleIcpReply, psstate, - &psstate->icp.n_replies_expected); + &psstate->icp.n_replies_expected, + &expected_rtt); if (psstate->icp.n_sent == 0) debug(44, 0) ("WARNING: neighborsUdpPing returned 0\n"); - debug(44,3)("peerSelectFoo: %d ICP replies expected\n", - psstate->icp.n_replies_expected); + debug(44, 3) ("peerSelectFoo: %d ICP replies expected, RTT %f\n", + psstate->icp.n_replies_expected, expected_rtt); if (psstate->icp.n_replies_expected > 0) { entry->ping_status = PING_WAITING; eventAdd("peerPingTimeout", peerPingTimeout, psstate, - Config.neighborTimeout, 0); + expected_rtt, + 0); return; } } diff --git a/src/protos.h b/src/protos.h index 2d474b47a6..48565264e2 100644 --- a/src/protos.h +++ b/src/protos.h @@ -106,9 +106,9 @@ extern int comm_listen(int sock); extern int comm_open(int, int, struct in_addr, u_short port, int, const char *note); extern u_short comm_local_port(int fd); #if HAVE_POLL -extern int comm_poll(time_t); +extern int comm_poll(int); #else -extern int comm_select(time_t); +extern int comm_select(int); #endif extern void commSetSelect(int, unsigned int, PF *, void *, time_t); extern void comm_add_close_handler(int fd, PF *, void *); @@ -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, int); -extern void eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish, int); +extern void eventAdd(const char *name, EVH * func, void *arg, double when, int); +extern void eventAddIsh(const char *name, EVH * func, void *arg, double delta_ish, int); extern void eventRun(void); extern time_t eventNextTime(void); extern void eventDelete(EVH * func, void *arg); @@ -232,7 +232,7 @@ extern void httpProcessReplyHeader(HttpStateData *, const char *, int); extern size_t httpBuildRequestPrefix(request_t * request, request_t * orig_request, StoreEntry * entry, - MemBuf *mb, + MemBuf * mb, int cfd, int flags); extern void httpAnonInitModule(); @@ -271,7 +271,7 @@ extern void httpBodyPackInto(const HttpBody * body, Packer * p); extern void httpHdrCcInitModule(); extern void httpHdrCcCleanModule(); extern HttpHdrCc *httpHdrCcCreate(); -extern HttpHdrCc *httpHdrCcParseCreate(const String *str); +extern HttpHdrCc *httpHdrCcParseCreate(const String * str); extern void httpHdrCcDestroy(HttpHdrCc * cc); extern HttpHdrCc *httpHdrCcDup(const HttpHdrCc * cc); extern void httpHdrCcPackInto(const HttpHdrCc * cc, Packer * p); @@ -281,9 +281,9 @@ extern void httpHdrCcUpdateStats(const HttpHdrCc * cc, StatHist * hist); extern void httpHdrCcStatDumper(StoreEntry * sentry, int idx, double val, double size, int count); /* Http Range Header Field */ -extern HttpHdrRange *httpHdrRangeParseCreate(const String *range_spec); +extern HttpHdrRange *httpHdrRangeParseCreate(const String * range_spec); /* returns true if ranges are valid; inits HttpHdrRange */ -extern int httpHdrRangeParseInit(HttpHdrRange * range, const String *range_spec); +extern int httpHdrRangeParseInit(HttpHdrRange * range, const String * range_spec); extern void httpHdrRangeDestroy(HttpHdrRange * range); extern HttpHdrRange *httpHdrRangeDup(const HttpHdrRange * range); extern void httpHdrRangePackInto(const HttpHdrRange * range, Packer * p); @@ -304,10 +304,10 @@ extern void httpHeaderDestroyFieldsInfo(HttpHeaderFieldInfo * info, int count); extern int httpHeaderIdByName(const char *name, int name_len, const HttpHeaderFieldInfo * attrs, int end); extern void httpHeaderMaskInit(HttpHeaderMask * mask); extern void httpHeaderCalcMask(HttpHeaderMask * mask, const int *enums, int count); -extern int httpHeaderHasConnDir(const HttpHeader *hdr, const char *directive); -extern void strListAdd(String *str, const char *item, char del); -extern int strListIsMember(const String *str, const char *item, char del); -extern int strListGetItem(const String *str, char del, const char **item, int *ilen, const char **pos); +extern int httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive); +extern void strListAdd(String * str, const char *item, char del); +extern int strListIsMember(const String * str, const char *item, char del); +extern int strListGetItem(const String * str, char del, const char **item, int *ilen, const char **pos); extern const char *getStringPrefix(const char *str, const char *end); extern int httpHeaderParseInt(const char *start, int *val); extern int httpHeaderParseSize(const char *start, size_t * sz); @@ -329,7 +329,7 @@ extern void httpHeaderPutInt(HttpHeader * hdr, http_hdr_type type, int number); extern void httpHeaderPutTime(HttpHeader * hdr, http_hdr_type type, time_t time); extern void httpHeaderPutStr(HttpHeader * hdr, http_hdr_type type, const char *str); extern void httpHeaderPutAuth(HttpHeader * hdr, const char *authScheme, const char *realm); -extern void httpHeaderPutCc(HttpHeader * hdr, const HttpHdrCc *cc); +extern void httpHeaderPutCc(HttpHeader * hdr, const HttpHdrCc * cc); extern void httpHeaderPutExt(HttpHeader * hdr, const char *name, const char *value); extern int httpHeaderGetInt(const HttpHeader * hdr, http_hdr_type id); extern time_t httpHeaderGetTime(const HttpHeader * hdr, http_hdr_type id); @@ -351,7 +351,7 @@ extern void httpHeaderEntryPackInto(const HttpHeaderEntry * e, Packer * p); extern void httpHeaderStoreReport(StoreEntry * e); /* Http Msg (currently in HttpReply.c @?@ ) */ -extern int httpMsgIsPersistent(float http_ver, const HttpHeader *hdr); +extern int httpMsgIsPersistent(float http_ver, const HttpHeader * hdr); extern int httpMsgIsolateHeaders(const char **parse_start, const char **blk_start, const char **blk_end); /* Http Reply */ @@ -392,9 +392,9 @@ extern request_t *requestCreate(method_t, protocol_t, const char *urlpath); extern void requestDestroy(request_t *); extern request_t *requestLink(request_t *); extern void requestUnlink(request_t *); -extern int httpRequestParseHeader(request_t *req, const char *parse_start); +extern int httpRequestParseHeader(request_t * req, const char *parse_start); extern void httpRequestSetHeaders(request_t *, method_t, const char *uri, const char *header_str); -extern int httpRequestHdrAllowed(const HttpHeaderEntry *e, String *strConnection); +extern int httpRequestHdrAllowed(const HttpHeaderEntry * e, String * strConnection); extern void icmpOpen(void); extern void icmpClose(void); @@ -505,7 +505,8 @@ extern int neighborsUdpPing(request_t *, StoreEntry *, IRCB * callback, void *data, - int *exprep); + int *exprep, + double *exprtt); extern void neighborAddAcl(const char *, const char *); extern void neighborsUdpAck(const cache_key *, icp_common_t *, const struct sockaddr_in *); extern void neighborAdd(const char *, const char *, int, int, int, int, int); diff --git a/src/send-announce.cc b/src/send-announce.cc index 19956ad7f0..4416f75716 100644 --- a/src/send-announce.cc +++ b/src/send-announce.cc @@ -1,6 +1,6 @@ /* - * $Id: send-announce.cc,v 1.50 1998/05/14 20:48:11 wessels Exp $ + * $Id: send-announce.cc,v 1.51 1998/05/15 15:16:32 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, 1); + eventAdd("send_announce", start_announce, NULL, (double) Config.Announce.period, 1); } static void diff --git a/src/stat.cc b/src/stat.cc index d5e2073e2f..1d672a84fe 100644 --- a/src/stat.cc +++ b/src/stat.cc @@ -1,6 +1,6 @@ /* - * $Id: stat.cc,v 1.247 1998/05/14 20:48:12 wessels Exp $ + * $Id: stat.cc,v 1.248 1998/05/15 15:16:33 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, 1); + eventAdd("statAvgTick", statAvgTick, NULL, (double) COUNT_INTERVAL, 1); cachemgrRegister("info", "General Runtime Information", info_get, 0); diff --git a/src/store.cc b/src/store.cc index dda67107cf..ce300a941c 100644 --- a/src/store.cc +++ b/src/store.cc @@ -1,6 +1,6 @@ /* - * $Id: store.cc,v 1.414 1998/05/14 20:48:15 wessels Exp $ + * $Id: store.cc,v 1.415 1998/05/15 15:16:35 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, 1); + eventAdd("storeMaintainSwapSpace", storeMaintainSwapSpace, NULL, 1.0, 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 23dd326597..74ccc31bba 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, 0); + eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0.0, 0); return; } cbdataLock(sc); /* ick, prevent sc from getting freed */ diff --git a/src/store_digest.cc b/src/store_digest.cc index 6df82f0155..452d299e3d 100644 --- a/src/store_digest.cc +++ b/src/store_digest.cc @@ -1,5 +1,5 @@ /* - * $Id: store_digest.cc,v 1.16 1998/05/14 20:48:17 wessels Exp $ + * $Id: store_digest.cc,v 1.17 1998/05/15 15:16:37 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, 1); + eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.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, 1); + eventAdd("storeDigestRebuildStart", storeDigestRebuildStart, NULL, (double) 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, 1); + eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.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, 1); + eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, sd_state.rewrite_lock, 0.0, 1); } /* finishes swap out sequence for the digest; schedules next rewrite */ @@ -311,14 +311,14 @@ storeDigestRewriteFinish(StoreEntry * e) requestUnlink(e->mem_obj->request); e->mem_obj->request = NULL; storeUnlockObject(e); - /* - * note, it won't really get free()'d here because we used - * MEM_DONTFREE in the call to cbdataAdd(). - */ + /* + * note, it won't really get free()'d here because we used + * MEM_DONTFREE in the call to cbdataAdd(). + */ cbdataFree(sd_state.rewrite_lock); sd_state.rewrite_lock = e = NULL; sd_state.rewrite_count++; - eventAdd("storeDigestRewriteStart", storeDigestRewriteStart, NULL, StoreDigestRewritePeriod, 1); + eventAdd("storeDigestRewriteStart", storeDigestRewriteStart, NULL, (double) StoreDigestRewritePeriod, 1); /* resume pending Rebuild if any */ if (sd_state.rebuild_lock) storeDigestRebuildResume(); @@ -326,9 +326,9 @@ storeDigestRewriteFinish(StoreEntry * e) /* swaps out one digest "chunk" per invocation; schedules next swap out */ static void -storeDigestSwapOutStep(void * data) +storeDigestSwapOutStep(void *data) { - StoreEntry * e = data; + StoreEntry *e = data; int chunk_size = StoreDigestSwapOutChunkSize; assert(e); assert(e == sd_state.rewrite_lock); @@ -343,7 +343,7 @@ storeDigestSwapOutStep(void * data) if (sd_state.rewrite_offset >= store_digest->mask_size) storeDigestRewriteFinish(e); else - eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0, 1); + eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0.0, 1); } static void diff --git a/src/store_rebuild.cc b/src/store_rebuild.cc index 355d748829..5e858c7004 100644 --- a/src/store_rebuild.cc +++ b/src/store_rebuild.cc @@ -1,5 +1,5 @@ /* - * $Id: store_rebuild.cc,v 1.37 1998/05/14 20:48:18 wessels Exp $ + * $Id: store_rebuild.cc,v 1.38 1998/05/15 15:16:38 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, 1); + eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0.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, 1); + eventAdd("storeCleanup", storeCleanup, NULL, 0.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, 1); + eventAdd("storeCleanup", storeCleanup, NULL, 0.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, 1); + eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0.0, 1); } diff --git a/src/tools.cc b/src/tools.cc index b80886a0b2..f217505838 100644 --- a/src/tools.cc +++ b/src/tools.cc @@ -1,6 +1,6 @@ /* - * $Id: tools.cc,v 1.153 1998/04/08 00:34:20 wessels Exp $ + * $Id: tools.cc,v 1.154 1998/05/15 15:16:39 wessels Exp $ * * DEBUG: section 21 Misc Functions * AUTHOR: Harvest Derived @@ -718,6 +718,8 @@ getCurrentTime(void) #else gettimeofday(¤t_time, NULL); #endif + current_dtime = (double) current_time.tv_sec + + (double) current_time.tv_usec / 1000000.0; return squid_curtime = current_time.tv_sec; }