DomGarguilo commented on code in PR #5538:
URL: https://github.com/apache/accumulo/pull/5538#discussion_r2124663229
##########
core/src/main/java/org/apache/accumulo/core/clientImpl/ClientTabletCacheImpl.java:
##########
@@ -690,25 +690,28 @@ private void lookupTablet(ClientContext context, Text
row, LockCheckerSession lc
metadataRow.append(row.getBytes(), 0, row.getLength());
CachedTablet ptl = parent.findTablet(context, metadataRow, false,
LocationNeed.REQUIRED);
- if (ptl != null) {
- // Only allow a single lookup at time per parent tablet. For example if
a tables tablets are
- // all stored in three metadata tablets, then that table could have up
to three concurrent
- // metadata lookups.
- Timer timer = Timer.startNew();
- try (var unused = lookupLocks.lock(ptl.getExtent())) {
- // See if entry was added to cache by another thread while we were
waiting on the lock
- var cached = findTabletInCache(row);
- if (cached != null && cached.getCreationTimer().startedAfter(timer)) {
- // This cache entry was added after we started waiting on the lock
so lets use it and not
- // go to the metadata table. This means another thread was holding
the lock and doing
- // metadata lookups when we requested the lock.
- return;
- }
- // Lookup tablets in metadata table and update cache. Also updating
the cache while holding
- // the lock is important as it ensures other threads that are waiting
on the lock will see
- // what this thread found and may be able to avoid metadata lookups.
- lookupTablet(context, lcSession, ptl, metadataRow);
+ if (ptl == null) {
+ return;
+ }
+
+ CachedTablet now = findTabletInCache(row);
+ if (now != null) {
+ if (now.getTserverLocation().isPresent() && lcSession.checkLock(now) !=
null) {
Review Comment:
Fixed in 5268f73ffc36550c0b30726c1f879dc02275c76c
##########
core/src/main/java/org/apache/accumulo/core/clientImpl/ClientTabletCacheImpl.java:
##########
@@ -690,25 +690,28 @@ private void lookupTablet(ClientContext context, Text
row, LockCheckerSession lc
metadataRow.append(row.getBytes(), 0, row.getLength());
CachedTablet ptl = parent.findTablet(context, metadataRow, false,
LocationNeed.REQUIRED);
- if (ptl != null) {
- // Only allow a single lookup at time per parent tablet. For example if
a tables tablets are
- // all stored in three metadata tablets, then that table could have up
to three concurrent
- // metadata lookups.
- Timer timer = Timer.startNew();
- try (var unused = lookupLocks.lock(ptl.getExtent())) {
- // See if entry was added to cache by another thread while we were
waiting on the lock
- var cached = findTabletInCache(row);
- if (cached != null && cached.getCreationTimer().startedAfter(timer)) {
- // This cache entry was added after we started waiting on the lock
so lets use it and not
- // go to the metadata table. This means another thread was holding
the lock and doing
- // metadata lookups when we requested the lock.
- return;
- }
- // Lookup tablets in metadata table and update cache. Also updating
the cache while holding
- // the lock is important as it ensures other threads that are waiting
on the lock will see
- // what this thread found and may be able to avoid metadata lookups.
- lookupTablet(context, lcSession, ptl, metadataRow);
+ if (ptl == null) {
+ return;
+ }
+
+ CachedTablet now = findTabletInCache(row);
+ if (now != null) {
+ if (now.getTserverLocation().isPresent() && lcSession.checkLock(now) !=
null) {
Review Comment:
Removed in 5268f73ffc36550c0b30726c1f879dc02275c76c
--
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]