apurtell commented on a change in pull request #3495:
URL: https://github.com/apache/hbase/pull/3495#discussion_r672524407
##########
File path:
hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/ServerCall.java
##########
@@ -97,11 +97,13 @@
private long exceptionSize = 0;
private final boolean retryImmediatelySupported;
- // This is a dirty hack to address HBASE-22539. The lowest bit is for normal
rpc cleanup, and the
- // second bit is for WAL reference. We can only call release if both of them
are zero. The reason
- // why we can not use a general reference counting is that, we may call
cleanup multiple times in
- // the current implementation. We should fix this in the future.
- private final AtomicInteger reference = new AtomicInteger(0b01);
+ // This is a dirty hack to address HBASE-22539. The highest bit is for rpc
ref and cleanup, and
+ // the rest of the bits are for WAL reference count. We can only call
release if all of them are
+ // zero. The reason why we can not use a general reference counting is that,
we may call cleanup
+ // multiple times in the current implementation. We should fix this in the
future.
+ // The refCount here will start as 0x80000000 and increment with every WAL
reference and decrement
+ // from WAL side on release
+ private final AtomicInteger reference = new AtomicInteger(0x80000000);
Review comment:
I see, it's fine, if I misread the code.
I am guilty myself of employing this trick, where a high order bit of a
counter is overloaded to be a flag. I feel it leads to less maintainable code
than the alternative, but if it has to be done it has to be done. The issue is
someone less familiar with the code than the current author and reviewers might
forget to mask when reading or updating.
> Maybe we could introduce a separated class for this logic to make the code
in ServerCall cleaner, and add clear document for the new class about the logic.
This is a good suggestion.
--
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]