Author: tolusha
Date: 2009-12-14 10:20:34 -0500 (Mon, 14 Dec 2009)
New Revision: 1046
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CleanableFileStreamValueData.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
Log:
EXOJCR-300: swap values
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CleanableFileStreamValueData.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CleanableFileStreamValueData.java 2009-12-14
15:17:05 UTC (rev 1045)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CleanableFileStreamValueData.java 2009-12-14
15:20:34 UTC (rev 1046)
@@ -41,7 +41,7 @@
{
protected final static Log LOG =
ExoLogger.getLogger("jcr.CleanableFileStreamValueData");
-
+
protected final FileCleaner cleaner;
/**
@@ -80,7 +80,7 @@
if (LOG.isDebugEnabled())
{
- LOG.debug("�ould not remove temporary file on finalize: inUse="
+ (((SwapFile)file).inUse()) + ", "
+ LOG.debug("Could not remove temporary file on finalize: inUse="
+ (((SwapFile)file).inUse()) + ", "
+ file.getAbsolutePath());
}
}
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java 2009-12-14
15:17:05 UTC (rev 1045)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java 2009-12-14
15:20:34 UTC (rev 1046)
@@ -19,9 +19,11 @@
package org.exoplatform.services.jcr.impl.dataflow.persistent;
import org.exoplatform.services.jcr.impl.dataflow.TransientValueData;
+import org.exoplatform.services.jcr.impl.util.io.SwapFile;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
@@ -83,9 +85,15 @@
* persistent layer (Value storage).
*
* @param file File
+ * @throws FileNotFoundException
*/
- public void setPersistedFile(File file)
+ public void setPersistedFile(File file) throws FileNotFoundException
{
+ if (file instanceof SwapFile)
+ {
+ ((SwapFile)file).acquire(this);
+ }
+
this.file = file;
this.tempFile = null;
@@ -180,4 +188,22 @@
throw new RepositoryException(e);
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ protected void finalize() throws Throwable
+ {
+ try
+ {
+ if (file != null && file instanceof SwapFile)
+ {
+ ((SwapFile)file).release(this);
+ }
+ }
+ finally
+ {
+ super.finalize();
+ }
+ }
}
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-12-14
15:17:05 UTC (rev 1045)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-12-14
15:20:34 UTC (rev 1046)
@@ -1835,6 +1835,57 @@
}
/**
+ * Writes value data to swap file.
+ *
+ * @param cid
+ * Property id
+ * @param orderNumber
+ * Value order number
+ * @param version
+ * persistent version (used for BLOB swapping)
+ * @param content
+ * @return ValueData
+ * @throws SQLException
+ * database error
+ * @throws IOException
+ * I/O error (swap)
+ */
+ protected SwapFile swapValueData(String cid, int orderNumber, int version, final
InputStream content)
+ throws SQLException, IOException
+ {
+
+ byte[] spoolBuffer = new byte[ValueFileIOHelper.IOBUFFER_SIZE];
+ int read;
+ int len = 0;
+
+ SwapFile swapFile = SwapFile.get(swapDirectory, cid + orderNumber + "." +
version);
+ OutputStream out = new FileOutputStream(swapFile);;
+
+ if (swapFile.isSpooled())
+ {
+ return swapFile;
+ }
+
+ try
+ {
+ if (content != null)
+ while ((read = content.read(spoolBuffer)) >= 0)
+ {
+ // spool to temp file
+ out.write(spoolBuffer, 0, read);
+ len += read;
+ }
+ }
+ finally
+ {
+ out.close();
+ swapFile.spoolDone();
+ }
+
+ return swapFile;
+ }
+
+ /**
* Add Values to Property record.
*
* @param data
@@ -1871,7 +1922,10 @@
// it's StreamPersistedValueData
StreamPersistedValueData streamData = (StreamPersistedValueData)vd;
stream = streamData.getStream();
- long vlen = streamData.getLength();
+
+ SwapFile swapFile = swapValueData(cid, i, data.getPersistedVersion(),
stream);
+
+ long vlen = swapFile.length();
if (vlen < 0)
{
streamLength = stream.available();
@@ -1887,6 +1941,8 @@
throw new RepositoryException("Value data large of allowed by JDBC
(Integer.MAX_VALUE) " + vlen
+ ". Property " + data.getQPath().getAsString());
}
+
+ streamData.setPersistedFile(swapFile);
}
storageId = null;
}
Show replies by date