This is one of the more often discussed questions on this forum.
The sampling issue of the geometry positions is similar to a direct lighting implementation for arbitrary mesh lights which I have implemented inside my open-source OptiX examples.
The connection to the single point of light is then simply a fast visibilty/shadow ray test and the fastest method for that is also shown inside my examples.
Please read these threads where I described multiple ways to handle that:
https://forums.developer.nvidia.com/t/geometry-based-ray-generation/273987
https://forums.developer.nvidia.com/t/what-is-the-best-way-to-explicitly-descend-scene-graph-implement-sampling-of-arbitrary-mesh-lights/61899/2
https://forums.developer.nvidia.com/t/passing-per-vertex-attribute-data-into-a-shader-program/279321
This explains the fastest visibility ray implementation:
https://forums.developer.nvidia.com/t/anyhit-program-as-shadow-ray-with-optix-7-2/181312/2
(Actually there is also another fast method using the Shader Execution Reordering optixTraverse call shown inside the OptiX SDK optixPathTracer example. I would try that only after the above method works.)
Find the example code here:
https://forums.developer.nvidia.com/t/optix-advanced-samples-on-github/48410/4
Look at the newest example rtigo12 for the arbitrary mesh and point light sampling and the fastest shadow ray implementation.