Author: tomekr
Date: Tue May 28 10:17:03 2019
New Revision: 1860237
URL: http://svn.apache.org/viewvc?rev=1860237&view=rev
Log:
OAK-8356: Support append mode in the SegmentStoreMigrator
Modified:
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java
Modified:
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java?rev=1860237&r1=1860236&r2=1860237&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java
Tue May 28 10:17:03 2019
@@ -67,6 +67,8 @@ public class SegmentStoreMigrator implem
private final String targetName;
+ private final boolean appendMode;
+
private ExecutorService executor =
Executors.newFixedThreadPool(READ_THREADS + 1);
private SegmentStoreMigrator(Builder builder) {
@@ -74,6 +76,7 @@ public class SegmentStoreMigrator implem
this.target = builder.target;
this.sourceName = builder.sourceName;
this.targetName = builder.targetName;
+ this.appendMode = builder.appendMode;
}
public void migrate() throws IOException, ExecutionException,
InterruptedException {
@@ -98,6 +101,7 @@ public class SegmentStoreMigrator implem
}
Collections.reverse(journal);
try (JournalFileWriter writer =
target.getJournalFile().openJournalWriter()) {
+ writer.truncate();
for (String line : journal) {
writer.writeLine(line);
}
@@ -107,6 +111,9 @@ public class SegmentStoreMigrator implem
private void migrateGCJournal() throws IOException {
log.info("{}/gc.log -> {}", sourceName, targetName);
GCJournalFile targetGCJournal = target.getGCJournalFile();
+ if (appendMode) {
+ targetGCJournal.truncate();
+ }
for (String line : source.getGCJournalFile().readLines()) {
targetGCJournal.writeLine(line);
}
@@ -131,8 +138,13 @@ public class SegmentStoreMigrator implem
new FileStoreMonitorAdapter());
SegmentArchiveManager targetManager =
target.createArchiveManager(false, false, new IOMonitorAdapter(),
new FileStoreMonitorAdapter());
+ List<String> targetArchives = targetManager.listArchives();
for (String archiveName : sourceManager.listArchives()) {
log.info("{}/{} -> {}", sourceName, archiveName, targetName);
+ if (appendMode && targetArchives.contains(archiveName)) {
+ log.info("Already exists, skipping.");
+ continue;
+ }
try (SegmentArchiveReader reader =
sourceManager.forceOpen(archiveName)) {
SegmentArchiveWriter writer =
targetManager.create(archiveName);
try {
@@ -221,6 +233,8 @@ public class SegmentStoreMigrator implem
private String targetName;
+ private boolean appendMode;
+
public Builder withSource(File dir) {
this.source = new TarPersistence(dir);
this.sourceName = storeDescription(SegmentStoreType.TAR,
dir.getPath());
@@ -257,6 +271,11 @@ public class SegmentStoreMigrator implem
return this;
}
+ public Builder setAppendMode() {
+ this.appendMode = true;
+ return this;
+ }
+
public SegmentStoreMigrator build() {
return new SegmentStoreMigrator(this);
}