diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentNotFoundExceptionHandler.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentNotFoundExceptionHandler.java new file mode 100644 index 0000000..d357ead --- /dev/null +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentNotFoundExceptionHandler.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.jackrabbit.oak.segment; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DefaultSegmentNotFoundExceptionHandler implements SegmentNotFoundExceptionHandler { + /** Logger instance */ + private static final Logger log = LoggerFactory.getLogger(DefaultSegmentNotFoundExceptionHandler.class); + + @Override + public void handle(final SegmentId id, final SegmentNotFoundException snfe) { + log.error("Segment not found: {}.", id, snfe); + } + +} diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java index d4d19e9..ac37646 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java @@ -122,7 +122,6 @@ public class SegmentId implements Comparable { log.debug("Loading segment {}", this); segment = store.readSegment(this); } catch (SegmentNotFoundException snfe) { - log.error("Segment not found: {}. {}", this, gcInfo(), snfe); throw snfe; } } @@ -131,19 +130,6 @@ public class SegmentId implements Comparable { return segment; } - @Nonnull - private String gcInfo() { - StringBuilder sb = new StringBuilder(); - sb.append("SegmentId age=").append(System.currentTimeMillis() - creationTime).append("ms"); - if (gcInfo != null) { - sb.append(",").append(gcInfo); - } - if (gcGeneration >= 0) { - sb.append(",").append("segment-generation=").append(gcGeneration); - } - return sb.toString(); - } - /* For testing only */ @CheckForNull String getGcInfo() { diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java index a0d22a7..8cf688c 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java @@ -392,6 +392,16 @@ public class SegmentNodeStoreService extends ProxyNodeStore log.info("Initializing SegmentNodeStore with BlobStore [{}]", blobStore); builder.withBlobStore(blobStore); } + + if (toBoolean(property(STANDBY), true)) { + builder.withSnfeHandler(new SegmentNotFoundExceptionHandler() { + + @Override + public void handle(SegmentId id, SegmentNotFoundException snfe) { + // do not log SNFEs, as they are expected on the standby instance while trying to load the segment hierarchy from primary + } + }); + } try { store = builder.build(); diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNotFoundExceptionHandler.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNotFoundExceptionHandler.java new file mode 100644 index 0000000..78007fa --- /dev/null +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNotFoundExceptionHandler.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.jackrabbit.oak.segment; + +public interface SegmentNotFoundExceptionHandler { + void handle(final SegmentId id, final SegmentNotFoundException snfe); +} diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java index 62f833f..14d0503 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java @@ -80,6 +80,7 @@ import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentIdTable; import org.apache.jackrabbit.oak.segment.SegmentNodeState; import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; +import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionHandler; import org.apache.jackrabbit.oak.segment.SegmentWriter; import org.apache.jackrabbit.oak.segment.WriterCacheManager.Default; import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions; @@ -149,6 +150,8 @@ public class FileStore extends AbstractFileStore { private final ReadWriteLock fileStoreLock = new ReentrantReadWriteLock(); private final FileStoreStats stats; + + private final SegmentNotFoundExceptionHandler snfeHandler; FileStore(final FileStoreBuilder builder) throws InvalidFileStoreVersionException, IOException { super(builder); @@ -197,6 +200,8 @@ public class FileStore extends AbstractFileStore { writeNumber = indices[indices.length - 1] + 1; } this.tarWriter = new TarWriter(directory, stats, writeNumber); + + this.snfeHandler = builder.getSnfeHandler(); fileStoreScheduler.scheduleAtFixedRate( format("TarMK flush [%s]", directory), 5, SECONDS, @@ -592,9 +597,12 @@ public class FileStore extends AbstractFileStore { } }); } catch (ExecutionException e) { - throw e.getCause() instanceof SegmentNotFoundException - ? (SegmentNotFoundException) e.getCause() - : new SegmentNotFoundException(id, e); + SegmentNotFoundException snfe = e.getCause() instanceof SegmentNotFoundException + ? (SegmentNotFoundException) e.getCause() : new SegmentNotFoundException(id, e); + + snfeHandler.handle(id, snfe); + + throw snfe; } } diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java index 152570e..24c95bc 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java @@ -36,8 +36,11 @@ import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import com.google.common.base.Predicate; + +import org.apache.jackrabbit.oak.segment.DefaultSegmentNotFoundExceptionHandler; import org.apache.jackrabbit.oak.segment.RecordCache; import org.apache.jackrabbit.oak.segment.RecordId; +import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionHandler; import org.apache.jackrabbit.oak.segment.Template; import org.apache.jackrabbit.oak.segment.WriterCacheManager; import org.apache.jackrabbit.oak.segment.compaction.LoggingGCMonitor; @@ -102,6 +105,9 @@ public class FileStoreBuilder { } }; + @Nonnull + private SegmentNotFoundExceptionHandler snfeHandler = new DefaultSegmentNotFoundExceptionHandler(); + private boolean built; /** @@ -262,6 +268,17 @@ public class FileStoreBuilder { } /** + * {@link SegmentNotFoundExceptionHandler} the handler of {@code SegmentNotFoundExceptionHandler} + * @param snfeHandler, the actual handler + * @return this instance + */ + @Nonnull + public FileStoreBuilder withSnfeHandler(SegmentNotFoundExceptionHandler snfeHandler) { + this.snfeHandler = snfeHandler; + return this; + } + + /** * Create a new {@link FileStore} instance with the settings specified in this * builder. If none of the {@code with} methods have been called before calling * this method, a file store with the following default settings is returned: @@ -359,6 +376,11 @@ public class FileStoreBuilder { SegmentGCOptions getGcOptions() { return gcOptions; } + + @Nonnull + SegmentNotFoundExceptionHandler getSnfeHandler() { + return snfeHandler; + } @Nonnull WriterCacheManager getCacheManager() { diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkIT.java index 7cefb94..72b83ba 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkIT.java @@ -41,11 +41,11 @@ public class BrokenNetworkIT extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore1 = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore1 = new TemporaryFileStore(folder, true); - private TemporaryFileStore clientFileStore2 = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore2 = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java index 7197a4e..304aed0 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java @@ -33,11 +33,11 @@ public class ExternalPrivateStoreIT extends DataStoreTestBase { private TemporaryBlobStore serverBlobStore = new TemporaryBlobStore(folder); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, serverBlobStore); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, serverBlobStore, false); private TemporaryBlobStore clientBlobStore = new TemporaryBlobStore(folder); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, clientBlobStore); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, clientBlobStore, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalSharedStoreIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalSharedStoreIT.java index 5d46b56..1b268b0 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalSharedStoreIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalSharedStoreIT.java @@ -33,9 +33,9 @@ public class ExternalSharedStoreIT extends DataStoreTestBase { private TemporaryBlobStore commonBlobStore = new TemporaryBlobStore(folder); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, commonBlobStore); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, commonBlobStore, false); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, commonBlobStore); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, commonBlobStore, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeIT.java index 8d2255d..692e9fe 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeIT.java @@ -40,9 +40,9 @@ public class FailoverIPRangeIT extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java index 8eb7eae..0bd2128 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java @@ -39,11 +39,11 @@ public class FailoverMultipleClientsTestIT extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore1 = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore1 = new TemporaryFileStore(folder, true); - private TemporaryFileStore clientFileStore2 = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore2 = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java index 59e18df..82abaa5 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java @@ -40,9 +40,9 @@ public class FailoverSslTestIT extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanIT.java index 23c6324..9df87c1 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanIT.java @@ -44,9 +44,9 @@ public class MBeanIT extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java index a454f8f..9c4fa42 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java @@ -40,9 +40,9 @@ public class RecoverTestIT extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java index 9dae39b..8aaf7e8 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java @@ -19,32 +19,10 @@ package org.apache.jackrabbit.oak.segment.standby; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.ByteArrayInputStream; import java.io.File; -import java.io.IOException; -import java.util.Random; -import com.google.common.io.ByteStreams; -import org.apache.jackrabbit.oak.api.Blob; -import org.apache.jackrabbit.oak.api.CommitFailedException; -import org.apache.jackrabbit.oak.api.PropertyState; -import org.apache.jackrabbit.oak.api.Type; -import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; -import org.apache.jackrabbit.oak.segment.file.FileStore; -import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync; -import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync; import org.apache.jackrabbit.oak.segment.test.TemporaryFileStore; -import org.apache.jackrabbit.oak.spi.commit.CommitInfo; -import org.apache.jackrabbit.oak.spi.commit.EmptyHook; -import org.apache.jackrabbit.oak.spi.state.NodeBuilder; -import org.apache.jackrabbit.oak.spi.state.NodeStore; import org.junit.Rule; -import org.junit.Test; import org.junit.rules.RuleChain; import org.junit.rules.TemporaryFolder; @@ -52,9 +30,9 @@ public class StandbyTest extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java index 006f902..cee4b0c 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java @@ -50,9 +50,9 @@ public class StandbyTestIT extends TestBase { private TemporaryFolder folder = new TemporaryFolder(new File("target")); - private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore serverFileStore = new TemporaryFileStore(folder, false); - private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder); + private TemporaryFileStore clientFileStore = new TemporaryFileStore(folder, true); @Rule public RuleChain chain = RuleChain.outerRule(folder) diff --git oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java index 018e64c..5b8ceeb 100644 --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/test/TemporaryFileStore.java @@ -23,6 +23,9 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser; +import org.apache.jackrabbit.oak.segment.SegmentId; +import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; +import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionHandler; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder; import org.apache.jackrabbit.oak.stats.DefaultStatisticsProvider; @@ -34,19 +37,23 @@ public class TemporaryFileStore extends ExternalResource { private final TemporaryFolder folder; private final TemporaryBlobStore blobStore; + + private final boolean standby; private ScheduledExecutorService executor; private FileStore store; - public TemporaryFileStore(TemporaryFolder folder) { + public TemporaryFileStore(TemporaryFolder folder, boolean standby) { this.folder = folder; + this.standby = standby; this.blobStore = null; } - public TemporaryFileStore(TemporaryFolder folder, TemporaryBlobStore blobStore) { + public TemporaryFileStore(TemporaryFolder folder, TemporaryBlobStore blobStore, boolean standby) { this.folder = folder; this.blobStore = blobStore; + this.standby = standby; } @Override @@ -60,6 +67,17 @@ public class TemporaryFileStore extends ExternalResource { .withStringCacheSize(0) .withTemplateCacheSize(0) .withStatisticsProvider(new DefaultStatisticsProvider(executor)); + + if (standby) { + builder.withSnfeHandler(new SegmentNotFoundExceptionHandler() { + + @Override + public void handle(SegmentId id, SegmentNotFoundException snfe) { + // do not log SNFEs, as they are expected on the standby instance while trying to load the segment hierarchy from primary + } + }); + } + if (blobStore != null) { builder.withBlobStore(blobStore.blobStore()); }