Skip to content

Commit d257ecf

Browse files
committed
Merge branch '3.1' into zkchroot-postzkclean
2 parents 4d7c4d5 + 17c69d7 commit d257ecf

File tree

2 files changed

+45
-38
lines changed

2 files changed

+45
-38
lines changed

core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/CachableBlockFile.java

+10-11
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949

5050
import com.github.benmanes.caffeine.cache.Cache;
5151

52+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
53+
5254
/**
5355
* This is a wrapper class for BCFile that includes a cache for independent caches for datablocks
5456
* and metadatablocks
@@ -342,6 +344,8 @@ public Map<String,Loader> getDependencies() {
342344
return Collections.emptyMap();
343345
}
344346

347+
@SuppressFBWarnings(value = {"NP_LOAD_OF_KNOWN_NULL_VALUE"},
348+
justification = "Spotbugs false positive, see spotbugs issue 2836.")
345349
@Override
346350
public byte[] load(int maxSize, Map<String,byte[]> dependencies) {
347351

@@ -356,23 +360,18 @@ public byte[] load(int maxSize, Map<String,byte[]> dependencies) {
356360
}
357361
}
358362

359-
BlockReader _currBlock = getBlockReader(maxSize, reader);
360-
if (_currBlock == null) {
361-
return null;
362-
}
363+
try (BlockReader _currBlock = getBlockReader(maxSize, reader)) {
364+
if (_currBlock == null) {
365+
return null;
366+
}
363367

364-
byte[] b = null;
365-
try {
366-
b = new byte[(int) _currBlock.getRawSize()];
368+
byte[] b = new byte[(int) _currBlock.getRawSize()];
367369
_currBlock.readFully(b);
370+
return b;
368371
} catch (IOException e) {
369372
log.debug("Error full blockRead for file " + cacheId + " for block " + getBlockId(), e);
370373
throw new UncheckedIOException(e);
371-
} finally {
372-
_currBlock.close();
373374
}
374-
375-
return b;
376375
} catch (IOException e) {
377376
throw new UncheckedIOException(e);
378377
}

server/tserver/src/main/java/org/apache/accumulo/tserver/metrics/CompactionExecutorsMetrics.java

+35-27
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,29 @@ public class CompactionExecutorsMetrics implements MetricsProducer {
5050
private volatile List<CeMetrics> ceMetricsList = List.of();
5151
private final Map<CompactionExecutorId,CeMetrics> ceMetricsMap = new HashMap<>();
5252
private final Map<CompactionExecutorId,ExMetrics> exCeMetricsMap = new HashMap<>();
53-
private MeterRegistry registry = null;
53+
private volatile MeterRegistry registry = null;
5454

5555
// public so it can be closed by outside callers
56-
public static class CeMetrics implements AutoCloseable {
57-
private AtomicInteger queued;
58-
private AtomicInteger running;
56+
public class CeMetrics implements AutoCloseable {
57+
private final AtomicInteger queued;
58+
private final AtomicInteger running;
5959

6060
private IntSupplier runningSupplier;
6161
private IntSupplier queuedSupplier;
6262

63+
private CeMetrics(CompactionExecutorId ceid) {
64+
if (registry != null) {
65+
this.queued = registry.gauge(MAJC_QUEUED.getName(), Tags.of("id", ceid.canonical()),
66+
new AtomicInteger(0));
67+
this.running = registry.gauge(MAJC_RUNNING.getName(), Tags.of("id", ceid.canonical()),
68+
new AtomicInteger(0));
69+
} else {
70+
// these vars have no effect on metrics in this case - just avoids NPEs
71+
this.queued = new AtomicInteger(0);
72+
this.running = new AtomicInteger(0);
73+
}
74+
}
75+
6376
@Override
6477
public void close() {
6578
runningSupplier = () -> 0;
@@ -69,9 +82,22 @@ public void close() {
6982
}
7083
}
7184

72-
private static class ExMetrics {
73-
AtomicInteger queued;
74-
AtomicInteger running;
85+
private class ExMetrics {
86+
private final AtomicInteger queued;
87+
private final AtomicInteger running;
88+
89+
private ExMetrics(CompactionExecutorId ceid) {
90+
if (registry != null) {
91+
this.queued = registry.gauge(MAJC_QUEUED.getName(), Tags.of("id", ceid.canonical()),
92+
new AtomicInteger(0));
93+
this.running = registry.gauge(MAJC_RUNNING.getName(), Tags.of("id", ceid.canonical()),
94+
new AtomicInteger(0));
95+
} else {
96+
// these vars have no effect on metrics in this case - just avoids NPEs
97+
this.queued = new AtomicInteger(0);
98+
this.running = new AtomicInteger(0);
99+
}
100+
}
75101
}
76102

77103
public CompactionExecutorsMetrics() {
@@ -88,16 +114,7 @@ public synchronized CeMetrics addExecutor(CompactionExecutorId ceid, IntSupplier
88114

89115
synchronized (ceMetricsMap) {
90116

91-
CeMetrics cem = ceMetricsMap.computeIfAbsent(ceid, id -> {
92-
CeMetrics m = new CeMetrics();
93-
if (registry != null) {
94-
m.queued = registry.gauge(MAJC_QUEUED.getName(), Tags.of("id", ceid.canonical()),
95-
new AtomicInteger(0));
96-
m.running = registry.gauge(MAJC_RUNNING.getName(), Tags.of("id", ceid.canonical()),
97-
new AtomicInteger(0));
98-
}
99-
return m;
100-
});
117+
CeMetrics cem = ceMetricsMap.computeIfAbsent(ceid, id -> new CeMetrics(ceid));
101118

102119
cem.runningSupplier = runningSupplier;
103120
cem.queuedSupplier = queuedSupplier;
@@ -119,16 +136,7 @@ public void update() {
119136
externalMetricsSupplier.get().forEach(ecm -> {
120137
seenIds.add(ecm.ceid);
121138

122-
ExMetrics exm = exCeMetricsMap.computeIfAbsent(ecm.ceid, id -> {
123-
ExMetrics m = new ExMetrics();
124-
if (registry != null) {
125-
m.queued = registry.gauge(MAJC_QUEUED.getName(), Tags.of("id", ecm.ceid.canonical()),
126-
new AtomicInteger(0));
127-
m.running = registry.gauge(MAJC_RUNNING.getName(),
128-
Tags.of("id", ecm.ceid.canonical()), new AtomicInteger(0));
129-
}
130-
return m;
131-
});
139+
ExMetrics exm = exCeMetricsMap.computeIfAbsent(ecm.ceid, id -> new ExMetrics(ecm.ceid));
132140

133141
exm.queued.set(ecm.queued);
134142
exm.running.set(ecm.running);

0 commit comments

Comments
 (0)