You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by sf...@apache.org on 2010/07/31 21:56:51 UTC
svn commit: r981084 - in /httpd/httpd/trunk:
docs/manual/mod/mod_unique_id.xml modules/metadata/mod_unique_id.c
Author: sf
Date: Sat Jul 31 19:56:51 2010
New Revision: 981084
URL: http://svn.apache.org/viewvc?rev=981084&view=rev
Log:
Update docs and comment: the unique id is now 24 characters, not 19
Submitted by: Takashi Sato <takashi lans-tv com>, Stefan Fritsch
PR: 36269
Modified:
httpd/httpd/trunk/docs/manual/mod/mod_unique_id.xml
httpd/httpd/trunk/modules/metadata/mod_unique_id.c
Modified: httpd/httpd/trunk/docs/manual/mod/mod_unique_id.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_unique_id.xml?rev=981084&r1=981083&r2=981084&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_unique_id.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_unique_id.xml Sat Jul 31 19:56:51 2010
@@ -82,7 +82,10 @@ identifier for each request</description
<p>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.</p>
@@ -152,11 +155,13 @@ identifier for each request</description
even still, if you're running NTP then your UTC time will be
correct very shortly after reboot.</p>
+ <!-- FIXME: thread_index is unsigned int, so not always 32bit.-->
<p>The <code>UNIQUE_ID</code> 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 <code>[A-Za-z0-9@-]</code> 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 <code>[A-Za-z0-9+/]</code> however
<code>+</code> and <code>/</code> need to be specially encoded
in URLs, which makes them less desirable. All values are
@@ -182,8 +187,7 @@ identifier for each request</description
issuing the new encodings.</p>
<p>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
Modified: httpd/httpd/trunk/modules/metadata/mod_unique_id.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/metadata/mod_unique_id.c?rev=981084&r1=981083&r2=981084&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/metadata/mod_unique_id.c (original)
+++ httpd/httpd/trunk/modules/metadata/mod_unique_id.c Sat Jul 31 19:56:51 2010
@@ -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