]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
getAnyParent -- last resort for when all parents down
authorwessels <>
Tue, 13 Oct 1998 03:40:57 +0000 (03:40 +0000)
committerwessels <>
Tue, 13 Oct 1998 03:40:57 +0000 (03:40 +0000)
src/enums.h
src/neighbors.cc
src/peer_select.cc
src/protos.h

index 5b9bb44eaef69fd304a856c89d9ccd1d0f77228b..fcbe91c7c113bf7615ccd106bf3ebd6457f1ad7a 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: enums.h,v 1.134 1998/09/30 02:53:19 wessels Exp $
+ * $Id: enums.h,v 1.135 1998/10/12 21:40:57 wessels Exp $
  *
  *
  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
@@ -295,6 +295,7 @@ typedef enum {
 #if USE_CARP
     CARP,
 #endif
+    ANY_OLD_PARENT,
     HIER_MAX
 } hier_code;
 
index bcddd0130a382219534153699bff2561983a81c9..75608c15770ff0353bf164b40fcd181f2b44eeb4 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: neighbors.cc,v 1.257 1998/10/08 02:40:07 wessels Exp $
+ * $Id: neighbors.cc,v 1.258 1998/10/12 21:40:59 wessels Exp $
  *
  * DEBUG: section 15    Neighbor Routines
  * AUTHOR: Harvest Derived
@@ -274,6 +274,22 @@ getDefaultParent(request_t * request)
     return NULL;
 }
 
+peer *
+getAnyParent(request_t * request)
+{
+    peer *p = NULL;
+    for (p = Config.peers; p; p = p->next) {
+       if (neighborType(p, request) != PEER_PARENT)
+           continue;
+       if (!peerHTTPOkay(p, request))
+           continue;
+       debug(15, 3) ("getAnyParent: returning %s\n", p->host);
+       return p;
+    }
+    debug(15, 3) ("getAnyParent: returning NULL\n");
+    return NULL;
+}
+
 peer *
 getNextPeer(peer * p)
 {
index ddb473fcd40834252cabb7c823d4aa62490fcee0..529d27118297b16ace15aeb44d41e116f07f9c60 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: peer_select.cc,v 1.86 1998/10/11 23:19:48 wessels Exp $
+ * $Id: peer_select.cc,v 1.87 1998/10/12 21:41:00 wessels Exp $
  *
  * DEBUG: section 44    Peer Selection Algorithm
  * AUTHOR: Duane Wessels
@@ -59,6 +59,7 @@ const char *hier_strings[] =
 #if USE_CARP
     "CARP",
 #endif
+    "ANY_PARENT",
     "INVALID CODE"
 };
 
@@ -142,6 +143,10 @@ peerGetSomeParent(request_t * request, hier_code * code)
        *code = FIRSTUP_PARENT;
        return p;
     }
+    if ((p = getAnyParent(request))) {
+       *code = ANY_OLD_PARENT;
+       return p;
+    }
     return NULL;
 }
 
index a98226cb79dc938e15c838edb4a24902d799059d..d4aadad899978eac51a4b474a3418d56bcfbb09e 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: protos.h,v 1.276 1998/10/10 14:57:42 wessels Exp $
+ * $Id: protos.h,v 1.277 1998/10/12 21:41:01 wessels Exp $
  *
  *
  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
@@ -578,6 +578,7 @@ extern void neighbors_open(int);
 extern peer *peerFindByName(const char *);
 extern peer *getDefaultParent(request_t * request);
 extern peer *getRoundRobinParent(request_t * request);
+extern peer *getAnyParent(request_t * request);
 extern lookup_t peerDigestLookup(peer * p, request_t * request, StoreEntry * entry);
 extern peer *neighborsDigestSelect(request_t * request, StoreEntry * entry);
 extern void peerNoteDigestLookup(request_t * request, peer * p, lookup_t lookup);