Hi,
as part generalizing the concept from
https://github.com/apache/trafficserver/pull/199
<https://github.com/apache/trafficserver/pull/199>, I’ve filed a Jira to add
appropriate APIs and I_Machine.h / Machine.cc <http://machine.cc/> support for
the concept of a process UUID. The apidefs.h are
/* --------------------------------------------------------------------------
Interface for the UUID APIs. https://www.ietf.org/rfc/rfc4122.txt
<https://www.ietf.org/rfc/rfc4122.txt> . */
typedef enum {
TS_UUID_V1 = 1,
TS_UUID_V2,
TS_UUID_V3,
TS_UUID_V4, /* At this point, this is the only implemented version (or
variant) */
TS_UUID_V5,
} TSUuidVersion;
#define TSUuidStringLen 36
typedef struct tsapi_uuid *TSUuid;
The ts.h APIs are:
/* APIs for dealing with UUIDs, either self made, or the system wide process
UUID. */
tsapi TSUuid TSUuidCreate(TSUuidVersion v);
tsapi TSReturnCode TSUuidDestroy(TSUuid uuid);
tsapi TSReturnCode TSUuidCopy(TSUuid dest, TSUuid src);
tsapi TSReturnCode TSUuidInitialize(TSUuid uuid); /* Re-generate the UUID */
tsapi const TSUuid TSProcessUuidGet();
tsapi const char *TSUuidStringGet(const TSUuid uuid);
and an additional API to expose the already existing HttpSM (Txn) sequence ID:
/* Get the Txn's (HttpSM's) unique identifier, which is a sequence number since
server start) */
tsapi int64_t TSHttpTxnIdGet();
The APIs are documented in a separate Sphinx file, i.e. no doxygen crud in the
ts.h file :). The TSUuidInitialize() functions is maybe a little confusing,
what it does is basically re-initialize the UUID object, thus creating a new
UUID value. Also, the UUID implementation does not rely on any external
dependency, it’s easy enough to implement this ourselves.
I’m definitely open for suggestions for improvements and better naming
conventions, but of course have reasonable arguments. There will be a couple of
more Jira’s to complete Acacio’s initial work here, go get log tags as well as
use these UUIDs in e.g. HttpSM diagnostic traces.
Cheers,
— leif
P.s
It does have regression tests:
[root@fedora ats]# ./bin/traffic_server -R 1 -r SDK_API_UUID
traffic_server: using root directory '/opt/ats'
REGRESSION_TEST initialization begun
REGRESSION TEST SDK_API_UUID started
[SDK_API_UUID] TSProcessUuidGet : [TestCase1] <<PASS>> { ok }
[SDK_API_UUID] TSProcessUuidGet : [TestCase2] <<PASS>> { ok }
[SDK_API_UUID] TSUuidStringGet : [TestCase1] <<PASS>> { ok }
[SDK_API_UUID] TSUuidCreate : [TestCase1] <<PASS>> { ok }
[SDK_API_UUID] TSUuidCopy : [TestCase1] <<PASS>> { ok }
[SDK_API_UUID] TSUuidCopy : [TestCase2] <<PASS>> { ok }
[SDK_API_UUID] TSUuidInitialize : [TestCase1] <<PASS>> { ok }
[SDK_API_UUID] TSUuidInitialize : [TestCase2] <<PASS>> { ok }
[SDK_API_UUID] TSUuidDestroy : [TestCase1] <<PASS>> { ok }
REGRESSION_RESULT SDK_API_UUID: PASSED
REGRESSION_TEST DONE: PASSED