Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarPersistence.java (date 1559832789000)
@@ -30,6 +30,7 @@
import org.apache.jackrabbit.oak.segment.file.LocalManifestFile;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor;
import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile;
@@ -62,7 +63,7 @@
@Override
public SegmentArchiveManager createArchiveManager(boolean memoryMapping, boolean offHeapAccess, IOMonitor ioMonitor,
- FileStoreMonitor fileStoreMonitor) {
+ FileStoreMonitor fileStoreMonitor, RemoteStoreMonitor remoteStoreMonitor) {
return new SegmentTarManager(directory, fileStoreMonitor, ioMonitor, memoryMapping, offHeapAccess);
}
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreRegistrar.java (date 1559832789000)
@@ -52,12 +52,7 @@
import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGC;
import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGCMBean;
-import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
-import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
-import org.apache.jackrabbit.oak.segment.file.FileStoreStatsMBean;
-import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
-import org.apache.jackrabbit.oak.segment.file.MetricsIOMonitor;
+import org.apache.jackrabbit.oak.segment.file.*;
import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
import org.apache.jackrabbit.oak.segment.split.SplitPersistence;
@@ -228,7 +223,7 @@
.withMemoryMapping(cfg.getMemoryMapping())
.withGCMonitor(gcMonitor)
.withIOMonitor(new MetricsIOMonitor(cfg.getStatisticsProvider()))
- .withStatisticsProvider(cfg.getStatisticsProvider())
+ .withRemoteStoreMonitor(new MetricsRemoteStoreMonitor(cfg.getStatisticsProvider()))
.withGCOptions(gcOptions);
if (cfg.hasCustomBlobStore() && cfg.getBlobStore() != null) {
Index: oak-segment-azure/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/pom.xml (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/pom.xml (date 1559913412000)
@@ -130,7 +130,7 @@
com.microsoft.azure
azure-storage
- 5.0.0
+ 8.0.0
com.microsoft.azure
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentNodeStorePersistence.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentNodeStorePersistence.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentNodeStorePersistence.java (date 1559832789000)
@@ -22,6 +22,7 @@
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor;
/**
* This type is a main entry point for the segment node store persistence. It's
@@ -44,7 +45,7 @@
* @throws IOException
*/
SegmentArchiveManager createArchiveManager(boolean memoryMapping, boolean offHeapAccess, IOMonitor ioMonitor,
- FileStoreMonitor fileStoreMonitor) throws IOException;
+ FileStoreMonitor fileStoreMonitor, RemoteStoreMonitor remoteStoreMonitor) throws IOException;
/**
* Check if the segment store already contains any segments
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java (date 1559832789000)
@@ -52,6 +52,7 @@
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
@@ -122,6 +123,8 @@
private FileStoreMonitor fileStoreMonitor;
+ private RemoteStoreMonitor remoteStoreMonitor;
+
private long maxFileSize;
private boolean readOnly;
@@ -166,6 +169,11 @@
return this;
}
+ public Builder withRemoteStoreMonitor(RemoteStoreMonitor remoteStoreMonitor) {
+ this.remoteStoreMonitor = checkNotNull(remoteStoreMonitor);
+ return this;
+ }
+
public Builder withMaxFileSize(long maxFileSize) {
checkArgument(maxFileSize > 0);
this.maxFileSize = maxFileSize;
@@ -197,6 +205,7 @@
checkState(tarRecovery != null, "TAR recovery strategy not specified");
checkState(ioMonitor != null, "I/O monitor not specified");
checkState(readOnly || fileStoreMonitor != null, "File store statistics not specified");
+ checkState(remoteStoreMonitor != null, "Remote store statistics not specified");
checkState(readOnly || maxFileSize != 0, "Max file size not specified");
if (persistence == null) {
persistence = new TarPersistence(directory);
@@ -224,6 +233,10 @@
return fileStoreMonitor;
}
+ public RemoteStoreMonitor getRemoteStoreMonitor() {
+ return remoteStoreMonitor;
+ }
+
public long getMaxFileSize() {
return maxFileSize;
}
@@ -233,7 +246,7 @@
}
private SegmentArchiveManager buildArchiveManager() throws IOException {
- return persistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, readOnly && fileStoreMonitor == null ? new FileStoreMonitorAdapter() : fileStoreMonitor);
+ return persistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, readOnly && fileStoreMonitor == null ? new FileStoreMonitorAdapter() : fileStoreMonitor, remoteStoreMonitor);
}
}
@@ -493,7 +506,7 @@
}
/**
- * @return the number of segments in the segment store
+ * @return the number of segments in the segment store
*/
public int segmentCount() {
int count = 0;
Index: oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/split/SplitPersistenceTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/split/SplitPersistenceTest.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/split/SplitPersistenceTest.java (date 1559832963000)
@@ -26,11 +26,11 @@
import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
-import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndex;
import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexLoader;
import org.apache.jackrabbit.oak.segment.file.tar.binaries.InvalidBinaryReferencesIndexException;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
@@ -134,7 +134,7 @@
splitFileStore.close();
splitFileStore = null;
- SegmentArchiveManager manager = splitPersistence.createArchiveManager(true, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter());
+ SegmentArchiveManager manager = splitPersistence.createArchiveManager(true, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
for (String archive : manager.listArchives()) {
SegmentArchiveReader reader = manager.open(archive);
BinaryReferencesIndexLoader.parseBinaryReferencesIndex(reader.getBinaryReferences());
Index: oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java (date 1559899150000)
@@ -16,12 +16,13 @@
*/
package org.apache.jackrabbit.oak.segment.azure;
-import com.microsoft.azure.storage.StorageException;
+import com.microsoft.azure.storage.*;
import com.microsoft.azure.storage.blob.BlobListingDetails;
import com.microsoft.azure.storage.blob.CloudAppendBlob;
import com.microsoft.azure.storage.blob.CloudBlobDirectory;
import com.microsoft.azure.storage.blob.CloudBlockBlob;
import com.microsoft.azure.storage.blob.ListBlobItem;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor;
import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile;
@@ -36,7 +37,9 @@
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Paths;
+import java.util.Date;
import java.util.EnumSet;
+import java.util.concurrent.TimeUnit;
public class AzurePersistence implements SegmentNodeStorePersistence {
@@ -49,7 +52,8 @@
}
@Override
- public SegmentArchiveManager createArchiveManager(boolean mmap, boolean offHeapAccess, IOMonitor ioMonitor, FileStoreMonitor fileStoreMonitor) {
+ public SegmentArchiveManager createArchiveManager(boolean mmap, boolean offHeapAccess, IOMonitor ioMonitor, FileStoreMonitor fileStoreMonitor, RemoteStoreMonitor remoteStoreMonitor) {
+ azureRemoteStoreMonitor(remoteStoreMonitor);
return new AzureArchiveManager(segmentstoreDirectory, ioMonitor, fileStoreMonitor);
}
@@ -111,4 +115,32 @@
}
}
+ private void azureRemoteStoreMonitor(RemoteStoreMonitor remoteStoreMonitor){
+
+ OperationContext operationContext = new OperationContext();
+
+ operationContext.getGlobalRequestCompletedEventHandler().addListener(new StorageEvent() {
+
+ @Override
+ public void eventOccurred(RequestCompletedEvent eventArg) {
+ Date startDate = eventArg.getRequestResult().getStartDate();
+ Date stopDate = eventArg.getRequestResult().getStopDate();
+ long requestDuration = stopDate.getTime() - startDate.getTime();
+ remoteStoreMonitor.requestCount();
+ remoteStoreMonitor.requestDuration(requestDuration, TimeUnit.MILLISECONDS);
+ }
+ });
+
+ operationContext.getGlobalErrorReceivingResponseEventHandler().addListener(new StorageEvent() {
+ @Override
+ public void eventOccurred(ErrorReceivingResponseEvent eventArg) {
+ Date startDate = eventArg.getRequestResult().getStartDate();
+ Date stopDate = eventArg.getRequestResult().getStopDate();
+ long requestDuration = stopDate.getTime() - startDate.getTime();
+ remoteStoreMonitor.requestError();
+ remoteStoreMonitor.requestDuration(requestDuration, TimeUnit.MILLISECONDS);
+ }
+ });
+ }
+
}
Index: oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java (date 1559832963000)
@@ -27,6 +27,7 @@
import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileReader;
@@ -131,9 +132,9 @@
return;
}
SegmentArchiveManager sourceManager = source.createArchiveManager(false, false, new IOMonitorAdapter(),
- new FileStoreMonitorAdapter());
+ new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
SegmentArchiveManager targetManager = target.createArchiveManager(false, false, new IOMonitorAdapter(),
- new FileStoreMonitorAdapter());
+ new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
for (String archiveName : sourceManager.listArchives()) {
log.info("{}/{} -> {}", sourceName, archiveName, targetName);
try (SegmentArchiveReader reader = sourceManager.forceOpen(archiveName)) {
Index: oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarFileTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarFileTest.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarFileTest.java (date 1559832963000)
@@ -21,6 +21,7 @@
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
import org.apache.jackrabbit.oak.segment.file.tar.TarFileTest;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Ignore;
@@ -42,7 +43,7 @@
public void setUp() throws IOException {
try {
container = azurite.getContainer("oak-test");
- archiveManager = new AzurePersistence(container.getDirectoryReference("oak")).createArchiveManager(true, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter());
+ archiveManager = new AzurePersistence(container.getDirectoryReference("oak")).createArchiveManager(true, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
} catch (StorageException | InvalidKeyException | URISyntaxException e) {
throw new IOException(e);
}
Index: oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java (date 1559832963000)
@@ -24,6 +24,7 @@
import org.apache.jackrabbit.oak.segment.file.FileStore;
import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
@@ -61,7 +62,7 @@
@Test
public void testRecovery() throws StorageException, URISyntaxException, IOException {
- SegmentArchiveManager manager = new AzurePersistence(container.getDirectoryReference("oak")).createArchiveManager(false, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter());
+ SegmentArchiveManager manager = new AzurePersistence(container.getDirectoryReference("oak")).createArchiveManager(false, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
SegmentArchiveWriter writer = manager.create("data00000a.tar");
List uuids = new ArrayList<>();
Index: oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java (date 1559832963000)
@@ -45,6 +45,7 @@
import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
@@ -108,7 +109,7 @@
SegmentArchiveManager archiveManager = null;
try {
archiveManager = persistence.createArchiveManager(false, false, new IOMonitorAdapter(),
- new FileStoreMonitorAdapter());
+ new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
} catch (IOException e) {
throw new IllegalArgumentException(
"Could not access the Azure Storage. Please verify the path provided!");
Index: oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarWriterTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarWriterTest.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureTarWriterTest.java (date 1559832963000)
@@ -20,6 +20,7 @@
import com.microsoft.azure.storage.blob.CloudBlobContainer;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
import org.apache.jackrabbit.oak.segment.file.tar.TarWriterTest;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
import org.junit.Before;
import org.junit.ClassRule;
@@ -40,7 +41,7 @@
try {
monitor = new TestFileStoreMonitor();
container = azurite.getContainer("oak-test");
- archiveManager = new AzurePersistence(container.getDirectoryReference("oak")).createArchiveManager(true, false, new IOMonitorAdapter(), monitor);
+ archiveManager = new AzurePersistence(container.getDirectoryReference("oak")).createArchiveManager(true, false, new IOMonitorAdapter(), monitor, new RemoteStoreMonitorAdapter());
} catch (StorageException | InvalidKeyException | URISyntaxException e) {
throw new IOException(e);
}
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java (date 1559834303000)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/MetricsRemoteStoreMonitor.java (date 1559834303000)
@@ -0,0 +1,40 @@
+package org.apache.jackrabbit.oak.segment.file;
+
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
+import org.apache.jackrabbit.oak.stats.CounterStats;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
+import org.apache.jackrabbit.oak.stats.TimerStats;
+import org.jetbrains.annotations.NotNull;
+import java.util.concurrent.TimeUnit;
+
+public class MetricsRemoteStoreMonitor extends RemoteStoreMonitorAdapter {
+
+ public static final String REQUEST_COUNT = "REQUEST_COUNT";
+ public static final String REQUEST_ERROR = "REQUEST_ERROR";
+ public static final String REQUEST_DURATION = "REQUEST_DURATION";
+
+ private final CounterStats requestCountStats;
+ private final CounterStats requestErrorStats;
+ private final TimerStats requestDurationStats;
+
+ public MetricsRemoteStoreMonitor(@NotNull StatisticsProvider statisticsProvider) {
+ requestCountStats = statisticsProvider.getCounterStats(REQUEST_COUNT, StatsOptions.DEFAULT);
+ requestErrorStats = statisticsProvider.getCounterStats(REQUEST_ERROR, StatsOptions.DEFAULT);
+ requestDurationStats = statisticsProvider.getTimer(REQUEST_DURATION, StatsOptions.METRICS_ONLY);
+ }
+
+ @Override
+ public void requestCount() {
+ requestCountStats.inc(); }
+
+ @Override
+ public void requestError() {
+ requestErrorStats.inc();
+ }
+
+ @Override
+ public void requestDuration(long duration, TimeUnit timeUnit) {
+ requestDurationStats.update(duration, timeUnit);
+ }
+}
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java (date 1559832789000)
@@ -52,6 +52,7 @@
import org.apache.jackrabbit.oak.segment.file.tar.TarFiles;
import org.apache.jackrabbit.oak.segment.file.tar.TarRecovery;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitor;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
import org.apache.jackrabbit.oak.segment.spi.persistence.Buffer;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
@@ -128,6 +129,8 @@
protected final IOMonitor ioMonitor;
+ protected final RemoteStoreMonitor remoteStoreMonitor;
+
AbstractFileStore(final FileStoreBuilder builder) {
this.directory = builder.getDirectory();
this.tracker = new SegmentTracker(new SegmentIdFactory() {
@@ -148,6 +151,7 @@
this.memoryMapping = builder.getMemoryMapping();
this.offHeapAccess = builder.getOffHeapAccess();
this.ioMonitor = builder.getIOMonitor();
+ this.remoteStoreMonitor = builder.getRemoteStoreMonitor();
this.segmentBufferMonitor = new SegmentBufferMonitor(builder.getStatsProvider());
}
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreProcBackend.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreProcBackend.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreProcBackend.java (date 1559832789000)
@@ -38,6 +38,7 @@
import org.apache.jackrabbit.oak.segment.file.proc.Proc.Backend;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.spi.monitor.RemoteStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader;
@@ -55,7 +56,7 @@
FileStoreProcBackend(AbstractFileStore fileStore, SegmentNodeStorePersistence persistence) throws IOException {
this.fileStore = fileStore;
this.persistence = persistence;
- this.archiveManager = persistence.createArchiveManager(true, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter());
+ this.archiveManager = persistence.createArchiveManager(true, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
}
@Override
Index: oak-segment-azure/src/test/java/oak/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-azure/src/test/java/oak/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-azure/src/test/java/oak/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java (date 1559832963000)
@@ -37,10 +37,7 @@
import org.apache.jackrabbit.oak.segment.azure.tool.SegmentCopy;
import org.apache.jackrabbit.oak.segment.azure.tool.ToolUtils.SegmentStoreType;
import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor;
-import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.spi.monitor.*;
import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileReader;
import org.apache.jackrabbit.oak.segment.spi.persistence.ManifestFile;
@@ -88,11 +85,12 @@
assertEquals(0, code);
IOMonitor ioMonitor = new IOMonitorAdapter();
+ RemoteStoreMonitor remoteStoreMonitor = new RemoteStoreMonitorAdapter();
FileStoreMonitor fileStoreMonitor = new FileStoreMonitorAdapter();
SegmentArchiveManager srcArchiveManager = srcPersistence.createArchiveManager(false, false, ioMonitor,
- fileStoreMonitor);
+ fileStoreMonitor, remoteStoreMonitor);
SegmentArchiveManager destArchiveManager = destPersistence.createArchiveManager(false, false, ioMonitor,
- fileStoreMonitor);
+ fileStoreMonitor, remoteStoreMonitor);
checkArchives(srcArchiveManager, destArchiveManager);
checkJournal(srcPersistence, destPersistence);
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java (date 1559834319000)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitor.java (date 1559834319000)
@@ -0,0 +1,13 @@
+package org.apache.jackrabbit.oak.segment.spi.monitor;
+
+import java.util.concurrent.TimeUnit;
+
+public interface RemoteStoreMonitor {
+
+ public void requestCount();
+
+ public void requestError();
+
+ public void requestDuration(long duration, TimeUnit timeUnit);
+
+}
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java (date 1559834319000)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/monitor/RemoteStoreMonitorAdapter.java (date 1559834319000)
@@ -0,0 +1,22 @@
+package org.apache.jackrabbit.oak.segment.spi.monitor;
+
+import java.util.concurrent.TimeUnit;
+
+public class RemoteStoreMonitorAdapter implements RemoteStoreMonitor {
+
+
+ @Override
+ public void requestCount() {
+ // Intentionally left blank
+ }
+
+ @Override
+ public void requestError() {
+ // Intentionally left blank
+ }
+
+ @Override
+ public void requestDuration(long duration, TimeUnit timeUnit) {
+ // Intentionally left blank
+ }
+}
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/split/SplitPersistence.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/split/SplitPersistence.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/split/SplitPersistence.java (date 1559832789000)
@@ -16,10 +16,7 @@
*/
package org.apache.jackrabbit.oak.segment.split;
-import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor;
-import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.spi.monitor.*;
import org.apache.jackrabbit.oak.segment.spi.persistence.GCJournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile;
import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileReader;
@@ -86,7 +83,7 @@
}
private Optional getLastArchive() throws IOException {
- SegmentArchiveManager manager = roPersistence.createArchiveManager(false, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter());
+ SegmentArchiveManager manager = roPersistence.createArchiveManager(false, false, new IOMonitorAdapter(), new FileStoreMonitorAdapter(), new RemoteStoreMonitorAdapter());
List archives = manager.listArchives();
if (archives.isEmpty()) {
return Optional.empty();
@@ -97,14 +94,14 @@
}
@Override
- public SegmentArchiveManager createArchiveManager(boolean memoryMapping, boolean offHeapAccess, IOMonitor ioMonitor, FileStoreMonitor fileStoreMonitor) throws IOException {
+ public SegmentArchiveManager createArchiveManager(boolean memoryMapping, boolean offHeapAccess, IOMonitor ioMonitor, FileStoreMonitor fileStoreMonitor, RemoteStoreMonitor remoteStoreMonitor) throws IOException {
if (lastRoArchive.isPresent()) {
return new SplitSegmentArchiveManager(
- roPersistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, fileStoreMonitor),
- rwPersistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, fileStoreMonitor),
+ roPersistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, fileStoreMonitor, remoteStoreMonitor),
+ rwPersistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, fileStoreMonitor, new RemoteStoreMonitorAdapter()),
lastRoArchive.get());
} else {
- return rwPersistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, fileStoreMonitor);
+ return rwPersistence.createArchiveManager(memoryMapping, offHeapAccess, ioMonitor, fileStoreMonitor, new RemoteStoreMonitorAdapter());
}
}
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (date 1559832789000)
@@ -157,6 +157,7 @@
.withMemoryMapping(memoryMapping)
.withTarRecovery(recovery)
.withIOMonitor(ioMonitor)
+ .withRemoteStoreMonitor(remoteStoreMonitor)
.withFileStoreMonitor(stats)
.withMaxFileSize(builder.getMaxFileSize() * MB)
.withPersistence(builder.getPersistence())
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java (date 1559832789000)
@@ -73,6 +73,7 @@
.withDirectory(directory)
.withTarRecovery(recovery)
.withIOMonitor(ioMonitor)
+ .withRemoteStoreMonitor(remoteStoreMonitor)
.withMemoryMapping(memoryMapping)
.withReadOnly()
.withPersistence(builder.getPersistence())
Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java (revision 06148d98cdc8daee560989976a3c41761bfb590a)
+++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java (date 1559832789000)
@@ -47,9 +47,7 @@
import org.apache.jackrabbit.oak.segment.file.proc.Proc.Backend;
import org.apache.jackrabbit.oak.segment.file.tar.GCGeneration;
import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence;
-import org.apache.jackrabbit.oak.segment.spi.monitor.CompositeIOMonitor;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor;
-import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
+import org.apache.jackrabbit.oak.segment.spi.monitor.*;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
import org.apache.jackrabbit.oak.segment.tool.iotrace.IOTraceLogWriter;
import org.apache.jackrabbit.oak.segment.tool.iotrace.IOTraceMonitor;
@@ -135,6 +133,9 @@
@NotNull
private final Set ioMonitors = newHashSet();
+ @NotNull
+ private RemoteStoreMonitor remoteStoreMonitor;
+
private boolean strictVersionCheck;
private boolean built;
@@ -325,6 +326,12 @@
return this;
}
+ @NotNull
+ public FileStoreBuilder withRemoteStoreMonitor(@NotNull RemoteStoreMonitor remoteStoreMonitor){
+ this.remoteStoreMonitor = remoteStoreMonitor;
+ return this;
+ }
+
/**
* Log IO reads at debug level to the passed logger
* @param logger logger for logging IO reads
@@ -521,6 +528,10 @@
: new CompositeIOMonitor(ioMonitors);
}
+ RemoteStoreMonitor getRemoteStoreMonitor() {
+ return remoteStoreMonitor;
+ }
+
boolean getStrictVersionCheck() {
return strictVersionCheck;
}