You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by am...@apache.org on 2020/01/17 10:01:36 UTC
svn commit: r1872907 - in /jackrabbit/oak/branches/1.10: ./
oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java
Author: amitj
Date: Fri Jan 17 10:01:36 2020
New Revision: 1872907
URL: http://svn.apache.org/viewvc?rev=1872907&view=rev
Log:
OAK-8780: Remove the synchronized block on the FSBackend
Merge r1872803, r1872856 from trunk
Added:
jackrabbit/oak/branches/1.10/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java
- copied, changed from r1872803, jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java
Modified:
jackrabbit/oak/branches/1.10/ (props changed)
jackrabbit/oak/branches/1.10/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
Propchange: jackrabbit/oak/branches/1.10/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1872803,1872856
Modified: jackrabbit/oak/branches/1.10/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java?rev=1872907&r1=1872906&r2=1872907&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.10/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java (original)
+++ jackrabbit/oak/branches/1.10/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java Fri Jan 17 10:01:36 2020
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.core.data.D
import org.apache.jackrabbit.core.data.LazyFileInputStream;
import org.apache.jackrabbit.oak.spi.blob.AbstractDataRecord;
import org.apache.jackrabbit.oak.spi.blob.AbstractSharedBackend;
+import org.apache.jackrabbit.util.TransientFileFactory;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -104,20 +105,38 @@ public class FSBackend extends AbstractS
@Override
public void write(DataIdentifier identifier, File file) throws DataStoreException {
+ TransientFileFactory fileFactory = TransientFileFactory.getInstance();
+ File tmpFile = null;
+
File dest = getFile(identifier, fsPathDir);
- synchronized (this) {
- if (dest.exists()) {
- long now = System.currentTimeMillis();
- if (getLastModified(dest) < now + ACCESS_TIME_RESOLUTION) {
- setLastModified(dest, now + ACCESS_TIME_RESOLUTION);
+ if (dest.exists()) {
+ long now = System.currentTimeMillis();
+ if (getLastModified(dest) < now + ACCESS_TIME_RESOLUTION) {
+ setLastModified(dest, now + ACCESS_TIME_RESOLUTION);
+ }
+ } else {
+ try {
+ tmpFile = fileFactory.createTransientFile("fsbackend", null, fsPathDir);
+ FileUtils.copyFile(file, tmpFile);
+
+ File parent = dest.getParentFile();
+ parent.mkdirs();
+ synchronized (this) {
+ if (tmpFile.renameTo(dest)) {
+ // no longer need to delete the temporary file
+ tmpFile = null;
+ } else {
+ throw new IOException(
+ "Can not rename " + tmpFile.getAbsolutePath()
+ + " to " + dest.getAbsolutePath()
+ + " (media read only?)");
+ }
}
- } else {
- try {
- FileUtils.copyFile(file, dest);
- } catch (IOException ie) {
- LOG.error("failed to copy [{}] to [{}]", file.getAbsolutePath(),
- dest.getAbsolutePath());
- throw new DataStoreException("Not able to write file [" + identifier + "]", ie);
+ } catch (IOException e) {
+ throw new DataStoreException("Could not add record", e);
+ } finally {
+ if (tmpFile != null) {
+ tmpFile.delete();
}
}
}
Copied: jackrabbit/oak/branches/1.10/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java (from r1872803, jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java?p2=jackrabbit/oak/branches/1.10/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java&p1=jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java&r1=1872803&r2=1872907&rev=1872907&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java (original)
+++ jackrabbit/oak/branches/1.10/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java Fri Jan 17 10:01:36 2020
@@ -45,6 +45,7 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -226,11 +227,10 @@ public class FSBackendIT {
writeLatch.await();
backend.write(new DataIdentifier("0000ID" + seed), f);
LOG.info("Added file to backend");
- return seed;
} catch (Exception e) {
LOG.error("Error adding file to backend", e);
- throw e;
}
+ return seed;
});
futures.add(future);