com.microsoft.sqlserver.jdbc.ActivityCorrelator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mssql-jdbc Show documentation
Show all versions of mssql-jdbc Show documentation
Microsoft JDBC Driver for SQL Server.
/*
* Microsoft JDBC Driver for SQL Server
*
* Copyright(c) Microsoft Corporation All rights reserved.
*
* This program is made available under the terms of the MIT License. See the LICENSE file in the project root for more information.
*/
package com.microsoft.sqlserver.jdbc;
import java.util.UUID;
/**
* ActivityCorrelator provides the APIs to access the ActivityId in TLS
*/
final class ActivityCorrelator {
private static ThreadLocal ActivityIdTls = new ThreadLocal() {
protected ActivityId initialValue() {
return new ActivityId();
}
};
// Get the current ActivityId in TLS
static ActivityId getCurrent() {
// get the value in TLS, not reference
return ActivityIdTls.get();
}
// Increment the Sequence number of the ActivityId in TLS
// and return the ActivityId with new Sequence number
static ActivityId getNext() {
// We need to call get() method on ThreadLocal to get
// the current value of ActivityId stored in TLS,
// then increment the sequence number.
// Get the current ActivityId in TLS
ActivityId activityId = getCurrent();
// Increment the Sequence number
activityId.Increment();
return activityId;
}
static void setCurrentActivityIdSentFlag() {
ActivityId activityId = getCurrent();
activityId.setSentFlag();
}
}
class ActivityId {
private final UUID Id;
private long Sequence;
private boolean isSentToServer;
ActivityId() {
Id = UUID.randomUUID();
Sequence = 0;
isSentToServer = false;
}
UUID getId() {
return Id;
}
long getSequence() {
return Sequence;
}
void Increment() {
if (Sequence < 0xffffffffl) // to get to 32-bit unsigned
{
++Sequence;
}
else {
Sequence = 0;
}
isSentToServer = false;
}
void setSentFlag() {
isSentToServer = true;
}
boolean IsSentToServer() {
return isSentToServer;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(Id.toString());
sb.append("-");
sb.append(Sequence);
return sb.toString();
}
}