You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2014/12/05 09:45:01 UTC
[34/38] incubator-ignite git commit: # Renaming
# Renaming
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/f1061709
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/f1061709
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/f1061709
Branch: refs/heads/master
Commit: f1061709b115413c83beadc68ed491e08b19a74a
Parents: bf07cfa
Author: sboikov <sb...@gridgain.com>
Authored: Fri Dec 5 11:33:09 2014 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Dec 5 11:33:09 2014 +0300
----------------------------------------------------------------------
.../examples/ggfs/GgfsMapReduceExample.java | 2 +-
.../fs/mapreduce/IgniteFsRecordResolver.java | 8 +-
.../IgniteFsByteDelimiterRecordResolver.java | 340 +++++++++++++++++++
.../IgniteFsFixedLengthRecordResolver.java | 79 +++++
.../records/IgniteFsNewLineRecordResolver.java | 58 ++++
.../IgniteFsStringDelimiterRecordResolver.java | 76 +++++
.../ignite/fs/mapreduce/records/package.html | 15 +
.../IgniteFsByteDelimiterRecordResolver.java | 340 -------------------
.../IgniteFsFixedLengthRecordResolver.java | 79 -----
.../records/IgniteFsNewLineRecordResolver.java | 58 ----
.../IgniteFsStringDelimiterRecordResolver.java | 76 -----
.../grid/ggfs/mapreduce/records/package.html | 15 -
.../processors/ggfs/GridGgfsTaskSelfTest.java | 2 +-
...GgfsByteDelimiterRecordResolverSelfTest.java | 2 +-
...idGgfsFixedLengthRecordResolverSelfTest.java | 2 +-
...sNewLineDelimiterRecordResolverSelfTest.java | 4 +-
...fsStringDelimiterRecordResolverSelfTest.java | 2 +-
17 files changed, 579 insertions(+), 579 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/examples/src/main/java/org/gridgain/examples/ggfs/GgfsMapReduceExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/gridgain/examples/ggfs/GgfsMapReduceExample.java b/examples/src/main/java/org/gridgain/examples/ggfs/GgfsMapReduceExample.java
index 10913b0..2de576a 100644
--- a/examples/src/main/java/org/gridgain/examples/ggfs/GgfsMapReduceExample.java
+++ b/examples/src/main/java/org/gridgain/examples/ggfs/GgfsMapReduceExample.java
@@ -13,8 +13,8 @@ import org.apache.ignite.*;
import org.apache.ignite.compute.*;
import org.apache.ignite.fs.*;
import org.apache.ignite.fs.mapreduce.*;
+import org.apache.ignite.fs.mapreduce.records.*;
import org.gridgain.grid.*;
-import org.gridgain.grid.ggfs.mapreduce.records.*;
import java.io.*;
import java.util.*;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/IgniteFsRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/IgniteFsRecordResolver.java b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/IgniteFsRecordResolver.java
index 3e347b7..3e96dcf 100644
--- a/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/IgniteFsRecordResolver.java
+++ b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/IgniteFsRecordResolver.java
@@ -27,10 +27,10 @@ import java.io.*;
* <p>
* The following record resolvers are available out of the box:
* <ul>
- * <li>{@link org.gridgain.grid.ggfs.mapreduce.records.IgniteFsFixedLengthRecordResolver}</li>
- * <li>{@link org.gridgain.grid.ggfs.mapreduce.records.IgniteFsByteDelimiterRecordResolver}</li>
- * <li>{@link org.gridgain.grid.ggfs.mapreduce.records.IgniteFsStringDelimiterRecordResolver}</li>
- * <li>{@link org.gridgain.grid.ggfs.mapreduce.records.IgniteFsNewLineRecordResolver}</li>
+ * <li>{@link org.apache.ignite.fs.mapreduce.records.IgniteFsFixedLengthRecordResolver}</li>
+ * <li>{@link org.apache.ignite.fs.mapreduce.records.IgniteFsByteDelimiterRecordResolver}</li>
+ * <li>{@link org.apache.ignite.fs.mapreduce.records.IgniteFsStringDelimiterRecordResolver}</li>
+ * <li>{@link org.apache.ignite.fs.mapreduce.records.IgniteFsNewLineRecordResolver}</li>
* </ul>
*/
public interface IgniteFsRecordResolver extends Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java
new file mode 100644
index 0000000..0d35621
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java
@@ -0,0 +1,340 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.fs.mapreduce.records;
+
+import org.apache.ignite.*;
+import org.apache.ignite.fs.*;
+import org.apache.ignite.fs.mapreduce.*;
+import org.apache.ignite.lang.*;
+import org.gridgain.grid.*;
+import org.gridgain.grid.util.typedef.*;
+import org.gridgain.grid.util.typedef.internal.*;
+import org.gridgain.grid.util.tostring.*;
+import org.jetbrains.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Record resolver which adjusts records based on provided delimiters. Both start position and length are
+ * shifted to the right, based on delimiter positions.
+ * <p>
+ * Note that you can use {@link IgniteFsStringDelimiterRecordResolver} if your delimiter is a plain string.
+ */
+public class IgniteFsByteDelimiterRecordResolver implements IgniteFsRecordResolver, Externalizable {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Delimiters. */
+ private byte[][] delims;
+
+ /** Maximum delimiter length. */
+ @GridToStringExclude
+ private int maxDelimLen;
+
+ /**
+ * Empty constructor required for {@link Externalizable} support.
+ */
+ public IgniteFsByteDelimiterRecordResolver() {
+ // No-op.
+ }
+
+ /**
+ * Creates delimiter-based record resolver.
+ *
+ * @param delims Delimiters.
+ */
+ public IgniteFsByteDelimiterRecordResolver(byte[]... delims) {
+ if (delims == null || delims.length == 0)
+ throw new IllegalArgumentException("Delimiters cannot be null or empty.");
+
+ this.delims = delims;
+
+ int maxDelimLen = 0;
+
+ for (byte[] delim : delims) {
+ if (delim == null)
+ throw new IllegalArgumentException("Delimiter cannot be null.");
+ else if (maxDelimLen < delim.length)
+ maxDelimLen = delim.length;
+ }
+
+ this.maxDelimLen = maxDelimLen;
+ }
+
+ /** {@inheritDoc} */
+ @Override public IgniteFsFileRange resolveRecords(IgniteFs ggfs, IgniteFsInputStream stream,
+ IgniteFsFileRange suggestedRecord) throws GridException, IOException {
+ long suggestedStart = suggestedRecord.start();
+ long suggestedEnd = suggestedStart + suggestedRecord.length();
+
+ IgniteBiTuple<State, Delimiter> firstDelim = findFirstDelimiter(stream, suggestedStart);
+
+ State state = firstDelim != null ? firstDelim.getKey() : new State();
+
+ Delimiter curDelim = firstDelim.getValue();
+
+ while (curDelim != null && curDelim.end < suggestedStart)
+ curDelim = nextDelimiter(stream, state);
+
+ if (curDelim != null && (curDelim.end >= suggestedStart && curDelim.end < suggestedEnd) ||
+ suggestedStart == 0 ) {
+ // We found start delimiter.
+ long start = suggestedStart == 0 ? 0 : curDelim.end;
+
+ if (curDelim == null || curDelim.end < suggestedEnd) {
+ IgniteBiTuple<State, Delimiter> lastDelim = findFirstDelimiter(stream, suggestedEnd);
+
+ state = lastDelim != null ? firstDelim.getKey() : new State();
+
+ curDelim = lastDelim.getValue();
+
+ while (curDelim != null && curDelim.end < suggestedEnd)
+ curDelim = nextDelimiter(stream, state);
+ }
+
+ long end = curDelim != null ? curDelim.end : stream.position();
+
+ return new IgniteFsFileRange(suggestedRecord.path(), start, end - start);
+ }
+ else
+ // We failed to find any delimiters up to the EOS.
+ return null;
+ }
+
+ /**
+ * Calculate maximum delimiters length.
+ *
+ * @param delims Delimiters.
+ * @return Maximum delimiter length.
+ */
+ private int maxDelimiterLength(byte[][] delims) {
+ int maxDelimLen = 0;
+
+ for (byte[] delim : delims) {
+ if (delim == null)
+ throw new IllegalArgumentException("Delimiter cannot be null.");
+ else if (maxDelimLen < delim.length)
+ maxDelimLen = delim.length;
+ }
+
+ return maxDelimLen;
+ }
+
+ /**
+ * Find first delimiter. In order to achieve this we have to rewind the stream until we find the delimiter
+ * which stands at least [maxDelimLen] from the start search position or until we faced stream start.
+ * Otherwise we cannot be sure that delimiter position is determined correctly.
+ *
+ * @param stream GGFS input stream.
+ * @param startPos Start search position.
+ * @return The first found delimiter.
+ * @throws IOException In case of IO exception.
+ */
+ @Nullable private IgniteBiTuple<State, Delimiter> findFirstDelimiter(IgniteFsInputStream stream, long startPos)
+ throws IOException {
+ State state;
+ Delimiter delim;
+
+ long curPos = Math.max(0, startPos - maxDelimLen);
+
+ while (true) {
+ stream.seek(curPos);
+
+ state = new State();
+
+ delim = nextDelimiter(stream, state);
+
+ if (curPos == 0 || delim == null || delim.start - curPos > maxDelimLen - 1)
+ break;
+ else
+ curPos = Math.max(0, curPos - maxDelimLen);
+ }
+
+ return F.t(state, delim);
+ }
+
+ /**
+ * Resolve next delimiter.
+ *
+ * @param is GGFS input stream.
+ * @param state Current state.
+ * @return Next delimiter and updated map.
+ * @throws IOException In case of exception.
+ */
+ private Delimiter nextDelimiter(IgniteFsInputStream is, State state) throws IOException {
+ assert is != null;
+ assert state != null;
+
+ Map<Integer, Integer> parts = state.parts;
+ LinkedList<Delimiter> delimQueue = state.delims;
+
+ int nextByte = is.read();
+
+ while (nextByte != -1) {
+ // Process read byte.
+ for (int idx = 0; idx < delims.length; idx++) {
+ byte[] delim = delims[idx];
+
+ int val = parts.containsKey(idx) ? parts.get(idx) : 0;
+
+ if (delim[val] == nextByte) {
+ if (val == delim.length - 1) {
+ // Full delimiter is found.
+ parts.remove(idx);
+
+ Delimiter newDelim = new Delimiter(is.position() - delim.length, is.position());
+
+ // Read queue from the end looking for the "inner" delimiters.
+ boolean ignore = false;
+
+ int replaceIdx = -1;
+
+ for (int i = delimQueue.size() - 1; i >= 0; i--) {
+ Delimiter prevDelim = delimQueue.get(i);
+
+ if (prevDelim.start < newDelim.start) {
+ if (prevDelim.end > newDelim.start) {
+ // Ignore this delimiter.
+ ignore = true;
+
+ break;
+ }
+ }
+ else if (prevDelim.start == newDelim.start) {
+ // Ok, we found matching delimiter.
+ replaceIdx = i;
+
+ break;
+ }
+ }
+
+ if (!ignore) {
+ if (replaceIdx >= 0)
+ delimQueue.removeAll(delimQueue.subList(replaceIdx, delimQueue.size()));
+
+ delimQueue.add(newDelim);
+ }
+ }
+ else
+ parts.put(idx, ++val);
+ }
+ else if (val != 0) {
+ if (delim[0] == nextByte) {
+ boolean shift = true;
+
+ for (int k = 1; k < val; k++) {
+ if (delim[k] != nextByte) {
+ shift = false;
+
+ break;
+ }
+ }
+
+ if (!shift)
+ parts.put(idx, 1);
+ }
+ else
+ // Delimiter sequence is totally broken.
+ parts.remove(idx);
+ }
+ }
+
+ // Check whether we can be sure that the first delimiter will not change.
+ if (!delimQueue.isEmpty()) {
+ Delimiter delim = delimQueue.get(0);
+
+ if (is.position() - delim.end >= maxDelimLen)
+ return delimQueue.poll();
+ }
+
+ nextByte = is.read();
+ }
+
+ return delimQueue.poll();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IgniteFsByteDelimiterRecordResolver.class, this);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ if (delims != null) {
+ out.writeBoolean(true);
+
+ out.writeInt(delims.length);
+
+ for (byte[] delim : delims)
+ U.writeByteArray(out, delim);
+ }
+ else
+ out.writeBoolean(false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ if (in.readBoolean()) {
+ int len = in.readInt();
+
+ delims = new byte[len][];
+
+ for (int i = 0; i < len; i++)
+ delims[i] = U.readByteArray(in);
+
+ maxDelimLen = maxDelimiterLength(delims);
+ }
+ }
+
+ /**
+ * Delimiter descriptor.
+ */
+ private static class Delimiter {
+ /** Delimiter start position. */
+ private final long start;
+
+ /** Delimiter end position. */
+ private final long end;
+
+ /**
+ * Constructor.
+ *
+ * @param start Delimiter start position.
+ * @param end Delimiter end position.
+ */
+ private Delimiter(long start, long end) {
+ assert start >= 0 && end >= 0 && start <= end;
+
+ this.start = start;
+ this.end = end;
+ }
+ }
+
+ /**
+ * Current resolution state.
+ */
+ private static class State {
+ /** Partially resolved delimiters. */
+ private final Map<Integer, Integer> parts;
+
+ /** Resolved delimiters which could potentially be merged. */
+ private final LinkedList<Delimiter> delims;
+
+ /**
+ * Constructor.
+ */
+ private State() {
+ parts = new HashMap<>();
+
+ delims = new LinkedList<>();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java
new file mode 100644
index 0000000..70091cf
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java
@@ -0,0 +1,79 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.fs.mapreduce.records;
+
+import org.apache.ignite.*;
+import org.apache.ignite.fs.*;
+import org.apache.ignite.fs.mapreduce.*;
+import org.gridgain.grid.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+
+/**
+ * Record resolver which adjusts records to fixed length. That is, start offset of the record is shifted to the
+ * nearest position so that {@code newStart % length == 0}.
+ */
+public class IgniteFsFixedLengthRecordResolver implements IgniteFsRecordResolver, Externalizable {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Record length. */
+ private long recLen;
+
+ /**
+ * Empty constructor required for {@link Externalizable} support.
+ */
+ public IgniteFsFixedLengthRecordResolver() {
+ // No-op.
+ }
+
+ /**
+ * Creates fixed-length record resolver.
+ *
+ * @param recLen Record length.
+ */
+ public IgniteFsFixedLengthRecordResolver(long recLen) {
+ this.recLen = recLen;
+ }
+
+ /** {@inheritDoc} */
+ @Override public IgniteFsFileRange resolveRecords(IgniteFs ggfs, IgniteFsInputStream stream,
+ IgniteFsFileRange suggestedRecord)
+ throws GridException, IOException {
+ long suggestedEnd = suggestedRecord.start() + suggestedRecord.length();
+
+ long startRem = suggestedRecord.start() % recLen;
+ long endRem = suggestedEnd % recLen;
+
+ long start = Math.min(suggestedRecord.start() + (startRem != 0 ? (recLen - startRem) : 0),
+ stream.length());
+ long end = Math.min(suggestedEnd + (endRem != 0 ? (recLen - endRem) : 0), stream.length());
+
+ assert end >= start;
+
+ return start != end ? new IgniteFsFileRange(suggestedRecord.path(), start, end - start) : null;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IgniteFsFixedLengthRecordResolver.class, this);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeLong(recLen);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ recLen = in.readLong();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsNewLineRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsNewLineRecordResolver.java b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsNewLineRecordResolver.java
new file mode 100644
index 0000000..14fbedd
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsNewLineRecordResolver.java
@@ -0,0 +1,58 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.fs.mapreduce.records;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+
+/**
+ * Record resolver based on new line detection. This resolver can detect new lines based on '\n' or '\r\n' sequences.
+ * <p>
+ * Note that this resolver cannot be created and has one constant implementations: {@link #NEW_LINE}.
+ */
+public class IgniteFsNewLineRecordResolver extends IgniteFsByteDelimiterRecordResolver {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * Singleton new line resolver. This resolver will resolve records based on new lines
+ * regardless if they have '\n' or '\r\n' patterns.
+ */
+ public static final IgniteFsNewLineRecordResolver NEW_LINE = new IgniteFsNewLineRecordResolver(true);
+
+ /** CR symbol. */
+ public static final byte SYM_CR = 0x0D;
+
+ /** LF symbol. */
+ public static final byte SYM_LF = 0x0A;
+
+ /**
+ * Empty constructor required for {@link Externalizable} support.
+ */
+ public IgniteFsNewLineRecordResolver() {
+ // No-op.
+ }
+
+ /**
+ * Creates new-line record resolver.
+ *
+ * @param b Artificial flag to differentiate from empty constructor.
+ */
+ @SuppressWarnings("UnusedParameters")
+ private IgniteFsNewLineRecordResolver(boolean b) {
+ super(new byte[] { SYM_CR, SYM_LF }, new byte[] { SYM_LF });
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IgniteFsNewLineRecordResolver.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java
new file mode 100644
index 0000000..c617529
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java
@@ -0,0 +1,76 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.fs.mapreduce.records;
+
+import org.gridgain.grid.util.typedef.internal.*;
+import org.jetbrains.annotations.*;
+
+import java.io.*;
+import java.nio.charset.*;
+
+/**
+ * Record resolver based on delimiters represented as strings. Works in the same way as
+ * {@link IgniteFsByteDelimiterRecordResolver}, but uses strings as delimiters instead of byte arrays.
+ */
+public class IgniteFsStringDelimiterRecordResolver extends IgniteFsByteDelimiterRecordResolver {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * Converts string delimiters to byte delimiters.
+ *
+ * @param charset Charset.
+ * @param delims String delimiters.
+ * @return Byte delimiters.
+ */
+ @Nullable private static byte[][] toBytes(Charset charset, @Nullable String... delims) {
+ byte[][] res = null;
+
+ if (delims != null) {
+ res = new byte[delims.length][];
+
+ for (int i = 0; i < delims.length; i++)
+ res[i] = delims[i].getBytes(charset);
+ }
+
+ return res;
+ }
+
+ /**
+ * Empty constructor required for {@link Externalizable} support.
+ */
+ public IgniteFsStringDelimiterRecordResolver() {
+ // No-op.
+ }
+
+ /**
+ * Creates record resolver from given string and given charset.
+ *
+ * @param delims Delimiters.
+ * @param charset Charset.
+ */
+ public IgniteFsStringDelimiterRecordResolver(Charset charset, String... delims) {
+ super(toBytes(charset, delims));
+ }
+
+ /**
+ * Creates record resolver based on given string with default charset.
+ *
+ * @param delims Delimiters.
+ */
+ public IgniteFsStringDelimiterRecordResolver(String... delims) {
+ super(toBytes(Charset.defaultCharset(), delims));
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IgniteFsStringDelimiterRecordResolver.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/package.html
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/package.html b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/package.html
new file mode 100644
index 0000000..815ecd0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/fs/mapreduce/records/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+ @html.file.header
+ _________ _____ __________________ _____
+ __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+-->
+<html>
+<body>
+ <!-- Package description. -->
+ Contains record resolvers for In-Memory MapReduce over GGFS.
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java b/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java
deleted file mode 100644
index 480e574..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsByteDelimiterRecordResolver.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/* @java.file.header */
-
-/* _________ _____ __________________ _____
- * __ ____/___________(_)______ /__ ____/______ ____(_)_______
- * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
- * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
- * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
- */
-
-package org.gridgain.grid.ggfs.mapreduce.records;
-
-import org.apache.ignite.*;
-import org.apache.ignite.fs.*;
-import org.apache.ignite.fs.mapreduce.*;
-import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
-import org.gridgain.grid.util.typedef.*;
-import org.gridgain.grid.util.typedef.internal.*;
-import org.gridgain.grid.util.tostring.*;
-import org.jetbrains.annotations.*;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Record resolver which adjusts records based on provided delimiters. Both start position and length are
- * shifted to the right, based on delimiter positions.
- * <p>
- * Note that you can use {@link IgniteFsStringDelimiterRecordResolver} if your delimiter is a plain string.
- */
-public class IgniteFsByteDelimiterRecordResolver implements IgniteFsRecordResolver, Externalizable {
- /** */
- private static final long serialVersionUID = 0L;
-
- /** Delimiters. */
- private byte[][] delims;
-
- /** Maximum delimiter length. */
- @GridToStringExclude
- private int maxDelimLen;
-
- /**
- * Empty constructor required for {@link Externalizable} support.
- */
- public IgniteFsByteDelimiterRecordResolver() {
- // No-op.
- }
-
- /**
- * Creates delimiter-based record resolver.
- *
- * @param delims Delimiters.
- */
- public IgniteFsByteDelimiterRecordResolver(byte[]... delims) {
- if (delims == null || delims.length == 0)
- throw new IllegalArgumentException("Delimiters cannot be null or empty.");
-
- this.delims = delims;
-
- int maxDelimLen = 0;
-
- for (byte[] delim : delims) {
- if (delim == null)
- throw new IllegalArgumentException("Delimiter cannot be null.");
- else if (maxDelimLen < delim.length)
- maxDelimLen = delim.length;
- }
-
- this.maxDelimLen = maxDelimLen;
- }
-
- /** {@inheritDoc} */
- @Override public IgniteFsFileRange resolveRecords(IgniteFs ggfs, IgniteFsInputStream stream,
- IgniteFsFileRange suggestedRecord) throws GridException, IOException {
- long suggestedStart = suggestedRecord.start();
- long suggestedEnd = suggestedStart + suggestedRecord.length();
-
- IgniteBiTuple<State, Delimiter> firstDelim = findFirstDelimiter(stream, suggestedStart);
-
- State state = firstDelim != null ? firstDelim.getKey() : new State();
-
- Delimiter curDelim = firstDelim.getValue();
-
- while (curDelim != null && curDelim.end < suggestedStart)
- curDelim = nextDelimiter(stream, state);
-
- if (curDelim != null && (curDelim.end >= suggestedStart && curDelim.end < suggestedEnd) ||
- suggestedStart == 0 ) {
- // We found start delimiter.
- long start = suggestedStart == 0 ? 0 : curDelim.end;
-
- if (curDelim == null || curDelim.end < suggestedEnd) {
- IgniteBiTuple<State, Delimiter> lastDelim = findFirstDelimiter(stream, suggestedEnd);
-
- state = lastDelim != null ? firstDelim.getKey() : new State();
-
- curDelim = lastDelim.getValue();
-
- while (curDelim != null && curDelim.end < suggestedEnd)
- curDelim = nextDelimiter(stream, state);
- }
-
- long end = curDelim != null ? curDelim.end : stream.position();
-
- return new IgniteFsFileRange(suggestedRecord.path(), start, end - start);
- }
- else
- // We failed to find any delimiters up to the EOS.
- return null;
- }
-
- /**
- * Calculate maximum delimiters length.
- *
- * @param delims Delimiters.
- * @return Maximum delimiter length.
- */
- private int maxDelimiterLength(byte[][] delims) {
- int maxDelimLen = 0;
-
- for (byte[] delim : delims) {
- if (delim == null)
- throw new IllegalArgumentException("Delimiter cannot be null.");
- else if (maxDelimLen < delim.length)
- maxDelimLen = delim.length;
- }
-
- return maxDelimLen;
- }
-
- /**
- * Find first delimiter. In order to achieve this we have to rewind the stream until we find the delimiter
- * which stands at least [maxDelimLen] from the start search position or until we faced stream start.
- * Otherwise we cannot be sure that delimiter position is determined correctly.
- *
- * @param stream GGFS input stream.
- * @param startPos Start search position.
- * @return The first found delimiter.
- * @throws IOException In case of IO exception.
- */
- @Nullable private IgniteBiTuple<State, Delimiter> findFirstDelimiter(IgniteFsInputStream stream, long startPos)
- throws IOException {
- State state;
- Delimiter delim;
-
- long curPos = Math.max(0, startPos - maxDelimLen);
-
- while (true) {
- stream.seek(curPos);
-
- state = new State();
-
- delim = nextDelimiter(stream, state);
-
- if (curPos == 0 || delim == null || delim.start - curPos > maxDelimLen - 1)
- break;
- else
- curPos = Math.max(0, curPos - maxDelimLen);
- }
-
- return F.t(state, delim);
- }
-
- /**
- * Resolve next delimiter.
- *
- * @param is GGFS input stream.
- * @param state Current state.
- * @return Next delimiter and updated map.
- * @throws IOException In case of exception.
- */
- private Delimiter nextDelimiter(IgniteFsInputStream is, State state) throws IOException {
- assert is != null;
- assert state != null;
-
- Map<Integer, Integer> parts = state.parts;
- LinkedList<Delimiter> delimQueue = state.delims;
-
- int nextByte = is.read();
-
- while (nextByte != -1) {
- // Process read byte.
- for (int idx = 0; idx < delims.length; idx++) {
- byte[] delim = delims[idx];
-
- int val = parts.containsKey(idx) ? parts.get(idx) : 0;
-
- if (delim[val] == nextByte) {
- if (val == delim.length - 1) {
- // Full delimiter is found.
- parts.remove(idx);
-
- Delimiter newDelim = new Delimiter(is.position() - delim.length, is.position());
-
- // Read queue from the end looking for the "inner" delimiters.
- boolean ignore = false;
-
- int replaceIdx = -1;
-
- for (int i = delimQueue.size() - 1; i >= 0; i--) {
- Delimiter prevDelim = delimQueue.get(i);
-
- if (prevDelim.start < newDelim.start) {
- if (prevDelim.end > newDelim.start) {
- // Ignore this delimiter.
- ignore = true;
-
- break;
- }
- }
- else if (prevDelim.start == newDelim.start) {
- // Ok, we found matching delimiter.
- replaceIdx = i;
-
- break;
- }
- }
-
- if (!ignore) {
- if (replaceIdx >= 0)
- delimQueue.removeAll(delimQueue.subList(replaceIdx, delimQueue.size()));
-
- delimQueue.add(newDelim);
- }
- }
- else
- parts.put(idx, ++val);
- }
- else if (val != 0) {
- if (delim[0] == nextByte) {
- boolean shift = true;
-
- for (int k = 1; k < val; k++) {
- if (delim[k] != nextByte) {
- shift = false;
-
- break;
- }
- }
-
- if (!shift)
- parts.put(idx, 1);
- }
- else
- // Delimiter sequence is totally broken.
- parts.remove(idx);
- }
- }
-
- // Check whether we can be sure that the first delimiter will not change.
- if (!delimQueue.isEmpty()) {
- Delimiter delim = delimQueue.get(0);
-
- if (is.position() - delim.end >= maxDelimLen)
- return delimQueue.poll();
- }
-
- nextByte = is.read();
- }
-
- return delimQueue.poll();
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return S.toString(IgniteFsByteDelimiterRecordResolver.class, this);
- }
-
- /** {@inheritDoc} */
- @Override public void writeExternal(ObjectOutput out) throws IOException {
- if (delims != null) {
- out.writeBoolean(true);
-
- out.writeInt(delims.length);
-
- for (byte[] delim : delims)
- U.writeByteArray(out, delim);
- }
- else
- out.writeBoolean(false);
- }
-
- /** {@inheritDoc} */
- @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- if (in.readBoolean()) {
- int len = in.readInt();
-
- delims = new byte[len][];
-
- for (int i = 0; i < len; i++)
- delims[i] = U.readByteArray(in);
-
- maxDelimLen = maxDelimiterLength(delims);
- }
- }
-
- /**
- * Delimiter descriptor.
- */
- private static class Delimiter {
- /** Delimiter start position. */
- private final long start;
-
- /** Delimiter end position. */
- private final long end;
-
- /**
- * Constructor.
- *
- * @param start Delimiter start position.
- * @param end Delimiter end position.
- */
- private Delimiter(long start, long end) {
- assert start >= 0 && end >= 0 && start <= end;
-
- this.start = start;
- this.end = end;
- }
- }
-
- /**
- * Current resolution state.
- */
- private static class State {
- /** Partially resolved delimiters. */
- private final Map<Integer, Integer> parts;
-
- /** Resolved delimiters which could potentially be merged. */
- private final LinkedList<Delimiter> delims;
-
- /**
- * Constructor.
- */
- private State() {
- parts = new HashMap<>();
-
- delims = new LinkedList<>();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java b/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java
deleted file mode 100644
index b360483..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsFixedLengthRecordResolver.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* @java.file.header */
-
-/* _________ _____ __________________ _____
- * __ ____/___________(_)______ /__ ____/______ ____(_)_______
- * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
- * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
- * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
- */
-
-package org.gridgain.grid.ggfs.mapreduce.records;
-
-import org.apache.ignite.*;
-import org.apache.ignite.fs.*;
-import org.apache.ignite.fs.mapreduce.*;
-import org.gridgain.grid.*;
-import org.gridgain.grid.util.typedef.internal.*;
-
-import java.io.*;
-
-/**
- * Record resolver which adjusts records to fixed length. That is, start offset of the record is shifted to the
- * nearest position so that {@code newStart % length == 0}.
- */
-public class IgniteFsFixedLengthRecordResolver implements IgniteFsRecordResolver, Externalizable {
- /** */
- private static final long serialVersionUID = 0L;
-
- /** Record length. */
- private long recLen;
-
- /**
- * Empty constructor required for {@link Externalizable} support.
- */
- public IgniteFsFixedLengthRecordResolver() {
- // No-op.
- }
-
- /**
- * Creates fixed-length record resolver.
- *
- * @param recLen Record length.
- */
- public IgniteFsFixedLengthRecordResolver(long recLen) {
- this.recLen = recLen;
- }
-
- /** {@inheritDoc} */
- @Override public IgniteFsFileRange resolveRecords(IgniteFs ggfs, IgniteFsInputStream stream,
- IgniteFsFileRange suggestedRecord)
- throws GridException, IOException {
- long suggestedEnd = suggestedRecord.start() + suggestedRecord.length();
-
- long startRem = suggestedRecord.start() % recLen;
- long endRem = suggestedEnd % recLen;
-
- long start = Math.min(suggestedRecord.start() + (startRem != 0 ? (recLen - startRem) : 0),
- stream.length());
- long end = Math.min(suggestedEnd + (endRem != 0 ? (recLen - endRem) : 0), stream.length());
-
- assert end >= start;
-
- return start != end ? new IgniteFsFileRange(suggestedRecord.path(), start, end - start) : null;
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return S.toString(IgniteFsFixedLengthRecordResolver.class, this);
- }
-
- /** {@inheritDoc} */
- @Override public void writeExternal(ObjectOutput out) throws IOException {
- out.writeLong(recLen);
- }
-
- /** {@inheritDoc} */
- @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- recLen = in.readLong();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsNewLineRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsNewLineRecordResolver.java b/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsNewLineRecordResolver.java
deleted file mode 100644
index 81f359e..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsNewLineRecordResolver.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/* @java.file.header */
-
-/* _________ _____ __________________ _____
- * __ ____/___________(_)______ /__ ____/______ ____(_)_______
- * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
- * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
- * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
- */
-
-package org.gridgain.grid.ggfs.mapreduce.records;
-
-import org.gridgain.grid.util.typedef.internal.*;
-
-import java.io.*;
-
-/**
- * Record resolver based on new line detection. This resolver can detect new lines based on '\n' or '\r\n' sequences.
- * <p>
- * Note that this resolver cannot be created and has one constant implementations: {@link #NEW_LINE}.
- */
-public class IgniteFsNewLineRecordResolver extends IgniteFsByteDelimiterRecordResolver {
- /** */
- private static final long serialVersionUID = 0L;
-
- /**
- * Singleton new line resolver. This resolver will resolve records based on new lines
- * regardless if they have '\n' or '\r\n' patterns.
- */
- public static final IgniteFsNewLineRecordResolver NEW_LINE = new IgniteFsNewLineRecordResolver(true);
-
- /** CR symbol. */
- public static final byte SYM_CR = 0x0D;
-
- /** LF symbol. */
- public static final byte SYM_LF = 0x0A;
-
- /**
- * Empty constructor required for {@link Externalizable} support.
- */
- public IgniteFsNewLineRecordResolver() {
- // No-op.
- }
-
- /**
- * Creates new-line record resolver.
- *
- * @param b Artificial flag to differentiate from empty constructor.
- */
- @SuppressWarnings("UnusedParameters")
- private IgniteFsNewLineRecordResolver(boolean b) {
- super(new byte[] { SYM_CR, SYM_LF }, new byte[] { SYM_LF });
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return S.toString(IgniteFsNewLineRecordResolver.class, this);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java b/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java
deleted file mode 100644
index 3a42333..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/IgniteFsStringDelimiterRecordResolver.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/* @java.file.header */
-
-/* _________ _____ __________________ _____
- * __ ____/___________(_)______ /__ ____/______ ____(_)_______
- * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
- * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
- * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
- */
-
-package org.gridgain.grid.ggfs.mapreduce.records;
-
-import org.gridgain.grid.util.typedef.internal.*;
-import org.jetbrains.annotations.*;
-
-import java.io.*;
-import java.nio.charset.*;
-
-/**
- * Record resolver based on delimiters represented as strings. Works in the same way as
- * {@link IgniteFsByteDelimiterRecordResolver}, but uses strings as delimiters instead of byte arrays.
- */
-public class IgniteFsStringDelimiterRecordResolver extends IgniteFsByteDelimiterRecordResolver {
- /** */
- private static final long serialVersionUID = 0L;
-
- /**
- * Converts string delimiters to byte delimiters.
- *
- * @param charset Charset.
- * @param delims String delimiters.
- * @return Byte delimiters.
- */
- @Nullable private static byte[][] toBytes(Charset charset, @Nullable String... delims) {
- byte[][] res = null;
-
- if (delims != null) {
- res = new byte[delims.length][];
-
- for (int i = 0; i < delims.length; i++)
- res[i] = delims[i].getBytes(charset);
- }
-
- return res;
- }
-
- /**
- * Empty constructor required for {@link Externalizable} support.
- */
- public IgniteFsStringDelimiterRecordResolver() {
- // No-op.
- }
-
- /**
- * Creates record resolver from given string and given charset.
- *
- * @param delims Delimiters.
- * @param charset Charset.
- */
- public IgniteFsStringDelimiterRecordResolver(Charset charset, String... delims) {
- super(toBytes(charset, delims));
- }
-
- /**
- * Creates record resolver based on given string with default charset.
- *
- * @param delims Delimiters.
- */
- public IgniteFsStringDelimiterRecordResolver(String... delims) {
- super(toBytes(Charset.defaultCharset(), delims));
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return S.toString(IgniteFsStringDelimiterRecordResolver.class, this);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/package.html
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/package.html b/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/package.html
deleted file mode 100644
index 815ecd0..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/ggfs/mapreduce/records/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- @html.file.header
- _________ _____ __________________ _____
- __ ____/___________(_)______ /__ ____/______ ____(_)_______
- _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
- / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
- \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
--->
-<html>
-<body>
- <!-- Package description. -->
- Contains record resolvers for In-Memory MapReduce over GGFS.
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/GridGgfsTaskSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/GridGgfsTaskSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/GridGgfsTaskSelfTest.java
index c6d6f24..89e814c 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/GridGgfsTaskSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/GridGgfsTaskSelfTest.java
@@ -14,11 +14,11 @@ import org.apache.ignite.compute.*;
import org.apache.ignite.configuration.*;
import org.apache.ignite.fs.*;
import org.apache.ignite.fs.mapreduce.*;
+import org.apache.ignite.fs.mapreduce.records.*;
import org.apache.ignite.lang.*;
import org.apache.ignite.resources.*;
import org.gridgain.grid.*;
import org.gridgain.grid.cache.*;
-import org.gridgain.grid.ggfs.mapreduce.records.*;
import org.gridgain.grid.spi.discovery.tcp.*;
import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsByteDelimiterRecordResolverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsByteDelimiterRecordResolverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsByteDelimiterRecordResolverSelfTest.java
index bd9712a..193d61b 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsByteDelimiterRecordResolverSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsByteDelimiterRecordResolverSelfTest.java
@@ -11,7 +11,7 @@ package org.gridgain.grid.kernal.processors.ggfs.split;
import org.apache.ignite.fs.*;
import org.apache.ignite.fs.mapreduce.*;
-import org.gridgain.grid.ggfs.mapreduce.records.*;
+import org.apache.ignite.fs.mapreduce.records.*;
import org.gridgain.grid.util.typedef.*;
/**
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsFixedLengthRecordResolverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsFixedLengthRecordResolverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsFixedLengthRecordResolverSelfTest.java
index 7bebc96..cdc89e1 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsFixedLengthRecordResolverSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsFixedLengthRecordResolverSelfTest.java
@@ -11,7 +11,7 @@ package org.gridgain.grid.kernal.processors.ggfs.split;
import org.apache.ignite.fs.*;
import org.apache.ignite.fs.mapreduce.*;
-import org.gridgain.grid.ggfs.mapreduce.records.*;
+import org.apache.ignite.fs.mapreduce.records.*;
import org.gridgain.grid.util.typedef.*;
/**
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsNewLineDelimiterRecordResolverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsNewLineDelimiterRecordResolverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsNewLineDelimiterRecordResolverSelfTest.java
index 93d7286..c7b8544 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsNewLineDelimiterRecordResolverSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsNewLineDelimiterRecordResolverSelfTest.java
@@ -11,10 +11,10 @@ package org.gridgain.grid.kernal.processors.ggfs.split;
import org.apache.ignite.fs.*;
import org.apache.ignite.fs.mapreduce.*;
-import org.gridgain.grid.ggfs.mapreduce.records.*;
+import org.apache.ignite.fs.mapreduce.records.*;
import org.gridgain.grid.util.typedef.*;
-import static org.gridgain.grid.ggfs.mapreduce.records.IgniteFsNewLineRecordResolver.*;
+import static org.apache.ignite.fs.mapreduce.records.IgniteFsNewLineRecordResolver.*;
/**
* New line split resolver self test.
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f1061709/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsStringDelimiterRecordResolverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsStringDelimiterRecordResolverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsStringDelimiterRecordResolverSelfTest.java
index efa044a..c9e1fd9 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsStringDelimiterRecordResolverSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/ggfs/split/GridGgfsStringDelimiterRecordResolverSelfTest.java
@@ -11,7 +11,7 @@ package org.gridgain.grid.kernal.processors.ggfs.split;
import org.apache.ignite.fs.*;
import org.apache.ignite.fs.mapreduce.*;
-import org.gridgain.grid.ggfs.mapreduce.records.*;
+import org.apache.ignite.fs.mapreduce.records.*;
import org.gridgain.grid.util.typedef.*;
import java.nio.charset.*;