# 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 <sboi...@gridgain.com> Authored: Fri Dec 5 11:33:09 2014 +0300 Committer: sboikov <sboi...@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.*;