Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 11467200B76 for ; Mon, 15 Aug 2016 11:32:01 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 0FD5B160A6C; Mon, 15 Aug 2016 09:32:01 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 35926160AB9 for ; Mon, 15 Aug 2016 11:32:00 +0200 (CEST) Received: (qmail 54445 invoked by uid 500); 15 Aug 2016 09:31:59 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 54410 invoked by uid 99); 15 Aug 2016 09:31:59 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Aug 2016 09:31:59 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 3DBB3EC22C; Mon, 15 Aug 2016 09:31:59 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: vozerov@apache.org To: commits@ignite.apache.org Date: Mon, 15 Aug 2016 09:32:03 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [5/5] ignite git commit: IGNITE-3332: IGFS: Optimized file unlock routine with help of a client callable. This closes #916. archived-at: Mon, 15 Aug 2016 09:32:01 -0000 IGNITE-3332: IGFS: Optimized file unlock routine with help of a client callable. This closes #916. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f5a040a0 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f5a040a0 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f5a040a0 Branch: refs/heads/ignite-gg-11416 Commit: f5a040a01280c654df1fc4789cc39ff1ac2d32a4 Parents: 4d876a7 Author: tledkov-gridgain Authored: Tue Aug 9 10:01:56 2016 +0300 Committer: vozerov-gridgain Committed: Mon Aug 15 12:31:34 2016 +0300 ---------------------------------------------------------------------- .../ignite/internal/binary/BinaryContext.java | 2 + .../processors/igfs/IgfsFileAffinityRange.java | 40 ++++-- .../processors/igfs/IgfsMetaManager.java | 9 ++ .../internal/processors/igfs/IgfsUtils.java | 34 +++++ .../meta/IgfsClientMetaUnlockCallable.java | 123 +++++++++++++++++++ 5 files changed, 197 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/f5a040a0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java index 8517acf..97afef1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java @@ -60,6 +60,7 @@ import org.apache.ignite.internal.processors.igfs.client.IgfsClientSummaryCallab import org.apache.ignite.internal.processors.igfs.client.IgfsClientUpdateCallable; import org.apache.ignite.internal.processors.igfs.client.meta.IgfsClientMetaIdsForPathCallable; import org.apache.ignite.internal.processors.igfs.client.meta.IgfsClientMetaInfoForPathCallable; +import org.apache.ignite.internal.processors.igfs.client.meta.IgfsClientMetaUnlockCallable; import org.apache.ignite.internal.processors.igfs.data.IgfsDataPutProcessor; import org.apache.ignite.internal.processors.igfs.meta.IgfsMetaDirectoryCreateProcessor; import org.apache.ignite.internal.processors.igfs.meta.IgfsMetaDirectoryListingAddProcessor; @@ -162,6 +163,7 @@ public class BinaryContext { sysClss.add(IgfsClientMetaIdsForPathCallable.class.getName()); sysClss.add(IgfsClientMetaInfoForPathCallable.class.getName()); + sysClss.add(IgfsClientMetaUnlockCallable.class.getName()); sysClss.add(IgfsClientAffinityCallable.class.getName()); sysClss.add(IgfsClientDeleteCallable.class.getName()); http://git-wip-us.apache.org/repos/asf/ignite/blob/f5a040a0/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileAffinityRange.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileAffinityRange.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileAffinityRange.java index 953461c..194869e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileAffinityRange.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFileAffinityRange.java @@ -266,22 +266,40 @@ public class IgfsFileAffinityRange implements Message, Externalizable, Binaryliz /** {@inheritDoc} */ @Override public void writeBinary(BinaryWriter writer) throws BinaryObjectException { - BinaryRawWriter out = writer.rawWriter(); - - BinaryUtils.writeIgniteUuid(out, affKey); - out.writeInt(status); - out.writeLong(startOff); - out.writeLong(endOff); + writeRawBinary(writer.rawWriter()); } /** {@inheritDoc} */ @Override public void readBinary(BinaryReader reader) throws BinaryObjectException { - BinaryRawReader in = reader.rawReader(); + readRawBinary(reader.rawReader()); + } - affKey = BinaryUtils.readIgniteUuid(in); - status = in.readInt(); - startOff = in.readLong(); - endOff = in.readLong(); + /** + * Writes fields to provided writer. + * + * @param writer Writer. + * @throws BinaryObjectException If fails. + */ + public void writeRawBinary(BinaryRawWriter writer) throws BinaryObjectException { + BinaryUtils.writeIgniteUuid(writer, affKey); + + writer.writeInt(status); + writer.writeLong(startOff); + writer.writeLong(endOff); + } + + /** + * Reads fields from provided reader. + * + * @param reader Reader. + * @throws BinaryObjectException If fails. + */ + public void readRawBinary(BinaryRawReader reader) throws BinaryObjectException { + affKey = BinaryUtils.readIgniteUuid(reader); + + status = reader.readInt(); + startOff = reader.readLong(); + endOff = reader.readLong(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/f5a040a0/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 d1151c5..1364491 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 @@ -50,6 +50,7 @@ import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx import org.apache.ignite.internal.processors.igfs.client.IgfsClientAbstractCallable; import org.apache.ignite.internal.processors.igfs.client.meta.IgfsClientMetaIdsForPathCallable; import org.apache.ignite.internal.processors.igfs.client.meta.IgfsClientMetaInfoForPathCallable; +import org.apache.ignite.internal.processors.igfs.client.meta.IgfsClientMetaUnlockCallable; import org.apache.ignite.internal.processors.igfs.meta.IgfsMetaDirectoryCreateProcessor; import org.apache.ignite.internal.processors.igfs.meta.IgfsMetaDirectoryListingAddProcessor; import org.apache.ignite.internal.processors.igfs.meta.IgfsMetaDirectoryListingRemoveProcessor; @@ -664,6 +665,14 @@ public class IgfsMetaManager extends IgfsManager { public void unlock(final IgniteUuid fileId, final IgniteUuid lockId, final long modificationTime, final boolean updateSpace, final long space, @Nullable final IgfsFileAffinityRange affRange) throws IgniteCheckedException { + + if(client) { + runClientTask(new IgfsClientMetaUnlockCallable(cfg.getName(), fileId, lockId, modificationTime, + updateSpace, space, affRange)); + + return; + } + validTxState(false); if (busyLock.enterBusy()) { http://git-wip-us.apache.org/repos/asf/ignite/blob/f5a040a0/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsUtils.java index 3d86fbb..a79d965 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsUtils.java @@ -744,6 +744,40 @@ public class IgfsUtils { } /** + * Write IgfsFileAffinityRange. + * + * @param writer Writer + * @param affRange affinity range. + */ + public static void writeFileAffinityRange(BinaryRawWriter writer, @Nullable IgfsFileAffinityRange affRange) { + if (affRange != null) { + writer.writeBoolean(true); + + affRange.writeRawBinary(writer); + } + else + writer.writeBoolean(false); + } + + /** + * Read IgfsFileAffinityRange. + * + * @param reader Reader. + * @return File affinity range. + */ + public static IgfsFileAffinityRange readFileAffinityRange(BinaryRawReader reader) { + if (reader.readBoolean()) { + IgfsFileAffinityRange affRange = new IgfsFileAffinityRange(); + + affRange.readRawBinary(reader); + + return affRange; + } + else + return null; + } + + /** * Parses the TRASH file name to extract the original path. * * @param name The TRASH short (entry) name. http://git-wip-us.apache.org/repos/asf/ignite/blob/f5a040a0/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/client/meta/IgfsClientMetaUnlockCallable.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/client/meta/IgfsClientMetaUnlockCallable.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/client/meta/IgfsClientMetaUnlockCallable.java new file mode 100644 index 0000000..a2f4ab7 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/client/meta/IgfsClientMetaUnlockCallable.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.processors.igfs.client.meta; + +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.binary.BinaryRawReader; +import org.apache.ignite.binary.BinaryRawWriter; +import org.apache.ignite.internal.binary.BinaryUtils; +import org.apache.ignite.internal.processors.igfs.IgfsContext; +import org.apache.ignite.internal.processors.igfs.IgfsFileAffinityRange; +import org.apache.ignite.internal.processors.igfs.IgfsUtils; +import org.apache.ignite.internal.processors.igfs.client.IgfsClientAbstractCallable; +import org.apache.ignite.internal.util.typedef.internal.S; +import org.apache.ignite.lang.IgniteUuid; +import org.jetbrains.annotations.Nullable; + +/** + * IGFS client unlock callable. + */ +public class IgfsClientMetaUnlockCallable extends IgfsClientAbstractCallable { + /** */ + private static final long serialVersionUID = 0L; + + /** File id. */ + private IgniteUuid fileId; + + /** Lock id. */ + private IgniteUuid lockId; + + /** Modification time. */ + private long modificationTime; + + /** Update space. */ + private boolean updateSpace; + + /** Space. */ + private long space; + + /** Aff range. */ + private IgfsFileAffinityRange affRange; + /** + * Default constructor. + */ + public IgfsClientMetaUnlockCallable() { + // NO-op. + } + + /** + * Constructor. + * + * @param igfsName IGFS name. + * @param fileId File ID. + * @param lockId Lock ID. + * @param modificationTime Modification time to write to file info. + * @param updateSpace Whether to update space. + * @param space Space. + * @param affRange Affinity range. + */ + public IgfsClientMetaUnlockCallable(@Nullable String igfsName, IgniteUuid fileId, IgniteUuid lockId, + long modificationTime, boolean updateSpace, long space, final IgfsFileAffinityRange affRange) { + super(igfsName, null); + + this.fileId = fileId; + this.lockId = lockId; + this.modificationTime = modificationTime; + this.updateSpace = updateSpace; + this.space = space; + this.affRange = affRange; + } + + /** {@inheritDoc} */ + @Override protected Void call0(IgfsContext ctx) throws Exception { + ctx.meta().unlock(fileId, lockId, modificationTime, updateSpace, space, affRange); + + return null; + } + + /** {@inheritDoc} */ + @Override public void writeBinary0(BinaryRawWriter writer) throws BinaryObjectException { + BinaryUtils.writeIgniteUuid(writer, fileId); + BinaryUtils.writeIgniteUuid(writer, lockId); + writer.writeLong(modificationTime); + writer.writeBoolean(updateSpace); + + if (updateSpace) + writer.writeLong(space); + + IgfsUtils.writeFileAffinityRange(writer, affRange); + } + + /** {@inheritDoc} */ + @Override public void readBinary0(BinaryRawReader reader) throws BinaryObjectException { + fileId = BinaryUtils.readIgniteUuid(reader); + lockId = BinaryUtils.readIgniteUuid(reader); + modificationTime = reader.readLong(); + updateSpace = reader.readBoolean(); + + if (updateSpace) + space = reader.readLong(); + + affRange = IgfsUtils.readFileAffinityRange(reader); + } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(IgfsClientMetaUnlockCallable.class, this); + } +}