jcferretti commented on issue #41919:
URL: https://github.com/apache/arrow/issues/41919#issuecomment-2143606432

   > This will avoid the crash but it seems that it may still use wrong 
authenticate handler.
   
   By "this" I assume you mean the suggestion I made in the linked issue to 
change SetToken to take a shared_ptr argument by value instead of a raw pointer.
   
   > it may still use wrong authenticate handler.
   
   In what my team is trying to do there is no "wrong" authentication handler.  
One thread is trying to use the currently registered handler, and another 
thread is trying to change that handler to a new one, which may or may not use 
the same authentication token.  If the old handler is used, that will use a 
valid token.  If the new handler is used, that will use a valid token (which 
may or may not be a different authentication token; our server rotates 
authentication tokens after a period of time, and keeps the old one valid for a 
while after it has been rotated, because there is no way to prevent several 
RPCs in flight from different threads from racing with each other, unless the 
client stopped sending RPCs altogether before trying to get a new token, which 
it doesn't in our case).
   
   Independently of what my team is trying to do and more generally, if some 
threads are trying to use the flight client to do operations like DoPut and 
DoGet, and another thread is changing the authentication handler, there is no 
way to guarantee an ordering unless the user themselves do some kind of order 
protection between those threads.  What I am trying to elaborate here is that 
the idea that there is a "right" authentication handler only makes sense if a 
particular DoGet or DoPut or any other flight operation was done in a context 
with an expectation on what handler would be used; for that expectation to 
hold, a user would have to do their own synchronization to ensure that desired 
ordering, eg, stop doing DoGets or DoPuts or any other operations, change the 
handler, and then resume.  As far as I can tell, there is nothing the flight 
client itself can, or should do.  What I think the flight client can do is to 
ensure a pointer that was already deleted is not used; since things 
 running from multiple threads can happen in any ordering, if one thread is 
changing the authentication handler and another is calling DoPut, the thread 
calling DoPut can't have an expectation on whether the old handler or the new 
handler will be used.  What it can have is an expectation that either of those 
will be used correctly (as opposed to crashing).


-- 
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]

Reply via email to