Author: reschke
Date: Fri Jan 31 15:20:08 2020
New Revision: 1873421
URL: http://svn.apache.org/viewvc?rev=1873421&view=rev
Log:
OAK-8780 - Remove the synchronized block on the FSBackend (merged r1872803 and
1872856 into 1.22)
Added:
jackrabbit/oak/branches/1.22/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.22/ (props changed)
jackrabbit/oak/branches/1.22/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
Propchange: jackrabbit/oak/branches/1.22/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1872803,1872856
Modified:
jackrabbit/oak/branches/1.22/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.22/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java?rev=1873421&r1=1873420&r2=1873421&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.22/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
(original)
+++
jackrabbit/oak/branches/1.22/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
Fri Jan 31 15:20:08 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.22/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.22/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java?p2=jackrabbit/oak/branches/1.22/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=1873421&rev=1873421&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.22/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackendIT.java
Fri Jan 31 15:20:08 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);