Author: amitj
Date: Fri Dec 1 07:38:33 2017
New Revision: 1816800
URL: http://svn.apache.org/viewvc?rev=1816800&view=rev
Log:
OAK-6586: [oak-run] Add option to datastorecheck command to report
misconfigured external binary references
- To check for misconfigured external references --nods option added in the list
Modified:
jackrabbit/oak/trunk/oak-run/README.md
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/DataStoreCheckTest.java
Modified: jackrabbit/oak/trunk/oak-run/README.md
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/README.md?rev=1816800&r1=1816799&r2=1816800&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/README.md (original)
+++ jackrabbit/oak/trunk/oak-run/README.md Fri Dec 1 07:38:33 2017
@@ -457,7 +457,7 @@ Use the following command:
$ java -jar oak-run-*.jar datastorecheck [--id] [--ref] [--consistency] \
[--store <path>|<mongo_uri>] \
- [--s3ds <s3ds_config>|--fds <fds_config>] \
+ [--s3ds <s3ds_config>|--fds <fds_config>|--nods] \
[--dump <path>] \
[--repoHome <local_repository_root>]
[--track]
@@ -474,6 +474,7 @@ The following options are available:
--dump - Path where to dump the files (Optional). Otherwise,
files will be dumped in the user tmp directory.
--s3ds - Path to the S3DataStore configuration file
--fds - Path to the FileDataStore configuration file ('path'
property is mandatory)
+ --nods - To check for misconfigured external references when no
data store should be there (Use instead of --s3ds or --fds)
--repoHome - Path of the local reposity home folder. Mandatory for
--consistency & --track options
--track - Whether to force override the tracked ids (Valid only
for --id & --consistency options)
--verbose - Outputs backend friendly blobids. Adds the
sub-directories created in FDS and the changes done for S3/Azure when stored in
the respective container.
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java?rev=1816800&r1=1816799&r2=1816800&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
Fri Dec 1 07:38:33 2017
@@ -94,7 +94,7 @@ public class DataStoreCheckCommand imple
String helpStr =
"datastorecheck [--id] [--ref] [--consistency] [--store
<path>|<mongo_uri>] "
- + "[--s3ds <s3ds_config>|--fds <fds_config>|--azureblobds
<azureblobds_config>]"
+ + "[--s3ds <s3ds_config>|--fds <fds_config>|--azureblobds
<azureblobds_config>|--nods]"
+ " [--dump <path>] [--repoHome <repo_home>] [--track]
[--verbose]";
Closer closer = Closer.create();
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java?rev=1816800&r1=1816799&r2=1816800&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java
Fri Dec 1 07:38:33 2017
@@ -37,6 +37,7 @@ import javax.annotation.Nullable;
import javax.jcr.RepositoryException;
import javax.sql.DataSource;
+import joptsimple.OptionSpecBuilder;
import org.apache.commons.io.FileUtils;
import org.apache.felix.cm.file.ConfigurationHandler;
import org.apache.jackrabbit.core.data.DataStore;
@@ -49,6 +50,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDataSourceFactory;
import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
+import org.apache.jackrabbit.oak.run.cli.DummyDataStore;
import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -220,11 +222,12 @@ class Utils {
parser.accepts("fds", "FileDataStore
config").withRequiredArg().ofType(String.class);
ArgumentAcceptingOptionSpec<String> azureBlobDSConfig =
parser.accepts("azureblobds", "AzureBlobStorageDataStore
config").withRequiredArg().ofType(String.class);
+ OptionSpecBuilder nods = parser.accepts("nods", "No DataStore ");
OptionSet options = parser.parse(args);
- if (!options.has(s3dsConfig) && !options.has(fdsConfig) &&
!options.has(azureBlobDSConfig)) {
+ if (!options.has(s3dsConfig) && !options.has(fdsConfig) &&
!options.has(azureBlobDSConfig) && !options.has(nods)) {
return null;
}
@@ -247,7 +250,11 @@ class Utils {
azureds.init(homeDir.getAbsolutePath());
closer.register(asCloseable(homeDir));
delegate = azureds;
- } else {
+ } else if (options.has(nods)){
+ delegate = new DummyDataStore();
+ delegate.init(null);
+ }
+ else {
delegate = new OakFileDataStore();
String cfgPath = fdsConfig.value(options);
Properties props = loadAndTransformProps(cfgPath);
Modified:
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/DataStoreCheckTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/DataStoreCheckTest.java?rev=1816800&r1=1816799&r2=1816800&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/DataStoreCheckTest.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/DataStoreCheckTest.java
Fri Dec 1 07:38:33 2017
@@ -293,6 +293,16 @@ public class DataStoreCheckTest {
assertFileEquals(dump, "[consistency]",
encodedIds(Sets.newHashSet(deletedBlobId), dsOption));
}
+ @Test
+ public void testConsistencyNoDS() throws Exception {
+ File dump = temporaryFolder.newFolder();
+
+ testTarNoDSOption(dump);
+
+ assertFileEquals(dump, "[ref]", blobsAdded);
+ assertFileEquals(dump, "[consistency]", blobsAdded);
+ }
+
private void testAllParams(File dump, File repoHome) throws Exception {
DataStoreCheckCommand checkCommand = new DataStoreCheckCommand();
List<String> argsList = Lists
@@ -322,6 +332,14 @@ public class DataStoreCheckTest {
testIncorrectParams(argsList, Lists.newArrayList("Missing required
option(s)", "id", "ref", "consistency"));
}
+ public void testTarNoDSOption(File dump) throws Exception {
+ DataStoreCheckCommand checkCommand = new DataStoreCheckCommand();
+ List<String> argsList = Lists
+ .newArrayList("--id", "--ref", "--consistency", "--nods",
"--store", storePath,
+ "--dump", dump.getAbsolutePath(), "--repoHome",
temporaryFolder.newFolder().getAbsolutePath());
+ checkCommand.execute(argsList.toArray(new String[0]));
+ }
+
@Test
public void testTarNoDS() throws Exception {
setupDataStore.close();