Author: reschke
Date: Fri May 31 09:40:56 2019
New Revision: 1860442
URL: http://svn.apache.org/viewvc?rev=1860442&view=rev
Log:
OAK-8251: RDBBlobStore instantiated from ReadOnly DocumentNodeStore should
never modify persistence
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilder.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilderTest.java
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java?rev=1860442&r1=1860441&r2=1860442&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
Fri May 31 09:40:56 2019
@@ -44,9 +44,12 @@ import javax.sql.DataSource;
import org.apache.jackrabbit.oak.commons.PerfLogger;
import org.apache.jackrabbit.oak.commons.StringUtils;
import org.apache.jackrabbit.oak.plugins.blob.CachingBlobStore;
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBuilder;
import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
import
org.apache.jackrabbit.oak.plugins.document.rdb.RDBJDBCTools.PreparedStatementComponent;
import org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,11 +60,12 @@ public class RDBBlobStore extends Cachin
/**
* Creates a {@linkplain RDBBlobStore} instance using the provided
- * {@link DataSource} using the given {@link RDBOptions}.
+ * {@link DataSource} using the given {@link DocumentNodeStoreBuilder} and
+ * {@link RDBOptions}.
*/
- public RDBBlobStore(DataSource ds, RDBOptions options) {
+ public RDBBlobStore(@NotNull DataSource ds, @Nullable
DocumentNodeStoreBuilder<?> builder, @Nullable RDBOptions options) {
try {
- initialize(ds, options);
+ initialize(ds, builder, options == null ? new RDBOptions() :
options);
} catch (Exception ex) {
throw new DocumentStoreException("initializing RDB blob store",
ex);
}
@@ -69,10 +73,20 @@ public class RDBBlobStore extends Cachin
/**
* Creates a {@linkplain RDBBlobStore} instance using the provided
- * {@link DataSource} using default {@link RDBOptions}.
+ * {@link DataSource} using default {@link DocumentNodeStoreBuilder} and
the
+ * given {@link RDBOptions}.
*/
- public RDBBlobStore(DataSource ds) {
- this(ds, new RDBOptions());
+ public RDBBlobStore(@NotNull DataSource ds, @Nullable RDBOptions options) {
+ this(ds, null, options);
+ }
+
+ /**
+ * Creates a {@linkplain RDBBlobStore} instance using the provided
+ * {@link DataSource} using default {@link DocumentNodeStoreBuilder} and
+ * {@link RDBOptions}.
+ */
+ public RDBBlobStore(@NotNull DataSource ds) {
+ this(ds, null, null);
}
@Override
@@ -146,10 +160,12 @@ public class RDBBlobStore extends Cachin
protected String tnData;
protected String tnMeta;
private Set<String> tablesToBeDropped = new HashSet<String>();
+ private boolean readOnly;
+ private void initialize(DataSource ds, DocumentNodeStoreBuilder<?>
builder, RDBOptions options) throws Exception {
- private void initialize(DataSource ds, RDBOptions options) throws
Exception {
-
+ this.readOnly = builder == null ? false : builder.getReadOnlyMode();
+
this.tnData = RDBJDBCTools.createTableName(options.getTablePrefix(),
"DATASTORE_DATA");
this.tnMeta = RDBJDBCTools.createTableName(options.getTablePrefix(),
"DATASTORE_META");
@@ -200,6 +216,12 @@ public class RDBBlobStore extends Cachin
// table does not appear to exist
con.rollback();
+ LOG.debug("trying to read from '" + tableName + "'", ex);
+ if (this.readOnly) {
+ throw new SQLException("Would like to create table '"
+ tableName
+ + "', but RDBBlobStore has been initialized in
'readonly' mode");
+ }
+
createStatement = con.createStatement();
if (this.tnMeta.equals(tableName)) {
@@ -244,6 +266,10 @@ public class RDBBlobStore extends Cachin
@Override
protected void storeBlock(byte[] digest, int level, byte[] data) throws
IOException {
+ if (this.readOnly) {
+ throw new IOException("RDBBlobStore has been initialized in
'readonly' mode");
+ }
+
try {
storeBlockInDatabase(digest, level, data);
} catch (SQLException e) {
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilder.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilder.java?rev=1860442&r1=1860441&r2=1860442&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilder.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilder.java
Fri May 31 09:40:56 2019
@@ -82,7 +82,7 @@ public class RDBDocumentNodeStoreBuilder
public RDBDocumentNodeStoreBuilder setRDBConnection(DataSource
documentStoreDataSource, DataSource blobStoreDataSource, RDBOptions options) {
this.documentStoreSupplier = memoize(() -> new
RDBDocumentStore(documentStoreDataSource, this, options));
if (this.blobStoreSupplier == null) {
- this.blobStoreSupplier = memoize(() -> new
RDBBlobStore(blobStoreDataSource, options));
+ this.blobStoreSupplier = memoize(() -> new
RDBBlobStore(blobStoreDataSource, this, options));
}
return thisBuilder();
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilderTest.java?rev=1860442&r1=1860441&r2=1860442&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentNodeStoreBuilderTest.java
Fri May 31 09:40:56 2019
@@ -23,7 +23,6 @@ import java.util.UUID;
import javax.sql.DataSource;
import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
-import org.junit.Ignore;
import org.junit.Test;
public class RDBDocumentNodeStoreBuilderTest {
@@ -42,7 +41,6 @@ public class RDBDocumentNodeStoreBuilder
}
}
- @Ignore("OAK-8251")
@Test
public void testReadOnlyBS() throws Exception {
// see OAK-8251