IGNITE-2828: IGFS: Introduced processor for "updateTimes" operation.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/09b28952 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/09b28952 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/09b28952 Branch: refs/heads/ignite-2791 Commit: 09b28952f1c95130fd0ebadbbd33e70b7d81245c Parents: b1d9e8b Author: vozerov-gridgain <voze...@gridgain.com> Authored: Mon Mar 14 15:57:28 2016 +0300 Committer: vozerov-gridgain <voze...@gridgain.com> Committed: Mon Mar 14 15:57:28 2016 +0300 ---------------------------------------------------------------------- .../processors/igfs/IgfsMetaManager.java | 73 ++++++++++++++++---- .../ignite/testsuites/IgniteIgfsTestSuite.java | 6 -- 2 files changed, 61 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/09b28952/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java index 8bb9e92..d3aae58 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsMetaManager.java @@ -411,7 +411,7 @@ public class IgfsMetaManager extends IgfsManager { // Force root ID always exist in cache. if (info == null && IgfsUtils.ROOT_ID.equals(fileId)) - id2InfoPrj.putIfAbsent(IgfsUtils.ROOT_ID, info = new IgfsFileInfo()); + info = createSystemEntryIfAbsent(fileId); return info; } @@ -443,13 +443,9 @@ public class IgfsMetaManager extends IgfsManager { // Force root ID always exist in cache. if (fileIds.contains(IgfsUtils.ROOT_ID) && !map.containsKey(IgfsUtils.ROOT_ID)) { - IgfsFileInfo info = new IgfsFileInfo(); - - id2InfoPrj.putIfAbsent(IgfsUtils.ROOT_ID, info); - map = new GridLeanMap<>(map); - map.put(IgfsUtils.ROOT_ID, info); + map.put(IgfsUtils.ROOT_ID, createSystemEntryIfAbsent(IgfsUtils.ROOT_ID)); } return map; @@ -666,8 +662,6 @@ public class IgfsMetaManager extends IgfsManager { */ private IgfsFileInfo createSystemEntryIfAbsent(IgniteUuid id) throws IgniteCheckedException { - assert validTxState(true); - assert IgfsUtils.isRootOrTrashId(id); IgfsFileInfo info = new IgfsFileInfo(id); @@ -2995,11 +2989,10 @@ public class IgfsMetaManager extends IgfsManager { assert parentInfo.isDirectory(); - IgfsFileInfo updated = new IgfsFileInfo(fileInfo, + id2InfoPrj.invoke(fileId, new UpdateTimesProcessor( accessTime == -1 ? fileInfo.accessTime() : accessTime, - modificationTime == -1 ? fileInfo.modificationTime() : modificationTime); - - id2InfoPrj.put(fileId, updated); + modificationTime == -1 ? fileInfo.modificationTime() : modificationTime) + ); id2InfoPrj.invoke(parentId, new UpdateListingEntry(fileId, fileName, 0, accessTime, modificationTime)); @@ -4058,4 +4051,60 @@ public class IgfsMetaManager extends IgfsManager { affRange = (IgfsFileAffinityRange)in.readObject(); } } + + /** + * Update times entry processor. + */ + private static class UpdateTimesProcessor implements EntryProcessor<IgniteUuid, IgfsFileInfo, Void>, + Externalizable { + /** */ + private static final long serialVersionUID = 0L; + + /** Access time. */ + private long accessTime; + + /** Modification time. */ + private long modificationTime; + + /** + * Default constructor. + */ + public UpdateTimesProcessor() { + // No-op. + } + + /** + * Constructor. + * + * @param accessTime Access time. + * @param modificationTime Modification time. + */ + public UpdateTimesProcessor(long accessTime, long modificationTime) { + this.accessTime = accessTime; + this.modificationTime = modificationTime; + } + + /** {@inheritDoc} */ + @Override public Void process(MutableEntry<IgniteUuid, IgfsFileInfo> entry, Object... args) + throws EntryProcessorException { + + IgfsFileInfo oldInfo = entry.getValue(); + + entry.setValue(new IgfsFileInfo(oldInfo, accessTime, modificationTime)); + + return null; + } + + /** {@inheritDoc} */ + @Override public void writeExternal(ObjectOutput out) throws IOException { + out.writeLong(accessTime); + out.writeLong(modificationTime); + } + + /** {@inheritDoc} */ + @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + accessTime = in.readLong(); + modificationTime = in.readLong(); + } + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/09b28952/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java index cc5e1ce..489088c 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java @@ -90,12 +90,6 @@ public class IgniteIgfsTestSuite extends TestSuite { suite.addTest(new TestSuite(IgfsModesSelfTest.class)); suite.addTest(new TestSuite(IgfsMetricsSelfTest.class)); - suite.addTest(new TestSuite(IgfsPrimarySelfTest.class)); - suite.addTest(new TestSuite(IgfsPrimaryOffheapTieredSelfTest.class)); - suite.addTest(new TestSuite(IgfsPrimaryOffheapValuesSelfTest.class)); - suite.addTest(new TestSuite(IgfsDualSyncSelfTest.class)); - suite.addTest(new TestSuite(IgfsDualAsyncSelfTest.class)); - suite.addTest(new TestSuite(IgfsClientCacheSelfTest.class)); suite.addTest(new TestSuite(IgfsOneClientNodeTest.class));