From: Yann Ylavic Date: Mon, 11 May 2015 09:49:15 +0000 (+0000) Subject: Merge r981084 from trunk. X-Git-Tag: 2.2.30~117 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a05a9caa091a12684cc90439fb17cb9b9e26c80;p=thirdparty%2Fapache%2Fhttpd.git Merge r981084 from trunk. Update docs and comment: the unique id is now 24 characters, not 19 Submitted by: Takashi Sato , Stefan Fritsch PR: 36269 Committed by: sf Reviewed by: jailletc36, ylavic, rjung Backported by: ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1678709 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/STATUS b/STATUS index 3330aacec20..208c4152020 100644 --- a/STATUS +++ b/STATUS @@ -101,13 +101,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_unique_id: Update docs and comment: the unique id is now 24 characters, not 19 - See explanation in: - http://httpd.apache.org/docs/2.2/mod/mod_unique_id.html#comment_3564 - trunk patch: http://svn.apache.org/r981084 - 2.2.x patch: trunks works - +1 jailletc36, ylavic, rjung - * mod_dav: Avoid some work that is unnecessary and often very time consuming. This helps mitigate Subversion issue #4531: http://subversion.tigris.org/issues/show_bug.cgi?id=4531 diff --git a/docs/manual/mod/mod_unique_id.xml b/docs/manual/mod/mod_unique_id.xml index 39d6dbcb55a..df76ae7b8fe 100644 --- a/docs/manual/mod/mod_unique_id.xml +++ b/docs/manual/mod/mod_unique_id.xml @@ -82,7 +82,10 @@ identifier for each request

Given those assumptions, at a single point in time we can identify any httpd process on any machine in the cluster from all other httpd processes. The machine's IP address and the pid - of the httpd process are sufficient to do this. So in order to + of the httpd process are sufficient to do this. A httpd process + can handle multiple requests simultaneously if you use a + multi-threaded MPM. In order to identify threads, we use a thread + index Apache httpd uses internally. So in order to generate unique identifiers for requests we need only distinguish between different points in time.

@@ -152,11 +155,13 @@ identifier for each request even still, if you're running NTP then your UTC time will be correct very shortly after reboot.

+

The UNIQUE_ID environment variable is - constructed by encoding the 112-bit (32-bit IP address, 32 bit - pid, 32 bit time stamp, 16 bit counter) quadruple using the + constructed by encoding the 144-bit (32-bit IP address, 32 bit + pid, 32 bit time stamp, 16 bit counter, 32 bit thread index) + quadruple using the alphabet [A-Za-z0-9@-] in a manner similar to MIME - base64 encoding, producing 19 characters. The MIME base64 + base64 encoding, producing 24 characters. The MIME base64 alphabet is actually [A-Za-z0-9+/] however + and / need to be specially encoded in URLs, which makes them less desirable. All values are @@ -182,8 +187,7 @@ identifier for each request issuing the new encodings.

This we believe is a relatively portable solution to this - problem. It can be extended to multithreaded systems like - Windows NT, and can grow with future needs. The identifiers + problem. The identifiers generated have essentially an infinite life-time because future identifiers can be made longer as required. Essentially no communication is required between machines in the cluster (only diff --git a/modules/metadata/mod_unique_id.c b/modules/metadata/mod_unique_id.c index a78e0206803..4227dc9ddc8 100644 --- a/modules/metadata/mod_unique_id.c +++ b/modules/metadata/mod_unique_id.c @@ -79,8 +79,8 @@ typedef struct { * saving cpu cycles. The counter is never reset, and is used to permit up to * 64k requests in a single second by a single child. * - * The 112-bits of unique_id_rec are encoded using the alphabet - * [A-Za-z0-9@-], resulting in 19 bytes of printable characters. That is then + * The 144-bits of unique_id_rec are encoded using the alphabet + * [A-Za-z0-9@-], resulting in 24 bytes of printable characters. That is then * stuffed into the environment variable UNIQUE_ID so that it is available to * other modules. The alphabet choice differs from normal base64 encoding * [A-Za-z0-9+/] because + and / are special characters in URLs and we want to