Skip to content

Commit 86bf52b

Browse files
authored
Add fdb metrics to the indexMerger log messages (#3686)
To get better visibility of the index merge process, add fdb metrics to the merger's log messages. Resolves #3685
1 parent b652997 commit 86bf52b

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/provider/foundationdb/IndexingBase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,7 @@ protected CompletableFuture<Boolean> doneOrThrottleDelayAndMaybeLogProgress(bool
510510
StoreTimer metricsDiff = null;
511511
if (timer != null) {
512512
metricsDiff = lastProgressSnapshot == null ? timer : StoreTimer.getDifference(timer, lastProgressSnapshot);
513+
// Note: this fdb metrics represents all the fdb activity (including merges, heartbeats, etc.) since the previous log message.
513514
lastProgressSnapshot = StoreTimerSnapshot.from(timer);
514515
}
515516
LOGGER.info(KeyValueLogMessage.build("Indexer: Built Range",

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/provider/foundationdb/IndexingMerger.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,17 @@
2525
import com.apple.foundationdb.record.logging.KeyValueLogMessage;
2626
import com.apple.foundationdb.record.logging.LogMessageKeys;
2727
import com.apple.foundationdb.record.metadata.Index;
28+
import com.apple.foundationdb.record.provider.common.StoreTimer;
29+
import com.apple.foundationdb.record.provider.common.StoreTimerSnapshot;
2830
import com.apple.foundationdb.record.util.Result;
2931
import org.slf4j.Logger;
3032
import org.slf4j.LoggerFactory;
3133

34+
import javax.annotation.Nullable;
3235
import javax.annotation.ParametersAreNonnullByDefault;
36+
import java.util.Collections;
3337
import java.util.List;
38+
import java.util.Map;
3439
import java.util.concurrent.CompletableFuture;
3540
import java.util.concurrent.atomic.AtomicInteger;
3641
import java.util.concurrent.atomic.AtomicLong;
@@ -52,6 +57,8 @@ public class IndexingMerger {
5257
private final IndexingCommon common;
5358
private int repartitionDocumentCount = 0;
5459
private int repartitionSecondChances = 0;
60+
private StoreTimerSnapshot lastProgressSnapshot = null;
61+
5562

5663
public IndexingMerger(final Index index, IndexingCommon common, long initialMergesCountLimit) {
5764
this.index = index;
@@ -75,6 +82,7 @@ CompletableFuture<Void> mergeIndex() {
7582
// Note: this runAsync will retry according to the runner's "maxAttempts" setting
7683
common.getRunner().runAsync(context -> openRecordStore(context)
7784
.thenCompose(store -> {
85+
startFdbMetricsMeasurement(timer);
7886
mergeStartTime.set(System.nanoTime());
7987
final IndexDeferredMaintenanceControl mergeControl = store.getIndexDeferredMaintenanceControl();
8088
mergeControlRef.set(mergeControl);
@@ -229,7 +237,7 @@ private void giveUpMerging(final IndexDeferredMaintenanceControl mergeControl, T
229237
throw common.getRunner().getDatabase().mapAsyncToSyncException(e);
230238
}
231239

232-
List<Object> mergerKeysAndValues(final IndexDeferredMaintenanceControl mergeControl) {
240+
private List<Object> mergerKeysAndValues(final IndexDeferredMaintenanceControl mergeControl) {
233241
return List.of(
234242
LogMessageKeys.INDEX_NAME, index.getName(),
235243
LogMessageKeys.INDEX_MERGES_LAST_LIMIT, mergeControl.getMergesLimit(),
@@ -242,14 +250,27 @@ List<Object> mergerKeysAndValues(final IndexDeferredMaintenanceControl mergeCont
242250
);
243251
}
244252

245-
String mergerLogMessage(String ttl, final IndexDeferredMaintenanceControl mergeControl) {
253+
private String mergerLogMessage(String ttl, final IndexDeferredMaintenanceControl mergeControl) {
246254
final KeyValueLogMessage msg = KeyValueLogMessage.build(ttl);
247255
msg.addKeysAndValues(mergerKeysAndValues(mergeControl));
256+
// Note: this fdb metrics represents fdb activity within a single merge operation
257+
msg.addKeysAndValues(getFdbMetricsMeasurement(common.getRunner().getTimer()));
248258
SubspaceProvider subspaceProvider = common.getRecordStoreBuilder().getSubspaceProvider();
249259
if (subspaceProvider != null) {
250260
msg.addKeyAndValue(subspaceProvider.logKey(), subspaceProvider);
251261
}
252262
return msg.toString();
253263
}
254264

265+
private void startFdbMetricsMeasurement(@Nullable FDBStoreTimer timer) {
266+
if (timer != null) {
267+
lastProgressSnapshot = StoreTimerSnapshot.from(timer);
268+
}
269+
}
270+
271+
private Map<String, Number> getFdbMetricsMeasurement(@Nullable FDBStoreTimer timer) {
272+
return (timer == null || lastProgressSnapshot == null) ?
273+
Collections.emptyMap() :
274+
StoreTimer.getDifference(timer, lastProgressSnapshot).getKeysAndValues();
275+
}
255276
}

0 commit comments

Comments
 (0)