sidkhillon opened a new pull request, #8611:
URL: https://github.com/apache/hbase/pull/8611

   `publishSyncOnRingBuffer` claims a Disruptor sequence via RingBuffer.next() 
and previously called getSyncFuture() before the try whose finally publishes 
the sequence. An exception from getSyncFuture (seen in production as an NPE 
from a corrupted Guava cache in SyncFutureCache) left the claimed slot 
unpublished, so the consumer could never advance and the whole WAL deadlocked.
   
   - Move getSyncFuture inside the try so the sequence is always published.
   - Make the RingBufferEventHandler tolerate the resulting empty truck by 
logging and falling through (matching master's AbstractFSWAL.consume) rather 
than failing outstanding syncs.
   - Make SyncFutureCache.getIfPresentOrNew non-throwing: the cache is purely 
an allocation optimisation, so fall back to a new SyncFuture if it throws.
   
   Adds a regression test for the WAL lockup and a test for the SyncFutureCache 
fallback. The FSHLog parts were incidentally fixed on master by HBASE-27231, 
never backported.


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