vrajat opened a new issue, #16042:
URL: https://github.com/apache/pinot/issues/16042
For every query execution thread, a ThreadResourceUsageProvider is created.
Example for a worker:
```
public static void setupWorker(int taskId,
ThreadExecutionContext.TaskType taskType,
@Nullable ThreadExecutionContext threadExecutionContext) {
Tracing.getThreadAccountant().setThreadResourceUsageProvider(new
ThreadResourceUsageProvider());
Tracing.getThreadAccountant().setupWorker(taskId, taskType,
threadExecutionContext);
}
```
The ThreadResourceUsageAccountant stores it in a thread local.
```
// ThreadResourceUsageProvider(ThreadMXBean wrapper) per runner/worker
thread
private final ThreadLocal<ThreadResourceUsageProvider>
_threadResourceUsageProvider;
```
However take a look at the code to get the memory allocation for a thread.
```
public long getThreadAllocatedBytes() {
try {
return _isThreadMemoryMeasurementEnabled ? (long)
SUN_THREAD_MXBEAN_GET_BYTES_ALLOCATED_METHOD
.invoke(MX_BEAN, Thread.currentThread().getId()) -
_startBytesAllocated : 0;
} catch (IllegalAccessException | InvocationTargetException e) {
LOGGER.error("Exception happened during the invocation of getting
initial bytes allocated", e);
return 0;
}
}
```
It is passing the id of the current thread: Thread.currentThread().getId() .
So the function itself is not using any thread local information.
There are a couple of non-static member variables in
`ThreadResourceUsageProvider`.
```
// reference point for start time/bytes
private final long _startTimeNs;
private final long _startBytesAllocated;
```
These can be easily moved to
`CPUMemThreadLevelAccountingObjects.ThreadEntry` class
Note that a large number of NPE was because `_threadResourceUsageProvider`
was not set. So this change will fix a class of issues by getting rid of this
per-thread object.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]