Author: pnedonosko
Date: 2009-12-16 06:26:17 -0500 (Wed, 16 Dec 2009)
New Revision: 1091
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/AbstractPersistedValueData.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/value/fs/operations/CASableWriteValue.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java
Log:
EXOJCR-274: ValueData streaming into VS updated
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/AbstractPersistedValueData.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/AbstractPersistedValueData.java 2009-12-16
11:24:18 UTC (rev 1090)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/AbstractPersistedValueData.java 2009-12-16
11:26:17 UTC (rev 1091)
@@ -61,7 +61,7 @@
return false;
}
-
+
/**
* Create transient copy of persisted data.
*
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-16
11:24:18 UTC (rev 1090)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java 2009-12-16
11:26:17 UTC (rev 1091)
@@ -153,6 +153,12 @@
this.stream = null;
}
+
+ /**
+ * Return status of persisted state.
+ *
+ * @return boolean, true if the ValueData was persisted to a storage, false
otherwise.
+ */
public boolean isPersisted()
{
return file != null;
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java 2009-12-16
11:24:18 UTC (rev 1090)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java 2009-12-16
11:26:17 UTC (rev 1091)
@@ -175,14 +175,17 @@
// make sure parent dir exists
vcasFile.getParentFile().mkdirs();
- if (!tempFile.renameTo(vcasFile)) // rename propetynamed file to hashnamed
one
+ // rename propetynamed file to hashnamed one
+ if (!tempFile.renameTo(vcasFile))
+ {
throw new VCASException("File " + tempFile.getAbsolutePath()
+ " can't be renamed to VCAS-named "
+ vcasFile.getAbsolutePath());
+ }
} // else - CASed Value already exists
- // set persisted file
- if (!value.isByteArray())
+ if (!value.isByteArray() && value instanceof
StreamPersistedValueData)
{
+ // set persisted file
((StreamPersistedValueData)value).setPersistedFile(vcasFile);
}
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java 2009-12-16
11:24:18 UTC (rev 1090)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java 2009-12-16
11:26:17 UTC (rev 1091)
@@ -132,43 +132,51 @@
else
{
// stream Value
- StreamPersistedValueData streamed = (StreamPersistedValueData)value;
- if (streamed.isPersisted())
+
+ if (value instanceof StreamPersistedValueData)
{
- // already persisted in another Value, copy it to this Value
- // TODO should not occurs!
- LOG.warn("File based persisted ValueData on save: " +
streamed.getFile().getAbsolutePath() + " -> "
- + file.getAbsoluteFile());
- copyClose(streamed.getAsStream(), new FileOutputStream(file));
- }
- else
- {
- File tempFile;
- if ((tempFile = streamed.getTempFile()) != null)
+ StreamPersistedValueData streamed = (StreamPersistedValueData)value;
+
+ if (streamed.isPersisted())
{
- // it's spooled Value, try move its file to VS
- if (!tempFile.renameTo(file))
+ // already persisted in another Value, copy it to this Value
+ copyClose(streamed.getAsStream(), new FileOutputStream(file));
+ }
+ else
+ {
+ // the Value not yet persisted, i.e. or in client stream or spooled to a
temp file
+ File tempFile;
+ if ((tempFile = streamed.getTempFile()) != null)
{
- // not succeeded - copy bytes
- if (LOG.isDebugEnabled())
+ // it's spooled Value, try move its file to VS
+ if (!tempFile.renameTo(file))
{
- LOG
- .debug("Value spool file move (rename) to Values Storage is
not succeeded. Trying bytes copy. Spool file: "
- + tempFile.getAbsolutePath() + ". Destination: " +
file.getAbsolutePath());
+ // not succeeded - copy bytes, temp file will be deleted by
transient ValueData
+ if (LOG.isDebugEnabled())
+ {
+ LOG
+ .debug("Value spool file move (rename) to Values Storage
is not succeeded. Trying bytes copy. Spool file: "
+ + tempFile.getAbsolutePath() + ". Destination: "
+ file.getAbsolutePath());
+ }
+
+ copyClose(new FileInputStream(tempFile), new
FileOutputStream(file));
}
+ }
+ else
+ {
+ // not spooled, use client InputStream
+ copyClose(streamed.getStream(), new FileOutputStream(file));
+ }
- copyClose(new FileInputStream(tempFile), new FileOutputStream(file));
- }
+ // link this Value to file in VS
+ streamed.setPersistedFile(file);
}
- else
- {
- // not spooled, use InputStream
- copyClose(streamed.getStream(), new FileOutputStream(file));
- }
-
- // map this transient Value to file in VS
- streamed.setPersistedFile(file);
}
+ else
+ {
+ // copy from Value stream to the file, e.g. from FilePersistedValueData to
this Value
+ copyClose(value.getAsStream(), new FileOutputStream(file));
+ }
}
}
@@ -192,21 +200,27 @@
else
{
InputStream in;
- StreamPersistedValueData streamed = (StreamPersistedValueData)value;
- if (streamed.isPersisted())
+ if (value instanceof StreamPersistedValueData)
{
- // already persisted in another Value, copy it to this Value
- // TODO should not occurs!
- LOG.warn("File based persisted ValueData on save: " +
streamed.getFile().getAbsolutePath() + " -> CAS");
- in = streamed.getAsStream();
+
+ StreamPersistedValueData streamed = (StreamPersistedValueData)value;
+ if (streamed.isPersisted())
+ {
+ // already persisted in another Value, copy it to this Value
+ in = streamed.getAsStream();
+ }
+ else
+ {
+ in = streamed.getStream();
+ if (in == null)
+ {
+ in = new FileInputStream(streamed.getTempFile());
+ }
+ }
}
else
{
- in = streamed.getStream();
- if (in == null)
- {
- in = new FileInputStream(streamed.getTempFile());
- }
+ in = value.getAsStream();
}
try
Show replies by date